@stigmer/react 3.2.3 → 3.4.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 (460) 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/index.d.ts.map +1 -1
  5. package/billing/index.js +4 -0
  6. package/billing/index.js.map +1 -1
  7. package/channel/AgentChannelsPanel.d.ts.map +1 -1
  8. package/channel/AgentChannelsPanel.js +11 -5
  9. package/channel/AgentChannelsPanel.js.map +1 -1
  10. package/composer/SessionComposer.d.ts +1 -1
  11. package/cursor-accounts/CursorAccountEditor.d.ts +34 -0
  12. package/cursor-accounts/CursorAccountEditor.d.ts.map +1 -0
  13. package/cursor-accounts/CursorAccountEditor.js +67 -0
  14. package/cursor-accounts/CursorAccountEditor.js.map +1 -0
  15. package/cursor-accounts/CursorAccountsAccessNotice.d.ts +11 -0
  16. package/cursor-accounts/CursorAccountsAccessNotice.d.ts.map +1 -0
  17. package/cursor-accounts/CursorAccountsAccessNotice.js +14 -0
  18. package/cursor-accounts/CursorAccountsAccessNotice.js.map +1 -0
  19. package/cursor-accounts/CursorAccountsConsole.d.ts +32 -0
  20. package/cursor-accounts/CursorAccountsConsole.d.ts.map +1 -0
  21. package/cursor-accounts/CursorAccountsConsole.js +169 -0
  22. package/cursor-accounts/CursorAccountsConsole.js.map +1 -0
  23. package/cursor-accounts/MemberCoverageTable.d.ts +29 -0
  24. package/cursor-accounts/MemberCoverageTable.d.ts.map +1 -0
  25. package/cursor-accounts/MemberCoverageTable.js +150 -0
  26. package/cursor-accounts/MemberCoverageTable.js.map +1 -0
  27. package/cursor-accounts/MemberKeysPanel.d.ts +25 -0
  28. package/cursor-accounts/MemberKeysPanel.d.ts.map +1 -0
  29. package/cursor-accounts/MemberKeysPanel.js +115 -0
  30. package/cursor-accounts/MemberKeysPanel.js.map +1 -0
  31. package/cursor-accounts/badges.d.ts +9 -0
  32. package/cursor-accounts/badges.d.ts.map +1 -0
  33. package/cursor-accounts/badges.js +10 -0
  34. package/cursor-accounts/badges.js.map +1 -0
  35. package/cursor-accounts/cursor-account-coverage.d.ts +41 -0
  36. package/cursor-accounts/cursor-account-coverage.d.ts.map +1 -0
  37. package/cursor-accounts/cursor-account-coverage.js +26 -0
  38. package/cursor-accounts/cursor-account-coverage.js.map +1 -0
  39. package/cursor-accounts/cursor-account-format.d.ts +23 -0
  40. package/cursor-accounts/cursor-account-format.d.ts.map +1 -0
  41. package/cursor-accounts/cursor-account-format.js +41 -0
  42. package/cursor-accounts/cursor-account-format.js.map +1 -0
  43. package/cursor-accounts/index.d.ts +18 -0
  44. package/cursor-accounts/index.d.ts.map +1 -0
  45. package/cursor-accounts/index.js +13 -0
  46. package/cursor-accounts/index.js.map +1 -0
  47. package/cursor-accounts/useCursorAccountView.d.ts +30 -0
  48. package/cursor-accounts/useCursorAccountView.d.ts.map +1 -0
  49. package/cursor-accounts/useCursorAccountView.js +25 -0
  50. package/cursor-accounts/useCursorAccountView.js.map +1 -0
  51. package/cursor-accounts/useCursorAccounts.d.ts +33 -0
  52. package/cursor-accounts/useCursorAccounts.d.ts.map +1 -0
  53. package/cursor-accounts/useCursorAccounts.js +25 -0
  54. package/cursor-accounts/useCursorAccounts.js.map +1 -0
  55. package/cursor-accounts/useCursorMemberKeyActions.d.ts +49 -0
  56. package/cursor-accounts/useCursorMemberKeyActions.d.ts.map +1 -0
  57. package/cursor-accounts/useCursorMemberKeyActions.js +38 -0
  58. package/cursor-accounts/useCursorMemberKeyActions.js.map +1 -0
  59. package/cursor-accounts/useDeleteCursorAccount.d.ts +30 -0
  60. package/cursor-accounts/useDeleteCursorAccount.d.ts.map +1 -0
  61. package/cursor-accounts/useDeleteCursorAccount.js +32 -0
  62. package/cursor-accounts/useDeleteCursorAccount.js.map +1 -0
  63. package/cursor-accounts/useSyncCursorAccount.d.ts +23 -0
  64. package/cursor-accounts/useSyncCursorAccount.d.ts.map +1 -0
  65. package/cursor-accounts/useSyncCursorAccount.js +31 -0
  66. package/cursor-accounts/useSyncCursorAccount.js.map +1 -0
  67. package/cursor-accounts/useUpsertCursorAccount.d.ts +26 -0
  68. package/cursor-accounts/useUpsertCursorAccount.d.ts.map +1 -0
  69. package/cursor-accounts/useUpsertCursorAccount.js +34 -0
  70. package/cursor-accounts/useUpsertCursorAccount.js.map +1 -0
  71. package/datastore/CollectionRecordsBrowser.d.ts +34 -0
  72. package/datastore/CollectionRecordsBrowser.d.ts.map +1 -0
  73. package/datastore/CollectionRecordsBrowser.js +223 -0
  74. package/datastore/CollectionRecordsBrowser.js.map +1 -0
  75. package/datastore/CollectionSchemaView.d.ts +29 -0
  76. package/datastore/CollectionSchemaView.d.ts.map +1 -0
  77. package/datastore/CollectionSchemaView.js +93 -0
  78. package/datastore/CollectionSchemaView.js.map +1 -0
  79. package/datastore/DatastoreDetailView.d.ts +44 -0
  80. package/datastore/DatastoreDetailView.d.ts.map +1 -0
  81. package/datastore/DatastoreDetailView.js +76 -0
  82. package/datastore/DatastoreDetailView.js.map +1 -0
  83. package/datastore/DatastoreSyncReport.d.ts +19 -0
  84. package/datastore/DatastoreSyncReport.d.ts.map +1 -0
  85. package/datastore/DatastoreSyncReport.js +45 -0
  86. package/datastore/DatastoreSyncReport.js.map +1 -0
  87. package/datastore/DeleteDatastoreDialog.d.ts +35 -0
  88. package/datastore/DeleteDatastoreDialog.d.ts.map +1 -0
  89. package/datastore/DeleteDatastoreDialog.js +90 -0
  90. package/datastore/DeleteDatastoreDialog.js.map +1 -0
  91. package/datastore/FieldValueControl.d.ts +55 -0
  92. package/datastore/FieldValueControl.d.ts.map +1 -0
  93. package/datastore/FieldValueControl.js +138 -0
  94. package/datastore/FieldValueControl.js.map +1 -0
  95. package/datastore/RecordFilterBuilder.d.ts +37 -0
  96. package/datastore/RecordFilterBuilder.d.ts.map +1 -0
  97. package/datastore/RecordFilterBuilder.js +122 -0
  98. package/datastore/RecordFilterBuilder.js.map +1 -0
  99. package/datastore/RecordFormPanel.d.ts +45 -0
  100. package/datastore/RecordFormPanel.d.ts.map +1 -0
  101. package/datastore/RecordFormPanel.js +215 -0
  102. package/datastore/RecordFormPanel.js.map +1 -0
  103. package/datastore/index.d.ts +43 -0
  104. package/datastore/index.d.ts.map +1 -0
  105. package/datastore/index.js +22 -0
  106. package/datastore/index.js.map +1 -0
  107. package/datastore/recordFilter.d.ts +62 -0
  108. package/datastore/recordFilter.d.ts.map +1 -0
  109. package/datastore/recordFilter.js +104 -0
  110. package/datastore/recordFilter.js.map +1 -0
  111. package/datastore/recordValues.d.ts +85 -0
  112. package/datastore/recordValues.d.ts.map +1 -0
  113. package/datastore/recordValues.js +282 -0
  114. package/datastore/recordValues.js.map +1 -0
  115. package/datastore/useDatastore.d.ts +39 -0
  116. package/datastore/useDatastore.d.ts.map +1 -0
  117. package/datastore/useDatastore.js +44 -0
  118. package/datastore/useDatastore.js.map +1 -0
  119. package/datastore/useDatastoreCount.d.ts +48 -0
  120. package/datastore/useDatastoreCount.d.ts.map +1 -0
  121. package/datastore/useDatastoreCount.js +27 -0
  122. package/datastore/useDatastoreCount.js.map +1 -0
  123. package/datastore/useDatastoreDescription.d.ts +54 -0
  124. package/datastore/useDatastoreDescription.d.ts.map +1 -0
  125. package/datastore/useDatastoreDescription.js +50 -0
  126. package/datastore/useDatastoreDescription.js.map +1 -0
  127. package/datastore/useDatastoreList.d.ts +57 -0
  128. package/datastore/useDatastoreList.d.ts.map +1 -0
  129. package/datastore/useDatastoreList.js +29 -0
  130. package/datastore/useDatastoreList.js.map +1 -0
  131. package/datastore/useDatastoreSearch.d.ts +19 -0
  132. package/datastore/useDatastoreSearch.d.ts.map +1 -0
  133. package/datastore/useDatastoreSearch.js +22 -0
  134. package/datastore/useDatastoreSearch.js.map +1 -0
  135. package/datastore/useDeleteDatastore.d.ts +53 -0
  136. package/datastore/useDeleteDatastore.d.ts.map +1 -0
  137. package/datastore/useDeleteDatastore.js +40 -0
  138. package/datastore/useDeleteDatastore.js.map +1 -0
  139. package/datastore/useDeleteRecord.d.ts +34 -0
  140. package/datastore/useDeleteRecord.d.ts.map +1 -0
  141. package/datastore/useDeleteRecord.js +43 -0
  142. package/datastore/useDeleteRecord.js.map +1 -0
  143. package/datastore/useInsertRecord.d.ts +50 -0
  144. package/datastore/useInsertRecord.d.ts.map +1 -0
  145. package/datastore/useInsertRecord.js +55 -0
  146. package/datastore/useInsertRecord.js.map +1 -0
  147. package/datastore/useRecordCollection.d.ts +104 -0
  148. package/datastore/useRecordCollection.d.ts.map +1 -0
  149. package/datastore/useRecordCollection.js +136 -0
  150. package/datastore/useRecordCollection.js.map +1 -0
  151. package/datastore/useRecordList.d.ts +66 -0
  152. package/datastore/useRecordList.d.ts.map +1 -0
  153. package/datastore/useRecordList.js +58 -0
  154. package/datastore/useRecordList.js.map +1 -0
  155. package/datastore/useUpdateRecord.d.ts +52 -0
  156. package/datastore/useUpdateRecord.d.ts.map +1 -0
  157. package/datastore/useUpdateRecord.js +55 -0
  158. package/datastore/useUpdateRecord.js.map +1 -0
  159. package/environment/EnvironmentListPanel.d.ts.map +1 -1
  160. package/environment/EnvironmentListPanel.js +12 -7
  161. package/environment/EnvironmentListPanel.js.map +1 -1
  162. package/execution/ExecutionProgress.d.ts.map +1 -1
  163. package/execution/ExecutionProgress.js +13 -4
  164. package/execution/ExecutionProgress.js.map +1 -1
  165. package/execution/MessageThread.d.ts.map +1 -1
  166. package/execution/MessageThread.js +10 -2
  167. package/execution/MessageThread.js.map +1 -1
  168. package/execution/useCreateAgentExecution.d.ts +31 -1
  169. package/execution/useCreateAgentExecution.d.ts.map +1 -1
  170. package/execution/useCreateAgentExecution.js +2 -0
  171. package/execution/useCreateAgentExecution.js.map +1 -1
  172. package/iam-policy/index.d.ts +1 -1
  173. package/iam-policy/index.d.ts.map +1 -1
  174. package/iam-policy/index.js.map +1 -1
  175. package/iam-policy/useCheckPermission.d.ts +32 -11
  176. package/iam-policy/useCheckPermission.d.ts.map +1 -1
  177. package/iam-policy/useCheckPermission.js +24 -19
  178. package/iam-policy/useCheckPermission.js.map +1 -1
  179. package/index.d.ts +12 -4
  180. package/index.d.ts.map +1 -1
  181. package/index.js +18 -3
  182. package/index.js.map +1 -1
  183. package/internal/form-primitives.d.ts +10 -0
  184. package/internal/form-primitives.d.ts.map +1 -0
  185. package/internal/form-primitives.js +15 -0
  186. package/internal/form-primitives.js.map +1 -0
  187. package/library/index.d.ts +0 -7
  188. package/library/index.d.ts.map +1 -1
  189. package/library/index.js +0 -4
  190. package/library/index.js.map +1 -1
  191. package/library/useApplyResource.d.ts +12 -12
  192. package/library/useApplyResource.d.ts.map +1 -1
  193. package/library/useApplyResource.js +16 -25
  194. package/library/useApplyResource.js.map +1 -1
  195. package/library/useExportResource.d.ts +13 -9
  196. package/library/useExportResource.d.ts.map +1 -1
  197. package/library/useExportResource.js +18 -36
  198. package/library/useExportResource.js.map +1 -1
  199. package/manifest/ApplyManifestDialog.d.ts +48 -0
  200. package/manifest/ApplyManifestDialog.d.ts.map +1 -0
  201. package/manifest/ApplyManifestDialog.js +135 -0
  202. package/manifest/ApplyManifestDialog.js.map +1 -0
  203. package/manifest/EditResourceYamlDialog.d.ts +51 -0
  204. package/manifest/EditResourceYamlDialog.d.ts.map +1 -0
  205. package/manifest/EditResourceYamlDialog.js +104 -0
  206. package/manifest/EditResourceYamlDialog.js.map +1 -0
  207. package/manifest/RedactedSecretsNotice.d.ts +14 -0
  208. package/manifest/RedactedSecretsNotice.d.ts.map +1 -0
  209. package/manifest/RedactedSecretsNotice.js +14 -0
  210. package/manifest/RedactedSecretsNotice.js.map +1 -0
  211. package/manifest/YamlEditor.d.ts +44 -0
  212. package/manifest/YamlEditor.d.ts.map +1 -0
  213. package/manifest/YamlEditor.js +216 -0
  214. package/manifest/YamlEditor.js.map +1 -0
  215. package/manifest/index.d.ts +13 -0
  216. package/manifest/index.d.ts.map +1 -0
  217. package/manifest/index.js +13 -0
  218. package/manifest/index.js.map +1 -0
  219. package/manifest/useApplyManifest.d.ts +82 -0
  220. package/manifest/useApplyManifest.d.ts.map +1 -0
  221. package/manifest/useApplyManifest.js +180 -0
  222. package/manifest/useApplyManifest.js.map +1 -0
  223. package/manifest/useEditResourceYaml.d.ts +106 -0
  224. package/manifest/useEditResourceYaml.d.ts.map +1 -0
  225. package/manifest/useEditResourceYaml.js +168 -0
  226. package/manifest/useEditResourceYaml.js.map +1 -0
  227. package/mcp-server/steps/ReviewStep.d.ts.map +1 -1
  228. package/mcp-server/steps/ReviewStep.js +2 -3
  229. package/mcp-server/steps/ReviewStep.js.map +1 -1
  230. package/package.json +4 -4
  231. package/pricing-governance/BaselineEditor.d.ts +9 -0
  232. package/pricing-governance/BaselineEditor.d.ts.map +1 -0
  233. package/pricing-governance/BaselineEditor.js +270 -0
  234. package/pricing-governance/BaselineEditor.js.map +1 -0
  235. package/pricing-governance/ModelCatalogPanel.d.ts +28 -0
  236. package/pricing-governance/ModelCatalogPanel.d.ts.map +1 -0
  237. package/pricing-governance/ModelCatalogPanel.js +102 -0
  238. package/pricing-governance/ModelCatalogPanel.js.map +1 -0
  239. package/pricing-governance/ModelGovernanceDetail.d.ts +8 -0
  240. package/pricing-governance/ModelGovernanceDetail.d.ts.map +1 -0
  241. package/pricing-governance/ModelGovernanceDetail.js +64 -0
  242. package/pricing-governance/ModelGovernanceDetail.js.map +1 -0
  243. package/pricing-governance/OperatorAccessNotice.d.ts +12 -0
  244. package/pricing-governance/OperatorAccessNotice.d.ts.map +1 -0
  245. package/pricing-governance/OperatorAccessNotice.js +15 -0
  246. package/pricing-governance/OperatorAccessNotice.js.map +1 -0
  247. package/pricing-governance/PricingGovernanceConsole.d.ts +57 -0
  248. package/pricing-governance/PricingGovernanceConsole.d.ts.map +1 -0
  249. package/pricing-governance/PricingGovernanceConsole.js +164 -0
  250. package/pricing-governance/PricingGovernanceConsole.js.map +1 -0
  251. package/pricing-governance/PricingGovernancePanel.d.ts +26 -0
  252. package/pricing-governance/PricingGovernancePanel.d.ts.map +1 -0
  253. package/pricing-governance/PricingGovernancePanel.js +64 -0
  254. package/pricing-governance/PricingGovernancePanel.js.map +1 -0
  255. package/pricing-governance/RetireConfirm.d.ts +9 -0
  256. package/pricing-governance/RetireConfirm.d.ts.map +1 -0
  257. package/pricing-governance/RetireConfirm.js +19 -0
  258. package/pricing-governance/RetireConfirm.js.map +1 -0
  259. package/pricing-governance/governance-primitives.d.ts +33 -0
  260. package/pricing-governance/governance-primitives.d.ts.map +1 -0
  261. package/pricing-governance/governance-primitives.js +43 -0
  262. package/pricing-governance/governance-primitives.js.map +1 -0
  263. package/pricing-governance/index.d.ts +19 -0
  264. package/pricing-governance/index.d.ts.map +1 -0
  265. package/pricing-governance/index.js +20 -0
  266. package/pricing-governance/index.js.map +1 -0
  267. package/pricing-governance/pricing-format.d.ts +12 -0
  268. package/pricing-governance/pricing-format.d.ts.map +1 -0
  269. package/pricing-governance/pricing-format.js +50 -0
  270. package/pricing-governance/pricing-format.js.map +1 -0
  271. package/pricing-governance/useDecidePricingOverride.d.ts +46 -0
  272. package/pricing-governance/useDecidePricingOverride.d.ts.map +1 -0
  273. package/pricing-governance/useDecidePricingOverride.js +44 -0
  274. package/pricing-governance/useDecidePricingOverride.js.map +1 -0
  275. package/pricing-governance/useModelGovernanceView.d.ts +103 -0
  276. package/pricing-governance/useModelGovernanceView.d.ts.map +1 -0
  277. package/pricing-governance/useModelGovernanceView.js +144 -0
  278. package/pricing-governance/useModelGovernanceView.js.map +1 -0
  279. package/pricing-governance/useModelPricingBaselines.d.ts +40 -0
  280. package/pricing-governance/useModelPricingBaselines.d.ts.map +1 -0
  281. package/pricing-governance/useModelPricingBaselines.js +32 -0
  282. package/pricing-governance/useModelPricingBaselines.js.map +1 -0
  283. package/pricing-governance/usePricingGovernance.d.ts +39 -0
  284. package/pricing-governance/usePricingGovernance.d.ts.map +1 -0
  285. package/pricing-governance/usePricingGovernance.js +31 -0
  286. package/pricing-governance/usePricingGovernance.js.map +1 -0
  287. package/pricing-governance/useRetireModelPricingBaseline.d.ts +31 -0
  288. package/pricing-governance/useRetireModelPricingBaseline.d.ts.map +1 -0
  289. package/pricing-governance/useRetireModelPricingBaseline.js +36 -0
  290. package/pricing-governance/useRetireModelPricingBaseline.js.map +1 -0
  291. package/pricing-governance/useUpsertModelPricingBaseline.d.ts +38 -0
  292. package/pricing-governance/useUpsertModelPricingBaseline.d.ts.map +1 -0
  293. package/pricing-governance/useUpsertModelPricingBaseline.js +37 -0
  294. package/pricing-governance/useUpsertModelPricingBaseline.js.map +1 -0
  295. package/resource-creation/templates/workflow-templates.js +4 -4
  296. package/session/useCreateSession.d.ts +28 -0
  297. package/session/useCreateSession.d.ts.map +1 -1
  298. package/session/useCreateSession.js +2 -1
  299. package/session/useCreateSession.js.map +1 -1
  300. package/session/useEditSessionPrep.js +3 -3
  301. package/session/useEditSessionPrep.js.map +1 -1
  302. package/session/useNewSessionFlow.d.ts +30 -0
  303. package/session/useNewSessionFlow.d.ts.map +1 -1
  304. package/session/useNewSessionFlow.js +7 -1
  305. package/session/useNewSessionFlow.js.map +1 -1
  306. package/session/useUpdateSession.d.ts +29 -10
  307. package/session/useUpdateSession.d.ts.map +1 -1
  308. package/session/useUpdateSession.js +29 -10
  309. package/session/useUpdateSession.js.map +1 -1
  310. package/settings/index.d.ts +2 -1
  311. package/settings/index.d.ts.map +1 -1
  312. package/settings/index.js +2 -1
  313. package/settings/index.js.map +1 -1
  314. package/settings/settings-nav.d.ts +22 -0
  315. package/settings/settings-nav.d.ts.map +1 -1
  316. package/settings/settings-nav.js +32 -1
  317. package/settings/settings-nav.js.map +1 -1
  318. package/settings/useSettingsNavGroups.d.ts +29 -0
  319. package/settings/useSettingsNavGroups.d.ts.map +1 -0
  320. package/settings/useSettingsNavGroups.js +61 -0
  321. package/settings/useSettingsNavGroups.js.map +1 -0
  322. package/src/agent/steps/ReviewStep.tsx +2 -3
  323. package/src/billing/index.ts +5 -0
  324. package/src/channel/AgentChannelsPanel.tsx +27 -1
  325. package/src/composer/SessionComposer.tsx +1 -1
  326. package/src/cursor-accounts/CursorAccountEditor.tsx +229 -0
  327. package/src/cursor-accounts/CursorAccountsAccessNotice.tsx +36 -0
  328. package/src/cursor-accounts/CursorAccountsConsole.tsx +454 -0
  329. package/src/cursor-accounts/MemberCoverageTable.tsx +439 -0
  330. package/src/cursor-accounts/MemberKeysPanel.tsx +278 -0
  331. package/src/cursor-accounts/__tests__/CursorAccountsConsole.test.tsx +680 -0
  332. package/src/cursor-accounts/__tests__/cursor-account-coverage.test.ts +73 -0
  333. package/src/cursor-accounts/badges.tsx +26 -0
  334. package/src/cursor-accounts/cursor-account-coverage.ts +71 -0
  335. package/src/cursor-accounts/cursor-account-format.ts +45 -0
  336. package/src/cursor-accounts/index.ts +29 -0
  337. package/src/cursor-accounts/useCursorAccountView.ts +49 -0
  338. package/src/cursor-accounts/useCursorAccounts.ts +49 -0
  339. package/src/cursor-accounts/useCursorMemberKeyActions.ts +106 -0
  340. package/src/cursor-accounts/useDeleteCursorAccount.ts +62 -0
  341. package/src/cursor-accounts/useSyncCursorAccount.ts +54 -0
  342. package/src/cursor-accounts/useUpsertCursorAccount.ts +57 -0
  343. package/src/datastore/CollectionRecordsBrowser.tsx +570 -0
  344. package/src/datastore/CollectionSchemaView.tsx +247 -0
  345. package/src/datastore/DatastoreDetailView.tsx +201 -0
  346. package/src/datastore/DatastoreSyncReport.tsx +105 -0
  347. package/src/datastore/DeleteDatastoreDialog.tsx +202 -0
  348. package/src/datastore/FieldValueControl.tsx +289 -0
  349. package/src/datastore/RecordFilterBuilder.tsx +422 -0
  350. package/src/datastore/RecordFormPanel.tsx +432 -0
  351. package/src/datastore/__tests__/CollectionRecordsBrowser.test.tsx +245 -0
  352. package/src/datastore/__tests__/DeleteDatastoreDialog.test.tsx +133 -0
  353. package/src/datastore/__tests__/FieldValueControl.test.tsx +160 -0
  354. package/src/datastore/__tests__/RecordFilterBuilder.test.tsx +155 -0
  355. package/src/datastore/__tests__/RecordFormPanel.test.tsx +227 -0
  356. package/src/datastore/__tests__/recordFilter.test.ts +169 -0
  357. package/src/datastore/__tests__/recordMutations.test.tsx +195 -0
  358. package/src/datastore/__tests__/recordValues.test.ts +359 -0
  359. package/src/datastore/__tests__/schemaAndSyncViews.test.tsx +142 -0
  360. package/src/datastore/__tests__/useDatastoreDescription.test.tsx +143 -0
  361. package/src/datastore/__tests__/useRecordCollection.test.tsx +250 -0
  362. package/src/datastore/__tests__/useRecordList.test.tsx +85 -0
  363. package/src/datastore/index.ts +111 -0
  364. package/src/datastore/recordFilter.ts +154 -0
  365. package/src/datastore/recordValues.ts +327 -0
  366. package/src/datastore/useDatastore.ts +67 -0
  367. package/src/datastore/useDatastoreCount.ts +67 -0
  368. package/src/datastore/useDatastoreDescription.ts +90 -0
  369. package/src/datastore/useDatastoreList.ts +79 -0
  370. package/src/datastore/useDatastoreSearch.ts +39 -0
  371. package/src/datastore/useDeleteDatastore.ts +87 -0
  372. package/src/datastore/useDeleteRecord.ts +77 -0
  373. package/src/datastore/useInsertRecord.ts +92 -0
  374. package/src/datastore/useRecordCollection.ts +256 -0
  375. package/src/datastore/useRecordList.ts +131 -0
  376. package/src/datastore/useUpdateRecord.ts +95 -0
  377. package/src/environment/EnvironmentListPanel.tsx +24 -0
  378. package/src/execution/ExecutionProgress.tsx +14 -4
  379. package/src/execution/MessageThread.tsx +10 -2
  380. package/src/execution/__tests__/ExecutionProgress.test.tsx +67 -0
  381. package/src/execution/__tests__/MessageThread.test.tsx +44 -0
  382. package/src/execution/__tests__/useArtifactInspection.test.tsx +12 -2
  383. package/src/execution/__tests__/useCreateAgentExecution.test.tsx +86 -0
  384. package/src/execution/useCreateAgentExecution.ts +41 -6
  385. package/src/iam-policy/__tests__/useCheckPermission.test.tsx +221 -0
  386. package/src/iam-policy/index.ts +1 -0
  387. package/src/iam-policy/useCheckPermission.ts +45 -19
  388. package/src/index.ts +172 -14
  389. package/src/internal/form-primitives.tsx +40 -0
  390. package/src/library/index.ts +0 -20
  391. package/src/library/useApplyResource.ts +27 -34
  392. package/src/library/useExportResource.ts +21 -40
  393. package/src/manifest/ApplyManifestDialog.tsx +315 -0
  394. package/src/manifest/EditResourceYamlDialog.tsx +265 -0
  395. package/src/manifest/RedactedSecretsNotice.tsx +30 -0
  396. package/src/manifest/YamlEditor.tsx +272 -0
  397. package/src/manifest/__tests__/EditResourceYamlDialog.test.tsx +118 -0
  398. package/src/manifest/__tests__/useApplyManifest.test.tsx +237 -0
  399. package/src/manifest/__tests__/useEditResourceYaml.test.tsx +252 -0
  400. package/src/manifest/index.ts +33 -0
  401. package/src/manifest/useApplyManifest.ts +270 -0
  402. package/src/manifest/useEditResourceYaml.ts +273 -0
  403. package/src/mcp-server/steps/ReviewStep.tsx +2 -3
  404. package/src/pricing-governance/BaselineEditor.tsx +652 -0
  405. package/src/pricing-governance/ModelCatalogPanel.tsx +283 -0
  406. package/src/pricing-governance/ModelGovernanceDetail.tsx +289 -0
  407. package/src/pricing-governance/OperatorAccessNotice.tsx +32 -0
  408. package/src/pricing-governance/PricingGovernanceConsole.tsx +465 -0
  409. package/src/pricing-governance/PricingGovernancePanel.tsx +166 -0
  410. package/src/pricing-governance/RetireConfirm.tsx +82 -0
  411. package/src/pricing-governance/__tests__/ModelCatalogPanel.test.tsx +253 -0
  412. package/src/pricing-governance/__tests__/PricingGovernanceConsole.test.tsx +410 -0
  413. package/src/pricing-governance/__tests__/useModelGovernanceView.test.tsx +308 -0
  414. package/src/pricing-governance/governance-primitives.tsx +133 -0
  415. package/src/pricing-governance/index.ts +50 -0
  416. package/src/pricing-governance/pricing-format.ts +53 -0
  417. package/src/pricing-governance/useDecidePricingOverride.ts +78 -0
  418. package/src/pricing-governance/useModelGovernanceView.ts +290 -0
  419. package/src/pricing-governance/useModelPricingBaselines.ts +69 -0
  420. package/src/pricing-governance/usePricingGovernance.ts +57 -0
  421. package/src/pricing-governance/useRetireModelPricingBaseline.ts +65 -0
  422. package/src/pricing-governance/useUpsertModelPricingBaseline.ts +72 -0
  423. package/src/resource-creation/templates/workflow-templates.ts +4 -4
  424. package/src/session/__tests__/useCreateSession.test.tsx +94 -0
  425. package/src/session/__tests__/useNewSessionFlow.test.tsx +33 -0
  426. package/src/session/useCreateSession.ts +30 -0
  427. package/src/session/useEditSessionPrep.ts +3 -3
  428. package/src/session/useNewSessionFlow.ts +45 -1
  429. package/src/session/useUpdateSession.ts +29 -10
  430. package/src/settings/__tests__/useSettingsNavGroups.test.tsx +138 -0
  431. package/src/settings/index.ts +5 -1
  432. package/src/settings/settings-nav.ts +43 -0
  433. package/src/settings/useSettingsNavGroups.ts +81 -0
  434. package/src/workflow/WorkflowYamlEditor.tsx +6 -270
  435. package/styles.css +1 -1
  436. package/workflow/CanvasTransitionEdge.d.ts +1 -1
  437. package/workflow/WorkflowYamlEditor.d.ts +2 -42
  438. package/workflow/WorkflowYamlEditor.d.ts.map +1 -1
  439. package/workflow/WorkflowYamlEditor.js +5 -214
  440. package/workflow/WorkflowYamlEditor.js.map +1 -1
  441. package/library/ImportResourceDialog.d.ts +0 -43
  442. package/library/ImportResourceDialog.d.ts.map +0 -1
  443. package/library/ImportResourceDialog.js +0 -90
  444. package/library/ImportResourceDialog.js.map +0 -1
  445. package/library/parse-resource-yaml.d.ts +0 -63
  446. package/library/parse-resource-yaml.d.ts.map +0 -1
  447. package/library/parse-resource-yaml.js +0 -407
  448. package/library/parse-resource-yaml.js.map +0 -1
  449. package/library/serialize-resource-yaml.d.ts +0 -103
  450. package/library/serialize-resource-yaml.d.ts.map +0 -1
  451. package/library/serialize-resource-yaml.js +0 -565
  452. package/library/serialize-resource-yaml.js.map +0 -1
  453. package/library/useImportResource.d.ts +0 -84
  454. package/library/useImportResource.d.ts.map +0 -1
  455. package/library/useImportResource.js +0 -188
  456. package/library/useImportResource.js.map +0 -1
  457. package/src/library/ImportResourceDialog.tsx +0 -227
  458. package/src/library/parse-resource-yaml.ts +0 -630
  459. package/src/library/serialize-resource-yaml.ts +0 -756
  460. package/src/library/useImportResource.ts +0 -253
@@ -1,4 +1,4 @@
1
- import { AppWindow, BarChart3, Box, Building2, CreditCard, KeyRound, Link, MessageSquare, Plug, ShieldCheck, Users, } from "lucide-react";
1
+ import { AppWindow, BarChart3, Box, Building2, CreditCard, KeyRound, Link, MessageSquare, MousePointerClick, Plug, Scale, ShieldCheck, Users, } from "lucide-react";
2
2
  /** Canonical settings sidebar/grouped navigation model. */
3
3
  export const SETTINGS_NAV_GROUPS = [
4
4
  {
@@ -43,4 +43,35 @@ export const SETTINGS_NAV_GROUPS = [
43
43
  ],
44
44
  },
45
45
  ];
46
+ /**
47
+ * Stigmer-internal platform-operator navigation group.
48
+ *
49
+ * Deliberately NOT part of {@link SETTINGS_NAV_GROUPS}: that constant
50
+ * means "groups every signed-in user sees", and its members must never
51
+ * change based on who is looking. This group is appended for platform
52
+ * operators only — use {@link useSettingsNavGroups} to get the
53
+ * permission-aware list instead of composing the two by hand.
54
+ *
55
+ * Every item here declares its `requiredPermission`; the hook filters
56
+ * per item (fail-closed), so an operator holding one platform permission
57
+ * but not another sees exactly their slice of this group.
58
+ */
59
+ export const PLATFORM_SETTINGS_NAV_GROUP = {
60
+ label: "Platform",
61
+ description: "Stigmer-internal operations. Visible to platform operators only.",
62
+ items: [
63
+ {
64
+ href: "/settings/pricing-governance",
65
+ label: "Pricing Governance",
66
+ icon: Scale,
67
+ requiredPermission: "can_manage_model_pricing",
68
+ },
69
+ {
70
+ href: "/settings/cursor-accounts",
71
+ label: "Cursor Accounts",
72
+ icon: MousePointerClick,
73
+ requiredPermission: "can_manage_cursor_accounts",
74
+ },
75
+ ],
76
+ };
46
77
  //# sourceMappingURL=settings-nav.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-nav.js","sourceRoot":"","sources":["../../src/settings/settings-nav.ts"],"names":[],"mappings":"AACA,OAAO,EACL,SAAS,EACT,SAAS,EACT,GAAG,EACH,SAAS,EACT,UAAU,EACV,QAAQ,EACR,IAAI,EACJ,aAAa,EACb,IAAI,EACJ,WAAW,EACX,KAAK,GACN,MAAM,cAAc,CAAC;AAyBtB,2DAA2D;AAC3D,MAAM,CAAC,MAAM,mBAAmB,GAAgC;IAC9D;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EACT,kEAAkE;QACpE,KAAK,EAAE;YACL,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE;YACxE,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE;YAC5D,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE;YACnE;gBACE,IAAI,EAAE,8BAA8B;gBACpC,KAAK,EAAE,oBAAoB;gBAC3B,IAAI,EAAE,WAAW;aAClB;SACF;KACF;IACD;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,mFAAmF;QACrF,KAAK,EAAE;YACL,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE;YACjE;gBACE,IAAI,EAAE,4BAA4B;gBAClC,KAAK,EAAE,kBAAkB;gBACzB,IAAI,EAAE,IAAI;aACX;YACD,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,EAAE;YACpE,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE;YACtE;gBACE,IAAI,EAAE,wBAAwB;gBAC9B,KAAK,EAAE,cAAc;gBACrB,IAAI,EAAE,aAAa;aACpB;SACF;KACF;IACD;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,sCAAsC;QACnD,KAAK,EAAE;YACL,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE;YACjE,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;SAC7D;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"settings-nav.js","sourceRoot":"","sources":["../../src/settings/settings-nav.ts"],"names":[],"mappings":"AACA,OAAO,EACL,SAAS,EACT,SAAS,EACT,GAAG,EACH,SAAS,EACT,UAAU,EACV,QAAQ,EACR,IAAI,EACJ,aAAa,EACb,iBAAiB,EACjB,IAAI,EACJ,KAAK,EACL,WAAW,EACX,KAAK,GACN,MAAM,cAAc,CAAC;AAiCtB,2DAA2D;AAC3D,MAAM,CAAC,MAAM,mBAAmB,GAAgC;IAC9D;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EACT,kEAAkE;QACpE,KAAK,EAAE;YACL,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE;YACxE,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE;YAC5D,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE;YACnE;gBACE,IAAI,EAAE,8BAA8B;gBACpC,KAAK,EAAE,oBAAoB;gBAC3B,IAAI,EAAE,WAAW;aAClB;SACF;KACF;IACD;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,mFAAmF;QACrF,KAAK,EAAE;YACL,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE;YACjE;gBACE,IAAI,EAAE,4BAA4B;gBAClC,KAAK,EAAE,kBAAkB;gBACzB,IAAI,EAAE,IAAI;aACX;YACD,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,EAAE;YACpE,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE;YACtE;gBACE,IAAI,EAAE,wBAAwB;gBAC9B,KAAK,EAAE,cAAc;gBACrB,IAAI,EAAE,aAAa;aACpB;SACF;KACF;IACD;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,sCAAsC;QACnD,KAAK,EAAE;YACL,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE;YACjE,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;SAC7D;KACF;CACF,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAqB;IAC3D,KAAK,EAAE,UAAU;IACjB,WAAW,EACT,kEAAkE;IACpE,KAAK,EAAE;QACL;YACE,IAAI,EAAE,8BAA8B;YACpC,KAAK,EAAE,oBAAoB;YAC3B,IAAI,EAAE,KAAK;YACX,kBAAkB,EAAE,0BAA0B;SAC/C;QACD;YACE,IAAI,EAAE,2BAA2B;YACjC,KAAK,EAAE,iBAAiB;YACxB,IAAI,EAAE,iBAAiB;YACvB,kBAAkB,EAAE,4BAA4B;SACjD;KACF;CACF,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { type SettingsNavGroup } from "./settings-nav.js";
2
+ /**
3
+ * Permission-aware settings navigation: {@link SETTINGS_NAV_GROUPS}
4
+ * for everyone, plus the {@link PLATFORM_SETTINGS_NAV_GROUP} items the
5
+ * caller's platform permissions unlock (per-item `requiredPermission`,
6
+ * checked against `platform:stigmer`). The group appears when at least
7
+ * one of its items is visible.
8
+ *
9
+ * The checks run fail-closed — the opposite of the `useCheckPermission`
10
+ * default — because navigation is *discoverability*, not *capability*:
11
+ * an action gate can safely fail open (the server re-checks every
12
+ * request), but an operator-only nav entry must not appear while the
13
+ * check is loading, when it errors, or on deployments where the IAM
14
+ * service (and the surface it points to) does not exist.
15
+ *
16
+ * Implementation note: hooks must be called unconditionally, so each
17
+ * distinct platform permission gets its own static check below. When a
18
+ * new platform surface adds a new permission, add its check to
19
+ * PLATFORM_PERMISSION_CHECKS' shape here — the exhaustiveness guard in
20
+ * the tests catches a forgotten one.
21
+ *
22
+ * @example
23
+ * ```tsx
24
+ * const groups = useSettingsNavGroups();
25
+ * return groups.map((group) => <NavGroup key={group.label} group={group} />);
26
+ * ```
27
+ */
28
+ export declare function useSettingsNavGroups(): readonly SettingsNavGroup[];
29
+ //# sourceMappingURL=useSettingsNavGroups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSettingsNavGroups.d.ts","sourceRoot":"","sources":["../../src/settings/useSettingsNavGroups.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAS3B;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,oBAAoB,IAAI,SAAS,gBAAgB,EAAE,CAqClE"}
@@ -0,0 +1,61 @@
1
+ "use client";
2
+ import { useMemo } from "react";
3
+ import { useCheckPermission } from "../iam-policy/useCheckPermission.js";
4
+ import { PLATFORM_SETTINGS_NAV_GROUP, SETTINGS_NAV_GROUPS, } from "./settings-nav.js";
5
+ /**
6
+ * The `platform` singleton — platform-level permissions are always
7
+ * checked against this one resource (mirrors the server-side
8
+ * `resource_id = "stigmer"` RPC config).
9
+ */
10
+ const PLATFORM_RESOURCE = { kind: "platform", id: "stigmer" };
11
+ /**
12
+ * Permission-aware settings navigation: {@link SETTINGS_NAV_GROUPS}
13
+ * for everyone, plus the {@link PLATFORM_SETTINGS_NAV_GROUP} items the
14
+ * caller's platform permissions unlock (per-item `requiredPermission`,
15
+ * checked against `platform:stigmer`). The group appears when at least
16
+ * one of its items is visible.
17
+ *
18
+ * The checks run fail-closed — the opposite of the `useCheckPermission`
19
+ * default — because navigation is *discoverability*, not *capability*:
20
+ * an action gate can safely fail open (the server re-checks every
21
+ * request), but an operator-only nav entry must not appear while the
22
+ * check is loading, when it errors, or on deployments where the IAM
23
+ * service (and the surface it points to) does not exist.
24
+ *
25
+ * Implementation note: hooks must be called unconditionally, so each
26
+ * distinct platform permission gets its own static check below. When a
27
+ * new platform surface adds a new permission, add its check to
28
+ * PLATFORM_PERMISSION_CHECKS' shape here — the exhaustiveness guard in
29
+ * the tests catches a forgotten one.
30
+ *
31
+ * @example
32
+ * ```tsx
33
+ * const groups = useSettingsNavGroups();
34
+ * return groups.map((group) => <NavGroup key={group.label} group={group} />);
35
+ * ```
36
+ */
37
+ export function useSettingsNavGroups() {
38
+ const pricing = useCheckPermission(PLATFORM_RESOURCE, "can_manage_model_pricing", { fail: "closed" });
39
+ const cursorAccounts = useCheckPermission(PLATFORM_RESOURCE, "can_manage_cursor_accounts", { fail: "closed" });
40
+ const pricingAllowed = pricing.allowed;
41
+ const cursorAccountsAllowed = cursorAccounts.allowed;
42
+ return useMemo(() => {
43
+ const verdicts = {
44
+ can_manage_model_pricing: pricingAllowed,
45
+ can_manage_cursor_accounts: cursorAccountsAllowed,
46
+ };
47
+ const visibleItems = PLATFORM_SETTINGS_NAV_GROUP.items.filter(
48
+ // Fail closed on both axes: an item with no declared permission or
49
+ // with a permission this hook does not check yet stays hidden.
50
+ (item) => item.requiredPermission !== undefined &&
51
+ verdicts[item.requiredPermission] === true);
52
+ if (visibleItems.length === 0) {
53
+ return SETTINGS_NAV_GROUPS;
54
+ }
55
+ return [
56
+ ...SETTINGS_NAV_GROUPS,
57
+ { ...PLATFORM_SETTINGS_NAV_GROUP, items: visibleItems },
58
+ ];
59
+ }, [pricingAllowed, cursorAccountsAllowed]);
60
+ }
61
+ //# sourceMappingURL=useSettingsNavGroups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSettingsNavGroups.js","sourceRoot":"","sources":["../../src/settings/useSettingsNavGroups.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,GAEpB,MAAM,mBAAmB,CAAC;AAE3B;;;;GAIG;AACH,MAAM,iBAAiB,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAW,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,OAAO,GAAG,kBAAkB,CAChC,iBAAiB,EACjB,0BAA0B,EAC1B,EAAE,IAAI,EAAE,QAAQ,EAAE,CACnB,CAAC;IACF,MAAM,cAAc,GAAG,kBAAkB,CACvC,iBAAiB,EACjB,4BAA4B,EAC5B,EAAE,IAAI,EAAE,QAAQ,EAAE,CACnB,CAAC;IAEF,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IACvC,MAAM,qBAAqB,GAAG,cAAc,CAAC,OAAO,CAAC;IAErD,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,MAAM,QAAQ,GAA4B;YACxC,wBAAwB,EAAE,cAAc;YACxC,0BAA0B,EAAE,qBAAqB;SAClD,CAAC;QAEF,MAAM,YAAY,GAAG,2BAA2B,CAAC,KAAK,CAAC,MAAM;QAC3D,mEAAmE;QACnE,+DAA+D;QAC/D,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,kBAAkB,KAAK,SAAS;YACrC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,IAAI,CAC7C,CAAC;QAEF,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,mBAAmB,CAAC;QAC7B,CAAC;QACD,OAAO;YACL,GAAG,mBAAmB;YACtB,EAAE,GAAG,2BAA2B,EAAE,KAAK,EAAE,YAAY,EAAE;SACxD,CAAC;IACJ,CAAC,EAAE,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAC,CAAC;AAC9C,CAAC"}
@@ -2,9 +2,8 @@
2
2
 
3
3
  import { useMemo } from "react";
4
4
  import { cn } from "@stigmer/theme";
5
- import { getUserMessage } from "@stigmer/sdk";
5
+ import { buildAgentProto, getUserMessage, serializeManifest } from "@stigmer/sdk";
6
6
  import type { AgentInput } from "@stigmer/sdk";
7
- import { serializeAgentInputYaml } from "../../library/serialize-resource-yaml.js";
8
7
  import type { AgentWizardData } from "./types.js";
9
8
 
10
9
  /** Props for {@link ReviewStep}. */
@@ -30,7 +29,7 @@ export function ReviewStep({
30
29
  }: ReviewStepProps) {
31
30
  const agentInput = useMemo(() => buildAgentInput(org, data), [org, data]);
32
31
  const yamlPreview = useMemo(
33
- () => serializeAgentInputYaml(agentInput),
32
+ () => serializeManifest(buildAgentProto(agentInput)),
34
33
  [agentInput],
35
34
  );
36
35
 
@@ -1,3 +1,8 @@
1
+ // Billing — the customer-facing surface: subscription plans, credit
2
+ // balance and ledger, payment methods, usage reports, and customer model
3
+ // pricing. The platform-operator pricing surface (registry baseline
4
+ // authoring, override sign-offs) lives in ../pricing-governance.
5
+
1
6
  // Data hooks
2
7
  export { useBillingAccount } from "./useBillingAccount.js";
3
8
  export type { UseBillingAccountReturn } from "./useBillingAccount.js";
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
 
3
3
  import { useCallback, useState } from "react";
4
- import { KeyRound, MessageSquare, MoreHorizontal, Trash2 } from "lucide-react";
4
+ import { FileCode2, KeyRound, MessageSquare, MoreHorizontal, Trash2 } from "lucide-react";
5
5
  import { cn } from "@stigmer/theme";
6
6
  import { getUserMessage } from "@stigmer/sdk";
7
7
  import type { Agent } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/api_pb";
@@ -17,6 +17,7 @@ import { useChannelAppList } from "../channel-app/useChannelAppList.js";
17
17
  import { useCheckPermission } from "../iam-policy/useCheckPermission.js";
18
18
  import { ConfirmDialog } from "../resource-detail/ConfirmDialog.js";
19
19
  import { useConfirmAction } from "../resource-detail/useConfirmAction.js";
20
+ import { EditResourceYamlDialog } from "../manifest/EditResourceYamlDialog.js";
20
21
  import { useDeploymentMode } from "../deployment-mode.js";
21
22
  import { CloudFeatureNotice } from "../internal/CloudFeatureNotice.js";
22
23
  import { ChannelConversationsDialog } from "./ChannelConversationsDialog.js";
@@ -147,6 +148,9 @@ export function AgentChannelsPanel({
147
148
  const [viewingConversations, setViewingConversations] =
148
149
  useState<AgentChannel | null>(null);
149
150
 
151
+ // The channel being edited as YAML (the kind-agnostic manifest flow).
152
+ const [editingYaml, setEditingYaml] = useState<AgentChannel | null>(null);
153
+
150
154
  const handleConnect = useCallback(
151
155
  (channel: AgentChannel | null, provider: ChannelProviderDescriptor) => {
152
156
  // Only redirect-style installs need the host hand-off (they open a
@@ -289,6 +293,7 @@ export function AgentChannelsPanel({
289
293
  onDeleteClick={() => void handleDelete(channel)}
290
294
  onEditCredentials={() => setEditingCredentials(channel)}
291
295
  onViewConversations={() => setViewingConversations(channel)}
296
+ onEditYaml={() => setEditingYaml(channel)}
292
297
  refetch={refetch}
293
298
  />
294
299
  );
@@ -344,6 +349,17 @@ export function AgentChannelsPanel({
344
349
  />
345
350
  )}
346
351
 
352
+ {editingYaml && (
353
+ <EditResourceYamlDialog
354
+ open
355
+ onOpenChange={(open) => {
356
+ if (!open) setEditingYaml(null);
357
+ }}
358
+ resource={editingYaml}
359
+ onApplied={refetch}
360
+ />
361
+ )}
362
+
347
363
  <ConfirmDialog
348
364
  state={confirmState}
349
365
  onConfirm={handleConfirm}
@@ -367,6 +383,7 @@ interface ChannelCardProps {
367
383
  readonly onDeleteClick: () => void;
368
384
  readonly onEditCredentials: () => void;
369
385
  readonly onViewConversations: () => void;
386
+ readonly onEditYaml: () => void;
370
387
  readonly refetch: () => void;
371
388
  }
372
389
 
@@ -379,6 +396,7 @@ function ChannelCard({
379
396
  onDeleteClick,
380
397
  onEditCredentials,
381
398
  onViewConversations,
399
+ onEditYaml,
382
400
  refetch,
383
401
  }: ChannelCardProps) {
384
402
  const meta = channel.metadata;
@@ -503,6 +521,14 @@ function ChannelCard({
503
521
  Tool credentials
504
522
  </ActionMenu.Item>
505
523
  )}
524
+ {canEdit && (
525
+ <ActionMenu.Item
526
+ icon={<FileCode2 />}
527
+ onSelect={onEditYaml}
528
+ >
529
+ Edit YAML
530
+ </ActionMenu.Item>
531
+ )}
506
532
  {canDelete && (
507
533
  <ActionMenu.Item
508
534
  icon={<Trash2 />}
@@ -470,7 +470,7 @@ export interface SessionComposerProps {
470
470
  *
471
471
  * @example
472
472
  * ```tsx
473
- * const yaml = serializeAgentYaml(agent);
473
+ * const yaml = serializeManifest(agent);
474
474
  * const file = new File([yaml], "my-agent.yaml", { type: "text/yaml" });
475
475
  *
476
476
  * <SessionComposer
@@ -0,0 +1,229 @@
1
+ "use client";
2
+
3
+ import { useState } from "react";
4
+ import { create } from "@bufbuild/protobuf";
5
+ import { cn } from "@stigmer/theme";
6
+ import { getUserMessage } from "@stigmer/sdk";
7
+ import {
8
+ CursorAccountSchema,
9
+ type CursorAccount,
10
+ } from "@stigmer/protos/ai/stigmer/platform/cursoraccount/v1/cursor_account_pb";
11
+ import { Button } from "../button/index.js";
12
+ import { Field, INPUT_CLASSES } from "../internal/form-primitives.js";
13
+
14
+ /**
15
+ * The redaction marker the server uses for stored secrets. Sending it
16
+ * back on update means "keep the stored admin key".
17
+ */
18
+ const REDACTED = "***REDACTED***";
19
+
20
+ /** Props for {@link CursorAccountEditor}. */
21
+ export interface CursorAccountEditorProps {
22
+ /** The account to edit, or `null` to create a new one. */
23
+ readonly initial: CursorAccount | null;
24
+ /** `true` while the save is in flight. */
25
+ readonly isSubmitting: boolean;
26
+ /** Error from the last failed save, or `null`. */
27
+ readonly submitError: Error | null;
28
+ /** Called with the assembled account on submit. */
29
+ readonly onSubmit: (account: CursorAccount) => void;
30
+ /** Called when the operator cancels. */
31
+ readonly onCancel: () => void;
32
+ /** Additional CSS class names. */
33
+ readonly className?: string;
34
+ }
35
+
36
+ /**
37
+ * Create/edit form for one Cursor account: identity, team Admin API key,
38
+ * enablement, and dedicated-org assignments. The account's class is
39
+ * derived (DD-008): listed org ids make it DEDICATED to them, an empty
40
+ * list makes it a shared-pool account — there is no flag to manage.
41
+ *
42
+ * Admin-key semantics mirror the server contract: on edit the field
43
+ * shows the redaction marker and submitting it unchanged keeps the
44
+ * stored key; typing anything else rotates it (validated live against
45
+ * Cursor before persisting). Member keys are NOT edited here — they have
46
+ * their own panel with per-key add/remove/enable.
47
+ *
48
+ * The optional team invite link (Cursor dashboard → Invite Members →
49
+ * Copy Invite Link) round-trips readable — no marker — and powers the
50
+ * coverage table's "Copy invite" action for off-team key owners.
51
+ */
52
+ export function CursorAccountEditor({
53
+ initial,
54
+ isSubmitting,
55
+ submitError,
56
+ onSubmit,
57
+ onCancel,
58
+ className,
59
+ }: CursorAccountEditorProps) {
60
+ const isCreate = initial === null;
61
+ const [displayName, setDisplayName] = useState(initial?.displayName ?? "");
62
+ const [adminApiKey, setAdminApiKey] = useState(isCreate ? "" : REDACTED);
63
+ const [enabled, setEnabled] = useState(initial?.enabled ?? true);
64
+ // UI state is the positive ("on-demand enabled", Cursor's own wording and
65
+ // team default); the proto field is the negative so absence means
66
+ // "assume Cursor's default" on documents that predate the field.
67
+ const [onDemandEnabled, setOnDemandEnabled] = useState(
68
+ !(initial?.onDemandUsageDisabled ?? false),
69
+ );
70
+ const [orgIdsText, setOrgIdsText] = useState(
71
+ (initial?.orgIds ?? []).join("\n"),
72
+ );
73
+ // Unlike the admin key, the invite link round-trips readable (the
74
+ // server decrypts it on read — operators must be able to copy it), so
75
+ // there is no redaction-marker dance: edit the value directly.
76
+ const [teamInviteLink, setTeamInviteLink] = useState(
77
+ initial?.teamInviteLink ?? "",
78
+ );
79
+
80
+ const canSubmit =
81
+ displayName.trim() !== "" && adminApiKey.trim() !== "" && !isSubmitting;
82
+
83
+ const handleSubmit = (e: React.FormEvent) => {
84
+ e.preventDefault();
85
+ if (!canSubmit) return;
86
+ onSubmit(
87
+ create(CursorAccountSchema, {
88
+ accountId: initial?.accountId ?? "",
89
+ displayName: displayName.trim(),
90
+ adminApiKey: adminApiKey.trim(),
91
+ enabled,
92
+ // is_platform_default is deprecated (DD-008): the shared pool is
93
+ // derived from empty org_ids, so current clients never write it.
94
+ onDemandUsageDisabled: !onDemandEnabled,
95
+ teamInviteLink: teamInviteLink.trim(),
96
+ orgIds: orgIdsText
97
+ .split(/[\s,]+/)
98
+ .map((s) => s.trim())
99
+ .filter((s) => s !== ""),
100
+ }),
101
+ );
102
+ };
103
+
104
+ return (
105
+ <form className={cn("max-w-xl space-y-3", className)} onSubmit={handleSubmit}>
106
+ <h3 className="text-sm font-semibold text-foreground">
107
+ {isCreate ? "Add Cursor account" : `Edit ${initial.displayName}`}
108
+ </h3>
109
+
110
+ <Field label="Display name" required>
111
+ <input
112
+ className={INPUT_CLASSES}
113
+ value={displayName}
114
+ onChange={(e) => setDisplayName(e.target.value)}
115
+ placeholder="e.g. scenar.ai team"
116
+ disabled={isSubmitting}
117
+ />
118
+ </Field>
119
+
120
+ <Field label="Team Admin API key" required>
121
+ <input
122
+ className={INPUT_CLASSES}
123
+ type="password"
124
+ value={adminApiKey}
125
+ onChange={(e) => setAdminApiKey(e.target.value)}
126
+ placeholder="key from Cursor dashboard → API → Team tab"
127
+ disabled={isSubmitting}
128
+ autoComplete="off"
129
+ />
130
+ </Field>
131
+ {!isCreate && (
132
+ <p className="text-[11px] text-muted-foreground">
133
+ Leave the masked value untouched to keep the stored key; typing a
134
+ new key rotates it (validated against Cursor before saving).
135
+ </p>
136
+ )}
137
+
138
+ <Field label="Team invite link">
139
+ <input
140
+ className={INPUT_CLASSES}
141
+ type="url"
142
+ value={teamInviteLink}
143
+ onChange={(e) => setTeamInviteLink(e.target.value)}
144
+ placeholder="https://… (Cursor dashboard → Invite Members → Copy Invite Link)"
145
+ disabled={isSubmitting}
146
+ autoComplete="off"
147
+ spellCheck={false}
148
+ />
149
+ </Field>
150
+ <p className="text-[11px] text-muted-foreground">
151
+ Optional. Powers one-click &quot;Copy invite&quot; on coverage rows
152
+ whose key owner is not on the team. The link is long-lived and
153
+ joinable by anyone holding it (each join consumes a paid seat) —
154
+ share it deliberately, and revoke or rotate it from the Cursor
155
+ dashboard. Leave empty to clear.
156
+ </p>
157
+
158
+ <Field label="Dedicated organization ids">
159
+ <textarea
160
+ className={cn(INPUT_CLASSES, "min-h-16 font-mono")}
161
+ value={orgIdsText}
162
+ onChange={(e) => setOrgIdsText(e.target.value)}
163
+ placeholder={"one org id per line\n(leave empty for a shared-pool account)"}
164
+ disabled={isSubmitting}
165
+ />
166
+ </Field>
167
+ <p className="text-[11px] text-muted-foreground">
168
+ Listing org ids DEDICATES this account to them: their sessions use
169
+ only this account&apos;s keys and fail with a clear message when it
170
+ runs dry. Leaving this empty makes the account part of the shared
171
+ pool that serves every other org — pool sessions may move between
172
+ pool accounts when one is depleted. Each org may appear in at most
173
+ one account.
174
+ </p>
175
+
176
+ <div className="space-y-2">
177
+ <div>
178
+ <label className="flex items-center gap-1.5 text-xs text-foreground">
179
+ <input
180
+ type="checkbox"
181
+ checked={enabled}
182
+ onChange={(e) => setEnabled(e.target.checked)}
183
+ disabled={isSubmitting}
184
+ />
185
+ Enabled for key selection
186
+ </label>
187
+ <p className="mt-0.5 pl-[1.375rem] text-[11px] text-muted-foreground">
188
+ Leave checked for accounts that should serve traffic. Unchecking
189
+ drains the account: new sessions stop routing here immediately,
190
+ but sessions already pinned to one of its keys keep working.
191
+ </p>
192
+ </div>
193
+ <div>
194
+ <label className="flex items-center gap-1.5 text-xs text-foreground">
195
+ <input
196
+ type="checkbox"
197
+ checked={onDemandEnabled}
198
+ onChange={(e) => setOnDemandEnabled(e.target.checked)}
199
+ disabled={isSubmitting}
200
+ />
201
+ On-demand usage enabled (as configured in the Cursor dashboard)
202
+ </label>
203
+ <p className="mt-0.5 pl-[1.375rem] text-[11px] text-muted-foreground">
204
+ Declared here because Cursor&apos;s Admin API cannot report the
205
+ team&apos;s on-demand setting. Uncheck only when the dashboard has
206
+ on-demand usage OFF: new sessions then avoid member keys whose
207
+ included third-party (API) pool is nearly spent, since such keys
208
+ can no longer serve third-party models at all.
209
+ </p>
210
+ </div>
211
+ </div>
212
+
213
+ {submitError && (
214
+ <p className="text-destructive text-xs" role="alert">
215
+ {getUserMessage(submitError)}
216
+ </p>
217
+ )}
218
+
219
+ <div className="flex gap-2">
220
+ <Button type="submit" size="sm" disabled={!canSubmit}>
221
+ {isSubmitting ? "Saving…" : isCreate ? "Create account" : "Save changes"}
222
+ </Button>
223
+ <Button type="button" size="sm" variant="outline" onClick={onCancel} disabled={isSubmitting}>
224
+ Cancel
225
+ </Button>
226
+ </div>
227
+ </form>
228
+ );
229
+ }
@@ -0,0 +1,36 @@
1
+ "use client";
2
+
3
+ import { cn } from "@stigmer/theme";
4
+
5
+ /**
6
+ * The access-denied state for the Cursor-accounts operator surface.
7
+ * Server-side authorization (`can_manage_cursor_accounts` on
8
+ * `platform:stigmer`) is the real gate — this is the honest, designed
9
+ * face of that denial for anyone who navigates to the operator route
10
+ * without the permission, instead of a raw RPC error string.
11
+ */
12
+ export function CursorAccountsAccessNotice({
13
+ className,
14
+ }: {
15
+ readonly className?: string;
16
+ }) {
17
+ return (
18
+ <div
19
+ className={cn(
20
+ "rounded-lg border border-border bg-card px-4 py-6 text-center",
21
+ className,
22
+ )}
23
+ role="status"
24
+ >
25
+ <p className="text-xs font-semibold text-foreground">
26
+ Platform operator access required
27
+ </p>
28
+ <p className="mx-auto mt-1 max-w-md text-xs text-muted-foreground">
29
+ Cursor account management is a Stigmer-internal surface holding
30
+ provider credentials and team spend. It needs the platform operator
31
+ role — organization roles do not grant it. If you believe you should
32
+ have access, contact a platform operator.
33
+ </p>
34
+ </div>
35
+ );
36
+ }