@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,28 @@
1
+ /** Props for {@link CursorAccountsConsole}. */
2
+ export interface CursorAccountsConsoleProps {
3
+ /** Additional CSS class names. */
4
+ readonly className?: string;
5
+ }
6
+ /**
7
+ * The platform-operator console for managed Cursor accounts: the Cursor
8
+ * teams (admin keys, member execution keys, org assignments) that back
9
+ * the cursor harness, with roster coverage and per-member cycle spend
10
+ * from the hourly sync.
11
+ *
12
+ * - **List** — every account with routability at a glance (an account
13
+ * with zero enabled member keys cannot serve executions).
14
+ * - **Detail** — org assignments, the member-key panel (add / disable /
15
+ * remove, each key joined with its owner's roster state and spend),
16
+ * coverage gaps (active members without keys), and "Sync now".
17
+ *
18
+ * Requires `can_manage_cursor_accounts` on `platform:stigmer` —
19
+ * non-operators see the designed access notice. Key material never
20
+ * reaches this component; the server redacts it on every read.
21
+ *
22
+ * @example
23
+ * ```tsx
24
+ * <CursorAccountsConsole />
25
+ * ```
26
+ */
27
+ export declare function CursorAccountsConsole({ className }: CursorAccountsConsoleProps): import("react/jsx-runtime").JSX.Element;
28
+ //# sourceMappingURL=CursorAccountsConsole.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CursorAccountsConsole.d.ts","sourceRoot":"","sources":["../../src/cursor-accounts/CursorAccountsConsole.tsx"],"names":[],"mappings":"AAwBA,+CAA+C;AAC/C,MAAM,WAAW,0BAA0B;IACzC,kCAAkC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAOD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,SAAS,EAAE,EAAE,0BAA0B,2CA6G9E"}
@@ -0,0 +1,275 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useCallback, useState } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import { getUserMessage, isPermissionDenied } from "@stigmer/sdk";
6
+ import { CursorMemberKeyState, } from "@stigmer/protos/ai/stigmer/platform/cursoraccount/v1/io_pb";
7
+ import { Button } from "../button/index.js";
8
+ import { INPUT_CLASSES } from "../billing/form-primitives.js";
9
+ import { toError } from "../internal/toError.js";
10
+ import { CursorAccountEditor } from "./CursorAccountEditor.js";
11
+ import { CursorAccountsAccessNotice } from "./CursorAccountsAccessNotice.js";
12
+ import { formatSpendMicros, formatSyncTime } from "./cursor-account-format.js";
13
+ import { useCursorAccounts } from "./useCursorAccounts.js";
14
+ import { useCursorAccountView } from "./useCursorAccountView.js";
15
+ import { useCursorMemberKeyActions } from "./useCursorMemberKeyActions.js";
16
+ import { useDeleteCursorAccount } from "./useDeleteCursorAccount.js";
17
+ import { useSyncCursorAccount } from "./useSyncCursorAccount.js";
18
+ import { useUpsertCursorAccount } from "./useUpsertCursorAccount.js";
19
+ /**
20
+ * The platform-operator console for managed Cursor accounts: the Cursor
21
+ * teams (admin keys, member execution keys, org assignments) that back
22
+ * the cursor harness, with roster coverage and per-member cycle spend
23
+ * from the hourly sync.
24
+ *
25
+ * - **List** — every account with routability at a glance (an account
26
+ * with zero enabled member keys cannot serve executions).
27
+ * - **Detail** — org assignments, the member-key panel (add / disable /
28
+ * remove, each key joined with its owner's roster state and spend),
29
+ * coverage gaps (active members without keys), and "Sync now".
30
+ *
31
+ * Requires `can_manage_cursor_accounts` on `platform:stigmer` —
32
+ * non-operators see the designed access notice. Key material never
33
+ * reaches this component; the server redacts it on every read.
34
+ *
35
+ * @example
36
+ * ```tsx
37
+ * <CursorAccountsConsole />
38
+ * ```
39
+ */
40
+ export function CursorAccountsConsole({ className }) {
41
+ const [flow, setFlow] = useState({ phase: "list" });
42
+ const list = useCursorAccounts();
43
+ const backToList = useCallback(() => setFlow({ phase: "list" }), []);
44
+ if (list.isLoading) {
45
+ return (_jsxs("div", { className: cn("space-y-2", className), "aria-busy": "true", children: [_jsx("div", { className: "h-4 w-40 animate-pulse rounded bg-muted-subtle" }), Array.from({ length: 3 }, (_, i) => (_jsx("div", { className: "h-10 animate-pulse rounded-lg bg-muted-subtle" }, i)))] }));
46
+ }
47
+ if (list.error) {
48
+ // A non-operator landing here is expected (the route is reachable by
49
+ // URL) — show the designed access notice, not a raw RPC error.
50
+ if (isPermissionDenied(list.error)) {
51
+ return _jsx(CursorAccountsAccessNotice, { className: className });
52
+ }
53
+ return (_jsx("p", { className: cn("text-destructive text-xs", className), role: "alert", children: getUserMessage(list.error) }));
54
+ }
55
+ if (flow.phase === "create") {
56
+ return (_jsx(CreatePane, { className: className, onSaved: () => {
57
+ list.refetch();
58
+ backToList();
59
+ }, onCancel: backToList }));
60
+ }
61
+ if (flow.phase === "detail") {
62
+ return (_jsx(AccountDetail, { className: className, accountId: flow.accountId, editing: flow.editing, onEditingChange: (editing) => setFlow({ phase: "detail", accountId: flow.accountId, editing }), onDeleted: () => {
63
+ list.refetch();
64
+ backToList();
65
+ }, onChanged: list.refetch, onBack: backToList }));
66
+ }
67
+ const accounts = list.accounts?.accounts ?? [];
68
+ return (_jsxs("div", { className: cn("space-y-3", className), children: [_jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsx("h3", { className: "text-sm font-semibold text-foreground", children: "Cursor accounts" }), _jsx(Button, { size: "sm", onClick: () => setFlow({ phase: "create" }), children: "Add account" })] }), _jsxs("div", { className: "rounded-lg border border-border bg-card", children: [_jsxs("div", { "aria-hidden": "true", className: "grid grid-cols-[2fr_1fr_1fr_1fr_1fr] gap-2 border-b border-border px-3 py-2 text-[11px] font-medium text-muted-foreground", children: [_jsx("span", { children: "Account" }), _jsx("span", { children: "Orgs" }), _jsx("span", { children: "Status" }), _jsx("span", { children: "Execution keys" }), _jsx("span", { className: "text-right", children: "Last synced" })] }), accounts.length === 0 ? (_jsx("p", { className: "px-3 py-2 text-xs text-muted-foreground", children: "No Cursor accounts yet. Add one with its team Admin API key, then add member execution keys to make it routable." })) : (_jsx("ul", { role: "list", "aria-label": "Cursor accounts", className: "m-0 list-none p-0", children: accounts.map((summary) => (_jsx(AccountRow, { summary: summary, onOpen: () => setFlow({
69
+ phase: "detail",
70
+ accountId: summary.account?.accountId ?? "",
71
+ editing: false,
72
+ }) }, summary.account?.accountId))) }))] })] }));
73
+ }
74
+ // ---------------------------------------------------------------------------
75
+ // List row (internal)
76
+ // ---------------------------------------------------------------------------
77
+ function AccountRow({ summary, onOpen, }) {
78
+ const account = summary.account;
79
+ if (!account)
80
+ return null;
81
+ return (_jsx("li", { className: "border-b border-border last:border-b-0", children: _jsxs("button", { type: "button", onClick: onOpen, className: cn("grid w-full grid-cols-[2fr_1fr_1fr_1fr_1fr] items-center gap-2 px-3 py-2 text-left text-xs", "transition-colors hover:bg-accent", "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"), children: [_jsxs("span", { className: "min-w-0", children: [_jsx("span", { className: "block truncate font-medium text-foreground", children: account.displayName }), account.isPlatformDefault && (_jsx("span", { className: "block text-[11px] text-muted-foreground", children: "platform default" }))] }), _jsx("span", { className: "text-muted-foreground", children: account.orgIds.length > 0 ? account.orgIds.length : "—" }), _jsx("span", { children: _jsx(StateBadge, { tone: account.enabled ? "ok" : "muted", label: account.enabled ? "Enabled" : "Disabled" }) }), _jsx("span", { children: summary.enabledKeyCount > 0 ? (_jsx("span", { className: "text-muted-foreground", children: summary.enabledKeyCount })) : (_jsx(StateBadge, { tone: "warn", label: "Not routable" })) }), _jsx("span", { className: "text-right text-muted-foreground", children: formatSyncTime(summary.lastSyncedAt) })] }) }));
82
+ }
83
+ // ---------------------------------------------------------------------------
84
+ // Create pane (internal)
85
+ // ---------------------------------------------------------------------------
86
+ function CreatePane({ className, onSaved, onCancel, }) {
87
+ const { upsert, isSubmitting, error } = useUpsertCursorAccount();
88
+ return (_jsx("div", { className: className, children: _jsx(CursorAccountEditor, { initial: null, isSubmitting: isSubmitting, submitError: error, onSubmit: (account) => {
89
+ void upsert(account).then(onSaved, () => {
90
+ // Surfaced via submitError.
91
+ });
92
+ }, onCancel: onCancel }) }));
93
+ }
94
+ // ---------------------------------------------------------------------------
95
+ // Detail pane (internal)
96
+ // ---------------------------------------------------------------------------
97
+ function AccountDetail({ className, accountId, editing, onEditingChange, onDeleted, onChanged, onBack, }) {
98
+ const detail = useCursorAccountView(accountId);
99
+ const { upsert, isSubmitting: isSaving, error: saveError, clearError: clearSaveError } = useUpsertCursorAccount();
100
+ const { remove, isSubmitting: isDeleting, error: deleteError } = useDeleteCursorAccount();
101
+ const { sync, isSyncing, error: syncError } = useSyncCursorAccount();
102
+ const keyActions = useCursorMemberKeyActions();
103
+ const refreshAll = useCallback(() => {
104
+ detail.refetch();
105
+ onChanged();
106
+ }, [detail.refetch, onChanged]);
107
+ // After a bulk import, run the roster sync automatically so key badges
108
+ // (Active / Owner unknown / Owner left team) are current without a
109
+ // manual "Sync now". Sync failure still refreshes — the keys ARE added
110
+ // — and is surfaced via syncError.
111
+ const syncAfterImport = useCallback(() => {
112
+ void sync(accountId).then(refreshAll, refreshAll);
113
+ }, [sync, accountId, refreshAll]);
114
+ if (detail.isLoading) {
115
+ return (_jsxs("div", { className: cn("space-y-2", className), "aria-busy": "true", children: [_jsx("div", { className: "h-4 w-40 animate-pulse rounded bg-muted-subtle" }), _jsx("div", { className: "h-24 animate-pulse rounded-lg bg-muted-subtle" })] }));
116
+ }
117
+ if (detail.error || !detail.view?.account) {
118
+ return (_jsxs("div", { className: cn("space-y-2", className), children: [_jsx("p", { className: "text-destructive text-xs", role: "alert", children: detail.error ? getUserMessage(detail.error) : "Account not found." }), _jsx(Button, { size: "sm", variant: "outline", onClick: onBack, children: "Back to accounts" })] }));
119
+ }
120
+ const view = detail.view;
121
+ const account = view.account;
122
+ if (editing) {
123
+ return (_jsx("div", { className: className, children: _jsx(CursorAccountEditor, { initial: account, isSubmitting: isSaving, submitError: saveError, onSubmit: (edited) => {
124
+ void upsert(edited).then(() => {
125
+ refreshAll();
126
+ onEditingChange(false);
127
+ }, () => {
128
+ // Surfaced via submitError.
129
+ });
130
+ }, onCancel: () => {
131
+ clearSaveError();
132
+ onEditingChange(false);
133
+ } }) }));
134
+ }
135
+ return (_jsxs("div", { className: cn("space-y-4", className), children: [_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [_jsxs("div", { children: [_jsx("h3", { className: "text-sm font-semibold text-foreground", children: account.displayName }), _jsxs("p", { className: "text-[11px] text-muted-foreground", children: [account.orgIds.length > 0
136
+ ? `Serves ${account.orgIds.length} org(s): ${account.orgIds.join(", ")}`
137
+ : account.isPlatformDefault
138
+ ? "Platform default — serves all unassigned orgs"
139
+ : "No org assignments", " · ", account.enabled ? "enabled" : "disabled", " · synced ", formatSyncTime(view.snapshot?.syncedAt)] })] }), _jsxs("div", { className: "flex gap-2", children: [_jsx(Button, { size: "sm", variant: "outline", onClick: onBack, children: "Back" }), _jsx(Button, { size: "sm", variant: "outline", disabled: isSyncing, onClick: () => {
140
+ void sync(accountId).then(refreshAll, () => {
141
+ // Surfaced via syncError.
142
+ });
143
+ }, children: isSyncing ? "Syncing…" : "Sync now" }), _jsx(Button, { size: "sm", variant: "outline", onClick: () => onEditingChange(true), children: "Edit" }), _jsx(Button, { size: "sm", variant: "destructive", disabled: isDeleting, onClick: () => {
144
+ void remove({ accountId }).then(onDeleted, () => {
145
+ // Surfaced via deleteError (incl. the live-pin guard's
146
+ // "disable instead, or force" message).
147
+ });
148
+ }, children: isDeleting ? "Deleting…" : "Delete" })] })] }), syncError && (_jsx("p", { className: "text-destructive text-xs", role: "alert", children: getUserMessage(syncError) })), deleteError && (_jsx("p", { className: "text-destructive text-xs", role: "alert", children: getUserMessage(deleteError) })), view.snapshot?.syncError && (_jsxs("p", { className: "text-xs text-muted-foreground", role: "status", children: ["Last sync was partial: ", view.snapshot.syncError] })), _jsx(MemberKeysPanel, { accountId: accountId, keyViews: view.keyViews, actions: keyActions, onChanged: refreshAll, onImported: syncAfterImport }), view.membersWithoutKeys.length > 0 && (_jsxs("section", { className: "space-y-1", children: [_jsx("h4", { className: "text-xs font-semibold text-foreground", children: "Members without execution keys" }), _jsx("p", { className: "text-[11px] text-muted-foreground", children: "Active team members Stigmer holds no key for \u2014 sessions can never run under their identity or included quota." }), _jsx("ul", { role: "list", className: "m-0 list-none space-y-0.5 p-0 text-xs text-muted-foreground", children: view.membersWithoutKeys.map((member) => (_jsxs("li", { children: [member.name || member.email, " \u00B7 ", member.email] }, member.email))) })] }))] }));
149
+ }
150
+ /** Parse bulk-import text: one key per line, trimmed, deduped. */
151
+ function parseImportKeys(text) {
152
+ return [...new Set(text.split(/\r?\n/).map((s) => s.trim()).filter((s) => s !== ""))];
153
+ }
154
+ function maskKey(key, index) {
155
+ return key.length >= 8 ? `key ${index + 1} (…${key.slice(-4)})` : `key ${index + 1}`;
156
+ }
157
+ function MemberKeysPanel({ accountId, keyViews, actions, onChanged, onImported, }) {
158
+ const [newKey, setNewKey] = useState("");
159
+ const [newLabel, setNewLabel] = useState("");
160
+ const [showImport, setShowImport] = useState(false);
161
+ const [importText, setImportText] = useState("");
162
+ const [isImporting, setIsImporting] = useState(false);
163
+ const [importProgress, setImportProgress] = useState(null);
164
+ const [importResults, setImportResults] = useState(null);
165
+ const submitNewKey = (e) => {
166
+ e.preventDefault();
167
+ if (newKey.trim() === "" || actions.isSubmitting)
168
+ return;
169
+ void actions
170
+ .addKey({ accountId, apiKey: newKey.trim(), label: newLabel.trim() || undefined })
171
+ .then(() => {
172
+ setNewKey("");
173
+ setNewLabel("");
174
+ onChanged();
175
+ }, () => {
176
+ // Surfaced via actions.error (incl. Cursor's own key-class 401 text).
177
+ });
178
+ };
179
+ const importKeyCount = parseImportKeys(importText).length;
180
+ const submitImport = async (e) => {
181
+ e.preventDefault();
182
+ const keys = parseImportKeys(importText);
183
+ if (keys.length === 0 || isImporting)
184
+ return;
185
+ setIsImporting(true);
186
+ setImportResults(null);
187
+ // Sequential on purpose: each key is validated live against Cursor's
188
+ // /v1/me, and per-key errors (wrong key class, revoked, duplicate)
189
+ // must be attributable to their line.
190
+ const knownKeyIds = new Set(keyViews.map((kv) => kv.key?.keyId).filter((id) => !!id));
191
+ const results = [];
192
+ const failedKeys = [];
193
+ for (const [i, key] of keys.entries()) {
194
+ setImportProgress({ done: i, total: keys.length });
195
+ try {
196
+ const account = await actions.addKey({ accountId, apiKey: key });
197
+ const addedKey = account.memberKeys.find((mk) => !knownKeyIds.has(mk.keyId));
198
+ if (addedKey)
199
+ knownKeyIds.add(addedKey.keyId);
200
+ results.push({
201
+ keyPreview: maskKey(key, i),
202
+ ok: true,
203
+ message: addedKey?.boundEmail
204
+ ? `added — bound to ${addedKey.boundEmail}`
205
+ : "added",
206
+ });
207
+ }
208
+ catch (err) {
209
+ actions.clearError();
210
+ failedKeys.push(key);
211
+ results.push({
212
+ keyPreview: maskKey(key, i),
213
+ ok: false,
214
+ message: getUserMessage(toError(err)),
215
+ });
216
+ }
217
+ }
218
+ setImportProgress(null);
219
+ setImportResults(results);
220
+ // Failed lines stay in the box so the operator can fix and retry.
221
+ setImportText(failedKeys.join("\n"));
222
+ setIsImporting(false);
223
+ if (failedKeys.length < keys.length)
224
+ onImported();
225
+ };
226
+ return (_jsxs("section", { className: "space-y-2", children: [_jsx("h4", { className: "text-xs font-semibold text-foreground", children: "Member execution keys" }), keyViews.length === 0 ? (_jsxs("p", { className: "text-xs text-muted-foreground", role: "status", children: ["No execution keys \u2014 this account is ", _jsx("strong", { children: "not routable" }), ". Add a member's user-scoped API key below."] })) : (_jsx("ul", { role: "list", "aria-label": "Member keys", className: "m-0 list-none space-y-1 p-0", children: keyViews.map((keyView) => (_jsx(MemberKeyRow, { accountId: accountId, keyView: keyView, actions: actions, onChanged: onChanged }, keyView.key?.keyId))) })), actions.error && (_jsx("p", { className: "text-destructive text-xs", role: "alert", children: getUserMessage(actions.error) })), _jsxs("form", { className: "flex flex-wrap items-end gap-2", onSubmit: submitNewKey, children: [_jsxs("label", { className: "block min-w-56 flex-1 space-y-1", children: [_jsx("span", { className: "text-[11px] font-medium text-muted-foreground", children: "User-scoped API key" }), _jsx("input", { className: INPUT_CLASSES, type: "password", value: newKey, onChange: (e) => setNewKey(e.target.value), placeholder: "the member's personal Cursor API key", disabled: actions.isSubmitting, autoComplete: "off" })] }), _jsxs("label", { className: "block min-w-40 space-y-1", children: [_jsx("span", { className: "text-[11px] font-medium text-muted-foreground", children: "Label (optional)" }), _jsx("input", { className: INPUT_CLASSES, value: newLabel, onChange: (e) => setNewLabel(e.target.value), placeholder: "e.g. zane \u2014 prod", disabled: actions.isSubmitting })] }), _jsx(Button, { type: "submit", size: "sm", disabled: newKey.trim() === "" || actions.isSubmitting, children: actions.isSubmitting ? "Verifying…" : "Add key" }), _jsx(Button, { type: "button", size: "sm", variant: "outline", disabled: isImporting, onClick: () => {
227
+ setShowImport((v) => !v);
228
+ setImportResults(null);
229
+ }, children: showImport ? "Hide import" : "Import keys" })] }), showImport && (_jsxs("form", { className: "space-y-2 rounded-md border border-border bg-card p-3", onSubmit: submitImport, children: [_jsxs("label", { className: "block space-y-1", children: [_jsx("span", { className: "text-[11px] font-medium text-muted-foreground", children: "Bulk import \u2014 one user-scoped API key per line" }), _jsx("textarea", { className: cn(INPUT_CLASSES, "min-h-24 font-mono"), value: importText, onChange: (e) => setImportText(e.target.value), placeholder: "key_...\nkey_...\nkey_...", disabled: isImporting, autoComplete: "off", spellCheck: false })] }), _jsx("p", { className: "text-[11px] text-muted-foreground", children: "Each key is verified against Cursor and bound to its owning team member, one at a time. Lines that fail stay in the box so you can fix and retry them. A roster sync runs automatically afterwards, so the key badges reflect current team membership." }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Button, { type: "submit", size: "sm", disabled: importKeyCount === 0 || isImporting, children: isImporting && importProgress
230
+ ? `Importing ${importProgress.done + 1} of ${importProgress.total}…`
231
+ : importKeyCount > 0
232
+ ? `Import ${importKeyCount} ${importKeyCount === 1 ? "key" : "keys"}`
233
+ : "Import keys" }), _jsx(Button, { type: "button", size: "sm", variant: "outline", disabled: isImporting, onClick: () => {
234
+ setShowImport(false);
235
+ setImportText("");
236
+ setImportResults(null);
237
+ }, children: "Close" })] }), importResults && (_jsx("ul", { role: "list", "aria-label": "Import results", className: "m-0 list-none space-y-0.5 p-0 text-[11px]", children: importResults.map((result) => (_jsxs("li", { className: result.ok ? "text-muted-foreground" : "text-destructive", children: [result.keyPreview, ": ", result.message] }, result.keyPreview))) }))] }))] }));
238
+ }
239
+ function MemberKeyRow({ accountId, keyView, actions, onChanged, }) {
240
+ const key = keyView.key;
241
+ if (!key)
242
+ return null;
243
+ return (_jsxs("li", { className: "flex flex-wrap items-center justify-between gap-2 rounded-md border border-border bg-card px-3 py-2", children: [_jsxs("span", { className: "min-w-0", children: [_jsxs("span", { className: "block truncate text-xs font-medium text-foreground", children: [key.boundEmail, key.label ? ` · ${key.label}` : ""] }), _jsxs("span", { className: "block text-[11px] text-muted-foreground", children: [key.cursorKeyName || "unnamed key", keyView.spend
244
+ ? ` · ${formatSpendMicros(keyView.spend.includedSpendUsdMicros + keyView.spend.overageSpendUsdMicros)} this cycle`
245
+ : ""] })] }), _jsxs("span", { className: "flex items-center gap-2", children: [_jsx(KeyStateBadge, { state: keyView.state, enabled: key.enabled }), _jsx(Button, { size: "sm", variant: "outline", disabled: actions.isSubmitting, onClick: () => {
246
+ void actions
247
+ .setKeyEnabled(accountId, key.keyId, !key.enabled)
248
+ .then(onChanged, () => {
249
+ // Surfaced via actions.error.
250
+ });
251
+ }, children: key.enabled ? "Disable" : "Enable" }), _jsx(Button, { size: "sm", variant: "destructive", disabled: actions.isSubmitting, onClick: () => {
252
+ void actions
253
+ .removeKey({ accountId, keyId: key.keyId })
254
+ .then(onChanged, () => {
255
+ // Surfaced via actions.error (incl. the live-pin guard's
256
+ // "disable instead, or force" message).
257
+ });
258
+ }, children: "Remove" })] })] }));
259
+ }
260
+ // ---------------------------------------------------------------------------
261
+ // Badges (internal)
262
+ // ---------------------------------------------------------------------------
263
+ function StateBadge({ tone, label, }) {
264
+ return (_jsx("span", { className: cn("inline-block rounded px-1.5 py-0.5 text-[10px] font-medium", tone === "ok" && "bg-accent text-primary", tone === "warn" && "bg-muted-subtle text-destructive", tone === "muted" && "bg-muted-subtle text-muted-foreground"), children: label }));
265
+ }
266
+ function KeyStateBadge({ state, enabled, }) {
267
+ if (state === CursorMemberKeyState.member_key_owner_removed) {
268
+ return _jsx(StateBadge, { tone: "warn", label: "Owner left team" });
269
+ }
270
+ if (state === CursorMemberKeyState.member_key_owner_unknown) {
271
+ return _jsx(StateBadge, { tone: "muted", label: "Owner unknown" });
272
+ }
273
+ return enabled ? (_jsx(StateBadge, { tone: "ok", label: "Active" })) : (_jsx(StateBadge, { tone: "muted", label: "Disabled" }));
274
+ }
275
+ //# sourceMappingURL=CursorAccountsConsole.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CursorAccountsConsole.js","sourceRoot":"","sources":["../../src/cursor-accounts/CursorAccountsConsole.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Timestamp } from "@bufbuild/protobuf/wkt";
2
+ /**
3
+ * Micro-USD to a display dollar string (e.g. `169342n` → `"$0.17"`).
4
+ * Spend figures are Cursor-reported cycle totals — two decimals is the
5
+ * honest precision for a monitoring surface.
6
+ */
7
+ export declare function formatSpendMicros(micros: bigint): string;
8
+ /** Proto Timestamp to a compact local date-time (e.g. "Jul 22, 14:05"). */
9
+ export declare function formatSyncTime(ts: Timestamp | undefined): string;
10
+ //# sourceMappingURL=cursor-account-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-account-format.d.ts","sourceRoot":"","sources":["../../src/cursor-accounts/cursor-account-format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAOxD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,EAAE,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAUhE"}
@@ -0,0 +1,26 @@
1
+ // BigInt literals (0n) require an ES2020 target, which not every consuming
2
+ // app's tsconfig guarantees — the constructor form is target-agnostic (the
3
+ // billing pricing-format precedent).
4
+ const ZERO = BigInt(0);
5
+ /**
6
+ * Micro-USD to a display dollar string (e.g. `169342n` → `"$0.17"`).
7
+ * Spend figures are Cursor-reported cycle totals — two decimals is the
8
+ * honest precision for a monitoring surface.
9
+ */
10
+ export function formatSpendMicros(micros) {
11
+ const dollars = Number(micros) / 1_000_000;
12
+ return `$${dollars.toFixed(2)}`;
13
+ }
14
+ /** Proto Timestamp to a compact local date-time (e.g. "Jul 22, 14:05"). */
15
+ export function formatSyncTime(ts) {
16
+ if (!ts || ts.seconds === ZERO) {
17
+ return "never";
18
+ }
19
+ return new Date(Number(ts.seconds) * 1000).toLocaleString(undefined, {
20
+ month: "short",
21
+ day: "numeric",
22
+ hour: "2-digit",
23
+ minute: "2-digit",
24
+ });
25
+ }
26
+ //# sourceMappingURL=cursor-account-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-account-format.js","sourceRoot":"","sources":["../../src/cursor-accounts/cursor-account-format.ts"],"names":[],"mappings":"AAEA,2EAA2E;AAC3E,2EAA2E;AAC3E,qCAAqC;AACrC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAEvB;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IAC3C,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AAClC,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,cAAc,CAAC,EAAyB;IACtD,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE;QACnE,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,18 @@
1
+ export { useCursorAccounts } from "./useCursorAccounts.js";
2
+ export type { UseCursorAccountsReturn } from "./useCursorAccounts.js";
3
+ export { useCursorAccountView } from "./useCursorAccountView.js";
4
+ export type { UseCursorAccountViewReturn } from "./useCursorAccountView.js";
5
+ export { useUpsertCursorAccount } from "./useUpsertCursorAccount.js";
6
+ export type { UseUpsertCursorAccountReturn } from "./useUpsertCursorAccount.js";
7
+ export { useDeleteCursorAccount } from "./useDeleteCursorAccount.js";
8
+ export type { DeleteCursorAccountInput, UseDeleteCursorAccountReturn, } from "./useDeleteCursorAccount.js";
9
+ export { useCursorMemberKeyActions } from "./useCursorMemberKeyActions.js";
10
+ export type { AddCursorMemberKeyInput, RemoveCursorMemberKeyInput, UseCursorMemberKeyActionsReturn, } from "./useCursorMemberKeyActions.js";
11
+ export { useSyncCursorAccount } from "./useSyncCursorAccount.js";
12
+ export type { UseSyncCursorAccountReturn } from "./useSyncCursorAccount.js";
13
+ export { CursorAccountsConsole } from "./CursorAccountsConsole.js";
14
+ export type { CursorAccountsConsoleProps } from "./CursorAccountsConsole.js";
15
+ export { CursorAccountEditor } from "./CursorAccountEditor.js";
16
+ export type { CursorAccountEditorProps } from "./CursorAccountEditor.js";
17
+ export { CursorAccountsAccessNotice } from "./CursorAccountsAccessNotice.js";
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cursor-accounts/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,YAAY,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,YAAY,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAG5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,YAAY,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,YAAY,EACV,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,YAAY,EACV,uBAAuB,EACvB,0BAA0B,EAC1B,+BAA+B,GAChC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,YAAY,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAG5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,YAAY,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC"}
@@ -0,0 +1,13 @@
1
+ // Data hooks
2
+ export { useCursorAccounts } from "./useCursorAccounts.js";
3
+ export { useCursorAccountView } from "./useCursorAccountView.js";
4
+ // Behavior hooks
5
+ export { useUpsertCursorAccount } from "./useUpsertCursorAccount.js";
6
+ export { useDeleteCursorAccount } from "./useDeleteCursorAccount.js";
7
+ export { useCursorMemberKeyActions } from "./useCursorMemberKeyActions.js";
8
+ export { useSyncCursorAccount } from "./useSyncCursorAccount.js";
9
+ // Styled components
10
+ export { CursorAccountsConsole } from "./CursorAccountsConsole.js";
11
+ export { CursorAccountEditor } from "./CursorAccountEditor.js";
12
+ export { CursorAccountsAccessNotice } from "./CursorAccountsAccessNotice.js";
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cursor-accounts/index.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAGjE,iBAAiB;AACjB,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAKrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAM3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAGjE,oBAAoB;AACpB,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { CursorAccountView } from "@stigmer/protos/ai/stigmer/platform/cursoraccount/v1/io_pb";
2
+ /** Return value of {@link useCursorAccountView}. */
3
+ export interface UseCursorAccountViewReturn {
4
+ /** The detail view, or `null` before the first successful fetch. */
5
+ readonly view: CursorAccountView | null;
6
+ /** `true` while the initial fetch is in flight. */
7
+ readonly isLoading: boolean;
8
+ /** `true` while a background refetch is in flight and stale data is shown. */
9
+ readonly isRefetching: boolean;
10
+ /** Error from the last failed request, or `null` when healthy. */
11
+ readonly error: Error | null;
12
+ /** Discard cached data and re-fetch from the server. */
13
+ readonly refetch: () => void;
14
+ }
15
+ /**
16
+ * Data hook for one Cursor account's detail view: the redacted account,
17
+ * the latest roster/spend snapshot, and the server-computed coverage
18
+ * join (per-key owner state and cycle spend, active members without
19
+ * keys).
20
+ *
21
+ * Pass `null` as `accountId` to skip fetching (e.g. while the console is
22
+ * on the list phase).
23
+ *
24
+ * @example
25
+ * ```tsx
26
+ * const { view, isLoading, refetch } = useCursorAccountView(accountId);
27
+ * ```
28
+ */
29
+ export declare function useCursorAccountView(accountId: string | null): UseCursorAccountViewReturn;
30
+ //# sourceMappingURL=useCursorAccountView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCursorAccountView.d.ts","sourceRoot":"","sources":["../../src/cursor-accounts/useCursorAccountView.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4DAA4D,CAAC;AAIpG,oDAAoD;AACpD,MAAM,WAAW,0BAA0B;IACzC,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACxC,mDAAmD;IACnD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,8EAA8E;IAC9E,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,kEAAkE;IAClE,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAC7B,wDAAwD;IACxD,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,0BAA0B,CAY5B"}
@@ -0,0 +1,25 @@
1
+ "use client";
2
+ import { useStigmer } from "../hooks.js";
3
+ import { useFetch } from "../internal/useFetch.js";
4
+ /**
5
+ * Data hook for one Cursor account's detail view: the redacted account,
6
+ * the latest roster/spend snapshot, and the server-computed coverage
7
+ * join (per-key owner state and cycle spend, active members without
8
+ * keys).
9
+ *
10
+ * Pass `null` as `accountId` to skip fetching (e.g. while the console is
11
+ * on the list phase).
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * const { view, isLoading, refetch } = useCursorAccountView(accountId);
16
+ * ```
17
+ */
18
+ export function useCursorAccountView(accountId) {
19
+ const stigmer = useStigmer();
20
+ const { data: view, isLoading, isRefetching, error, refetch } = useFetch(accountId
21
+ ? () => stigmer.cursorAccounts.getAccountView(accountId)
22
+ : null, [accountId, stigmer], null);
23
+ return { view, isLoading, isRefetching, error, refetch };
24
+ }
25
+ //# sourceMappingURL=useCursorAccountView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCursorAccountView.js","sourceRoot":"","sources":["../../src/cursor-accounts/useCursorAccountView.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAgBnD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAAwB;IAExB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,QAAQ,CACtE,SAAS;QACP,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,CAAC;QACxD,CAAC,CAAC,IAAI,EACR,CAAC,SAAS,EAAE,OAAO,CAAC,EACpB,IAAgC,CACjC,CAAC;IAEF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,33 @@
1
+ import type { CursorAccountsResponse } from "@stigmer/protos/ai/stigmer/platform/cursoraccount/v1/io_pb";
2
+ /** Return value of {@link useCursorAccounts}. */
3
+ export interface UseCursorAccountsReturn {
4
+ /** The account summaries, or `null` before the first successful fetch. */
5
+ readonly accounts: CursorAccountsResponse | null;
6
+ /** `true` while the initial fetch is in flight. */
7
+ readonly isLoading: boolean;
8
+ /** `true` while a background refetch is in flight and stale data is shown. */
9
+ readonly isRefetching: boolean;
10
+ /** Error from the last failed request, or `null` when healthy. */
11
+ readonly error: Error | null;
12
+ /** Discard cached data and re-fetch from the server. */
13
+ readonly refetch: () => void;
14
+ }
15
+ /**
16
+ * Data hook that lists every managed Cursor account with its routing and
17
+ * sync summary (enabled member key count, last-synced timestamp). Key
18
+ * material is always redacted server-side.
19
+ *
20
+ * Platform-operator surface: the caller needs
21
+ * `can_manage_cursor_accounts` on `platform:stigmer`.
22
+ *
23
+ * Pass `enabled: false` to skip fetching (stable no-op).
24
+ *
25
+ * @example
26
+ * ```tsx
27
+ * const { accounts, isLoading, refetch } = useCursorAccounts();
28
+ * ```
29
+ */
30
+ export declare function useCursorAccounts(options?: {
31
+ readonly enabled?: boolean;
32
+ }): UseCursorAccountsReturn;
33
+ //# sourceMappingURL=useCursorAccounts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCursorAccounts.d.ts","sourceRoot":"","sources":["../../src/cursor-accounts/useCursorAccounts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4DAA4D,CAAC;AAIzG,iDAAiD;AACjD,MAAM,WAAW,uBAAuB;IACtC,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACjD,mDAAmD;IACnD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,8EAA8E;IAC9E,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,kEAAkE;IAClE,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAC7B,wDAAwD;IACxD,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GACvC,uBAAuB,CAWzB"}
@@ -0,0 +1,25 @@
1
+ "use client";
2
+ import { useStigmer } from "../hooks.js";
3
+ import { useFetch } from "../internal/useFetch.js";
4
+ /**
5
+ * Data hook that lists every managed Cursor account with its routing and
6
+ * sync summary (enabled member key count, last-synced timestamp). Key
7
+ * material is always redacted server-side.
8
+ *
9
+ * Platform-operator surface: the caller needs
10
+ * `can_manage_cursor_accounts` on `platform:stigmer`.
11
+ *
12
+ * Pass `enabled: false` to skip fetching (stable no-op).
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * const { accounts, isLoading, refetch } = useCursorAccounts();
17
+ * ```
18
+ */
19
+ export function useCursorAccounts(options) {
20
+ const stigmer = useStigmer();
21
+ const enabled = options?.enabled ?? true;
22
+ const { data: accounts, isLoading, isRefetching, error, refetch } = useFetch(enabled ? () => stigmer.cursorAccounts.listAccounts() : null, [enabled, stigmer], null);
23
+ return { accounts, isLoading, isRefetching, error, refetch };
24
+ }
25
+ //# sourceMappingURL=useCursorAccounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCursorAccounts.js","sourceRoot":"","sources":["../../src/cursor-accounts/useCursorAccounts.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAgBnD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAwC;IAExC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC;IAEzC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,QAAQ,CAC1E,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,EAC5D,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB,IAAqC,CACtC,CAAC;IAEF,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC/D,CAAC"}