@stigmer/react 3.2.2 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (513) hide show
  1. package/agent/AgentDetailView.d.ts.map +1 -1
  2. package/agent/AgentDetailView.js +6 -3
  3. package/agent/AgentDetailView.js.map +1 -1
  4. package/agent/steps/ReviewStep.d.ts.map +1 -1
  5. package/agent/steps/ReviewStep.js +2 -3
  6. package/agent/steps/ReviewStep.js.map +1 -1
  7. package/billing/BaselineEditor.d.ts +9 -0
  8. package/billing/BaselineEditor.d.ts.map +1 -0
  9. package/billing/BaselineEditor.js +253 -0
  10. package/billing/BaselineEditor.js.map +1 -0
  11. package/billing/ModelCatalogPanel.d.ts +28 -0
  12. package/billing/ModelCatalogPanel.d.ts.map +1 -0
  13. package/billing/ModelCatalogPanel.js +102 -0
  14. package/billing/ModelCatalogPanel.js.map +1 -0
  15. package/billing/ModelGovernanceDetail.d.ts +8 -0
  16. package/billing/ModelGovernanceDetail.d.ts.map +1 -0
  17. package/billing/ModelGovernanceDetail.js +64 -0
  18. package/billing/ModelGovernanceDetail.js.map +1 -0
  19. package/billing/OperatorAccessNotice.d.ts +12 -0
  20. package/billing/OperatorAccessNotice.d.ts.map +1 -0
  21. package/billing/OperatorAccessNotice.js +15 -0
  22. package/billing/OperatorAccessNotice.js.map +1 -0
  23. package/billing/PricingGovernanceConsole.d.ts +57 -0
  24. package/billing/PricingGovernanceConsole.d.ts.map +1 -0
  25. package/billing/PricingGovernanceConsole.js +164 -0
  26. package/billing/PricingGovernanceConsole.js.map +1 -0
  27. package/billing/PricingGovernancePanel.d.ts +26 -0
  28. package/billing/PricingGovernancePanel.d.ts.map +1 -0
  29. package/billing/PricingGovernancePanel.js +64 -0
  30. package/billing/PricingGovernancePanel.js.map +1 -0
  31. package/billing/RetireConfirm.d.ts +9 -0
  32. package/billing/RetireConfirm.d.ts.map +1 -0
  33. package/billing/RetireConfirm.js +19 -0
  34. package/billing/RetireConfirm.js.map +1 -0
  35. package/billing/form-primitives.d.ts +18 -0
  36. package/billing/form-primitives.d.ts.map +1 -0
  37. package/billing/form-primitives.js +19 -0
  38. package/billing/form-primitives.js.map +1 -0
  39. package/billing/governance-primitives.d.ts +33 -0
  40. package/billing/governance-primitives.d.ts.map +1 -0
  41. package/billing/governance-primitives.js +43 -0
  42. package/billing/governance-primitives.js.map +1 -0
  43. package/billing/index.d.ts +18 -0
  44. package/billing/index.d.ts.map +1 -1
  45. package/billing/index.js +9 -0
  46. package/billing/index.js.map +1 -1
  47. package/billing/pricing-format.d.ts +12 -0
  48. package/billing/pricing-format.d.ts.map +1 -0
  49. package/billing/pricing-format.js +50 -0
  50. package/billing/pricing-format.js.map +1 -0
  51. package/billing/useDecidePricingOverride.d.ts +46 -0
  52. package/billing/useDecidePricingOverride.d.ts.map +1 -0
  53. package/billing/useDecidePricingOverride.js +44 -0
  54. package/billing/useDecidePricingOverride.js.map +1 -0
  55. package/billing/useModelGovernanceView.d.ts +103 -0
  56. package/billing/useModelGovernanceView.d.ts.map +1 -0
  57. package/billing/useModelGovernanceView.js +144 -0
  58. package/billing/useModelGovernanceView.js.map +1 -0
  59. package/billing/useModelPricingBaselines.d.ts +40 -0
  60. package/billing/useModelPricingBaselines.d.ts.map +1 -0
  61. package/billing/useModelPricingBaselines.js +32 -0
  62. package/billing/useModelPricingBaselines.js.map +1 -0
  63. package/billing/usePricingGovernance.d.ts +39 -0
  64. package/billing/usePricingGovernance.d.ts.map +1 -0
  65. package/billing/usePricingGovernance.js +31 -0
  66. package/billing/usePricingGovernance.js.map +1 -0
  67. package/billing/useRetireModelPricingBaseline.d.ts +31 -0
  68. package/billing/useRetireModelPricingBaseline.d.ts.map +1 -0
  69. package/billing/useRetireModelPricingBaseline.js +36 -0
  70. package/billing/useRetireModelPricingBaseline.js.map +1 -0
  71. package/billing/useUpsertModelPricingBaseline.d.ts +38 -0
  72. package/billing/useUpsertModelPricingBaseline.d.ts.map +1 -0
  73. package/billing/useUpsertModelPricingBaseline.js +37 -0
  74. package/billing/useUpsertModelPricingBaseline.js.map +1 -0
  75. package/channel/AgentChannelsPanel.d.ts.map +1 -1
  76. package/channel/AgentChannelsPanel.js +11 -5
  77. package/channel/AgentChannelsPanel.js.map +1 -1
  78. package/composer/SessionComposer.d.ts +1 -1
  79. package/cursor-accounts/CursorAccountEditor.d.ts +28 -0
  80. package/cursor-accounts/CursorAccountEditor.d.ts.map +1 -0
  81. package/cursor-accounts/CursorAccountEditor.js +51 -0
  82. package/cursor-accounts/CursorAccountEditor.js.map +1 -0
  83. package/cursor-accounts/CursorAccountsAccessNotice.d.ts +11 -0
  84. package/cursor-accounts/CursorAccountsAccessNotice.d.ts.map +1 -0
  85. package/cursor-accounts/CursorAccountsAccessNotice.js +14 -0
  86. package/cursor-accounts/CursorAccountsAccessNotice.js.map +1 -0
  87. package/cursor-accounts/CursorAccountsConsole.d.ts +28 -0
  88. package/cursor-accounts/CursorAccountsConsole.d.ts.map +1 -0
  89. package/cursor-accounts/CursorAccountsConsole.js +275 -0
  90. package/cursor-accounts/CursorAccountsConsole.js.map +1 -0
  91. package/cursor-accounts/cursor-account-format.d.ts +10 -0
  92. package/cursor-accounts/cursor-account-format.d.ts.map +1 -0
  93. package/cursor-accounts/cursor-account-format.js +26 -0
  94. package/cursor-accounts/cursor-account-format.js.map +1 -0
  95. package/cursor-accounts/index.d.ts +18 -0
  96. package/cursor-accounts/index.d.ts.map +1 -0
  97. package/cursor-accounts/index.js +13 -0
  98. package/cursor-accounts/index.js.map +1 -0
  99. package/cursor-accounts/useCursorAccountView.d.ts +30 -0
  100. package/cursor-accounts/useCursorAccountView.d.ts.map +1 -0
  101. package/cursor-accounts/useCursorAccountView.js +25 -0
  102. package/cursor-accounts/useCursorAccountView.js.map +1 -0
  103. package/cursor-accounts/useCursorAccounts.d.ts +33 -0
  104. package/cursor-accounts/useCursorAccounts.d.ts.map +1 -0
  105. package/cursor-accounts/useCursorAccounts.js +25 -0
  106. package/cursor-accounts/useCursorAccounts.js.map +1 -0
  107. package/cursor-accounts/useCursorMemberKeyActions.d.ts +49 -0
  108. package/cursor-accounts/useCursorMemberKeyActions.d.ts.map +1 -0
  109. package/cursor-accounts/useCursorMemberKeyActions.js +38 -0
  110. package/cursor-accounts/useCursorMemberKeyActions.js.map +1 -0
  111. package/cursor-accounts/useDeleteCursorAccount.d.ts +30 -0
  112. package/cursor-accounts/useDeleteCursorAccount.d.ts.map +1 -0
  113. package/cursor-accounts/useDeleteCursorAccount.js +32 -0
  114. package/cursor-accounts/useDeleteCursorAccount.js.map +1 -0
  115. package/cursor-accounts/useSyncCursorAccount.d.ts +23 -0
  116. package/cursor-accounts/useSyncCursorAccount.d.ts.map +1 -0
  117. package/cursor-accounts/useSyncCursorAccount.js +31 -0
  118. package/cursor-accounts/useSyncCursorAccount.js.map +1 -0
  119. package/cursor-accounts/useUpsertCursorAccount.d.ts +26 -0
  120. package/cursor-accounts/useUpsertCursorAccount.d.ts.map +1 -0
  121. package/cursor-accounts/useUpsertCursorAccount.js +34 -0
  122. package/cursor-accounts/useUpsertCursorAccount.js.map +1 -0
  123. package/datastore/CollectionRecordsBrowser.d.ts +34 -0
  124. package/datastore/CollectionRecordsBrowser.d.ts.map +1 -0
  125. package/datastore/CollectionRecordsBrowser.js +209 -0
  126. package/datastore/CollectionRecordsBrowser.js.map +1 -0
  127. package/datastore/CollectionSchemaView.d.ts +29 -0
  128. package/datastore/CollectionSchemaView.d.ts.map +1 -0
  129. package/datastore/CollectionSchemaView.js +93 -0
  130. package/datastore/CollectionSchemaView.js.map +1 -0
  131. package/datastore/DatastoreDetailView.d.ts +44 -0
  132. package/datastore/DatastoreDetailView.d.ts.map +1 -0
  133. package/datastore/DatastoreDetailView.js +76 -0
  134. package/datastore/DatastoreDetailView.js.map +1 -0
  135. package/datastore/DatastoreSyncReport.d.ts +19 -0
  136. package/datastore/DatastoreSyncReport.d.ts.map +1 -0
  137. package/datastore/DatastoreSyncReport.js +45 -0
  138. package/datastore/DatastoreSyncReport.js.map +1 -0
  139. package/datastore/DeleteDatastoreDialog.d.ts +35 -0
  140. package/datastore/DeleteDatastoreDialog.d.ts.map +1 -0
  141. package/datastore/DeleteDatastoreDialog.js +90 -0
  142. package/datastore/DeleteDatastoreDialog.js.map +1 -0
  143. package/datastore/FieldValueControl.d.ts +55 -0
  144. package/datastore/FieldValueControl.d.ts.map +1 -0
  145. package/datastore/FieldValueControl.js +138 -0
  146. package/datastore/FieldValueControl.js.map +1 -0
  147. package/datastore/RecordFilterBuilder.d.ts +30 -0
  148. package/datastore/RecordFilterBuilder.d.ts.map +1 -0
  149. package/datastore/RecordFilterBuilder.js +122 -0
  150. package/datastore/RecordFilterBuilder.js.map +1 -0
  151. package/datastore/RecordFormPanel.d.ts +45 -0
  152. package/datastore/RecordFormPanel.d.ts.map +1 -0
  153. package/datastore/RecordFormPanel.js +215 -0
  154. package/datastore/RecordFormPanel.js.map +1 -0
  155. package/datastore/index.d.ts +43 -0
  156. package/datastore/index.d.ts.map +1 -0
  157. package/datastore/index.js +22 -0
  158. package/datastore/index.js.map +1 -0
  159. package/datastore/recordFilter.d.ts +54 -0
  160. package/datastore/recordFilter.d.ts.map +1 -0
  161. package/datastore/recordFilter.js +93 -0
  162. package/datastore/recordFilter.js.map +1 -0
  163. package/datastore/recordValues.d.ts +85 -0
  164. package/datastore/recordValues.d.ts.map +1 -0
  165. package/datastore/recordValues.js +282 -0
  166. package/datastore/recordValues.js.map +1 -0
  167. package/datastore/useDatastore.d.ts +39 -0
  168. package/datastore/useDatastore.d.ts.map +1 -0
  169. package/datastore/useDatastore.js +44 -0
  170. package/datastore/useDatastore.js.map +1 -0
  171. package/datastore/useDatastoreCount.d.ts +48 -0
  172. package/datastore/useDatastoreCount.d.ts.map +1 -0
  173. package/datastore/useDatastoreCount.js +27 -0
  174. package/datastore/useDatastoreCount.js.map +1 -0
  175. package/datastore/useDatastoreDescription.d.ts +54 -0
  176. package/datastore/useDatastoreDescription.d.ts.map +1 -0
  177. package/datastore/useDatastoreDescription.js +50 -0
  178. package/datastore/useDatastoreDescription.js.map +1 -0
  179. package/datastore/useDatastoreList.d.ts +57 -0
  180. package/datastore/useDatastoreList.d.ts.map +1 -0
  181. package/datastore/useDatastoreList.js +29 -0
  182. package/datastore/useDatastoreList.js.map +1 -0
  183. package/datastore/useDatastoreSearch.d.ts +19 -0
  184. package/datastore/useDatastoreSearch.d.ts.map +1 -0
  185. package/datastore/useDatastoreSearch.js +22 -0
  186. package/datastore/useDatastoreSearch.js.map +1 -0
  187. package/datastore/useDeleteDatastore.d.ts +53 -0
  188. package/datastore/useDeleteDatastore.d.ts.map +1 -0
  189. package/datastore/useDeleteDatastore.js +40 -0
  190. package/datastore/useDeleteDatastore.js.map +1 -0
  191. package/datastore/useDeleteRecord.d.ts +34 -0
  192. package/datastore/useDeleteRecord.d.ts.map +1 -0
  193. package/datastore/useDeleteRecord.js +43 -0
  194. package/datastore/useDeleteRecord.js.map +1 -0
  195. package/datastore/useInsertRecord.d.ts +50 -0
  196. package/datastore/useInsertRecord.d.ts.map +1 -0
  197. package/datastore/useInsertRecord.js +55 -0
  198. package/datastore/useInsertRecord.js.map +1 -0
  199. package/datastore/useRecordCollection.d.ts +104 -0
  200. package/datastore/useRecordCollection.d.ts.map +1 -0
  201. package/datastore/useRecordCollection.js +136 -0
  202. package/datastore/useRecordCollection.js.map +1 -0
  203. package/datastore/useRecordList.d.ts +66 -0
  204. package/datastore/useRecordList.d.ts.map +1 -0
  205. package/datastore/useRecordList.js +58 -0
  206. package/datastore/useRecordList.js.map +1 -0
  207. package/datastore/useUpdateRecord.d.ts +52 -0
  208. package/datastore/useUpdateRecord.d.ts.map +1 -0
  209. package/datastore/useUpdateRecord.js +55 -0
  210. package/datastore/useUpdateRecord.js.map +1 -0
  211. package/environment/EnvironmentListPanel.d.ts.map +1 -1
  212. package/environment/EnvironmentListPanel.js +12 -7
  213. package/environment/EnvironmentListPanel.js.map +1 -1
  214. package/execution/index.d.ts +1 -2
  215. package/execution/index.d.ts.map +1 -1
  216. package/execution/index.js +0 -1
  217. package/execution/index.js.map +1 -1
  218. package/execution/useLiveAgentExecution.d.ts +17 -1
  219. package/execution/useLiveAgentExecution.d.ts.map +1 -1
  220. package/execution/useLiveAgentExecution.js +19 -4
  221. package/execution/useLiveAgentExecution.js.map +1 -1
  222. package/iam-policy/index.d.ts +1 -1
  223. package/iam-policy/index.d.ts.map +1 -1
  224. package/iam-policy/index.js.map +1 -1
  225. package/iam-policy/useCheckPermission.d.ts +32 -11
  226. package/iam-policy/useCheckPermission.d.ts.map +1 -1
  227. package/iam-policy/useCheckPermission.js +24 -19
  228. package/iam-policy/useCheckPermission.js.map +1 -1
  229. package/index.d.ts +16 -10
  230. package/index.d.ts.map +1 -1
  231. package/index.js +16 -5
  232. package/index.js.map +1 -1
  233. package/internal/useInViewport.d.ts +24 -0
  234. package/internal/useInViewport.d.ts.map +1 -0
  235. package/internal/useInViewport.js +49 -0
  236. package/internal/useInViewport.js.map +1 -0
  237. package/library/VisibilitySelector.d.ts +22 -6
  238. package/library/VisibilitySelector.d.ts.map +1 -1
  239. package/library/VisibilitySelector.js +12 -4
  240. package/library/VisibilitySelector.js.map +1 -1
  241. package/library/index.d.ts +1 -8
  242. package/library/index.d.ts.map +1 -1
  243. package/library/index.js +0 -4
  244. package/library/index.js.map +1 -1
  245. package/library/useApplyResource.d.ts +12 -12
  246. package/library/useApplyResource.d.ts.map +1 -1
  247. package/library/useApplyResource.js +16 -25
  248. package/library/useApplyResource.js.map +1 -1
  249. package/library/useExportResource.d.ts +13 -9
  250. package/library/useExportResource.d.ts.map +1 -1
  251. package/library/useExportResource.js +18 -36
  252. package/library/useExportResource.js.map +1 -1
  253. package/manifest/ApplyManifestDialog.d.ts +48 -0
  254. package/manifest/ApplyManifestDialog.d.ts.map +1 -0
  255. package/manifest/ApplyManifestDialog.js +135 -0
  256. package/manifest/ApplyManifestDialog.js.map +1 -0
  257. package/manifest/EditResourceYamlDialog.d.ts +51 -0
  258. package/manifest/EditResourceYamlDialog.d.ts.map +1 -0
  259. package/manifest/EditResourceYamlDialog.js +104 -0
  260. package/manifest/EditResourceYamlDialog.js.map +1 -0
  261. package/manifest/RedactedSecretsNotice.d.ts +14 -0
  262. package/manifest/RedactedSecretsNotice.d.ts.map +1 -0
  263. package/manifest/RedactedSecretsNotice.js +14 -0
  264. package/manifest/RedactedSecretsNotice.js.map +1 -0
  265. package/manifest/YamlEditor.d.ts +44 -0
  266. package/manifest/YamlEditor.d.ts.map +1 -0
  267. package/manifest/YamlEditor.js +216 -0
  268. package/manifest/YamlEditor.js.map +1 -0
  269. package/manifest/index.d.ts +13 -0
  270. package/manifest/index.d.ts.map +1 -0
  271. package/manifest/index.js +13 -0
  272. package/manifest/index.js.map +1 -0
  273. package/manifest/useApplyManifest.d.ts +82 -0
  274. package/manifest/useApplyManifest.d.ts.map +1 -0
  275. package/manifest/useApplyManifest.js +180 -0
  276. package/manifest/useApplyManifest.js.map +1 -0
  277. package/manifest/useEditResourceYaml.d.ts +106 -0
  278. package/manifest/useEditResourceYaml.d.ts.map +1 -0
  279. package/manifest/useEditResourceYaml.js +168 -0
  280. package/manifest/useEditResourceYaml.js.map +1 -0
  281. package/mcp-server/McpServerDetailView.d.ts.map +1 -1
  282. package/mcp-server/McpServerDetailView.js +4 -3
  283. package/mcp-server/McpServerDetailView.js.map +1 -1
  284. package/mcp-server/steps/ReviewStep.d.ts.map +1 -1
  285. package/mcp-server/steps/ReviewStep.js +2 -3
  286. package/mcp-server/steps/ReviewStep.js.map +1 -1
  287. package/package.json +4 -4
  288. package/resource-creation/templates/workflow-templates.js +4 -4
  289. package/session/SessionViewer.js +8 -1
  290. package/session/SessionViewer.js.map +1 -1
  291. package/session/audience.d.ts +6 -1
  292. package/session/audience.d.ts.map +1 -1
  293. package/session/useEditSessionPrep.js +3 -3
  294. package/session/useEditSessionPrep.js.map +1 -1
  295. package/settings/index.d.ts +2 -1
  296. package/settings/index.d.ts.map +1 -1
  297. package/settings/index.js +2 -1
  298. package/settings/index.js.map +1 -1
  299. package/settings/settings-nav.d.ts +22 -0
  300. package/settings/settings-nav.d.ts.map +1 -1
  301. package/settings/settings-nav.js +32 -1
  302. package/settings/settings-nav.js.map +1 -1
  303. package/settings/useSettingsNavGroups.d.ts +29 -0
  304. package/settings/useSettingsNavGroups.d.ts.map +1 -0
  305. package/settings/useSettingsNavGroups.js +61 -0
  306. package/settings/useSettingsNavGroups.js.map +1 -0
  307. package/skill/SkillDetailView.d.ts.map +1 -1
  308. package/skill/SkillDetailView.js +4 -3
  309. package/skill/SkillDetailView.js.map +1 -1
  310. package/src/access/__tests__/useManageAccess.test.tsx +104 -0
  311. package/src/agent/AgentDetailView.tsx +9 -3
  312. package/src/agent/steps/ReviewStep.tsx +2 -3
  313. package/src/billing/BaselineEditor.tsx +619 -0
  314. package/src/billing/ModelCatalogPanel.tsx +283 -0
  315. package/src/billing/ModelGovernanceDetail.tsx +289 -0
  316. package/src/billing/OperatorAccessNotice.tsx +32 -0
  317. package/src/billing/PricingGovernanceConsole.tsx +465 -0
  318. package/src/billing/PricingGovernancePanel.tsx +166 -0
  319. package/src/billing/RetireConfirm.tsx +82 -0
  320. package/src/billing/__tests__/ModelCatalogPanel.test.tsx +253 -0
  321. package/src/billing/__tests__/PricingGovernanceConsole.test.tsx +410 -0
  322. package/src/billing/__tests__/useModelGovernanceView.test.tsx +308 -0
  323. package/src/billing/form-primitives.tsx +68 -0
  324. package/src/billing/governance-primitives.tsx +133 -0
  325. package/src/billing/index.ts +37 -0
  326. package/src/billing/pricing-format.ts +53 -0
  327. package/src/billing/useDecidePricingOverride.ts +78 -0
  328. package/src/billing/useModelGovernanceView.ts +290 -0
  329. package/src/billing/useModelPricingBaselines.ts +69 -0
  330. package/src/billing/usePricingGovernance.ts +57 -0
  331. package/src/billing/useRetireModelPricingBaseline.ts +65 -0
  332. package/src/billing/useUpsertModelPricingBaseline.ts +72 -0
  333. package/src/channel/AgentChannelsPanel.tsx +27 -1
  334. package/src/composer/SessionComposer.tsx +1 -1
  335. package/src/cursor-accounts/CursorAccountEditor.tsx +181 -0
  336. package/src/cursor-accounts/CursorAccountsAccessNotice.tsx +36 -0
  337. package/src/cursor-accounts/CursorAccountsConsole.tsx +810 -0
  338. package/src/cursor-accounts/__tests__/CursorAccountsConsole.test.tsx +384 -0
  339. package/src/cursor-accounts/cursor-account-format.ts +29 -0
  340. package/src/cursor-accounts/index.ts +29 -0
  341. package/src/cursor-accounts/useCursorAccountView.ts +49 -0
  342. package/src/cursor-accounts/useCursorAccounts.ts +49 -0
  343. package/src/cursor-accounts/useCursorMemberKeyActions.ts +106 -0
  344. package/src/cursor-accounts/useDeleteCursorAccount.ts +62 -0
  345. package/src/cursor-accounts/useSyncCursorAccount.ts +54 -0
  346. package/src/cursor-accounts/useUpsertCursorAccount.ts +57 -0
  347. package/src/datastore/CollectionRecordsBrowser.tsx +544 -0
  348. package/src/datastore/CollectionSchemaView.tsx +247 -0
  349. package/src/datastore/DatastoreDetailView.tsx +201 -0
  350. package/src/datastore/DatastoreSyncReport.tsx +105 -0
  351. package/src/datastore/DeleteDatastoreDialog.tsx +202 -0
  352. package/src/datastore/FieldValueControl.tsx +289 -0
  353. package/src/datastore/RecordFilterBuilder.tsx +411 -0
  354. package/src/datastore/RecordFormPanel.tsx +432 -0
  355. package/src/datastore/__tests__/CollectionRecordsBrowser.test.tsx +207 -0
  356. package/src/datastore/__tests__/DeleteDatastoreDialog.test.tsx +133 -0
  357. package/src/datastore/__tests__/FieldValueControl.test.tsx +160 -0
  358. package/src/datastore/__tests__/RecordFilterBuilder.test.tsx +141 -0
  359. package/src/datastore/__tests__/RecordFormPanel.test.tsx +227 -0
  360. package/src/datastore/__tests__/recordFilter.test.ts +156 -0
  361. package/src/datastore/__tests__/recordMutations.test.tsx +195 -0
  362. package/src/datastore/__tests__/recordValues.test.ts +359 -0
  363. package/src/datastore/__tests__/schemaAndSyncViews.test.tsx +142 -0
  364. package/src/datastore/__tests__/useDatastoreDescription.test.tsx +143 -0
  365. package/src/datastore/__tests__/useRecordCollection.test.tsx +250 -0
  366. package/src/datastore/__tests__/useRecordList.test.tsx +85 -0
  367. package/src/datastore/index.ts +111 -0
  368. package/src/datastore/recordFilter.ts +140 -0
  369. package/src/datastore/recordValues.ts +327 -0
  370. package/src/datastore/useDatastore.ts +67 -0
  371. package/src/datastore/useDatastoreCount.ts +67 -0
  372. package/src/datastore/useDatastoreDescription.ts +90 -0
  373. package/src/datastore/useDatastoreList.ts +79 -0
  374. package/src/datastore/useDatastoreSearch.ts +39 -0
  375. package/src/datastore/useDeleteDatastore.ts +87 -0
  376. package/src/datastore/useDeleteRecord.ts +77 -0
  377. package/src/datastore/useInsertRecord.ts +92 -0
  378. package/src/datastore/useRecordCollection.ts +256 -0
  379. package/src/datastore/useRecordList.ts +131 -0
  380. package/src/datastore/useUpdateRecord.ts +95 -0
  381. package/src/environment/EnvironmentListPanel.tsx +24 -0
  382. package/src/execution/__tests__/useArtifactInspection.test.tsx +12 -2
  383. package/src/execution/__tests__/useLiveAgentExecution.test.tsx +125 -0
  384. package/src/execution/index.ts +4 -7
  385. package/src/execution/useLiveAgentExecution.ts +41 -3
  386. package/src/iam-policy/__tests__/useCheckPermission.test.tsx +221 -0
  387. package/src/iam-policy/index.ts +1 -0
  388. package/src/iam-policy/useCheckPermission.ts +45 -19
  389. package/src/index.ts +167 -18
  390. package/src/internal/__tests__/useInViewport.test.tsx +115 -0
  391. package/src/internal/useInViewport.ts +63 -0
  392. package/src/library/VisibilitySelector.tsx +50 -9
  393. package/src/library/__tests__/VisibilitySelector.test.tsx +38 -0
  394. package/src/library/index.ts +4 -21
  395. package/src/library/useApplyResource.ts +27 -34
  396. package/src/library/useExportResource.ts +21 -40
  397. package/src/manifest/ApplyManifestDialog.tsx +315 -0
  398. package/src/manifest/EditResourceYamlDialog.tsx +265 -0
  399. package/src/manifest/RedactedSecretsNotice.tsx +30 -0
  400. package/src/manifest/YamlEditor.tsx +272 -0
  401. package/src/manifest/__tests__/EditResourceYamlDialog.test.tsx +118 -0
  402. package/src/manifest/__tests__/useApplyManifest.test.tsx +237 -0
  403. package/src/manifest/__tests__/useEditResourceYaml.test.tsx +252 -0
  404. package/src/manifest/index.ts +33 -0
  405. package/src/manifest/useApplyManifest.ts +270 -0
  406. package/src/manifest/useEditResourceYaml.ts +273 -0
  407. package/src/mcp-server/McpServerDetailView.tsx +7 -3
  408. package/src/mcp-server/steps/ReviewStep.tsx +2 -3
  409. package/src/resource-creation/templates/workflow-templates.ts +4 -4
  410. package/src/session/SessionViewer.tsx +7 -1
  411. package/src/session/__tests__/audienceWiring.test.tsx +31 -1
  412. package/src/session/audience.ts +6 -1
  413. package/src/session/useEditSessionPrep.ts +3 -3
  414. package/src/settings/__tests__/useSettingsNavGroups.test.tsx +138 -0
  415. package/src/settings/index.ts +5 -1
  416. package/src/settings/settings-nav.ts +43 -0
  417. package/src/settings/useSettingsNavGroups.ts +81 -0
  418. package/src/skill/SkillDetailView.tsx +7 -3
  419. package/src/workflow/WorkflowAgentCallTranscript.tsx +279 -0
  420. package/src/workflow/WorkflowDetailView.tsx +7 -3
  421. package/src/workflow/WorkflowExecutionViewer.tsx +20 -77
  422. package/src/workflow/WorkflowTaskApprovalSummary.tsx +45 -8
  423. package/src/workflow/WorkflowYamlEditor.tsx +6 -270
  424. package/src/workflow/__tests__/WorkflowAgentCallTranscript.liveregion.test.tsx +124 -0
  425. package/src/workflow/__tests__/{WorkflowAgentExecutionDocument.test.tsx → WorkflowAgentCallTranscript.test.tsx} +146 -121
  426. package/src/workflow/__tests__/WorkflowExecutionViewer.approvals.test.tsx +81 -220
  427. package/src/workflow/__tests__/WorkflowExecutionViewer.reconciliation.test.tsx +17 -16
  428. package/src/workflow/__tests__/WorkflowTaskApprovalSummary.test.tsx +52 -2
  429. package/src/workflow/__tests__/WorkflowTaskThread.test.tsx +168 -185
  430. package/src/workflow/__tests__/agent-call-live-experience.test.ts +4 -4
  431. package/src/workflow/__tests__/task-approval.test.ts +119 -0
  432. package/src/workflow/__tests__/task-presentation.test.ts +35 -1
  433. package/src/workflow/__tests__/useWorkflowExecutionPanel.test.ts +0 -57
  434. package/src/workflow/index.ts +6 -3
  435. package/src/workflow/task-detail/index.ts +3 -0
  436. package/src/workflow/task-detail/task-approval.ts +95 -1
  437. package/src/workflow/thread/WorkflowTaskThread.tsx +96 -252
  438. package/src/workflow/thread/task-presentation.ts +8 -2
  439. package/src/workflow/useWorkflowExecutionPanel.ts +0 -47
  440. package/styles.css +1 -1
  441. package/workflow/CanvasTransitionEdge.d.ts +1 -1
  442. package/workflow/WorkflowAgentCallTranscript.d.ts +87 -0
  443. package/workflow/WorkflowAgentCallTranscript.d.ts.map +1 -0
  444. package/workflow/WorkflowAgentCallTranscript.js +98 -0
  445. package/workflow/WorkflowAgentCallTranscript.js.map +1 -0
  446. package/workflow/WorkflowDetailView.d.ts.map +1 -1
  447. package/workflow/WorkflowDetailView.js +4 -3
  448. package/workflow/WorkflowDetailView.js.map +1 -1
  449. package/workflow/WorkflowExecutionViewer.d.ts.map +1 -1
  450. package/workflow/WorkflowExecutionViewer.js +23 -52
  451. package/workflow/WorkflowExecutionViewer.js.map +1 -1
  452. package/workflow/WorkflowTaskApprovalSummary.d.ts +1 -1
  453. package/workflow/WorkflowTaskApprovalSummary.d.ts.map +1 -1
  454. package/workflow/WorkflowTaskApprovalSummary.js +18 -1
  455. package/workflow/WorkflowTaskApprovalSummary.js.map +1 -1
  456. package/workflow/WorkflowYamlEditor.d.ts +2 -42
  457. package/workflow/WorkflowYamlEditor.d.ts.map +1 -1
  458. package/workflow/WorkflowYamlEditor.js +5 -214
  459. package/workflow/WorkflowYamlEditor.js.map +1 -1
  460. package/workflow/index.d.ts +2 -2
  461. package/workflow/index.d.ts.map +1 -1
  462. package/workflow/index.js +2 -2
  463. package/workflow/index.js.map +1 -1
  464. package/workflow/task-detail/index.d.ts +1 -1
  465. package/workflow/task-detail/index.d.ts.map +1 -1
  466. package/workflow/task-detail/index.js +1 -1
  467. package/workflow/task-detail/index.js.map +1 -1
  468. package/workflow/task-detail/task-approval.d.ts +44 -1
  469. package/workflow/task-detail/task-approval.d.ts.map +1 -1
  470. package/workflow/task-detail/task-approval.js +47 -0
  471. package/workflow/task-detail/task-approval.js.map +1 -1
  472. package/workflow/thread/WorkflowTaskThread.d.ts +17 -25
  473. package/workflow/thread/WorkflowTaskThread.d.ts.map +1 -1
  474. package/workflow/thread/WorkflowTaskThread.js +60 -105
  475. package/workflow/thread/WorkflowTaskThread.js.map +1 -1
  476. package/workflow/thread/task-presentation.d.ts.map +1 -1
  477. package/workflow/thread/task-presentation.js +7 -2
  478. package/workflow/thread/task-presentation.js.map +1 -1
  479. package/workflow/useWorkflowExecutionPanel.d.ts +0 -12
  480. package/workflow/useWorkflowExecutionPanel.d.ts.map +1 -1
  481. package/workflow/useWorkflowExecutionPanel.js +0 -12
  482. package/workflow/useWorkflowExecutionPanel.js.map +1 -1
  483. package/execution/agent-execution-document.d.ts +0 -31
  484. package/execution/agent-execution-document.d.ts.map +0 -1
  485. package/execution/agent-execution-document.js +0 -48
  486. package/execution/agent-execution-document.js.map +0 -1
  487. package/library/ImportResourceDialog.d.ts +0 -43
  488. package/library/ImportResourceDialog.d.ts.map +0 -1
  489. package/library/ImportResourceDialog.js +0 -90
  490. package/library/ImportResourceDialog.js.map +0 -1
  491. package/library/parse-resource-yaml.d.ts +0 -63
  492. package/library/parse-resource-yaml.d.ts.map +0 -1
  493. package/library/parse-resource-yaml.js +0 -407
  494. package/library/parse-resource-yaml.js.map +0 -1
  495. package/library/serialize-resource-yaml.d.ts +0 -103
  496. package/library/serialize-resource-yaml.d.ts.map +0 -1
  497. package/library/serialize-resource-yaml.js +0 -565
  498. package/library/serialize-resource-yaml.js.map +0 -1
  499. package/library/useImportResource.d.ts +0 -84
  500. package/library/useImportResource.d.ts.map +0 -1
  501. package/library/useImportResource.js +0 -188
  502. package/library/useImportResource.js.map +0 -1
  503. package/src/execution/__tests__/agent-execution-document.test.ts +0 -45
  504. package/src/execution/agent-execution-document.ts +0 -54
  505. package/src/library/ImportResourceDialog.tsx +0 -227
  506. package/src/library/parse-resource-yaml.ts +0 -630
  507. package/src/library/serialize-resource-yaml.ts +0 -756
  508. package/src/library/useImportResource.ts +0 -253
  509. package/src/workflow/WorkflowAgentExecutionDocument.tsx +0 -283
  510. package/workflow/WorkflowAgentExecutionDocument.d.ts +0 -79
  511. package/workflow/WorkflowAgentExecutionDocument.d.ts.map +0 -1
  512. package/workflow/WorkflowAgentExecutionDocument.js +0 -87
  513. package/workflow/WorkflowAgentExecutionDocument.js.map +0 -1
@@ -0,0 +1,102 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useCallback, useMemo, useState } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import { getUserMessage, isPermissionDenied } from "@stigmer/sdk";
6
+ import { ModelPricingBaselineStatus, } from "@stigmer/protos/ai/stigmer/billing/v1/model_pricing_baseline_pb";
7
+ import { Button } from "../button/index.js";
8
+ import { BaselineEditor } from "./BaselineEditor.js";
9
+ import { RetireConfirm } from "./RetireConfirm.js";
10
+ import { OperatorAccessNotice } from "./OperatorAccessNotice.js";
11
+ import { ZERO, formatRate } from "./pricing-format.js";
12
+ import { useModelPricingBaselines } from "./useModelPricingBaselines.js";
13
+ import { useUpsertModelPricingBaseline } from "./useUpsertModelPricingBaseline.js";
14
+ import { useRetireModelPricingBaseline } from "./useRetireModelPricingBaseline.js";
15
+ /**
16
+ * Platform-operator panel for authoring the model registry baseline:
17
+ * the catalog list with revision history, an add/edit form with an
18
+ * explicit old-to-new rate confirmation, and typed-confirmation
19
+ * retirement (DD-004 — this replaces hand edits of
20
+ * `model-registry.json`).
21
+ *
22
+ * Prefer {@link PricingGovernanceConsole} for new surfaces — it
23
+ * composes this catalog with the governance view into one tabbed
24
+ * console. This standalone panel remains for consumers embedding just
25
+ * the catalog editor.
26
+ *
27
+ * Requires `can_manage_model_pricing` on `platform:stigmer` — render it
28
+ * only in operator-scoped surfaces. Rates are raw provider prices
29
+ * (pre-markup), not customer prices.
30
+ *
31
+ * @example
32
+ * ```tsx
33
+ * <ModelCatalogPanel />
34
+ * ```
35
+ */
36
+ export function ModelCatalogPanel({ className }) {
37
+ const [showHistory, setShowHistory] = useState(false);
38
+ const { baselines, isLoading, error, refetch } = useModelPricingBaselines({
39
+ includeHistory: showHistory,
40
+ });
41
+ const { upsert, isSubmitting: isUpserting, error: upsertError, clearError: clearUpsertError } = useUpsertModelPricingBaseline();
42
+ const { retire, isSubmitting: isRetiring, error: retireError, clearError: clearRetireError } = useRetireModelPricingBaseline();
43
+ const [editor, setEditor] = useState(null);
44
+ const [retireTarget, setRetireTarget] = useState(null);
45
+ const activeBaselines = useMemo(() => (baselines ?? []).filter((b) => b.status === ModelPricingBaselineStatus.pricing_baseline_active), [baselines]);
46
+ const historyByKey = useMemo(() => {
47
+ const map = new Map();
48
+ if (!showHistory)
49
+ return map;
50
+ for (const b of baselines ?? []) {
51
+ if (b.status === ModelPricingBaselineStatus.pricing_baseline_active)
52
+ continue;
53
+ const key = `${b.modelId}|${b.provider}|${b.harness}`;
54
+ map.set(key, [...(map.get(key) ?? []), b]);
55
+ }
56
+ return map;
57
+ }, [baselines, showHistory]);
58
+ const closeEditor = useCallback(() => {
59
+ setEditor(null);
60
+ clearUpsertError();
61
+ }, [clearUpsertError]);
62
+ const handleUpsert = useCallback(async (baseline, revisionNote) => {
63
+ await upsert({ baseline, revisionNote: revisionNote || undefined });
64
+ setEditor(null);
65
+ refetch();
66
+ }, [upsert, refetch]);
67
+ const handleRetire = useCallback(async (target, revisionNote) => {
68
+ await retire({
69
+ modelId: target.modelId,
70
+ provider: target.provider,
71
+ harness: target.harness,
72
+ revisionNote: revisionNote || undefined,
73
+ });
74
+ setRetireTarget(null);
75
+ refetch();
76
+ }, [retire, refetch]);
77
+ if (isLoading) {
78
+ return (_jsxs("div", { className: cn("space-y-2", className), "aria-busy": "true", children: [_jsx("div", { className: "h-4 w-40 animate-pulse rounded bg-muted-subtle" }), Array.from({ length: 4 }, (_, i) => (_jsx("div", { className: "h-10 animate-pulse rounded-lg bg-muted-subtle" }, i)))] }));
79
+ }
80
+ if (error) {
81
+ // A non-operator landing here is expected (the route is reachable by
82
+ // URL) — show the designed access notice, not a raw RPC error.
83
+ if (isPermissionDenied(error)) {
84
+ return _jsx(OperatorAccessNotice, { className: className });
85
+ }
86
+ return (_jsx("p", { className: cn("text-destructive text-xs", className), role: "alert", children: getUserMessage(error) }));
87
+ }
88
+ return (_jsxs("section", { className: cn("space-y-3", className), "aria-label": "Model catalog", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("h3", { className: "text-xs font-semibold text-foreground", children: "Model Catalog" }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsxs("label", { className: "flex cursor-pointer items-center gap-1.5 text-[11px] text-muted-foreground", children: [_jsx("input", { type: "checkbox", checked: showHistory, onChange: (e) => setShowHistory(e.target.checked) }), "Show revision history"] }), _jsx(Button, { size: "sm", onClick: () => setEditor({ mode: "create" }), disabled: editor !== null, children: "Add model" })] })] }), editor && (_jsx(BaselineEditor, { initial: editor.mode === "edit" ? editor.baseline : null, isSubmitting: isUpserting, submitError: upsertError, onSubmit: handleUpsert, onCancel: closeEditor })), retireTarget && (_jsx(RetireConfirm, { target: retireTarget, isSubmitting: isRetiring, submitError: retireError, onConfirm: handleRetire, onCancel: () => {
89
+ setRetireTarget(null);
90
+ clearRetireError();
91
+ } })), _jsxs("div", { className: "rounded-lg border border-border bg-card", role: "table", "aria-label": "Baseline catalog", children: [_jsxs("div", { role: "row", className: "grid grid-cols-[2fr_1fr_1fr_1fr_1fr_auto] gap-2 border-b border-border px-3 py-2 text-[11px] font-medium text-muted-foreground", children: [_jsx("span", { role: "columnheader", children: "Model" }), _jsx("span", { role: "columnheader", children: "Harness" }), _jsx("span", { role: "columnheader", className: "text-right", children: "Input" }), _jsx("span", { role: "columnheader", className: "text-right", children: "Output" }), _jsx("span", { role: "columnheader", className: "text-right", children: "Variants" }), _jsx("span", { role: "columnheader", className: "sr-only", children: "Actions" })] }), activeBaselines.length === 0 ? (_jsx("p", { className: "px-3 py-2 text-xs text-muted-foreground", children: "The catalog is empty \u2014 has the baseline seed migration run?" })) : (activeBaselines.map((baseline) => (_jsx(CatalogRow, { baseline: baseline, history: historyByKey.get(`${baseline.modelId}|${baseline.provider}|${baseline.harness}`), disabled: editor !== null || retireTarget !== null, onEdit: () => setEditor({ mode: "edit", baseline }), onRetire: () => setRetireTarget(baseline) }, baseline.baselineId))))] })] }));
92
+ }
93
+ // ---------------------------------------------------------------------------
94
+ // CatalogRow (internal)
95
+ // ---------------------------------------------------------------------------
96
+ function CatalogRow({ baseline, history, disabled, onEdit, onRetire, }) {
97
+ const variantCount = Object.keys(baseline.pricingVariants).length;
98
+ return (_jsxs("div", { className: "border-b border-border last:border-b-0", children: [_jsxs("div", { role: "row", className: "grid grid-cols-[2fr_1fr_1fr_1fr_1fr_auto] items-center gap-2 px-3 py-2 text-xs", children: [_jsxs("span", { role: "cell", className: "min-w-0", children: [_jsx("span", { className: "block truncate font-medium text-foreground", title: baseline.modelId, children: baseline.displayName || baseline.modelId }), _jsxs("span", { className: "block truncate text-[11px] text-muted-foreground", children: [baseline.modelId, baseline.featured ? " · featured" : ""] })] }), _jsx("span", { role: "cell", className: "text-muted-foreground", children: baseline.harness }), _jsx("span", { role: "cell", className: "text-right text-foreground", children: formatRate(baseline.pricing?.inputPriceMicrosPerMillion ?? ZERO) }), _jsx("span", { role: "cell", className: "text-right text-foreground", children: formatRate(baseline.pricing?.outputPriceMicrosPerMillion ?? ZERO) }), _jsx("span", { role: "cell", className: "text-right text-muted-foreground", children: variantCount > 0 ? variantCount : "—" }), _jsxs("span", { role: "cell", className: "flex shrink-0 justify-end gap-2", children: [_jsx(Button, { size: "sm", variant: "outline", disabled: disabled, onClick: onEdit, children: "Edit" }), _jsx(Button, { size: "sm", variant: "outline", disabled: disabled, onClick: onRetire, children: "Retire" })] })] }), history && history.length > 0 && (_jsx("div", { className: "space-y-1 px-3 pb-2", children: history.map((revision) => (_jsxs("p", { className: "text-[11px] text-muted-foreground", children: [revision.status === ModelPricingBaselineStatus.pricing_baseline_retired
99
+ ? "Retired"
100
+ : "Superseded", " · ", formatRate(revision.pricing?.inputPriceMicrosPerMillion ?? ZERO), " in /", " ", formatRate(revision.pricing?.outputPriceMicrosPerMillion ?? ZERO), " out", " · ", revision.decidedBy, revision.revisionNote ? ` — ${revision.revisionNote}` : ""] }, revision.baselineId))) }))] }));
101
+ }
102
+ //# sourceMappingURL=ModelCatalogPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelCatalogPanel.js","sourceRoot":"","sources":["../../src/billing/ModelCatalogPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ModelGovernanceRow } from "./useModelGovernanceView.js";
2
+ export declare function ModelGovernanceDetail({ row, onEdit, onRetire, onBack, }: {
3
+ readonly row: ModelGovernanceRow;
4
+ readonly onEdit: () => void;
5
+ readonly onRetire: () => void;
6
+ readonly onBack: () => void;
7
+ }): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=ModelGovernanceDetail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelGovernanceDetail.d.ts","sourceRoot":"","sources":["../../src/billing/ModelGovernanceDetail.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAiCtE,wBAAgB,qBAAqB,CAAC,EACpC,GAAG,EACH,MAAM,EACN,QAAQ,EACR,MAAM,GACP,EAAE;IACD,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC;CAC7B,2CAqOA"}
@@ -0,0 +1,64 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { cn } from "@stigmer/theme";
4
+ import { ModelPricingBaselineStatus } from "@stigmer/protos/ai/stigmer/billing/v1/model_pricing_baseline_pb";
5
+ import { Button } from "../button/index.js";
6
+ import { GovernanceBadge } from "./governance-primitives.js";
7
+ import { RATE_FIELD_LABELS, ZERO, formatDeltaBp, formatRate, } from "./pricing-format.js";
8
+ /** The five rate fields of a pricing block, in canonical display order. */
9
+ function blockRates(pricing) {
10
+ return [
11
+ ["Input", pricing?.inputPriceMicrosPerMillion ?? ZERO],
12
+ ["Output", pricing?.outputPriceMicrosPerMillion ?? ZERO],
13
+ ["Cache write", pricing?.cacheWritePriceMicrosPerMillion ?? ZERO],
14
+ ["Cache read", pricing?.cacheReadPriceMicrosPerMillion ?? ZERO],
15
+ ["Cursor token rate", pricing?.cursorTokenRateMicrosPerMillion ?? ZERO],
16
+ ];
17
+ }
18
+ export function ModelGovernanceDetail({ row, onEdit, onRetire, onBack, }) {
19
+ const { baseline, governance } = row;
20
+ const hasOverrides = (governance?.activeOverrides.length ?? 0) > 0;
21
+ const baseRates = [
22
+ {
23
+ label: "Input",
24
+ baseline: baseline.pricing?.inputPriceMicrosPerMillion ?? ZERO,
25
+ effective: governance?.effectiveInputMicrosPerMillion ?? null,
26
+ },
27
+ {
28
+ label: "Output",
29
+ baseline: baseline.pricing?.outputPriceMicrosPerMillion ?? ZERO,
30
+ effective: governance?.effectiveOutputMicrosPerMillion ?? null,
31
+ },
32
+ {
33
+ label: "Cache write",
34
+ baseline: baseline.pricing?.cacheWritePriceMicrosPerMillion ?? ZERO,
35
+ effective: governance?.effectiveCacheWriteMicrosPerMillion ?? null,
36
+ },
37
+ {
38
+ label: "Cache read",
39
+ baseline: baseline.pricing?.cacheReadPriceMicrosPerMillion ?? ZERO,
40
+ effective: governance?.effectiveCacheReadMicrosPerMillion ?? null,
41
+ },
42
+ {
43
+ label: "Cursor token rate",
44
+ baseline: baseline.pricing?.cursorTokenRateMicrosPerMillion ?? ZERO,
45
+ effective: governance?.effectiveCursorTokenRateMicrosPerMillion ?? null,
46
+ },
47
+ ];
48
+ return (_jsxs("div", { className: "space-y-4 rounded-lg border border-border bg-card px-4 py-3", children: [_jsxs("div", { className: "flex items-start justify-between gap-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsxs("h4", { className: "flex flex-wrap items-center gap-2 text-sm font-semibold text-foreground", children: [baseline.displayName || baseline.modelId, governance && (_jsx(GovernanceBadge, { ledgerReconcilable: governance.ledgerReconcilable, hasOverrides: hasOverrides })), baseline.featured && (_jsx("span", { className: "rounded bg-accent px-1.5 py-0.5 text-[10px] font-medium text-primary", children: "Featured" }))] }), _jsxs("p", { className: "mt-0.5 text-[11px] text-muted-foreground", children: [baseline.modelId, " \u00B7 ", baseline.provider, " \u00B7 ", baseline.harness, baseline.shortDescription ? ` — ${baseline.shortDescription}` : ""] })] }), _jsxs("div", { className: "flex shrink-0 gap-2", children: [_jsx(Button, { size: "sm", variant: "outline", onClick: onBack, children: "Back" }), _jsx(Button, { size: "sm", onClick: onEdit, children: "Edit" }), _jsx(Button, { size: "sm", variant: "outline", onClick: onRetire, children: "Retire" })] })] }), _jsxs("section", { "aria-label": "Rates", children: [_jsx("h5", { className: "mb-1.5 text-[11px] font-medium uppercase tracking-wider text-muted-foreground", children: "Rates ($ per million tokens)" }), _jsxs("div", { className: "rounded-md border border-border-muted", role: "table", "aria-label": "Baseline vs effective rates", children: [_jsxs("div", { role: "row", className: "grid grid-cols-[1.5fr_1fr_1fr] gap-2 border-b border-border-muted px-2.5 py-1.5 text-[11px] font-medium text-muted-foreground", children: [_jsx("span", { role: "columnheader", children: "Rate" }), _jsx("span", { role: "columnheader", className: "text-right", children: "Baseline" }), _jsx("span", { role: "columnheader", className: "text-right", children: "Effective" })] }), baseRates.map((rate) => {
49
+ const overridden = rate.effective !== null && rate.effective !== rate.baseline;
50
+ return (_jsxs("div", { role: "row", className: "grid grid-cols-[1.5fr_1fr_1fr] gap-2 border-b border-border-muted px-2.5 py-1.5 text-xs last:border-b-0", children: [_jsx("span", { role: "cell", className: "text-muted-foreground", children: rate.label }), _jsx("span", { role: "cell", className: cn("text-right text-foreground", overridden && "line-through text-muted-foreground"), children: formatRate(rate.baseline) }), _jsx("span", { role: "cell", className: cn("text-right text-foreground", overridden && "font-medium"), children: rate.effective !== null ? formatRate(rate.effective) : "—" })] }, rate.label));
51
+ })] })] }), hasOverrides && governance && (_jsxs("section", { "aria-label": "Active pricing overrides", children: [_jsx("h5", { className: "mb-1.5 text-[11px] font-medium uppercase tracking-wider text-muted-foreground", children: "Active Overrides" }), _jsx("div", { className: "space-y-1", children: governance.activeOverrides.map((override) => (_jsxs("p", { className: "text-[11px] text-muted-foreground", children: [_jsxs("span", { className: "font-medium text-foreground", children: [RATE_FIELD_LABELS[override.rateField] ?? "Rate", override.variant ? ` (${override.variant})` : ""] }), " → ", formatRate(override.rateMicrosPerMillion), override.provenance && (_jsxs(_Fragment, { children: [" · ledger observed ", formatRate(override.provenance.observedRateMicrosPerMillion), " (", formatDeltaBp(override.provenance.deltaBasisPoints), ") over ", override.provenance.windowFrom, "..", override.provenance.windowTo] }))] }, override.overrideId))) })] })), Object.keys(baseline.pricingVariants).length > 0 && (_jsxs("section", { "aria-label": "Pricing variants", children: [_jsx("h5", { className: "mb-1.5 text-[11px] font-medium uppercase tracking-wider text-muted-foreground", children: "Variants" }), _jsx("div", { className: "space-y-2", children: Object.entries(baseline.pricingVariants).map(([key, variant]) => {
52
+ const variantEntry = row.variantGovernance.find((entry) => entry.variant === key) ?? null;
53
+ return (_jsxs("div", { className: "rounded-md border border-border-muted px-2.5 py-2", children: [_jsxs("p", { className: "text-xs font-medium text-foreground", children: [key, variantEntry && (_jsx("span", { className: "ml-2 align-middle", children: _jsx(GovernanceBadge, { ledgerReconcilable: variantEntry.ledgerReconcilable, hasOverrides: variantEntry.activeOverrides.length > 0 }) }))] }), _jsx("p", { className: "mt-0.5 text-[11px] text-muted-foreground", children: blockRates(variant.pricing)
54
+ .filter(([, micros]) => micros > ZERO)
55
+ .map(([label, micros]) => `${label} ${formatRate(micros)}`)
56
+ .join(" · ") || "No rates set" }), variant.wireIds.length > 0 && (_jsxs("p", { className: "mt-0.5 text-[11px] text-muted-foreground", children: ["Wire ids: ", variant.wireIds.join(", ")] }))] }, key));
57
+ }) })] })), _jsxs("section", { "aria-label": "Catalog metadata", children: [_jsx("h5", { className: "mb-1.5 text-[11px] font-medium uppercase tracking-wider text-muted-foreground", children: "Catalog" }), _jsxs("dl", { className: "grid grid-cols-2 gap-x-4 gap-y-1 text-xs sm:grid-cols-3", children: [_jsx(MetaItem, { label: "Provider API id", value: baseline.apiModelId || "—" }), _jsx(MetaItem, { label: "Speed tier", value: baseline.speedTier || "—" }), _jsx(MetaItem, { label: "Cost tier", value: baseline.costTier || "—" }), _jsx(MetaItem, { label: "Context window", value: baseline.contextWindowTokens > 0 ? baseline.contextWindowTokens.toLocaleString() : "—" }), _jsx(MetaItem, { label: "Max output tokens", value: baseline.maxOutputTokens > 0 ? baseline.maxOutputTokens.toLocaleString() : "—" }), _jsx(MetaItem, { label: "Token counter", value: baseline.tokenCounterMethod || "—" })] })] }), _jsxs("section", { "aria-label": "Revision history", children: [_jsx("h5", { className: "mb-1.5 text-[11px] font-medium uppercase tracking-wider text-muted-foreground", children: "Revision History" }), row.history.length === 0 ? (_jsx("p", { className: "text-[11px] text-muted-foreground", children: "No previous revisions \u2014 this is the original entry." })) : (_jsx("div", { className: "space-y-1", children: row.history.map((revision) => (_jsxs("p", { className: "text-[11px] text-muted-foreground", children: [revision.status === ModelPricingBaselineStatus.pricing_baseline_retired
58
+ ? "Retired"
59
+ : "Superseded", " · ", formatRate(revision.pricing?.inputPriceMicrosPerMillion ?? ZERO), " in /", " ", formatRate(revision.pricing?.outputPriceMicrosPerMillion ?? ZERO), " out", " · ", revision.decidedBy, revision.revisionNote ? ` — ${revision.revisionNote}` : ""] }, revision.baselineId))) }))] })] }));
60
+ }
61
+ function MetaItem({ label, value }) {
62
+ return (_jsxs("div", { children: [_jsx("dt", { className: "text-[11px] text-muted-foreground", children: label }), _jsx("dd", { className: "text-foreground", children: value })] }));
63
+ }
64
+ //# sourceMappingURL=ModelGovernanceDetail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelGovernanceDetail.js","sourceRoot":"","sources":["../../src/billing/ModelGovernanceDetail.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The access-denied state for platform-operator pricing surfaces
3
+ * (governance + catalog panels). Server-side authorization
4
+ * (`can_manage_model_pricing` on `platform:stigmer`) is the real gate —
5
+ * this is the honest, designed face of that denial for anyone who
6
+ * navigates to an operator route without the permission, instead of a
7
+ * raw RPC error string.
8
+ */
9
+ export declare function OperatorAccessNotice({ className }: {
10
+ readonly className?: string;
11
+ }): import("react/jsx-runtime").JSX.Element;
12
+ //# sourceMappingURL=OperatorAccessNotice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OperatorAccessNotice.d.ts","sourceRoot":"","sources":["../../src/billing/OperatorAccessNotice.tsx"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CAmBlF"}
@@ -0,0 +1,15 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { cn } from "@stigmer/theme";
4
+ /**
5
+ * The access-denied state for platform-operator pricing surfaces
6
+ * (governance + catalog panels). Server-side authorization
7
+ * (`can_manage_model_pricing` on `platform:stigmer`) is the real gate —
8
+ * this is the honest, designed face of that denial for anyone who
9
+ * navigates to an operator route without the permission, instead of a
10
+ * raw RPC error string.
11
+ */
12
+ export function OperatorAccessNotice({ className }) {
13
+ return (_jsxs("div", { className: cn("rounded-lg border border-border bg-card px-4 py-6 text-center", className), role: "status", children: [_jsx("p", { className: "text-xs font-semibold text-foreground", children: "Platform operator access required" }), _jsx("p", { className: "mx-auto mt-1 max-w-md text-xs text-muted-foreground", children: "Model pricing governance is a Stigmer-internal surface. It needs the platform operator role \u2014 organization roles do not grant it. If you believe you should have access, contact a platform operator." })] }));
14
+ }
15
+ //# sourceMappingURL=OperatorAccessNotice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OperatorAccessNotice.js","sourceRoot":"","sources":["../../src/billing/OperatorAccessNotice.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAEpC;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAE,SAAS,EAAmC;IACjF,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,+DAA+D,EAC/D,SAAS,CACV,EACD,IAAI,EAAC,QAAQ,aAEb,YAAG,SAAS,EAAC,uCAAuC,kDAEhD,EACJ,YAAG,SAAS,EAAC,qDAAqD,2NAI9D,IACA,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Tab ids of {@link PricingGovernanceConsole}, accepted by
3
+ * {@link PricingGovernanceConsoleProps.defaultTab}.
4
+ *
5
+ * These ids are deep-link targets: consumers wire them from their own
6
+ * routing (e.g. a `?tab=sign-offs` query param), and external surfaces
7
+ * compose URLs against them. Renaming a member is a breaking change to
8
+ * every link in the wild, not just to this component's props.
9
+ */
10
+ export type PricingGovernanceTab = "models" | "sign-offs";
11
+ /** Props for {@link PricingGovernanceConsole}. */
12
+ export interface PricingGovernanceConsoleProps {
13
+ /** Additional CSS class names. */
14
+ readonly className?: string;
15
+ /**
16
+ * The tab shown on first render. Defaults to `"models"`.
17
+ *
18
+ * Read once at mount, like a form field's `defaultValue` — changing
19
+ * it afterwards has no effect, and the user's tab choice stays local
20
+ * (the console never writes it back anywhere). Wire it from routing
21
+ * to make the tab URL-addressable:
22
+ *
23
+ * ```tsx
24
+ * // e.g. honoring a ?tab=sign-offs deep link
25
+ * const tab = new URLSearchParams(window.location.search).get("tab");
26
+ * <PricingGovernanceConsole
27
+ * defaultTab={tab === "sign-offs" ? "sign-offs" : undefined}
28
+ * />
29
+ * ```
30
+ */
31
+ readonly defaultTab?: PricingGovernanceTab;
32
+ }
33
+ /**
34
+ * The platform-operator pricing console: a tabbed surface over the
35
+ * model registry baseline and the pricing feedback loop.
36
+ *
37
+ * - **Models** — every catalog entry joined with its governance state
38
+ * (effective vs baseline rates, ledger verification), searchable.
39
+ * Selecting a row opens a read-only detail record; editing (with an
40
+ * explicit old→new rate confirmation) and typed-confirmation
41
+ * retirement are deliberate steps from there.
42
+ * - **Sign-Offs** — pricing overrides proposed by reconciliation and
43
+ * awaiting a human decision, searchable; the tab badge shows the
44
+ * pending count from anywhere in the console.
45
+ *
46
+ * Requires `can_manage_model_pricing` on `platform:stigmer` — render it
47
+ * only in operator-scoped surfaces (non-operators see the designed
48
+ * access notice). Rates shown are raw provider prices (pre-markup),
49
+ * not customer prices.
50
+ *
51
+ * @example
52
+ * ```tsx
53
+ * <PricingGovernanceConsole />
54
+ * ```
55
+ */
56
+ export declare function PricingGovernanceConsole({ className, defaultTab, }: PricingGovernanceConsoleProps): import("react/jsx-runtime").JSX.Element;
57
+ //# sourceMappingURL=PricingGovernanceConsole.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PricingGovernanceConsole.d.ts","sourceRoot":"","sources":["../../src/billing/PricingGovernanceConsole.tsx"],"names":[],"mappings":"AAuBA;;;;;;;;GAQG;AACH,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE1D,kDAAkD;AAClD,MAAM,WAAW,6BAA6B;IAC5C,kCAAkC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,oBAAoB,CAAC;CAC5C;AAOD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,SAAS,EACT,UAAU,GACX,EAAE,6BAA6B,2CA+H/B"}
@@ -0,0 +1,164 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useCallback, useState } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import { getUserMessage, isPermissionDenied } from "@stigmer/sdk";
6
+ import { Button } from "../button/index.js";
7
+ import { Tabs } from "../tabs/Tabs.js";
8
+ import { BaselineEditor } from "./BaselineEditor.js";
9
+ import { RetireConfirm } from "./RetireConfirm.js";
10
+ import { ModelGovernanceDetail } from "./ModelGovernanceDetail.js";
11
+ import { OperatorAccessNotice } from "./OperatorAccessNotice.js";
12
+ import { GovernanceBadge, PendingOverrideCard, RateCell } from "./governance-primitives.js";
13
+ import { INPUT_CLASSES } from "./form-primitives.js";
14
+ import { ZERO } from "./pricing-format.js";
15
+ import { useDecidePricingOverride } from "./useDecidePricingOverride.js";
16
+ import { useRetireModelPricingBaseline } from "./useRetireModelPricingBaseline.js";
17
+ import { useUpsertModelPricingBaseline } from "./useUpsertModelPricingBaseline.js";
18
+ import { useModelGovernanceView, } from "./useModelGovernanceView.js";
19
+ const TABS = [
20
+ { id: "models", label: "Models" },
21
+ { id: "sign-offs", label: "Sign-Offs" },
22
+ ];
23
+ /**
24
+ * The platform-operator pricing console: a tabbed surface over the
25
+ * model registry baseline and the pricing feedback loop.
26
+ *
27
+ * - **Models** — every catalog entry joined with its governance state
28
+ * (effective vs baseline rates, ledger verification), searchable.
29
+ * Selecting a row opens a read-only detail record; editing (with an
30
+ * explicit old→new rate confirmation) and typed-confirmation
31
+ * retirement are deliberate steps from there.
32
+ * - **Sign-Offs** — pricing overrides proposed by reconciliation and
33
+ * awaiting a human decision, searchable; the tab badge shows the
34
+ * pending count from anywhere in the console.
35
+ *
36
+ * Requires `can_manage_model_pricing` on `platform:stigmer` — render it
37
+ * only in operator-scoped surfaces (non-operators see the designed
38
+ * access notice). Rates shown are raw provider prices (pre-markup),
39
+ * not customer prices.
40
+ *
41
+ * @example
42
+ * ```tsx
43
+ * <PricingGovernanceConsole />
44
+ * ```
45
+ */
46
+ export function PricingGovernanceConsole({ className, defaultTab, }) {
47
+ const view = useModelGovernanceView();
48
+ // Seeded once from `defaultTab`, then owned locally (see the prop's
49
+ // JSDoc). The membership check is a public-API boundary guard: a JS
50
+ // consumer passing an out-of-union string must land on Models, not on
51
+ // a tabless surface.
52
+ const [activeTab, setActiveTab] = useState(() => defaultTab !== undefined && TABS.some((t) => t.id === defaultTab)
53
+ ? defaultTab
54
+ : "models");
55
+ const { decide, isSubmitting: isDeciding, error: decisionError } = useDecidePricingOverride();
56
+ const { upsert, isSubmitting: isUpserting, error: upsertError, clearError: clearUpsertError } = useUpsertModelPricingBaseline();
57
+ const { retire, isSubmitting: isRetiring, error: retireError, clearError: clearRetireError } = useRetireModelPricingBaseline();
58
+ const handleDecide = useCallback(async (overrideId, approve) => {
59
+ try {
60
+ await decide({ overrideId, approve });
61
+ // A decision changes both the pending queue and (on approval)
62
+ // the effective rates — reload the whole view.
63
+ view.refetch();
64
+ }
65
+ catch {
66
+ // Surfaced via decisionError below.
67
+ }
68
+ }, [decide, view.refetch]);
69
+ const handleUpsert = useCallback(async (baseline, revisionNote) => {
70
+ await upsert({ baseline, revisionNote: revisionNote || undefined });
71
+ view.refetch();
72
+ // An edit lands back on the (refreshed) detail; a create lands on
73
+ // the list — the new row's key is derivable but focusing it before
74
+ // the refetch resolves would show stale data.
75
+ if (view.flow.phase === "detail")
76
+ view.backToDetail();
77
+ else
78
+ view.backToList();
79
+ }, [upsert, view.refetch, view.flow.phase, view.backToDetail, view.backToList]);
80
+ const handleCancelEdit = useCallback(() => {
81
+ clearUpsertError();
82
+ if (view.flow.phase === "detail")
83
+ view.backToDetail();
84
+ else
85
+ view.backToList();
86
+ }, [clearUpsertError, view.flow.phase, view.backToDetail, view.backToList]);
87
+ const handleRetire = useCallback(async (target, revisionNote) => {
88
+ await retire({
89
+ modelId: target.modelId,
90
+ provider: target.provider,
91
+ harness: target.harness,
92
+ revisionNote: revisionNote || undefined,
93
+ });
94
+ view.refetch();
95
+ view.backToList();
96
+ }, [retire, view.refetch, view.backToList]);
97
+ const handleCancelRetire = useCallback(() => {
98
+ clearRetireError();
99
+ view.backToDetail();
100
+ }, [clearRetireError, view.backToDetail]);
101
+ if (view.isLoading) {
102
+ return (_jsxs("div", { className: cn("space-y-2", className), "aria-busy": "true", children: [_jsx("div", { className: "h-4 w-40 animate-pulse rounded bg-muted-subtle" }), Array.from({ length: 4 }, (_, i) => (_jsx("div", { className: "h-10 animate-pulse rounded-lg bg-muted-subtle" }, i)))] }));
103
+ }
104
+ if (view.error) {
105
+ // A non-operator landing here is expected (the route is reachable by
106
+ // URL) — show the designed access notice, not a raw RPC error.
107
+ if (isPermissionDenied(view.error)) {
108
+ return _jsx(OperatorAccessNotice, { className: className });
109
+ }
110
+ return (_jsx("p", { className: cn("text-destructive text-xs", className), role: "alert", children: getUserMessage(view.error) }));
111
+ }
112
+ return (_jsx(Tabs, { className: className, tabs: [
113
+ TABS[0],
114
+ { ...TABS[1], badge: view.pendingCount },
115
+ ], activeTab: activeTab, onTabChange: (id) => setActiveTab(id), "aria-label": "Pricing governance sections", children: activeTab === "models" ? (_jsx(ModelsTab, { view: view, isUpserting: isUpserting, upsertError: upsertError, onUpsert: handleUpsert, onCancelEdit: handleCancelEdit, isRetiring: isRetiring, retireError: retireError, onRetire: handleRetire, onCancelRetire: handleCancelRetire })) : (_jsx(SignOffsTab, { view: view, isDeciding: isDeciding, decisionError: decisionError, onDecide: handleDecide })) }));
116
+ }
117
+ // ---------------------------------------------------------------------------
118
+ // ModelsTab (internal)
119
+ // ---------------------------------------------------------------------------
120
+ function ModelsTab({ view, isUpserting, upsertError, onUpsert, onCancelEdit, isRetiring, retireError, onRetire, onCancelRetire, }) {
121
+ const { flow, selected } = view;
122
+ if (flow.phase === "create") {
123
+ return (_jsx(BaselineEditor, { initial: null, isSubmitting: isUpserting, submitError: upsertError, onSubmit: onUpsert, onCancel: onCancelEdit }));
124
+ }
125
+ // A stale detail key (e.g. the model was just retired) falls through
126
+ // to the list rather than rendering an empty record.
127
+ if (flow.phase === "detail" && selected) {
128
+ if (flow.mode === "edit") {
129
+ return (_jsx(BaselineEditor, { initial: selected.baseline, isSubmitting: isUpserting, submitError: upsertError, onSubmit: onUpsert, onCancel: onCancelEdit }));
130
+ }
131
+ if (flow.mode === "retire") {
132
+ return (_jsx(RetireConfirm, { target: selected.baseline, isSubmitting: isRetiring, submitError: retireError, onConfirm: onRetire, onCancel: onCancelRetire }));
133
+ }
134
+ return (_jsx(ModelGovernanceDetail, { row: selected, onEdit: view.openEdit, onRetire: view.openRetire, onBack: view.backToList }));
135
+ }
136
+ return (_jsxs("div", { className: "space-y-3", children: [_jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsx("input", { type: "search", className: cn(INPUT_CLASSES, "max-w-xs"), value: view.modelQuery, onChange: (e) => view.setModelQuery(e.target.value), placeholder: "Search models\u2026", "aria-label": "Search models" }), _jsx(Button, { size: "sm", onClick: view.openCreate, children: "Add model" })] }), _jsxs("div", { className: "rounded-lg border border-border bg-card", children: [_jsxs("div", { "aria-hidden": "true", className: "grid grid-cols-[2fr_1fr_1fr_1fr_0.7fr_1fr] gap-2 border-b border-border px-3 py-2 text-[11px] font-medium text-muted-foreground", children: [_jsx("span", { children: "Model" }), _jsx("span", { children: "Harness" }), _jsx("span", { className: "text-right", children: "Input" }), _jsx("span", { className: "text-right", children: "Output" }), _jsx("span", { className: "text-right", children: "Variants" }), _jsx("span", { className: "text-right", children: "Governance" })] }), view.models.length === 0 ? (_jsx("p", { className: "px-3 py-2 text-xs text-muted-foreground", children: view.modelQuery.trim() !== ""
137
+ ? `No models match "${view.modelQuery.trim()}".`
138
+ : "The catalog is empty — has the baseline seed migration run?" })) : (_jsx("ul", { role: "list", "aria-label": "Models", className: "m-0 list-none p-0", children: view.models.map((row) => (_jsx(ModelRow, { row: row, onOpen: () => view.openDetail(row.key) }, row.key))) }))] })] }));
139
+ }
140
+ /**
141
+ * One model row: a real button (keyboard + AT support for "open the
142
+ * record" for free) laid out on the shared column grid. Its full text
143
+ * content is its accessible name, so AT users hear the same facts the
144
+ * columns show.
145
+ */
146
+ function ModelRow({ row, onOpen, }) {
147
+ const { baseline, governance } = row;
148
+ const variantCount = Object.keys(baseline.pricingVariants).length;
149
+ const hasOverrides = (governance?.activeOverrides.length ?? 0) > 0;
150
+ return (_jsx("li", { className: "border-b border-border last:border-b-0", children: _jsxs("button", { type: "button", onClick: onOpen, className: cn("grid w-full grid-cols-[2fr_1fr_1fr_1fr_0.7fr_1fr] items-center gap-2 px-3 py-2 text-left text-xs", "transition-colors hover:bg-accent", "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"), children: [_jsxs("span", { className: "min-w-0", children: [_jsx("span", { className: "block truncate font-medium text-foreground", title: baseline.modelId, children: baseline.displayName || baseline.modelId }), _jsxs("span", { className: "block truncate text-[11px] text-muted-foreground", children: [baseline.modelId, baseline.featured ? " · featured" : ""] })] }), _jsx("span", { className: "text-muted-foreground", children: baseline.harness }), _jsx(RateCell, { baseline: baseline.pricing?.inputPriceMicrosPerMillion ?? ZERO, effective: governance?.effectiveInputMicrosPerMillion ??
151
+ baseline.pricing?.inputPriceMicrosPerMillion ??
152
+ ZERO }), _jsx(RateCell, { baseline: baseline.pricing?.outputPriceMicrosPerMillion ?? ZERO, effective: governance?.effectiveOutputMicrosPerMillion ??
153
+ baseline.pricing?.outputPriceMicrosPerMillion ??
154
+ ZERO }), _jsx("span", { className: "text-right text-muted-foreground", children: variantCount > 0 ? variantCount : "—" }), _jsx("span", { className: "text-right", children: governance ? (_jsx(GovernanceBadge, { ledgerReconcilable: governance.ledgerReconcilable, hasOverrides: hasOverrides })) : (_jsx("span", { className: "text-[10px] text-muted-foreground", children: "\u2014" })) })] }) }));
155
+ }
156
+ // ---------------------------------------------------------------------------
157
+ // SignOffsTab (internal)
158
+ // ---------------------------------------------------------------------------
159
+ function SignOffsTab({ view, isDeciding, decisionError, onDecide, }) {
160
+ return (_jsxs("div", { className: "space-y-3", children: [_jsx("input", { type: "search", className: cn(INPUT_CLASSES, "max-w-xs"), value: view.signOffQuery, onChange: (e) => view.setSignOffQuery(e.target.value), placeholder: "Search sign-offs\u2026", "aria-label": "Search sign-offs" }), decisionError && (_jsx("p", { className: "text-destructive text-xs", role: "alert", children: getUserMessage(decisionError) })), view.pendingOverrides.length === 0 ? (_jsx("p", { className: "text-xs text-muted-foreground", children: view.signOffQuery.trim() !== ""
161
+ ? `No pending sign-offs match "${view.signOffQuery.trim()}".`
162
+ : "No pricing overrides awaiting a decision." })) : (_jsx("div", { className: "space-y-2", children: view.pendingOverrides.map((override) => (_jsx(PendingOverrideCard, { override: override, isSubmitting: isDeciding, onDecide: onDecide }, override.overrideId))) }))] }));
163
+ }
164
+ //# sourceMappingURL=PricingGovernanceConsole.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PricingGovernanceConsole.js","sourceRoot":"","sources":["../../src/billing/PricingGovernanceConsole.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /** Props for {@link PricingGovernancePanel}. */
2
+ export interface PricingGovernancePanelProps {
3
+ /** Additional CSS class names. */
4
+ readonly className?: string;
5
+ }
6
+ /**
7
+ * Platform-operator panel for the pricing feedback loop: pending
8
+ * override sign-offs (approve/reject) and the effective-vs-baseline
9
+ * pricing state of every model.
10
+ *
11
+ * Prefer {@link PricingGovernanceConsole} for new surfaces — it
12
+ * composes this panel's content with the model catalog into one tabbed
13
+ * console. This standalone panel remains for consumers embedding just
14
+ * the governance view.
15
+ *
16
+ * Requires `can_manage_model_pricing` on `platform:stigmer` — render it
17
+ * only in operator-scoped surfaces. Rates shown are raw provider prices
18
+ * (pre-markup), not customer prices.
19
+ *
20
+ * @example
21
+ * ```tsx
22
+ * <PricingGovernancePanel />
23
+ * ```
24
+ */
25
+ export declare function PricingGovernancePanel({ className }: PricingGovernancePanelProps): import("react/jsx-runtime").JSX.Element | null;
26
+ //# sourceMappingURL=PricingGovernancePanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PricingGovernancePanel.d.ts","sourceRoot":"","sources":["../../src/billing/PricingGovernancePanel.tsx"],"names":[],"mappings":"AAYA,gDAAgD;AAChD,MAAM,WAAW,2BAA2B;IAC1C,kCAAkC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,SAAS,EAAE,EAAE,2BAA2B,kDA8FhF"}