@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
@@ -0,0 +1,439 @@
1
+ "use client";
2
+
3
+ import { useCallback, useState } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import {
6
+ CursorMemberKeyState,
7
+ type CursorMemberKeyView,
8
+ type CursorTeamMemberView,
9
+ } from "@stigmer/protos/ai/stigmer/platform/cursoraccount/v1/io_pb";
10
+ import type { CursorMemberSpend } from "@stigmer/protos/ai/stigmer/platform/cursoraccount/v1/cursor_account_pb";
11
+ import { Button } from "../button/index.js";
12
+ import { StateBadge } from "./badges.js";
13
+ import { formatPoolPercent, formatSpendMicros } from "./cursor-account-format.js";
14
+ import type { CursorAccountCoverage } from "./cursor-account-coverage.js";
15
+ import type { useCursorMemberKeyActions } from "./useCursorMemberKeyActions.js";
16
+
17
+ /**
18
+ * One grid template shared by the header and every row so the columns
19
+ * can never drift apart: Member · Key · First-party % · API % ·
20
+ * Included $ · On-demand $ · Status · Actions.
21
+ *
22
+ * The four numeric columns mirror Cursor's own Members page (First-Party
23
+ * Models %, API %, On-Demand $) plus the included-quota dollars, so an
24
+ * operator can read this table and the Cursor dashboard side by side.
25
+ *
26
+ * Member gets the largest flexible share: the email is the row's
27
+ * identity, so it wraps rather than truncates when space runs out (see
28
+ * MemberCell) while the key name stays truncate-with-tooltip.
29
+ */
30
+ const ROW_GRID =
31
+ "grid grid-cols-[minmax(0,2.2fr)_minmax(0,1fr)_4.5rem_4.5rem_4.5rem_4.5rem_minmax(6rem,auto)_minmax(10rem,auto)] items-center gap-2 px-3 py-2";
32
+
33
+ /**
34
+ * The roster-coverage table: every member and every stored execution key
35
+ * of one Cursor account, classified into three explicit categories
36
+ * (server-computed — this component only renders):
37
+ *
38
+ * 1. **On the team, key held** — the account's routable capacity.
39
+ * 2. **On the team, no key** — the coverage gap; their spend columns
40
+ * help the operator prioritize whose key to import.
41
+ * 3. **Key held, not on the team** — imported keys whose owner left the
42
+ * team or never joined it. Resolved by a Cursor-dashboard invite:
43
+ * when the account carries a team invite link, each row offers
44
+ * one-click copy (never navigation — opening an invite link would
45
+ * join the OPERATOR's own Cursor account to the team).
46
+ *
47
+ * Before the first sync there is no roster to classify against, so keys
48
+ * render unclassified with a "sync now" notice instead of being falsely
49
+ * reported as off-team.
50
+ */
51
+ export function MemberCoverageTable({
52
+ accountId,
53
+ coverage,
54
+ inviteLink,
55
+ actions,
56
+ onChanged,
57
+ }: {
58
+ readonly accountId: string;
59
+ readonly coverage: CursorAccountCoverage;
60
+ /** The account-level Cursor team invite link; empty when not configured. */
61
+ readonly inviteLink: string;
62
+ readonly actions: ReturnType<typeof useCursorMemberKeyActions>;
63
+ readonly onChanged: () => void;
64
+ }) {
65
+ return (
66
+ <div
67
+ role="table"
68
+ aria-label="Team coverage"
69
+ className="rounded-lg border border-border bg-card"
70
+ >
71
+ <div
72
+ role="row"
73
+ className={cn(
74
+ ROW_GRID,
75
+ "border-b border-border text-[11px] font-medium text-muted-foreground",
76
+ )}
77
+ >
78
+ <span role="columnheader">Member</span>
79
+ <span role="columnheader">Key</span>
80
+ <span role="columnheader" className="text-right">
81
+ First-party
82
+ </span>
83
+ <span role="columnheader" className="text-right">
84
+ API
85
+ </span>
86
+ <span role="columnheader" className="text-right">
87
+ Included
88
+ </span>
89
+ <span role="columnheader" className="text-right">
90
+ On-demand
91
+ </span>
92
+ <span role="columnheader">Status</span>
93
+ <span role="columnheader" className="text-right">
94
+ Actions
95
+ </span>
96
+ </div>
97
+
98
+ {!coverage.hasRoster && (
99
+ <CoverageGroup
100
+ title="Execution keys — not yet classified"
101
+ description='No roster sync has run for this account. Run "Sync now" to load the team roster and classify these keys.'
102
+ count={coverage.unclassified.length}
103
+ >
104
+ {coverage.unclassified.map((keyView) => (
105
+ <KeyRow
106
+ key={keyView.key?.keyId}
107
+ accountId={accountId}
108
+ keyView={keyView}
109
+ hasRoster={false}
110
+ inviteLink=""
111
+ actions={actions}
112
+ onChanged={onChanged}
113
+ />
114
+ ))}
115
+ </CoverageGroup>
116
+ )}
117
+
118
+ {coverage.onTeamWithKey.length > 0 && (
119
+ <CoverageGroup
120
+ title="On the team — key held"
121
+ count={coverage.onTeamWithKey.length}
122
+ >
123
+ {coverage.onTeamWithKey.map((keyView) => (
124
+ <KeyRow
125
+ key={keyView.key?.keyId}
126
+ accountId={accountId}
127
+ keyView={keyView}
128
+ hasRoster
129
+ inviteLink=""
130
+ actions={actions}
131
+ onChanged={onChanged}
132
+ />
133
+ ))}
134
+ </CoverageGroup>
135
+ )}
136
+
137
+ {/* Rendered whenever a roster exists — an empty gap is an answer
138
+ ("fully covered"), not an absence. Hiding the group made a
139
+ healthy roster indistinguishable from a broken sync. */}
140
+ {coverage.hasRoster && (
141
+ <CoverageGroup
142
+ title="On the team — no execution key"
143
+ description={
144
+ coverage.onTeamWithoutKey.length > 0
145
+ ? "Sessions can never run under these members' identity or included quota. Add their user-scoped keys below to close the gap."
146
+ : "Every active roster member holds an execution key — the roster is fully covered."
147
+ }
148
+ count={coverage.onTeamWithoutKey.length}
149
+ >
150
+ {coverage.onTeamWithoutKey.map((memberView) => (
151
+ <GapRow key={memberView.member?.email} memberView={memberView} />
152
+ ))}
153
+ </CoverageGroup>
154
+ )}
155
+
156
+ {coverage.offTeamWithKey.length > 0 && (
157
+ <CoverageGroup
158
+ title="Key held — not on the team"
159
+ description={
160
+ inviteLink !== ""
161
+ ? "These key owners must join the Cursor team before their usage counts against its quota. Copy the invite link, send it to them out-of-band, then \u201CSync now\u201D reclassifies once they join."
162
+ : "These key owners must join the Cursor team before their usage counts against its quota. Invites are sent from the Cursor dashboard (cursor.com \u2192 Invite Members); paste the team's invite link into the account editor to enable one-click copying here."
163
+ }
164
+ count={coverage.offTeamWithKey.length}
165
+ >
166
+ {coverage.offTeamWithKey.map((keyView) => (
167
+ <KeyRow
168
+ key={keyView.key?.keyId}
169
+ accountId={accountId}
170
+ keyView={keyView}
171
+ hasRoster
172
+ inviteLink={inviteLink}
173
+ actions={actions}
174
+ onChanged={onChanged}
175
+ />
176
+ ))}
177
+ </CoverageGroup>
178
+ )}
179
+ </div>
180
+ );
181
+ }
182
+
183
+ // ---------------------------------------------------------------------------
184
+ // Group section (internal)
185
+ // ---------------------------------------------------------------------------
186
+
187
+ function CoverageGroup({
188
+ title,
189
+ description,
190
+ count,
191
+ children,
192
+ }: {
193
+ readonly title: string;
194
+ readonly description?: string;
195
+ readonly count: number;
196
+ readonly children: React.ReactNode;
197
+ }) {
198
+ return (
199
+ <div role="rowgroup" className="border-b border-border last:border-b-0">
200
+ <div role="row" className="bg-muted-subtle px-3 py-1.5">
201
+ <div role="cell" aria-colspan={8}>
202
+ <span className="text-[11px] font-semibold text-foreground">
203
+ {title}
204
+ <span className="ml-1.5 font-normal text-muted-foreground">
205
+ {count}
206
+ </span>
207
+ </span>
208
+ {description && (
209
+ <span className="block text-[11px] text-muted-foreground">
210
+ {description}
211
+ </span>
212
+ )}
213
+ </div>
214
+ </div>
215
+ {children}
216
+ </div>
217
+ );
218
+ }
219
+
220
+ // ---------------------------------------------------------------------------
221
+ // Rows (internal)
222
+ // ---------------------------------------------------------------------------
223
+
224
+ /**
225
+ * The member-identity cell shared by key rows and gap rows. The email is
226
+ * the row's identity, so it must be fully readable: it wraps onto more
227
+ * lines when the column is narrow (emails are unbroken strings, so they
228
+ * need explicit word-breaking) with a hover tooltip as backup, unlike
229
+ * the other text cells which truncate. The secondary name line stays
230
+ * truncated — it is display sugar, not identity.
231
+ */
232
+ function MemberCell({
233
+ email,
234
+ name,
235
+ }: {
236
+ readonly email: string;
237
+ readonly name?: string;
238
+ }) {
239
+ return (
240
+ <span role="cell" className="min-w-0">
241
+ <span className="block break-words font-medium text-foreground" title={email}>
242
+ {email}
243
+ </span>
244
+ {name && (
245
+ <span className="block truncate text-[11px] text-muted-foreground">
246
+ {name}
247
+ </span>
248
+ )}
249
+ </span>
250
+ );
251
+ }
252
+
253
+ /** A key-backed row: categories 1 and 3, plus the pre-sync unclassified state. */
254
+ function KeyRow({
255
+ accountId,
256
+ keyView,
257
+ hasRoster,
258
+ inviteLink,
259
+ actions,
260
+ onChanged,
261
+ }: {
262
+ readonly accountId: string;
263
+ readonly keyView: CursorMemberKeyView;
264
+ readonly hasRoster: boolean;
265
+ readonly inviteLink: string;
266
+ readonly actions: ReturnType<typeof useCursorMemberKeyActions>;
267
+ readonly onChanged: () => void;
268
+ }) {
269
+ const key = keyView.key;
270
+ if (!key) return null;
271
+
272
+ return (
273
+ <div role="row" className={cn(ROW_GRID, "border-t border-border-muted text-xs")}>
274
+ <MemberCell email={key.boundEmail} />
275
+ <span role="cell" className="min-w-0">
276
+ <span
277
+ className="block truncate text-muted-foreground"
278
+ title={key.cursorKeyName || undefined}
279
+ >
280
+ {key.cursorKeyName || "unnamed key"}
281
+ </span>
282
+ {key.label && (
283
+ <span className="block truncate text-[11px] text-muted-foreground" title={key.label}>
284
+ {key.label}
285
+ </span>
286
+ )}
287
+ </span>
288
+ <SpendCells spend={keyView.spend} />
289
+ <span role="cell" className="flex flex-wrap items-center gap-1">
290
+ {keyView.usageGuardTripped && <StateBadge tone="warn" label="Usage guard" />}
291
+ <KeyStatusBadge keyView={keyView} hasRoster={hasRoster} />
292
+ </span>
293
+ <span role="cell" className="flex items-center justify-end gap-2">
294
+ {inviteLink !== "" && <CopyInviteButton inviteLink={inviteLink} />}
295
+ <Button
296
+ size="sm"
297
+ variant="outline"
298
+ disabled={actions.isSubmitting}
299
+ onClick={() => {
300
+ void actions
301
+ .setKeyEnabled(accountId, key.keyId, !key.enabled)
302
+ .then(onChanged, () => {
303
+ // Surfaced via actions.error.
304
+ });
305
+ }}
306
+ >
307
+ {key.enabled ? "Disable" : "Enable"}
308
+ </Button>
309
+ <Button
310
+ size="sm"
311
+ variant="destructive"
312
+ disabled={actions.isSubmitting}
313
+ onClick={() => {
314
+ void actions
315
+ .removeKey({ accountId, keyId: key.keyId })
316
+ .then(onChanged, () => {
317
+ // Surfaced via actions.error (incl. the live-pin guard's
318
+ // "disable instead, or force" message).
319
+ });
320
+ }}
321
+ >
322
+ Remove
323
+ </Button>
324
+ </span>
325
+ </div>
326
+ );
327
+ }
328
+
329
+ /** A coverage-gap row: on the team, no execution key (category 2). */
330
+ function GapRow({ memberView }: { readonly memberView: CursorTeamMemberView }) {
331
+ const member = memberView.member;
332
+ if (!member) return null;
333
+
334
+ return (
335
+ <div role="row" className={cn(ROW_GRID, "border-t border-border-muted text-xs")}>
336
+ <MemberCell email={member.email} name={member.name} />
337
+ <span role="cell" className="text-muted-foreground">
338
+
339
+ </span>
340
+ <SpendCells spend={memberView.spend} />
341
+ <span role="cell">
342
+ <StateBadge tone="muted" label="No key" />
343
+ </span>
344
+ <span role="cell" className="text-right text-muted-foreground">
345
+
346
+ </span>
347
+ </div>
348
+ );
349
+ }
350
+
351
+ /**
352
+ * The four numeric cells — first-party pool %, API pool %, included $,
353
+ * on-demand $ — shared by key rows and gap rows. Each maps 1:1 onto a
354
+ * stored `CursorMemberSpend` field; the blended `totalPercentUsed` is
355
+ * deliberately not rendered (it maps to nothing on Cursor's dashboard
356
+ * and reports a flat 100 for removed members). Only a member with no
357
+ * spend row at all renders em-dashes — Cursor omits the row itself for
358
+ * some team shapes.
359
+ */
360
+ function SpendCells({ spend }: { readonly spend: CursorMemberSpend | undefined }) {
361
+ return (
362
+ <>
363
+ <span role="cell" className="text-right tabular-nums text-muted-foreground">
364
+ {spend ? formatPoolPercent(spend.autoPercentUsed) : "—"}
365
+ </span>
366
+ <span role="cell" className="text-right tabular-nums text-muted-foreground">
367
+ {spend ? formatPoolPercent(spend.apiPercentUsed) : "—"}
368
+ </span>
369
+ <span role="cell" className="text-right tabular-nums text-muted-foreground">
370
+ {spend ? formatSpendMicros(spend.includedSpendUsdMicros) : "—"}
371
+ </span>
372
+ <span role="cell" className="text-right tabular-nums text-muted-foreground">
373
+ {spend ? formatSpendMicros(spend.overageSpendUsdMicros) : "—"}
374
+ </span>
375
+ </>
376
+ );
377
+ }
378
+
379
+ // ---------------------------------------------------------------------------
380
+ // Status badge (internal)
381
+ // ---------------------------------------------------------------------------
382
+
383
+ /**
384
+ * Membership + enablement status of one key row. With a roster present,
385
+ * "owner unknown" means the owner never appeared in it — "Not on team";
386
+ * without one it is merely missing data — "Awaiting sync".
387
+ */
388
+ function KeyStatusBadge({
389
+ keyView,
390
+ hasRoster,
391
+ }: {
392
+ readonly keyView: CursorMemberKeyView;
393
+ readonly hasRoster: boolean;
394
+ }) {
395
+ if (!hasRoster) {
396
+ return <StateBadge tone="muted" label="Awaiting sync" />;
397
+ }
398
+ if (keyView.state === CursorMemberKeyState.member_key_owner_removed) {
399
+ return <StateBadge tone="warn" label="Left team" />;
400
+ }
401
+ if (keyView.state === CursorMemberKeyState.member_key_owner_unknown) {
402
+ return <StateBadge tone="muted" label="Not on team" />;
403
+ }
404
+ return keyView.key?.enabled ? (
405
+ <StateBadge tone="ok" label="Active" />
406
+ ) : (
407
+ <StateBadge tone="muted" label="Disabled" />
408
+ );
409
+ }
410
+
411
+ // ---------------------------------------------------------------------------
412
+ // Copy-invite action (internal)
413
+ // ---------------------------------------------------------------------------
414
+
415
+ /**
416
+ * Copies the account-level team invite link. Deliberately a copy, never
417
+ * a navigation: a Cursor invite link is a join link, and opening it
418
+ * would join the operator's own Cursor account to the team.
419
+ */
420
+ function CopyInviteButton({ inviteLink }: { readonly inviteLink: string }) {
421
+ const [copied, setCopied] = useState(false);
422
+
423
+ const handleCopy = useCallback(async () => {
424
+ try {
425
+ await navigator.clipboard.writeText(inviteLink);
426
+ setCopied(true);
427
+ setTimeout(() => setCopied(false), 2000);
428
+ } catch {
429
+ // Clipboard unavailable (permissions, non-secure context) — the
430
+ // section description still points at the Cursor dashboard.
431
+ }
432
+ }, [inviteLink]);
433
+
434
+ return (
435
+ <Button size="sm" variant="outline" onClick={() => void handleCopy()}>
436
+ {copied ? "Copied" : "Copy invite"}
437
+ </Button>
438
+ );
439
+ }