@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 @@
1
+ {"version":3,"file":"CursorAccountsConsole.js","sourceRoot":"","sources":["../../src/cursor-accounts/CursorAccountsConsole.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { CursorAccountCoverage } from "./cursor-account-coverage.js";
2
+ import type { useCursorMemberKeyActions } from "./useCursorMemberKeyActions.js";
3
+ /**
4
+ * The roster-coverage table: every member and every stored execution key
5
+ * of one Cursor account, classified into three explicit categories
6
+ * (server-computed — this component only renders):
7
+ *
8
+ * 1. **On the team, key held** — the account's routable capacity.
9
+ * 2. **On the team, no key** — the coverage gap; their spend columns
10
+ * help the operator prioritize whose key to import.
11
+ * 3. **Key held, not on the team** — imported keys whose owner left the
12
+ * team or never joined it. Resolved by a Cursor-dashboard invite:
13
+ * when the account carries a team invite link, each row offers
14
+ * one-click copy (never navigation — opening an invite link would
15
+ * join the OPERATOR's own Cursor account to the team).
16
+ *
17
+ * Before the first sync there is no roster to classify against, so keys
18
+ * render unclassified with a "sync now" notice instead of being falsely
19
+ * reported as off-team.
20
+ */
21
+ export declare function MemberCoverageTable({ accountId, coverage, inviteLink, actions, onChanged, }: {
22
+ readonly accountId: string;
23
+ readonly coverage: CursorAccountCoverage;
24
+ /** The account-level Cursor team invite link; empty when not configured. */
25
+ readonly inviteLink: string;
26
+ readonly actions: ReturnType<typeof useCursorMemberKeyActions>;
27
+ readonly onChanged: () => void;
28
+ }): import("react/jsx-runtime").JSX.Element;
29
+ //# sourceMappingURL=MemberCoverageTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemberCoverageTable.d.ts","sourceRoot":"","sources":["../../src/cursor-accounts/MemberCoverageTable.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAkBhF;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,SAAS,EACT,QAAQ,EACR,UAAU,EACV,OAAO,EACP,SAAS,GACV,EAAE;IACD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IACzC,4EAA4E;IAC5E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC;IAC/D,QAAQ,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;CAChC,2CAqHA"}
@@ -0,0 +1,150 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useCallback, useState } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import { CursorMemberKeyState, } from "@stigmer/protos/ai/stigmer/platform/cursoraccount/v1/io_pb";
6
+ import { Button } from "../button/index.js";
7
+ import { StateBadge } from "./badges.js";
8
+ import { formatPoolPercent, formatSpendMicros } from "./cursor-account-format.js";
9
+ /**
10
+ * One grid template shared by the header and every row so the columns
11
+ * can never drift apart: Member · Key · First-party % · API % ·
12
+ * Included $ · On-demand $ · Status · Actions.
13
+ *
14
+ * The four numeric columns mirror Cursor's own Members page (First-Party
15
+ * Models %, API %, On-Demand $) plus the included-quota dollars, so an
16
+ * operator can read this table and the Cursor dashboard side by side.
17
+ *
18
+ * Member gets the largest flexible share: the email is the row's
19
+ * identity, so it wraps rather than truncates when space runs out (see
20
+ * MemberCell) while the key name stays truncate-with-tooltip.
21
+ */
22
+ const ROW_GRID = "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";
23
+ /**
24
+ * The roster-coverage table: every member and every stored execution key
25
+ * of one Cursor account, classified into three explicit categories
26
+ * (server-computed — this component only renders):
27
+ *
28
+ * 1. **On the team, key held** — the account's routable capacity.
29
+ * 2. **On the team, no key** — the coverage gap; their spend columns
30
+ * help the operator prioritize whose key to import.
31
+ * 3. **Key held, not on the team** — imported keys whose owner left the
32
+ * team or never joined it. Resolved by a Cursor-dashboard invite:
33
+ * when the account carries a team invite link, each row offers
34
+ * one-click copy (never navigation — opening an invite link would
35
+ * join the OPERATOR's own Cursor account to the team).
36
+ *
37
+ * Before the first sync there is no roster to classify against, so keys
38
+ * render unclassified with a "sync now" notice instead of being falsely
39
+ * reported as off-team.
40
+ */
41
+ export function MemberCoverageTable({ accountId, coverage, inviteLink, actions, onChanged, }) {
42
+ return (_jsxs("div", { role: "table", "aria-label": "Team coverage", className: "rounded-lg border border-border bg-card", children: [_jsxs("div", { role: "row", className: cn(ROW_GRID, "border-b border-border text-[11px] font-medium text-muted-foreground"), children: [_jsx("span", { role: "columnheader", children: "Member" }), _jsx("span", { role: "columnheader", children: "Key" }), _jsx("span", { role: "columnheader", className: "text-right", children: "First-party" }), _jsx("span", { role: "columnheader", className: "text-right", children: "API" }), _jsx("span", { role: "columnheader", className: "text-right", children: "Included" }), _jsx("span", { role: "columnheader", className: "text-right", children: "On-demand" }), _jsx("span", { role: "columnheader", children: "Status" }), _jsx("span", { role: "columnheader", className: "text-right", children: "Actions" })] }), !coverage.hasRoster && (_jsx(CoverageGroup, { title: "Execution keys \u2014 not yet classified", description: 'No roster sync has run for this account. Run "Sync now" to load the team roster and classify these keys.', count: coverage.unclassified.length, children: coverage.unclassified.map((keyView) => (_jsx(KeyRow, { accountId: accountId, keyView: keyView, hasRoster: false, inviteLink: "", actions: actions, onChanged: onChanged }, keyView.key?.keyId))) })), coverage.onTeamWithKey.length > 0 && (_jsx(CoverageGroup, { title: "On the team \u2014 key held", count: coverage.onTeamWithKey.length, children: coverage.onTeamWithKey.map((keyView) => (_jsx(KeyRow, { accountId: accountId, keyView: keyView, hasRoster: true, inviteLink: "", actions: actions, onChanged: onChanged }, keyView.key?.keyId))) })), coverage.hasRoster && (_jsx(CoverageGroup, { title: "On the team \u2014 no execution key", description: coverage.onTeamWithoutKey.length > 0
43
+ ? "Sessions can never run under these members' identity or included quota. Add their user-scoped keys below to close the gap."
44
+ : "Every active roster member holds an execution key — the roster is fully covered.", count: coverage.onTeamWithoutKey.length, children: coverage.onTeamWithoutKey.map((memberView) => (_jsx(GapRow, { memberView: memberView }, memberView.member?.email))) })), coverage.offTeamWithKey.length > 0 && (_jsx(CoverageGroup, { title: "Key held \u2014 not on the team", description: inviteLink !== ""
45
+ ? "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."
46
+ : "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.", count: coverage.offTeamWithKey.length, children: coverage.offTeamWithKey.map((keyView) => (_jsx(KeyRow, { accountId: accountId, keyView: keyView, hasRoster: true, inviteLink: inviteLink, actions: actions, onChanged: onChanged }, keyView.key?.keyId))) }))] }));
47
+ }
48
+ // ---------------------------------------------------------------------------
49
+ // Group section (internal)
50
+ // ---------------------------------------------------------------------------
51
+ function CoverageGroup({ title, description, count, children, }) {
52
+ return (_jsxs("div", { role: "rowgroup", className: "border-b border-border last:border-b-0", children: [_jsx("div", { role: "row", className: "bg-muted-subtle px-3 py-1.5", children: _jsxs("div", { role: "cell", "aria-colspan": 8, children: [_jsxs("span", { className: "text-[11px] font-semibold text-foreground", children: [title, _jsx("span", { className: "ml-1.5 font-normal text-muted-foreground", children: count })] }), description && (_jsx("span", { className: "block text-[11px] text-muted-foreground", children: description }))] }) }), children] }));
53
+ }
54
+ // ---------------------------------------------------------------------------
55
+ // Rows (internal)
56
+ // ---------------------------------------------------------------------------
57
+ /**
58
+ * The member-identity cell shared by key rows and gap rows. The email is
59
+ * the row's identity, so it must be fully readable: it wraps onto more
60
+ * lines when the column is narrow (emails are unbroken strings, so they
61
+ * need explicit word-breaking) with a hover tooltip as backup, unlike
62
+ * the other text cells which truncate. The secondary name line stays
63
+ * truncated — it is display sugar, not identity.
64
+ */
65
+ function MemberCell({ email, name, }) {
66
+ return (_jsxs("span", { role: "cell", className: "min-w-0", children: [_jsx("span", { className: "block break-words font-medium text-foreground", title: email, children: email }), name && (_jsx("span", { className: "block truncate text-[11px] text-muted-foreground", children: name }))] }));
67
+ }
68
+ /** A key-backed row: categories 1 and 3, plus the pre-sync unclassified state. */
69
+ function KeyRow({ accountId, keyView, hasRoster, inviteLink, actions, onChanged, }) {
70
+ const key = keyView.key;
71
+ if (!key)
72
+ return null;
73
+ return (_jsxs("div", { role: "row", className: cn(ROW_GRID, "border-t border-border-muted text-xs"), children: [_jsx(MemberCell, { email: key.boundEmail }), _jsxs("span", { role: "cell", className: "min-w-0", children: [_jsx("span", { className: "block truncate text-muted-foreground", title: key.cursorKeyName || undefined, children: key.cursorKeyName || "unnamed key" }), key.label && (_jsx("span", { className: "block truncate text-[11px] text-muted-foreground", title: key.label, children: key.label }))] }), _jsx(SpendCells, { spend: keyView.spend }), _jsxs("span", { role: "cell", className: "flex flex-wrap items-center gap-1", children: [keyView.usageGuardTripped && _jsx(StateBadge, { tone: "warn", label: "Usage guard" }), _jsx(KeyStatusBadge, { keyView: keyView, hasRoster: hasRoster })] }), _jsxs("span", { role: "cell", className: "flex items-center justify-end gap-2", children: [inviteLink !== "" && _jsx(CopyInviteButton, { inviteLink: inviteLink }), _jsx(Button, { size: "sm", variant: "outline", disabled: actions.isSubmitting, onClick: () => {
74
+ void actions
75
+ .setKeyEnabled(accountId, key.keyId, !key.enabled)
76
+ .then(onChanged, () => {
77
+ // Surfaced via actions.error.
78
+ });
79
+ }, children: key.enabled ? "Disable" : "Enable" }), _jsx(Button, { size: "sm", variant: "destructive", disabled: actions.isSubmitting, onClick: () => {
80
+ void actions
81
+ .removeKey({ accountId, keyId: key.keyId })
82
+ .then(onChanged, () => {
83
+ // Surfaced via actions.error (incl. the live-pin guard's
84
+ // "disable instead, or force" message).
85
+ });
86
+ }, children: "Remove" })] })] }));
87
+ }
88
+ /** A coverage-gap row: on the team, no execution key (category 2). */
89
+ function GapRow({ memberView }) {
90
+ const member = memberView.member;
91
+ if (!member)
92
+ return null;
93
+ return (_jsxs("div", { role: "row", className: cn(ROW_GRID, "border-t border-border-muted text-xs"), children: [_jsx(MemberCell, { email: member.email, name: member.name }), _jsx("span", { role: "cell", className: "text-muted-foreground", children: "\u2014" }), _jsx(SpendCells, { spend: memberView.spend }), _jsx("span", { role: "cell", children: _jsx(StateBadge, { tone: "muted", label: "No key" }) }), _jsx("span", { role: "cell", className: "text-right text-muted-foreground", children: "\u2014" })] }));
94
+ }
95
+ /**
96
+ * The four numeric cells — first-party pool %, API pool %, included $,
97
+ * on-demand $ — shared by key rows and gap rows. Each maps 1:1 onto a
98
+ * stored `CursorMemberSpend` field; the blended `totalPercentUsed` is
99
+ * deliberately not rendered (it maps to nothing on Cursor's dashboard
100
+ * and reports a flat 100 for removed members). Only a member with no
101
+ * spend row at all renders em-dashes — Cursor omits the row itself for
102
+ * some team shapes.
103
+ */
104
+ function SpendCells({ spend }) {
105
+ return (_jsxs(_Fragment, { children: [_jsx("span", { role: "cell", className: "text-right tabular-nums text-muted-foreground", children: spend ? formatPoolPercent(spend.autoPercentUsed) : "—" }), _jsx("span", { role: "cell", className: "text-right tabular-nums text-muted-foreground", children: spend ? formatPoolPercent(spend.apiPercentUsed) : "—" }), _jsx("span", { role: "cell", className: "text-right tabular-nums text-muted-foreground", children: spend ? formatSpendMicros(spend.includedSpendUsdMicros) : "—" }), _jsx("span", { role: "cell", className: "text-right tabular-nums text-muted-foreground", children: spend ? formatSpendMicros(spend.overageSpendUsdMicros) : "—" })] }));
106
+ }
107
+ // ---------------------------------------------------------------------------
108
+ // Status badge (internal)
109
+ // ---------------------------------------------------------------------------
110
+ /**
111
+ * Membership + enablement status of one key row. With a roster present,
112
+ * "owner unknown" means the owner never appeared in it — "Not on team";
113
+ * without one it is merely missing data — "Awaiting sync".
114
+ */
115
+ function KeyStatusBadge({ keyView, hasRoster, }) {
116
+ if (!hasRoster) {
117
+ return _jsx(StateBadge, { tone: "muted", label: "Awaiting sync" });
118
+ }
119
+ if (keyView.state === CursorMemberKeyState.member_key_owner_removed) {
120
+ return _jsx(StateBadge, { tone: "warn", label: "Left team" });
121
+ }
122
+ if (keyView.state === CursorMemberKeyState.member_key_owner_unknown) {
123
+ return _jsx(StateBadge, { tone: "muted", label: "Not on team" });
124
+ }
125
+ return keyView.key?.enabled ? (_jsx(StateBadge, { tone: "ok", label: "Active" })) : (_jsx(StateBadge, { tone: "muted", label: "Disabled" }));
126
+ }
127
+ // ---------------------------------------------------------------------------
128
+ // Copy-invite action (internal)
129
+ // ---------------------------------------------------------------------------
130
+ /**
131
+ * Copies the account-level team invite link. Deliberately a copy, never
132
+ * a navigation: a Cursor invite link is a join link, and opening it
133
+ * would join the operator's own Cursor account to the team.
134
+ */
135
+ function CopyInviteButton({ inviteLink }) {
136
+ const [copied, setCopied] = useState(false);
137
+ const handleCopy = useCallback(async () => {
138
+ try {
139
+ await navigator.clipboard.writeText(inviteLink);
140
+ setCopied(true);
141
+ setTimeout(() => setCopied(false), 2000);
142
+ }
143
+ catch {
144
+ // Clipboard unavailable (permissions, non-secure context) — the
145
+ // section description still points at the Cursor dashboard.
146
+ }
147
+ }, [inviteLink]);
148
+ return (_jsx(Button, { size: "sm", variant: "outline", onClick: () => void handleCopy(), children: copied ? "Copied" : "Copy invite" }));
149
+ }
150
+ //# sourceMappingURL=MemberCoverageTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemberCoverageTable.js","sourceRoot":"","sources":["../../src/cursor-accounts/MemberCoverageTable.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { CursorAccountView } from "@stigmer/protos/ai/stigmer/platform/cursoraccount/v1/io_pb";
2
+ import type { CursorAccountCoverage } from "./cursor-account-coverage.js";
3
+ import type { useCursorMemberKeyActions } from "./useCursorMemberKeyActions.js";
4
+ /**
5
+ * The team-coverage panel of one Cursor account: the roster-coverage
6
+ * table (every member and key in three explicit categories) plus the
7
+ * add-key and bulk-import forms.
8
+ *
9
+ * Bulk import is sequential on purpose: each key is validated live
10
+ * against Cursor's /v1/me, and per-key errors (wrong key class, revoked,
11
+ * duplicate) must be attributable to their line. Keys whose owner turns
12
+ * out not to be on the team are still added — the post-import sync lands
13
+ * them in the table's "not on the team" category with invite guidance.
14
+ */
15
+ export declare function MemberKeysPanel({ accountId, view, coverage, actions, onChanged, onImported, }: {
16
+ readonly accountId: string;
17
+ readonly view: CursorAccountView;
18
+ /** Derived once by the parent (also feeds its header member count). */
19
+ readonly coverage: CursorAccountCoverage;
20
+ readonly actions: ReturnType<typeof useCursorMemberKeyActions>;
21
+ readonly onChanged: () => void;
22
+ /** Called after a bulk import added at least one key (triggers sync). */
23
+ readonly onImported: () => void;
24
+ }): import("react/jsx-runtime").JSX.Element;
25
+ //# sourceMappingURL=MemberKeysPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemberKeysPanel.d.ts","sourceRoot":"","sources":["../../src/cursor-accounts/MemberKeysPanel.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4DAA4D,CAAC;AAIpG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAE1E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAoBhF;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,EAC9B,SAAS,EACT,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,SAAS,EACT,UAAU,GACX,EAAE;IACD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC;IAC/D,QAAQ,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;IAC/B,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;CACjC,2CA2NA"}
@@ -0,0 +1,115 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import { getUserMessage } from "@stigmer/sdk";
6
+ import { Button } from "../button/index.js";
7
+ import { INPUT_CLASSES } from "../internal/form-primitives.js";
8
+ import { toError } from "../internal/toError.js";
9
+ import { MemberCoverageTable } from "./MemberCoverageTable.js";
10
+ /** Parse bulk-import text: one key per line, trimmed, deduped. */
11
+ function parseImportKeys(text) {
12
+ return [...new Set(text.split(/\r?\n/).map((s) => s.trim()).filter((s) => s !== ""))];
13
+ }
14
+ function maskKey(key, index) {
15
+ return key.length >= 8 ? `key ${index + 1} (…${key.slice(-4)})` : `key ${index + 1}`;
16
+ }
17
+ /**
18
+ * The team-coverage panel of one Cursor account: the roster-coverage
19
+ * table (every member and key in three explicit categories) plus the
20
+ * add-key and bulk-import forms.
21
+ *
22
+ * Bulk import is sequential on purpose: each key is validated live
23
+ * against Cursor's /v1/me, and per-key errors (wrong key class, revoked,
24
+ * duplicate) must be attributable to their line. Keys whose owner turns
25
+ * out not to be on the team are still added — the post-import sync lands
26
+ * them in the table's "not on the team" category with invite guidance.
27
+ */
28
+ export function MemberKeysPanel({ accountId, view, coverage, actions, onChanged, onImported, }) {
29
+ const [newKey, setNewKey] = useState("");
30
+ const [newLabel, setNewLabel] = useState("");
31
+ const [showImport, setShowImport] = useState(false);
32
+ const [importText, setImportText] = useState("");
33
+ const [isImporting, setIsImporting] = useState(false);
34
+ const [importProgress, setImportProgress] = useState(null);
35
+ const [importResults, setImportResults] = useState(null);
36
+ const keyViews = view.keyViews;
37
+ const hasRows = coverage.unclassified.length > 0 ||
38
+ coverage.onTeamWithKey.length > 0 ||
39
+ coverage.onTeamWithoutKey.length > 0 ||
40
+ coverage.offTeamWithKey.length > 0;
41
+ const submitNewKey = (e) => {
42
+ e.preventDefault();
43
+ if (newKey.trim() === "" || actions.isSubmitting)
44
+ return;
45
+ void actions
46
+ .addKey({ accountId, apiKey: newKey.trim(), label: newLabel.trim() || undefined })
47
+ .then(() => {
48
+ setNewKey("");
49
+ setNewLabel("");
50
+ onChanged();
51
+ }, () => {
52
+ // Surfaced via actions.error (incl. Cursor's own key-class 401 text).
53
+ });
54
+ };
55
+ const importKeyCount = parseImportKeys(importText).length;
56
+ const submitImport = async (e) => {
57
+ e.preventDefault();
58
+ const keys = parseImportKeys(importText);
59
+ if (keys.length === 0 || isImporting)
60
+ return;
61
+ setIsImporting(true);
62
+ setImportResults(null);
63
+ // Sequential on purpose: each key is validated live against Cursor's
64
+ // /v1/me, and per-key errors (wrong key class, revoked, duplicate)
65
+ // must be attributable to their line.
66
+ const knownKeyIds = new Set(keyViews.map((kv) => kv.key?.keyId).filter((id) => !!id));
67
+ const results = [];
68
+ const failedKeys = [];
69
+ for (const [i, key] of keys.entries()) {
70
+ setImportProgress({ done: i, total: keys.length });
71
+ try {
72
+ const account = await actions.addKey({ accountId, apiKey: key });
73
+ const addedKey = account.memberKeys.find((mk) => !knownKeyIds.has(mk.keyId));
74
+ if (addedKey)
75
+ knownKeyIds.add(addedKey.keyId);
76
+ results.push({
77
+ keyPreview: maskKey(key, i),
78
+ ok: true,
79
+ message: addedKey?.boundEmail
80
+ ? `added — bound to ${addedKey.boundEmail}`
81
+ : "added",
82
+ });
83
+ }
84
+ catch (err) {
85
+ actions.clearError();
86
+ failedKeys.push(key);
87
+ results.push({
88
+ keyPreview: maskKey(key, i),
89
+ ok: false,
90
+ message: getUserMessage(toError(err)),
91
+ });
92
+ }
93
+ }
94
+ setImportProgress(null);
95
+ setImportResults(results);
96
+ // Failed lines stay in the box so the operator can fix and retry.
97
+ setImportText(failedKeys.join("\n"));
98
+ setIsImporting(false);
99
+ if (failedKeys.length < keys.length)
100
+ onImported();
101
+ };
102
+ return (_jsxs("section", { className: "space-y-2", children: [_jsx("h4", { className: "text-xs font-semibold text-foreground", children: "Team coverage" }), keyViews.length === 0 && (_jsxs("p", { className: "text-xs text-muted-foreground", role: "status", children: ["No execution keys \u2014 this account is ", _jsx("strong", { children: "not routable" }), ". Add a member's user-scoped API key below."] })), hasRows && (_jsx(MemberCoverageTable, { accountId: accountId, coverage: coverage, inviteLink: view.account?.teamInviteLink ?? "", actions: actions, onChanged: onChanged })), actions.error && (_jsx("p", { className: "text-destructive text-xs", role: "alert", children: getUserMessage(actions.error) })), _jsxs("form", { className: "flex flex-wrap items-end gap-2", onSubmit: submitNewKey, children: [_jsxs("label", { className: "block min-w-56 flex-1 space-y-1", children: [_jsx("span", { className: "text-[11px] font-medium text-muted-foreground", children: "User-scoped API key" }), _jsx("input", { className: INPUT_CLASSES, type: "password", value: newKey, onChange: (e) => setNewKey(e.target.value), placeholder: "the member's personal Cursor API key", disabled: actions.isSubmitting, autoComplete: "off" })] }), _jsxs("label", { className: "block min-w-40 space-y-1", children: [_jsx("span", { className: "text-[11px] font-medium text-muted-foreground", children: "Label (optional)" }), _jsx("input", { className: INPUT_CLASSES, value: newLabel, onChange: (e) => setNewLabel(e.target.value), placeholder: "e.g. zane \u2014 prod", disabled: actions.isSubmitting })] }), _jsx(Button, { type: "submit", size: "sm", disabled: newKey.trim() === "" || actions.isSubmitting, children: actions.isSubmitting ? "Verifying…" : "Add key" }), _jsx(Button, { type: "button", size: "sm", variant: "outline", disabled: isImporting, onClick: () => {
103
+ setShowImport((v) => !v);
104
+ setImportResults(null);
105
+ }, children: showImport ? "Hide import" : "Import keys" })] }), showImport && (_jsxs("form", { className: "space-y-2 rounded-md border border-border bg-card p-3", onSubmit: submitImport, children: [_jsxs("label", { className: "block space-y-1", children: [_jsx("span", { className: "text-[11px] font-medium text-muted-foreground", children: "Bulk import \u2014 one user-scoped API key per line" }), _jsx("textarea", { className: cn(INPUT_CLASSES, "min-h-24 font-mono"), value: importText, onChange: (e) => setImportText(e.target.value), placeholder: "key_...\nkey_...\nkey_...", disabled: isImporting, autoComplete: "off", spellCheck: false })] }), _jsx("p", { className: "text-[11px] text-muted-foreground", children: "Each key is verified against Cursor and bound to its owning team member, one at a time. Lines that fail stay in the box so you can fix and retry them. A roster sync runs automatically afterwards, so the coverage table reflects current team membership." }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Button, { type: "submit", size: "sm", disabled: importKeyCount === 0 || isImporting, children: isImporting && importProgress
106
+ ? `Importing ${importProgress.done + 1} of ${importProgress.total}…`
107
+ : importKeyCount > 0
108
+ ? `Import ${importKeyCount} ${importKeyCount === 1 ? "key" : "keys"}`
109
+ : "Import keys" }), _jsx(Button, { type: "button", size: "sm", variant: "outline", disabled: isImporting, onClick: () => {
110
+ setShowImport(false);
111
+ setImportText("");
112
+ setImportResults(null);
113
+ }, children: "Close" })] }), importResults && (_jsx("ul", { role: "list", "aria-label": "Import results", className: "m-0 list-none space-y-0.5 p-0 text-[11px]", children: importResults.map((result) => (_jsxs("li", { className: result.ok ? "text-muted-foreground" : "text-destructive", children: [result.keyPreview, ": ", result.message] }, result.keyPreview))) }))] }))] }));
114
+ }
115
+ //# sourceMappingURL=MemberKeysPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemberKeysPanel.js","sourceRoot":"","sources":["../../src/cursor-accounts/MemberKeysPanel.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAY/D,kEAAkE;AAClE,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,OAAO,CAAC,GAAW,EAAE,KAAa;IACzC,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,KAAK,GAAG,CAAC,EAAE,CAAC;AACvF,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,SAAS,EACT,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,SAAS,EACT,UAAU,GAUX;IACC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC7C,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAElD,IAAI,CAAC,CAAC;IACR,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAChD,IAAI,CACL,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC/B,MAAM,OAAO,GACX,QAAQ,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;QAChC,QAAQ,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;QACjC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;QACpC,QAAQ,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;IAErC,MAAM,YAAY,GAAG,CAAC,CAAkB,EAAE,EAAE;QAC1C,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,OAAO,CAAC,YAAY;YAAE,OAAO;QACzD,KAAK,OAAO;aACT,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,SAAS,EAAE,CAAC;aACjF,IAAI,CAAC,GAAG,EAAE;YACT,SAAS,CAAC,EAAE,CAAC,CAAC;YACd,WAAW,CAAC,EAAE,CAAC,CAAC;YAChB,SAAS,EAAE,CAAC;QACd,CAAC,EAAE,GAAG,EAAE;YACN,sEAAsE;QACxE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;IAE1D,MAAM,YAAY,GAAG,KAAK,EAAE,CAAkB,EAAE,EAAE;QAChD,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW;YAAE,OAAO;QAE7C,cAAc,CAAC,IAAI,CAAC,CAAC;QACrB,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAEvB,qEAAqE;QACrE,mEAAmE;QACnE,sCAAsC;QACtC,MAAM,WAAW,GAAG,IAAI,GAAG,CACzB,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CACvE,CAAC;QACF,MAAM,OAAO,GAAuB,EAAE,CAAC;QACvC,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACtC,iBAAiB,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACnD,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;gBACjE,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC7E,IAAI,QAAQ;oBAAE,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC9C,OAAO,CAAC,IAAI,CAAC;oBACX,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;oBAC3B,EAAE,EAAE,IAAI;oBACR,OAAO,EAAE,QAAQ,EAAE,UAAU;wBAC3B,CAAC,CAAC,oBAAoB,QAAQ,CAAC,UAAU,EAAE;wBAC3C,CAAC,CAAC,OAAO;iBACZ,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,UAAU,EAAE,CAAC;gBACrB,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACrB,OAAO,CAAC,IAAI,CAAC;oBACX,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;oBAC3B,EAAE,EAAE,KAAK;oBACT,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;iBACtC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxB,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC1B,kEAAkE;QAClE,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,cAAc,CAAC,KAAK,CAAC,CAAC;QACtB,IAAI,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;YAAE,UAAU,EAAE,CAAC;IACpD,CAAC,CAAC;IAEF,OAAO,CACL,mBAAS,SAAS,EAAC,WAAW,aAC5B,aAAI,SAAS,EAAC,uCAAuC,8BAAmB,EAEvE,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CACxB,aAAG,SAAS,EAAC,+BAA+B,EAAC,IAAI,EAAC,QAAQ,0DACpB,4CAA6B,mDAE/D,CACL,EAEA,OAAO,IAAI,CACV,KAAC,mBAAmB,IAClB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,cAAc,IAAI,EAAE,EAC9C,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,GACpB,CACH,EAEA,OAAO,CAAC,KAAK,IAAI,CAChB,YAAG,SAAS,EAAC,0BAA0B,EAAC,IAAI,EAAC,OAAO,YACjD,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,GAC5B,CACL,EAED,gBAAM,SAAS,EAAC,gCAAgC,EAAC,QAAQ,EAAE,YAAY,aACrE,iBAAO,SAAS,EAAC,iCAAiC,aAChD,eAAM,SAAS,EAAC,+CAA+C,oCAExD,EACP,gBACE,SAAS,EAAE,aAAa,EACxB,IAAI,EAAC,UAAU,EACf,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC1C,WAAW,EAAC,sCAAsC,EAClD,QAAQ,EAAE,OAAO,CAAC,YAAY,EAC9B,YAAY,EAAC,KAAK,GAClB,IACI,EACR,iBAAO,SAAS,EAAC,0BAA0B,aACzC,eAAM,SAAS,EAAC,+CAA+C,iCAExD,EACP,gBACE,SAAS,EAAE,aAAa,EACxB,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC5C,WAAW,EAAC,uBAAkB,EAC9B,QAAQ,EAAE,OAAO,CAAC,YAAY,GAC9B,IACI,EACR,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,IAAI,EAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,OAAO,CAAC,YAAY,YACnF,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,GACzC,EACT,KAAC,MAAM,IACL,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,SAAS,EACjB,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,GAAG,EAAE;4BACZ,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;4BACzB,gBAAgB,CAAC,IAAI,CAAC,CAAC;wBACzB,CAAC,YAEA,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,GACpC,IACJ,EAEN,UAAU,IAAI,CACb,gBAAM,SAAS,EAAC,uDAAuD,EAAC,QAAQ,EAAE,YAAY,aAC5F,iBAAO,SAAS,EAAC,iBAAiB,aAChC,eAAM,SAAS,EAAC,+CAA+C,oEAExD,EACP,mBACE,SAAS,EAAE,EAAE,CAAC,aAAa,EAAE,oBAAoB,CAAC,EAClD,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC9C,WAAW,EAAE,2BAA2B,EACxC,QAAQ,EAAE,WAAW,EACrB,YAAY,EAAC,KAAK,EAClB,UAAU,EAAE,KAAK,GACjB,IACI,EACR,YAAG,SAAS,EAAC,mCAAmC,4QAK5C,EACJ,eAAK,SAAS,EAAC,yBAAyB,aACtC,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,IAAI,EAAC,QAAQ,EAAE,cAAc,KAAK,CAAC,IAAI,WAAW,YAC1E,WAAW,IAAI,cAAc;oCAC5B,CAAC,CAAC,aAAa,cAAc,CAAC,IAAI,GAAG,CAAC,OAAO,cAAc,CAAC,KAAK,GAAG;oCACpE,CAAC,CAAC,cAAc,GAAG,CAAC;wCAClB,CAAC,CAAC,UAAU,cAAc,IAAI,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE;wCACrE,CAAC,CAAC,aAAa,GACZ,EACT,KAAC,MAAM,IACL,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,SAAS,EACjB,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,GAAG,EAAE;oCACZ,aAAa,CAAC,KAAK,CAAC,CAAC;oCACrB,aAAa,CAAC,EAAE,CAAC,CAAC;oCAClB,gBAAgB,CAAC,IAAI,CAAC,CAAC;gCACzB,CAAC,sBAGM,IACL,EACL,aAAa,IAAI,CAChB,aACE,IAAI,EAAC,MAAM,gBACA,gBAAgB,EAC3B,SAAS,EAAC,2CAA2C,YAEpD,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC7B,cAEE,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,kBAAkB,aAElE,MAAM,CAAC,UAAU,QAAI,MAAM,CAAC,OAAO,KAH/B,MAAM,CAAC,UAAU,CAInB,CACN,CAAC,GACC,CACN,IACI,CACR,IACO,CACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Small tonal status badge shared by the cursor-accounts surfaces
3
+ * (account rows, coverage table cells). Internal to the module.
4
+ */
5
+ export declare function StateBadge({ tone, label, }: {
6
+ readonly tone: "ok" | "warn" | "muted";
7
+ readonly label: string;
8
+ }): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=badges.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badges.d.ts","sourceRoot":"","sources":["../../src/cursor-accounts/badges.tsx"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,KAAK,GACN,EAAE;IACD,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,2CAaA"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from "@stigmer/theme";
3
+ /**
4
+ * Small tonal status badge shared by the cursor-accounts surfaces
5
+ * (account rows, coverage table cells). Internal to the module.
6
+ */
7
+ export function StateBadge({ tone, label, }) {
8
+ return (_jsx("span", { className: cn("inline-block rounded px-1.5 py-0.5 text-[10px] font-medium", tone === "ok" && "bg-accent text-primary", tone === "warn" && "bg-muted-subtle text-destructive", tone === "muted" && "bg-muted-subtle text-muted-foreground"), children: label }));
9
+ }
10
+ //# sourceMappingURL=badges.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badges.js","sourceRoot":"","sources":["../../src/cursor-accounts/badges.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAEpC;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,IAAI,EACJ,KAAK,GAIN;IACC,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,4DAA4D,EAC5D,IAAI,KAAK,IAAI,IAAI,wBAAwB,EACzC,IAAI,KAAK,MAAM,IAAI,kCAAkC,EACrD,IAAI,KAAK,OAAO,IAAI,uCAAuC,CAC5D,YAEA,KAAK,GACD,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { type CursorAccountView, type CursorMemberKeyView, type CursorTeamMemberView } from "@stigmer/protos/ai/stigmer/platform/cursoraccount/v1/io_pb";
2
+ /**
3
+ * The account's roster coverage, grouped for the operator table. Pure
4
+ * regrouping of server-computed facts — the membership classification
5
+ * (`CursorMemberKeyState`) and the spend joins are computed by the
6
+ * backend on read (the same email rule key selection uses); this module
7
+ * must never re-derive them from emails or role strings.
8
+ */
9
+ export interface CursorAccountCoverage {
10
+ /**
11
+ * Whether a roster snapshot backs the classification. Before the first
12
+ * sync every key reports "owner unknown" — that is missing data, not
13
+ * "not on the team", so classification is withheld (`unclassified`)
14
+ * until a sync has run.
15
+ */
16
+ readonly hasRoster: boolean;
17
+ /** On the team, execution key held — the account's routable capacity. */
18
+ readonly onTeamWithKey: readonly CursorMemberKeyView[];
19
+ /**
20
+ * On the team, no execution key — the coverage gap. Sessions can never
21
+ * run under these members' identities or included quotas. Spend comes
22
+ * server-joined so the operator can prioritize whose key to import.
23
+ */
24
+ readonly onTeamWithoutKey: readonly CursorTeamMemberView[];
25
+ /**
26
+ * Key held, owner not on the team: either left it (roster role
27
+ * "removed") or never appeared in the roster — the per-key state
28
+ * distinguishes the two. Resolving this category means inviting the
29
+ * owner on the Cursor dashboard; the next sync reclassifies.
30
+ */
31
+ readonly offTeamWithKey: readonly CursorMemberKeyView[];
32
+ /** Every key, only while no roster snapshot exists (empty otherwise). */
33
+ readonly unclassified: readonly CursorMemberKeyView[];
34
+ }
35
+ /**
36
+ * Group one account view into the three coverage categories (plus the
37
+ * pre-first-sync "unclassified" holding state). Server order is
38
+ * preserved within each group.
39
+ */
40
+ export declare function deriveCoverage(view: CursorAccountView): CursorAccountCoverage;
41
+ //# sourceMappingURL=cursor-account-coverage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-account-coverage.d.ts","sourceRoot":"","sources":["../../src/cursor-accounts/cursor-account-coverage.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAC1B,MAAM,4DAA4D,CAAC;AAEpE;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,yEAAyE;IACzE,QAAQ,CAAC,aAAa,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACvD;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAC3D;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACxD,yEAAyE;IACzE,QAAQ,CAAC,YAAY,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACvD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,iBAAiB,GAAG,qBAAqB,CAwB7E"}
@@ -0,0 +1,26 @@
1
+ import { CursorMemberKeyState, } from "@stigmer/protos/ai/stigmer/platform/cursoraccount/v1/io_pb";
2
+ /**
3
+ * Group one account view into the three coverage categories (plus the
4
+ * pre-first-sync "unclassified" holding state). Server order is
5
+ * preserved within each group.
6
+ */
7
+ export function deriveCoverage(view) {
8
+ const hasRoster = view.snapshot !== undefined;
9
+ if (!hasRoster) {
10
+ return {
11
+ hasRoster,
12
+ onTeamWithKey: [],
13
+ onTeamWithoutKey: [],
14
+ offTeamWithKey: [],
15
+ unclassified: view.keyViews,
16
+ };
17
+ }
18
+ return {
19
+ hasRoster,
20
+ onTeamWithKey: view.keyViews.filter((kv) => kv.state === CursorMemberKeyState.member_key_active),
21
+ onTeamWithoutKey: view.membersWithoutKeysViews,
22
+ offTeamWithKey: view.keyViews.filter((kv) => kv.state !== CursorMemberKeyState.member_key_active),
23
+ unclassified: [],
24
+ };
25
+ }
26
+ //# sourceMappingURL=cursor-account-coverage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-account-coverage.js","sourceRoot":"","sources":["../../src/cursor-accounts/cursor-account-coverage.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,GAIrB,MAAM,4DAA4D,CAAC;AAoCpE;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAuB;IACpD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC;IAE9C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,SAAS;YACT,aAAa,EAAE,EAAE;YACjB,gBAAgB,EAAE,EAAE;YACpB,cAAc,EAAE,EAAE;YAClB,YAAY,EAAE,IAAI,CAAC,QAAQ;SAC5B,CAAC;IACJ,CAAC;IAED,OAAO;QACL,SAAS;QACT,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CACjC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,oBAAoB,CAAC,iBAAiB,CAC5D;QACD,gBAAgB,EAAE,IAAI,CAAC,uBAAuB;QAC9C,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAClC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,oBAAoB,CAAC,iBAAiB,CAC5D;QACD,YAAY,EAAE,EAAE;KACjB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { Timestamp } from "@bufbuild/protobuf/wkt";
2
+ /**
3
+ * Micro-USD to a display dollar string (e.g. `169342n` → `"$0.17"`).
4
+ * Spend figures are Cursor-reported cycle totals — two decimals is the
5
+ * honest precision for a monitoring surface.
6
+ */
7
+ export declare function formatSpendMicros(micros: bigint): string;
8
+ /** Proto Timestamp to a compact local date-time (e.g. "Jul 22, 14:05"). */
9
+ export declare function formatSyncTime(ts: Timestamp | undefined): string;
10
+ /**
11
+ * Cursor's pool-usage percent (0–100, live-verified) to a display string
12
+ * (`26.97` → `"27%"`, `0` → `"0%"`).
13
+ *
14
+ * Zero renders as "0%", matching Cursor's own Members page. An earlier
15
+ * revision suppressed it on the theory that Cursor only omits percent
16
+ * fields on non-tiered teams (so a stored 0 meant "unreported") — live
17
+ * data falsified that: Cursor also omits them for zero-usage members on
18
+ * tiered Team plans, where its dashboard shows "0%". The "unreported"
19
+ * signal is the absence of the member's whole spend row (the caller's
20
+ * em-dash case), not a zero field inside one.
21
+ */
22
+ export declare function formatPoolPercent(percent: number): string;
23
+ //# sourceMappingURL=cursor-account-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-account-format.d.ts","sourceRoot":"","sources":["../../src/cursor-accounts/cursor-account-format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAOxD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,EAAE,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAUhE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzD"}
@@ -0,0 +1,41 @@
1
+ // BigInt literals (0n) require an ES2020 target, which not every consuming
2
+ // app's tsconfig guarantees — the constructor form is target-agnostic (the
3
+ // pricing-governance pricing-format precedent).
4
+ const ZERO = BigInt(0);
5
+ /**
6
+ * Micro-USD to a display dollar string (e.g. `169342n` → `"$0.17"`).
7
+ * Spend figures are Cursor-reported cycle totals — two decimals is the
8
+ * honest precision for a monitoring surface.
9
+ */
10
+ export function formatSpendMicros(micros) {
11
+ const dollars = Number(micros) / 1_000_000;
12
+ return `$${dollars.toFixed(2)}`;
13
+ }
14
+ /** Proto Timestamp to a compact local date-time (e.g. "Jul 22, 14:05"). */
15
+ export function formatSyncTime(ts) {
16
+ if (!ts || ts.seconds === ZERO) {
17
+ return "never";
18
+ }
19
+ return new Date(Number(ts.seconds) * 1000).toLocaleString(undefined, {
20
+ month: "short",
21
+ day: "numeric",
22
+ hour: "2-digit",
23
+ minute: "2-digit",
24
+ });
25
+ }
26
+ /**
27
+ * Cursor's pool-usage percent (0–100, live-verified) to a display string
28
+ * (`26.97` → `"27%"`, `0` → `"0%"`).
29
+ *
30
+ * Zero renders as "0%", matching Cursor's own Members page. An earlier
31
+ * revision suppressed it on the theory that Cursor only omits percent
32
+ * fields on non-tiered teams (so a stored 0 meant "unreported") — live
33
+ * data falsified that: Cursor also omits them for zero-usage members on
34
+ * tiered Team plans, where its dashboard shows "0%". The "unreported"
35
+ * signal is the absence of the member's whole spend row (the caller's
36
+ * em-dash case), not a zero field inside one.
37
+ */
38
+ export function formatPoolPercent(percent) {
39
+ return `${Math.round(percent)}%`;
40
+ }
41
+ //# sourceMappingURL=cursor-account-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-account-format.js","sourceRoot":"","sources":["../../src/cursor-accounts/cursor-account-format.ts"],"names":[],"mappings":"AAEA,2EAA2E;AAC3E,2EAA2E;AAC3E,gDAAgD;AAChD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAEvB;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IAC3C,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AAClC,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,cAAc,CAAC,EAAyB;IACtD,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE;QACnE,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;AACnC,CAAC"}
@@ -0,0 +1,18 @@
1
+ export { useCursorAccounts } from "./useCursorAccounts.js";
2
+ export type { UseCursorAccountsReturn } from "./useCursorAccounts.js";
3
+ export { useCursorAccountView } from "./useCursorAccountView.js";
4
+ export type { UseCursorAccountViewReturn } from "./useCursorAccountView.js";
5
+ export { useUpsertCursorAccount } from "./useUpsertCursorAccount.js";
6
+ export type { UseUpsertCursorAccountReturn } from "./useUpsertCursorAccount.js";
7
+ export { useDeleteCursorAccount } from "./useDeleteCursorAccount.js";
8
+ export type { DeleteCursorAccountInput, UseDeleteCursorAccountReturn, } from "./useDeleteCursorAccount.js";
9
+ export { useCursorMemberKeyActions } from "./useCursorMemberKeyActions.js";
10
+ export type { AddCursorMemberKeyInput, RemoveCursorMemberKeyInput, UseCursorMemberKeyActionsReturn, } from "./useCursorMemberKeyActions.js";
11
+ export { useSyncCursorAccount } from "./useSyncCursorAccount.js";
12
+ export type { UseSyncCursorAccountReturn } from "./useSyncCursorAccount.js";
13
+ export { CursorAccountsConsole } from "./CursorAccountsConsole.js";
14
+ export type { CursorAccountsConsoleProps } from "./CursorAccountsConsole.js";
15
+ export { CursorAccountEditor } from "./CursorAccountEditor.js";
16
+ export type { CursorAccountEditorProps } from "./CursorAccountEditor.js";
17
+ export { CursorAccountsAccessNotice } from "./CursorAccountsAccessNotice.js";
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cursor-accounts/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,YAAY,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,YAAY,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAG5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,YAAY,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,YAAY,EACV,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,YAAY,EACV,uBAAuB,EACvB,0BAA0B,EAC1B,+BAA+B,GAChC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,YAAY,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAG5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,YAAY,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC"}