@stigmer/react 3.2.3 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent/steps/ReviewStep.d.ts.map +1 -1
- package/agent/steps/ReviewStep.js +2 -3
- package/agent/steps/ReviewStep.js.map +1 -1
- package/billing/BaselineEditor.d.ts +9 -0
- package/billing/BaselineEditor.d.ts.map +1 -0
- package/billing/BaselineEditor.js +253 -0
- package/billing/BaselineEditor.js.map +1 -0
- package/billing/ModelCatalogPanel.d.ts +28 -0
- package/billing/ModelCatalogPanel.d.ts.map +1 -0
- package/billing/ModelCatalogPanel.js +102 -0
- package/billing/ModelCatalogPanel.js.map +1 -0
- package/billing/ModelGovernanceDetail.d.ts +8 -0
- package/billing/ModelGovernanceDetail.d.ts.map +1 -0
- package/billing/ModelGovernanceDetail.js +64 -0
- package/billing/ModelGovernanceDetail.js.map +1 -0
- package/billing/OperatorAccessNotice.d.ts +12 -0
- package/billing/OperatorAccessNotice.d.ts.map +1 -0
- package/billing/OperatorAccessNotice.js +15 -0
- package/billing/OperatorAccessNotice.js.map +1 -0
- package/billing/PricingGovernanceConsole.d.ts +57 -0
- package/billing/PricingGovernanceConsole.d.ts.map +1 -0
- package/billing/PricingGovernanceConsole.js +164 -0
- package/billing/PricingGovernanceConsole.js.map +1 -0
- package/billing/PricingGovernancePanel.d.ts +26 -0
- package/billing/PricingGovernancePanel.d.ts.map +1 -0
- package/billing/PricingGovernancePanel.js +64 -0
- package/billing/PricingGovernancePanel.js.map +1 -0
- package/billing/RetireConfirm.d.ts +9 -0
- package/billing/RetireConfirm.d.ts.map +1 -0
- package/billing/RetireConfirm.js +19 -0
- package/billing/RetireConfirm.js.map +1 -0
- package/billing/form-primitives.d.ts +18 -0
- package/billing/form-primitives.d.ts.map +1 -0
- package/billing/form-primitives.js +19 -0
- package/billing/form-primitives.js.map +1 -0
- package/billing/governance-primitives.d.ts +33 -0
- package/billing/governance-primitives.d.ts.map +1 -0
- package/billing/governance-primitives.js +43 -0
- package/billing/governance-primitives.js.map +1 -0
- package/billing/index.d.ts +18 -0
- package/billing/index.d.ts.map +1 -1
- package/billing/index.js +9 -0
- package/billing/index.js.map +1 -1
- package/billing/pricing-format.d.ts +12 -0
- package/billing/pricing-format.d.ts.map +1 -0
- package/billing/pricing-format.js +50 -0
- package/billing/pricing-format.js.map +1 -0
- package/billing/useDecidePricingOverride.d.ts +46 -0
- package/billing/useDecidePricingOverride.d.ts.map +1 -0
- package/billing/useDecidePricingOverride.js +44 -0
- package/billing/useDecidePricingOverride.js.map +1 -0
- package/billing/useModelGovernanceView.d.ts +103 -0
- package/billing/useModelGovernanceView.d.ts.map +1 -0
- package/billing/useModelGovernanceView.js +144 -0
- package/billing/useModelGovernanceView.js.map +1 -0
- package/billing/useModelPricingBaselines.d.ts +40 -0
- package/billing/useModelPricingBaselines.d.ts.map +1 -0
- package/billing/useModelPricingBaselines.js +32 -0
- package/billing/useModelPricingBaselines.js.map +1 -0
- package/billing/usePricingGovernance.d.ts +39 -0
- package/billing/usePricingGovernance.d.ts.map +1 -0
- package/billing/usePricingGovernance.js +31 -0
- package/billing/usePricingGovernance.js.map +1 -0
- package/billing/useRetireModelPricingBaseline.d.ts +31 -0
- package/billing/useRetireModelPricingBaseline.d.ts.map +1 -0
- package/billing/useRetireModelPricingBaseline.js +36 -0
- package/billing/useRetireModelPricingBaseline.js.map +1 -0
- package/billing/useUpsertModelPricingBaseline.d.ts +38 -0
- package/billing/useUpsertModelPricingBaseline.d.ts.map +1 -0
- package/billing/useUpsertModelPricingBaseline.js +37 -0
- package/billing/useUpsertModelPricingBaseline.js.map +1 -0
- package/channel/AgentChannelsPanel.d.ts.map +1 -1
- package/channel/AgentChannelsPanel.js +11 -5
- package/channel/AgentChannelsPanel.js.map +1 -1
- package/composer/SessionComposer.d.ts +1 -1
- package/cursor-accounts/CursorAccountEditor.d.ts +28 -0
- package/cursor-accounts/CursorAccountEditor.d.ts.map +1 -0
- package/cursor-accounts/CursorAccountEditor.js +51 -0
- package/cursor-accounts/CursorAccountEditor.js.map +1 -0
- package/cursor-accounts/CursorAccountsAccessNotice.d.ts +11 -0
- package/cursor-accounts/CursorAccountsAccessNotice.d.ts.map +1 -0
- package/cursor-accounts/CursorAccountsAccessNotice.js +14 -0
- package/cursor-accounts/CursorAccountsAccessNotice.js.map +1 -0
- package/cursor-accounts/CursorAccountsConsole.d.ts +28 -0
- package/cursor-accounts/CursorAccountsConsole.d.ts.map +1 -0
- package/cursor-accounts/CursorAccountsConsole.js +275 -0
- package/cursor-accounts/CursorAccountsConsole.js.map +1 -0
- package/cursor-accounts/cursor-account-format.d.ts +10 -0
- package/cursor-accounts/cursor-account-format.d.ts.map +1 -0
- package/cursor-accounts/cursor-account-format.js +26 -0
- package/cursor-accounts/cursor-account-format.js.map +1 -0
- package/cursor-accounts/index.d.ts +18 -0
- package/cursor-accounts/index.d.ts.map +1 -0
- package/cursor-accounts/index.js +13 -0
- package/cursor-accounts/index.js.map +1 -0
- package/cursor-accounts/useCursorAccountView.d.ts +30 -0
- package/cursor-accounts/useCursorAccountView.d.ts.map +1 -0
- package/cursor-accounts/useCursorAccountView.js +25 -0
- package/cursor-accounts/useCursorAccountView.js.map +1 -0
- package/cursor-accounts/useCursorAccounts.d.ts +33 -0
- package/cursor-accounts/useCursorAccounts.d.ts.map +1 -0
- package/cursor-accounts/useCursorAccounts.js +25 -0
- package/cursor-accounts/useCursorAccounts.js.map +1 -0
- package/cursor-accounts/useCursorMemberKeyActions.d.ts +49 -0
- package/cursor-accounts/useCursorMemberKeyActions.d.ts.map +1 -0
- package/cursor-accounts/useCursorMemberKeyActions.js +38 -0
- package/cursor-accounts/useCursorMemberKeyActions.js.map +1 -0
- package/cursor-accounts/useDeleteCursorAccount.d.ts +30 -0
- package/cursor-accounts/useDeleteCursorAccount.d.ts.map +1 -0
- package/cursor-accounts/useDeleteCursorAccount.js +32 -0
- package/cursor-accounts/useDeleteCursorAccount.js.map +1 -0
- package/cursor-accounts/useSyncCursorAccount.d.ts +23 -0
- package/cursor-accounts/useSyncCursorAccount.d.ts.map +1 -0
- package/cursor-accounts/useSyncCursorAccount.js +31 -0
- package/cursor-accounts/useSyncCursorAccount.js.map +1 -0
- package/cursor-accounts/useUpsertCursorAccount.d.ts +26 -0
- package/cursor-accounts/useUpsertCursorAccount.d.ts.map +1 -0
- package/cursor-accounts/useUpsertCursorAccount.js +34 -0
- package/cursor-accounts/useUpsertCursorAccount.js.map +1 -0
- package/datastore/CollectionRecordsBrowser.d.ts +34 -0
- package/datastore/CollectionRecordsBrowser.d.ts.map +1 -0
- package/datastore/CollectionRecordsBrowser.js +209 -0
- package/datastore/CollectionRecordsBrowser.js.map +1 -0
- package/datastore/CollectionSchemaView.d.ts +29 -0
- package/datastore/CollectionSchemaView.d.ts.map +1 -0
- package/datastore/CollectionSchemaView.js +93 -0
- package/datastore/CollectionSchemaView.js.map +1 -0
- package/datastore/DatastoreDetailView.d.ts +44 -0
- package/datastore/DatastoreDetailView.d.ts.map +1 -0
- package/datastore/DatastoreDetailView.js +76 -0
- package/datastore/DatastoreDetailView.js.map +1 -0
- package/datastore/DatastoreSyncReport.d.ts +19 -0
- package/datastore/DatastoreSyncReport.d.ts.map +1 -0
- package/datastore/DatastoreSyncReport.js +45 -0
- package/datastore/DatastoreSyncReport.js.map +1 -0
- package/datastore/DeleteDatastoreDialog.d.ts +35 -0
- package/datastore/DeleteDatastoreDialog.d.ts.map +1 -0
- package/datastore/DeleteDatastoreDialog.js +90 -0
- package/datastore/DeleteDatastoreDialog.js.map +1 -0
- package/datastore/FieldValueControl.d.ts +55 -0
- package/datastore/FieldValueControl.d.ts.map +1 -0
- package/datastore/FieldValueControl.js +138 -0
- package/datastore/FieldValueControl.js.map +1 -0
- package/datastore/RecordFilterBuilder.d.ts +30 -0
- package/datastore/RecordFilterBuilder.d.ts.map +1 -0
- package/datastore/RecordFilterBuilder.js +122 -0
- package/datastore/RecordFilterBuilder.js.map +1 -0
- package/datastore/RecordFormPanel.d.ts +45 -0
- package/datastore/RecordFormPanel.d.ts.map +1 -0
- package/datastore/RecordFormPanel.js +215 -0
- package/datastore/RecordFormPanel.js.map +1 -0
- package/datastore/index.d.ts +43 -0
- package/datastore/index.d.ts.map +1 -0
- package/datastore/index.js +22 -0
- package/datastore/index.js.map +1 -0
- package/datastore/recordFilter.d.ts +54 -0
- package/datastore/recordFilter.d.ts.map +1 -0
- package/datastore/recordFilter.js +93 -0
- package/datastore/recordFilter.js.map +1 -0
- package/datastore/recordValues.d.ts +85 -0
- package/datastore/recordValues.d.ts.map +1 -0
- package/datastore/recordValues.js +282 -0
- package/datastore/recordValues.js.map +1 -0
- package/datastore/useDatastore.d.ts +39 -0
- package/datastore/useDatastore.d.ts.map +1 -0
- package/datastore/useDatastore.js +44 -0
- package/datastore/useDatastore.js.map +1 -0
- package/datastore/useDatastoreCount.d.ts +48 -0
- package/datastore/useDatastoreCount.d.ts.map +1 -0
- package/datastore/useDatastoreCount.js +27 -0
- package/datastore/useDatastoreCount.js.map +1 -0
- package/datastore/useDatastoreDescription.d.ts +54 -0
- package/datastore/useDatastoreDescription.d.ts.map +1 -0
- package/datastore/useDatastoreDescription.js +50 -0
- package/datastore/useDatastoreDescription.js.map +1 -0
- package/datastore/useDatastoreList.d.ts +57 -0
- package/datastore/useDatastoreList.d.ts.map +1 -0
- package/datastore/useDatastoreList.js +29 -0
- package/datastore/useDatastoreList.js.map +1 -0
- package/datastore/useDatastoreSearch.d.ts +19 -0
- package/datastore/useDatastoreSearch.d.ts.map +1 -0
- package/datastore/useDatastoreSearch.js +22 -0
- package/datastore/useDatastoreSearch.js.map +1 -0
- package/datastore/useDeleteDatastore.d.ts +53 -0
- package/datastore/useDeleteDatastore.d.ts.map +1 -0
- package/datastore/useDeleteDatastore.js +40 -0
- package/datastore/useDeleteDatastore.js.map +1 -0
- package/datastore/useDeleteRecord.d.ts +34 -0
- package/datastore/useDeleteRecord.d.ts.map +1 -0
- package/datastore/useDeleteRecord.js +43 -0
- package/datastore/useDeleteRecord.js.map +1 -0
- package/datastore/useInsertRecord.d.ts +50 -0
- package/datastore/useInsertRecord.d.ts.map +1 -0
- package/datastore/useInsertRecord.js +55 -0
- package/datastore/useInsertRecord.js.map +1 -0
- package/datastore/useRecordCollection.d.ts +104 -0
- package/datastore/useRecordCollection.d.ts.map +1 -0
- package/datastore/useRecordCollection.js +136 -0
- package/datastore/useRecordCollection.js.map +1 -0
- package/datastore/useRecordList.d.ts +66 -0
- package/datastore/useRecordList.d.ts.map +1 -0
- package/datastore/useRecordList.js +58 -0
- package/datastore/useRecordList.js.map +1 -0
- package/datastore/useUpdateRecord.d.ts +52 -0
- package/datastore/useUpdateRecord.d.ts.map +1 -0
- package/datastore/useUpdateRecord.js +55 -0
- package/datastore/useUpdateRecord.js.map +1 -0
- package/environment/EnvironmentListPanel.d.ts.map +1 -1
- package/environment/EnvironmentListPanel.js +12 -7
- package/environment/EnvironmentListPanel.js.map +1 -1
- package/iam-policy/index.d.ts +1 -1
- package/iam-policy/index.d.ts.map +1 -1
- package/iam-policy/index.js.map +1 -1
- package/iam-policy/useCheckPermission.d.ts +32 -11
- package/iam-policy/useCheckPermission.d.ts.map +1 -1
- package/iam-policy/useCheckPermission.js +24 -19
- package/iam-policy/useCheckPermission.js.map +1 -1
- package/index.d.ts +12 -6
- package/index.d.ts.map +1 -1
- package/index.js +14 -3
- package/index.js.map +1 -1
- package/library/index.d.ts +0 -7
- package/library/index.d.ts.map +1 -1
- package/library/index.js +0 -4
- package/library/index.js.map +1 -1
- package/library/useApplyResource.d.ts +12 -12
- package/library/useApplyResource.d.ts.map +1 -1
- package/library/useApplyResource.js +16 -25
- package/library/useApplyResource.js.map +1 -1
- package/library/useExportResource.d.ts +13 -9
- package/library/useExportResource.d.ts.map +1 -1
- package/library/useExportResource.js +18 -36
- package/library/useExportResource.js.map +1 -1
- package/manifest/ApplyManifestDialog.d.ts +48 -0
- package/manifest/ApplyManifestDialog.d.ts.map +1 -0
- package/manifest/ApplyManifestDialog.js +135 -0
- package/manifest/ApplyManifestDialog.js.map +1 -0
- package/manifest/EditResourceYamlDialog.d.ts +51 -0
- package/manifest/EditResourceYamlDialog.d.ts.map +1 -0
- package/manifest/EditResourceYamlDialog.js +104 -0
- package/manifest/EditResourceYamlDialog.js.map +1 -0
- package/manifest/RedactedSecretsNotice.d.ts +14 -0
- package/manifest/RedactedSecretsNotice.d.ts.map +1 -0
- package/manifest/RedactedSecretsNotice.js +14 -0
- package/manifest/RedactedSecretsNotice.js.map +1 -0
- package/manifest/YamlEditor.d.ts +44 -0
- package/manifest/YamlEditor.d.ts.map +1 -0
- package/manifest/YamlEditor.js +216 -0
- package/manifest/YamlEditor.js.map +1 -0
- package/manifest/index.d.ts +13 -0
- package/manifest/index.d.ts.map +1 -0
- package/manifest/index.js +13 -0
- package/manifest/index.js.map +1 -0
- package/manifest/useApplyManifest.d.ts +82 -0
- package/manifest/useApplyManifest.d.ts.map +1 -0
- package/manifest/useApplyManifest.js +180 -0
- package/manifest/useApplyManifest.js.map +1 -0
- package/manifest/useEditResourceYaml.d.ts +106 -0
- package/manifest/useEditResourceYaml.d.ts.map +1 -0
- package/manifest/useEditResourceYaml.js +168 -0
- package/manifest/useEditResourceYaml.js.map +1 -0
- package/mcp-server/steps/ReviewStep.d.ts.map +1 -1
- package/mcp-server/steps/ReviewStep.js +2 -3
- package/mcp-server/steps/ReviewStep.js.map +1 -1
- package/package.json +4 -4
- package/resource-creation/templates/workflow-templates.js +4 -4
- package/session/useEditSessionPrep.js +3 -3
- package/session/useEditSessionPrep.js.map +1 -1
- package/settings/index.d.ts +2 -1
- package/settings/index.d.ts.map +1 -1
- package/settings/index.js +2 -1
- package/settings/index.js.map +1 -1
- package/settings/settings-nav.d.ts +22 -0
- package/settings/settings-nav.d.ts.map +1 -1
- package/settings/settings-nav.js +32 -1
- package/settings/settings-nav.js.map +1 -1
- package/settings/useSettingsNavGroups.d.ts +29 -0
- package/settings/useSettingsNavGroups.d.ts.map +1 -0
- package/settings/useSettingsNavGroups.js +61 -0
- package/settings/useSettingsNavGroups.js.map +1 -0
- package/src/agent/steps/ReviewStep.tsx +2 -3
- package/src/billing/BaselineEditor.tsx +619 -0
- package/src/billing/ModelCatalogPanel.tsx +283 -0
- package/src/billing/ModelGovernanceDetail.tsx +289 -0
- package/src/billing/OperatorAccessNotice.tsx +32 -0
- package/src/billing/PricingGovernanceConsole.tsx +465 -0
- package/src/billing/PricingGovernancePanel.tsx +166 -0
- package/src/billing/RetireConfirm.tsx +82 -0
- package/src/billing/__tests__/ModelCatalogPanel.test.tsx +253 -0
- package/src/billing/__tests__/PricingGovernanceConsole.test.tsx +410 -0
- package/src/billing/__tests__/useModelGovernanceView.test.tsx +308 -0
- package/src/billing/form-primitives.tsx +68 -0
- package/src/billing/governance-primitives.tsx +133 -0
- package/src/billing/index.ts +37 -0
- package/src/billing/pricing-format.ts +53 -0
- package/src/billing/useDecidePricingOverride.ts +78 -0
- package/src/billing/useModelGovernanceView.ts +290 -0
- package/src/billing/useModelPricingBaselines.ts +69 -0
- package/src/billing/usePricingGovernance.ts +57 -0
- package/src/billing/useRetireModelPricingBaseline.ts +65 -0
- package/src/billing/useUpsertModelPricingBaseline.ts +72 -0
- package/src/channel/AgentChannelsPanel.tsx +27 -1
- package/src/composer/SessionComposer.tsx +1 -1
- package/src/cursor-accounts/CursorAccountEditor.tsx +181 -0
- package/src/cursor-accounts/CursorAccountsAccessNotice.tsx +36 -0
- package/src/cursor-accounts/CursorAccountsConsole.tsx +810 -0
- package/src/cursor-accounts/__tests__/CursorAccountsConsole.test.tsx +384 -0
- package/src/cursor-accounts/cursor-account-format.ts +29 -0
- package/src/cursor-accounts/index.ts +29 -0
- package/src/cursor-accounts/useCursorAccountView.ts +49 -0
- package/src/cursor-accounts/useCursorAccounts.ts +49 -0
- package/src/cursor-accounts/useCursorMemberKeyActions.ts +106 -0
- package/src/cursor-accounts/useDeleteCursorAccount.ts +62 -0
- package/src/cursor-accounts/useSyncCursorAccount.ts +54 -0
- package/src/cursor-accounts/useUpsertCursorAccount.ts +57 -0
- package/src/datastore/CollectionRecordsBrowser.tsx +544 -0
- package/src/datastore/CollectionSchemaView.tsx +247 -0
- package/src/datastore/DatastoreDetailView.tsx +201 -0
- package/src/datastore/DatastoreSyncReport.tsx +105 -0
- package/src/datastore/DeleteDatastoreDialog.tsx +202 -0
- package/src/datastore/FieldValueControl.tsx +289 -0
- package/src/datastore/RecordFilterBuilder.tsx +411 -0
- package/src/datastore/RecordFormPanel.tsx +432 -0
- package/src/datastore/__tests__/CollectionRecordsBrowser.test.tsx +207 -0
- package/src/datastore/__tests__/DeleteDatastoreDialog.test.tsx +133 -0
- package/src/datastore/__tests__/FieldValueControl.test.tsx +160 -0
- package/src/datastore/__tests__/RecordFilterBuilder.test.tsx +141 -0
- package/src/datastore/__tests__/RecordFormPanel.test.tsx +227 -0
- package/src/datastore/__tests__/recordFilter.test.ts +156 -0
- package/src/datastore/__tests__/recordMutations.test.tsx +195 -0
- package/src/datastore/__tests__/recordValues.test.ts +359 -0
- package/src/datastore/__tests__/schemaAndSyncViews.test.tsx +142 -0
- package/src/datastore/__tests__/useDatastoreDescription.test.tsx +143 -0
- package/src/datastore/__tests__/useRecordCollection.test.tsx +250 -0
- package/src/datastore/__tests__/useRecordList.test.tsx +85 -0
- package/src/datastore/index.ts +111 -0
- package/src/datastore/recordFilter.ts +140 -0
- package/src/datastore/recordValues.ts +327 -0
- package/src/datastore/useDatastore.ts +67 -0
- package/src/datastore/useDatastoreCount.ts +67 -0
- package/src/datastore/useDatastoreDescription.ts +90 -0
- package/src/datastore/useDatastoreList.ts +79 -0
- package/src/datastore/useDatastoreSearch.ts +39 -0
- package/src/datastore/useDeleteDatastore.ts +87 -0
- package/src/datastore/useDeleteRecord.ts +77 -0
- package/src/datastore/useInsertRecord.ts +92 -0
- package/src/datastore/useRecordCollection.ts +256 -0
- package/src/datastore/useRecordList.ts +131 -0
- package/src/datastore/useUpdateRecord.ts +95 -0
- package/src/environment/EnvironmentListPanel.tsx +24 -0
- package/src/execution/__tests__/useArtifactInspection.test.tsx +12 -2
- package/src/iam-policy/__tests__/useCheckPermission.test.tsx +221 -0
- package/src/iam-policy/index.ts +1 -0
- package/src/iam-policy/useCheckPermission.ts +45 -19
- package/src/index.ts +163 -13
- package/src/library/index.ts +0 -20
- package/src/library/useApplyResource.ts +27 -34
- package/src/library/useExportResource.ts +21 -40
- package/src/manifest/ApplyManifestDialog.tsx +315 -0
- package/src/manifest/EditResourceYamlDialog.tsx +265 -0
- package/src/manifest/RedactedSecretsNotice.tsx +30 -0
- package/src/manifest/YamlEditor.tsx +272 -0
- package/src/manifest/__tests__/EditResourceYamlDialog.test.tsx +118 -0
- package/src/manifest/__tests__/useApplyManifest.test.tsx +237 -0
- package/src/manifest/__tests__/useEditResourceYaml.test.tsx +252 -0
- package/src/manifest/index.ts +33 -0
- package/src/manifest/useApplyManifest.ts +270 -0
- package/src/manifest/useEditResourceYaml.ts +273 -0
- package/src/mcp-server/steps/ReviewStep.tsx +2 -3
- package/src/resource-creation/templates/workflow-templates.ts +4 -4
- package/src/session/useEditSessionPrep.ts +3 -3
- package/src/settings/__tests__/useSettingsNavGroups.test.tsx +138 -0
- package/src/settings/index.ts +5 -1
- package/src/settings/settings-nav.ts +43 -0
- package/src/settings/useSettingsNavGroups.ts +81 -0
- package/src/workflow/WorkflowYamlEditor.tsx +6 -270
- package/styles.css +1 -1
- package/workflow/CanvasTransitionEdge.d.ts +1 -1
- package/workflow/WorkflowYamlEditor.d.ts +2 -42
- package/workflow/WorkflowYamlEditor.d.ts.map +1 -1
- package/workflow/WorkflowYamlEditor.js +5 -214
- package/workflow/WorkflowYamlEditor.js.map +1 -1
- package/library/ImportResourceDialog.d.ts +0 -43
- package/library/ImportResourceDialog.d.ts.map +0 -1
- package/library/ImportResourceDialog.js +0 -90
- package/library/ImportResourceDialog.js.map +0 -1
- package/library/parse-resource-yaml.d.ts +0 -63
- package/library/parse-resource-yaml.d.ts.map +0 -1
- package/library/parse-resource-yaml.js +0 -407
- package/library/parse-resource-yaml.js.map +0 -1
- package/library/serialize-resource-yaml.d.ts +0 -103
- package/library/serialize-resource-yaml.d.ts.map +0 -1
- package/library/serialize-resource-yaml.js +0 -565
- package/library/serialize-resource-yaml.js.map +0 -1
- package/library/useImportResource.d.ts +0 -84
- package/library/useImportResource.d.ts.map +0 -1
- package/library/useImportResource.js +0 -188
- package/library/useImportResource.js.map +0 -1
- package/src/library/ImportResourceDialog.tsx +0 -227
- package/src/library/parse-resource-yaml.ts +0 -630
- package/src/library/serialize-resource-yaml.ts +0 -756
- package/src/library/useImportResource.ts +0 -253
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { ModelPricingOverride } from "@stigmer/protos/ai/stigmer/billing/v1/pricing_override_pb";
|
|
2
|
+
/**
|
|
3
|
+
* One PENDING_SIGNOFF pricing override with approve/reject actions and
|
|
4
|
+
* its ledger provenance (what was observed, against what, over which
|
|
5
|
+
* window) so the operator decides from evidence, not a bare number.
|
|
6
|
+
*/
|
|
7
|
+
export declare function PendingOverrideCard({ override, isSubmitting, onDecide, }: {
|
|
8
|
+
readonly override: ModelPricingOverride;
|
|
9
|
+
readonly isSubmitting: boolean;
|
|
10
|
+
readonly onDecide: (overrideId: string, approve: boolean) => void;
|
|
11
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
/**
|
|
13
|
+
* Effective rate; when an override moved it, the baseline shows
|
|
14
|
+
* struck-through. Pass `role="cell"` when rendered inside an ARIA
|
|
15
|
+
* table row; leave unset inside interactive list rows (a `<button>`
|
|
16
|
+
* row cannot contain table cells).
|
|
17
|
+
*/
|
|
18
|
+
export declare function RateCell({ baseline, effective, role, }: {
|
|
19
|
+
readonly baseline: bigint;
|
|
20
|
+
readonly effective: bigint;
|
|
21
|
+
readonly role?: "cell";
|
|
22
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
/**
|
|
24
|
+
* Governance state chip: how this entry's rates are governed —
|
|
25
|
+
* ledger-verified (reconcilable, no overrides), ledger-corrected
|
|
26
|
+
* (reconcilable with active overrides), or manually governed (no
|
|
27
|
+
* external ledger can verify it).
|
|
28
|
+
*/
|
|
29
|
+
export declare function GovernanceBadge({ ledgerReconcilable, hasOverrides, }: {
|
|
30
|
+
readonly ledgerReconcilable: boolean;
|
|
31
|
+
readonly hasOverrides: boolean;
|
|
32
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
33
|
+
//# sourceMappingURL=governance-primitives.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"governance-primitives.d.ts","sourceRoot":"","sources":["../../src/billing/governance-primitives.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2DAA2D,CAAC;AAStG;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,YAAY,EACZ,QAAQ,GACT,EAAE;IACD,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IACxC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACnE,2CA6CA;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,EACR,SAAS,EACT,IAAI,GACL,EAAE;IACD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB,2CAYA;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAC9B,kBAAkB,EAClB,YAAY,GACb,EAAE;IACD,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC,2CAoBA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as _jsxs, Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { cn } from "@stigmer/theme";
|
|
4
|
+
import { Button } from "../button/index.js";
|
|
5
|
+
import { RATE_FIELD_LABELS, formatDeltaBp, formatRate } from "./pricing-format.js";
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Shared display primitives for the operator pricing surfaces. Internal —
|
|
8
|
+
// not exported from the billing barrel.
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
/**
|
|
11
|
+
* One PENDING_SIGNOFF pricing override with approve/reject actions and
|
|
12
|
+
* its ledger provenance (what was observed, against what, over which
|
|
13
|
+
* window) so the operator decides from evidence, not a bare number.
|
|
14
|
+
*/
|
|
15
|
+
export function PendingOverrideCard({ override, isSubmitting, onDecide, }) {
|
|
16
|
+
const provenance = override.provenance;
|
|
17
|
+
return (_jsx("div", { className: "rounded-lg border border-border bg-card px-3 py-2", children: _jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsxs("div", { className: "min-w-0", children: [_jsxs("p", { className: "truncate text-xs font-medium text-foreground", children: [override.modelId, override.variant ? ` (${override.variant})` : "", " · ", RATE_FIELD_LABELS[override.rateField] ?? "Rate"] }), _jsx("p", { className: "text-[11px] text-muted-foreground", children: provenance ? (_jsxs(_Fragment, { children: ["Ledger observed ", formatRate(provenance.observedRateMicrosPerMillion), " vs effective ", formatRate(provenance.effectiveRateAtDerivationMicrosPerMillion), " ", "(", formatDeltaBp(provenance.deltaBasisPoints), ") over", " ", provenance.windowFrom, "..", provenance.windowTo] })) : (_jsxs(_Fragment, { children: ["Proposed rate ", formatRate(override.rateMicrosPerMillion)] })) })] }), _jsxs("div", { className: "flex shrink-0 gap-2", children: [_jsx(Button, { size: "sm", disabled: isSubmitting, onClick: () => onDecide(override.overrideId, true), children: "Approve" }), _jsx(Button, { size: "sm", variant: "outline", disabled: isSubmitting, onClick: () => onDecide(override.overrideId, false), children: "Reject" })] })] }) }));
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Effective rate; when an override moved it, the baseline shows
|
|
21
|
+
* struck-through. Pass `role="cell"` when rendered inside an ARIA
|
|
22
|
+
* table row; leave unset inside interactive list rows (a `<button>`
|
|
23
|
+
* row cannot contain table cells).
|
|
24
|
+
*/
|
|
25
|
+
export function RateCell({ baseline, effective, role, }) {
|
|
26
|
+
const overridden = baseline !== effective;
|
|
27
|
+
return (_jsxs("span", { role: role, className: "text-right text-foreground", children: [overridden && (_jsx("span", { className: "mr-1 text-[10px] text-muted-foreground line-through", children: formatRate(baseline) })), formatRate(effective)] }));
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Governance state chip: how this entry's rates are governed —
|
|
31
|
+
* ledger-verified (reconcilable, no overrides), ledger-corrected
|
|
32
|
+
* (reconcilable with active overrides), or manually governed (no
|
|
33
|
+
* external ledger can verify it).
|
|
34
|
+
*/
|
|
35
|
+
export function GovernanceBadge({ ledgerReconcilable, hasOverrides, }) {
|
|
36
|
+
if (!ledgerReconcilable) {
|
|
37
|
+
return (_jsx("span", { className: "rounded bg-muted-subtle px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground", children: "Manually governed" }));
|
|
38
|
+
}
|
|
39
|
+
return (_jsx("span", { className: cn("rounded px-1.5 py-0.5 text-[10px] font-medium", hasOverrides
|
|
40
|
+
? "bg-accent text-primary"
|
|
41
|
+
: "bg-muted-subtle text-muted-foreground"), children: hasOverrides ? "Ledger-corrected" : "Ledger-verified" }));
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=governance-primitives.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"governance-primitives.js","sourceRoot":"","sources":["../../src/billing/governance-primitives.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAEpC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEnF,8EAA8E;AAC9E,0EAA0E;AAC1E,wCAAwC;AACxC,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAClC,QAAQ,EACR,YAAY,EACZ,QAAQ,GAKT;IACC,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;IACvC,OAAO,CACL,cAAK,SAAS,EAAC,mDAAmD,YAChE,eAAK,SAAS,EAAC,yCAAyC,aACtD,eAAK,SAAS,EAAC,SAAS,aACtB,aAAG,SAAS,EAAC,8CAA8C,aACxD,QAAQ,CAAC,OAAO,EAChB,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,EAChD,KAAK,EACL,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,MAAM,IAC9C,EACJ,YAAG,SAAS,EAAC,mCAAmC,YAC7C,UAAU,CAAC,CAAC,CAAC,CACZ,kDACmB,UAAU,CAAC,UAAU,CAAC,4BAA4B,CAAC,oBACzD,UAAU,CAAC,UAAU,CAAC,yCAAyC,CAAC,EAC1E,GAAG,OAAG,aAAa,CAAC,UAAU,CAAC,gBAAgB,CAAC,YAAQ,GAAG,EAC3D,UAAU,CAAC,UAAU,QAAI,UAAU,CAAC,QAAQ,IAC5C,CACJ,CAAC,CAAC,CAAC,CACF,gDAAiB,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAC/D,GACC,IACA,EACN,eAAK,SAAS,EAAC,qBAAqB,aAClC,KAAC,MAAM,IACL,IAAI,EAAC,IAAI,EACT,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,wBAG3C,EACT,KAAC,MAAM,IACL,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,SAAS,EACjB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,uBAG5C,IACL,IACF,GACF,CACP,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,EACvB,QAAQ,EACR,SAAS,EACT,IAAI,GAKL;IACC,MAAM,UAAU,GAAG,QAAQ,KAAK,SAAS,CAAC;IAC1C,OAAO,CACL,gBAAM,IAAI,EAAE,IAAI,EAAE,SAAS,EAAC,4BAA4B,aACrD,UAAU,IAAI,CACb,eAAM,SAAS,EAAC,qDAAqD,YAClE,UAAU,CAAC,QAAQ,CAAC,GAChB,CACR,EACA,UAAU,CAAC,SAAS,CAAC,IACjB,CACR,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,kBAAkB,EAClB,YAAY,GAIb;IACC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,OAAO,CACL,eAAM,SAAS,EAAC,qFAAqF,kCAE9F,CACR,CAAC;IACJ,CAAC;IACD,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,+CAA+C,EAC/C,YAAY;YACV,CAAC,CAAC,wBAAwB;YAC1B,CAAC,CAAC,uCAAuC,CAC5C,YAEA,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,GACjD,CACR,CAAC;AACJ,CAAC"}
|
package/billing/index.d.ts
CHANGED
|
@@ -6,12 +6,24 @@ export { useBillingUsageReport } from "./useBillingUsageReport.js";
|
|
|
6
6
|
export type { UseBillingUsageReportReturn } from "./useBillingUsageReport.js";
|
|
7
7
|
export { useCustomerModelPricing } from "./useCustomerModelPricing.js";
|
|
8
8
|
export type { UseCustomerModelPricingReturn } from "./useCustomerModelPricing.js";
|
|
9
|
+
export { usePricingGovernance } from "./usePricingGovernance.js";
|
|
10
|
+
export type { UsePricingGovernanceReturn } from "./usePricingGovernance.js";
|
|
11
|
+
export { useModelPricingBaselines } from "./useModelPricingBaselines.js";
|
|
12
|
+
export type { UseModelPricingBaselinesOptions, UseModelPricingBaselinesReturn, } from "./useModelPricingBaselines.js";
|
|
13
|
+
export { useModelGovernanceView } from "./useModelGovernanceView.js";
|
|
14
|
+
export type { GovernanceFlow, ModelGovernanceRow, UseModelGovernanceViewReturn, } from "./useModelGovernanceView.js";
|
|
9
15
|
export { useCreateCheckoutSession } from "./useCreateCheckoutSession.js";
|
|
10
16
|
export type { CreateCheckoutSessionInput, UseCreateCheckoutSessionReturn, } from "./useCreateCheckoutSession.js";
|
|
11
17
|
export { useCreateBillingPortalSession } from "./useCreateBillingPortalSession.js";
|
|
12
18
|
export type { UseCreateBillingPortalSessionReturn } from "./useCreateBillingPortalSession.js";
|
|
13
19
|
export { useSetAutoRechargeConfig } from "./useSetAutoRechargeConfig.js";
|
|
14
20
|
export type { SetAutoRechargeConfigInput, UseSetAutoRechargeConfigReturn, } from "./useSetAutoRechargeConfig.js";
|
|
21
|
+
export { useDecidePricingOverride } from "./useDecidePricingOverride.js";
|
|
22
|
+
export type { DecidePricingOverrideInput, UseDecidePricingOverrideReturn, } from "./useDecidePricingOverride.js";
|
|
23
|
+
export { useUpsertModelPricingBaseline } from "./useUpsertModelPricingBaseline.js";
|
|
24
|
+
export type { UpsertModelPricingBaselineInput, UseUpsertModelPricingBaselineReturn, } from "./useUpsertModelPricingBaseline.js";
|
|
25
|
+
export { useRetireModelPricingBaseline } from "./useRetireModelPricingBaseline.js";
|
|
26
|
+
export type { RetireModelPricingBaselineInput, UseRetireModelPricingBaselineReturn, } from "./useRetireModelPricingBaseline.js";
|
|
15
27
|
export { BillingSection } from "./BillingSection.js";
|
|
16
28
|
export type { BillingSectionProps } from "./BillingSection.js";
|
|
17
29
|
export { CreditBalanceCard } from "./CreditBalanceCard.js";
|
|
@@ -26,6 +38,12 @@ export { CreditLedgerTable } from "./CreditLedgerTable.js";
|
|
|
26
38
|
export type { CreditLedgerTableProps } from "./CreditLedgerTable.js";
|
|
27
39
|
export { LowBalanceBanner } from "./LowBalanceBanner.js";
|
|
28
40
|
export type { LowBalanceBannerProps } from "./LowBalanceBanner.js";
|
|
41
|
+
export { PricingGovernancePanel } from "./PricingGovernancePanel.js";
|
|
42
|
+
export type { PricingGovernancePanelProps } from "./PricingGovernancePanel.js";
|
|
43
|
+
export { ModelCatalogPanel } from "./ModelCatalogPanel.js";
|
|
44
|
+
export type { ModelCatalogPanelProps } from "./ModelCatalogPanel.js";
|
|
45
|
+
export { PricingGovernanceConsole } from "./PricingGovernanceConsole.js";
|
|
46
|
+
export type { PricingGovernanceConsoleProps, PricingGovernanceTab, } from "./PricingGovernanceConsole.js";
|
|
29
47
|
export { CREDIT_PACKS, formatPackPrice, formatCreditCount } from "./credit-packs.js";
|
|
30
48
|
export type { CreditPackInfo } from "./credit-packs.js";
|
|
31
49
|
export { formatCreditBalance, formatLedgerAmount, ledgerEntryLabel, isCredit, isHold, formatLedgerDate, } from "./format.js";
|
package/billing/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/billing/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,YAAY,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,YAAY,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,YAAY,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/billing/index.ts"],"names":[],"mappings":"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"}
|
package/billing/index.js
CHANGED
|
@@ -3,10 +3,16 @@ export { useBillingAccount } from "./useBillingAccount.js";
|
|
|
3
3
|
export { useCreditLedger } from "./useCreditLedger.js";
|
|
4
4
|
export { useBillingUsageReport } from "./useBillingUsageReport.js";
|
|
5
5
|
export { useCustomerModelPricing } from "./useCustomerModelPricing.js";
|
|
6
|
+
export { usePricingGovernance } from "./usePricingGovernance.js";
|
|
7
|
+
export { useModelPricingBaselines } from "./useModelPricingBaselines.js";
|
|
8
|
+
export { useModelGovernanceView } from "./useModelGovernanceView.js";
|
|
6
9
|
// Behavior hooks
|
|
7
10
|
export { useCreateCheckoutSession } from "./useCreateCheckoutSession.js";
|
|
8
11
|
export { useCreateBillingPortalSession } from "./useCreateBillingPortalSession.js";
|
|
9
12
|
export { useSetAutoRechargeConfig } from "./useSetAutoRechargeConfig.js";
|
|
13
|
+
export { useDecidePricingOverride } from "./useDecidePricingOverride.js";
|
|
14
|
+
export { useUpsertModelPricingBaseline } from "./useUpsertModelPricingBaseline.js";
|
|
15
|
+
export { useRetireModelPricingBaseline } from "./useRetireModelPricingBaseline.js";
|
|
10
16
|
// Styled components
|
|
11
17
|
export { BillingSection } from "./BillingSection.js";
|
|
12
18
|
export { CreditBalanceCard } from "./CreditBalanceCard.js";
|
|
@@ -15,6 +21,9 @@ export { AutoRechargeCard } from "./AutoRechargeCard.js";
|
|
|
15
21
|
export { CreditPackGrid } from "./CreditPackGrid.js";
|
|
16
22
|
export { CreditLedgerTable } from "./CreditLedgerTable.js";
|
|
17
23
|
export { LowBalanceBanner } from "./LowBalanceBanner.js";
|
|
24
|
+
export { PricingGovernancePanel } from "./PricingGovernancePanel.js";
|
|
25
|
+
export { ModelCatalogPanel } from "./ModelCatalogPanel.js";
|
|
26
|
+
export { PricingGovernanceConsole } from "./PricingGovernanceConsole.js";
|
|
18
27
|
// Credit pack catalog and formatting utilities
|
|
19
28
|
export { CREDIT_PACKS, formatPackPrice, formatCreditCount } from "./credit-packs.js";
|
|
20
29
|
export { formatCreditBalance, formatLedgerAmount, ledgerEntryLabel, isCredit, isHold, formatLedgerDate, } from "./format.js";
|
package/billing/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/billing/index.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/billing/index.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAKzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAOrE,iBAAiB;AACjB,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAKzE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAEnF,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAKzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAKzE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAKnF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAMnF,oBAAoB;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAMzE,+CAA+C;AAC/C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAErF,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,QAAQ,EACR,MAAM,EACN,gBAAgB,GACjB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const ZERO: bigint;
|
|
2
|
+
/** Human labels for {@link PricingRateField} values. */
|
|
3
|
+
export declare const RATE_FIELD_LABELS: Record<number, string>;
|
|
4
|
+
/** Micro-USD per million tokens → "$X.XX/M" (raw provider rate). */
|
|
5
|
+
export declare function formatRate(microsPerMillion: bigint): string;
|
|
6
|
+
/** Basis points → signed percentage, e.g. 530n → "+5.30%". */
|
|
7
|
+
export declare function formatDeltaBp(deltaBp: bigint): string;
|
|
8
|
+
/** Micro-USD → editable dollar string, trailing zeros trimmed ("0.075"). */
|
|
9
|
+
export declare function microsToDollarString(micros: bigint): string;
|
|
10
|
+
/** Parse a dollar input; returns null for anything that is not a finite, non-negative number. */
|
|
11
|
+
export declare function dollarsToMicros(value: string): bigint | null;
|
|
12
|
+
//# sourceMappingURL=pricing-format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing-format.d.ts","sourceRoot":"","sources":["../../src/billing/pricing-format.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,IAAI,QAAY,CAAC;AAE9B,wDAAwD;AACxD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMpD,CAAC;AAEF,oEAAoE;AACpE,wBAAgB,UAAU,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED,8DAA8D;AAC9D,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAK3D;AAED,iGAAiG;AACjG,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM5D"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { PricingRateField } from "@stigmer/protos/ai/stigmer/billing/v1/pricing_override_pb";
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// Shared money/label helpers for the platform-operator pricing surfaces
|
|
4
|
+
// (PricingGovernanceConsole and the panels it grew out of). Internal —
|
|
5
|
+
// not exported from the billing barrel.
|
|
6
|
+
//
|
|
7
|
+
// The UI works in dollars-per-million tokens; the protos store integer
|
|
8
|
+
// micro-USD. Registry prices carry at most 4 decimal places, so the
|
|
9
|
+
// round-trip through Math.round is exact.
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
// BigInt literals (0n) require an ES2020 target, which not every consuming
|
|
12
|
+
// app's tsconfig guarantees — the constructor form is target-agnostic.
|
|
13
|
+
export const ZERO = BigInt(0);
|
|
14
|
+
/** Human labels for {@link PricingRateField} values. */
|
|
15
|
+
export const RATE_FIELD_LABELS = {
|
|
16
|
+
[PricingRateField.input]: "Input",
|
|
17
|
+
[PricingRateField.output]: "Output",
|
|
18
|
+
[PricingRateField.cache_write]: "Cache write",
|
|
19
|
+
[PricingRateField.cache_read]: "Cache read",
|
|
20
|
+
[PricingRateField.cursor_token_rate]: "Cursor token rate",
|
|
21
|
+
};
|
|
22
|
+
/** Micro-USD per million tokens → "$X.XX/M" (raw provider rate). */
|
|
23
|
+
export function formatRate(microsPerMillion) {
|
|
24
|
+
const dollars = Number(microsPerMillion) / 1_000_000;
|
|
25
|
+
return `$${dollars.toFixed(dollars < 1 ? 4 : 2)}/M`;
|
|
26
|
+
}
|
|
27
|
+
/** Basis points → signed percentage, e.g. 530n → "+5.30%". */
|
|
28
|
+
export function formatDeltaBp(deltaBp) {
|
|
29
|
+
const pct = Number(deltaBp) / 100;
|
|
30
|
+
return `${pct > 0 ? "+" : ""}${pct.toFixed(2)}%`;
|
|
31
|
+
}
|
|
32
|
+
/** Micro-USD → editable dollar string, trailing zeros trimmed ("0.075"). */
|
|
33
|
+
export function microsToDollarString(micros) {
|
|
34
|
+
if (micros === ZERO)
|
|
35
|
+
return "0";
|
|
36
|
+
const dollars = Number(micros) / 1_000_000;
|
|
37
|
+
// Trim trailing zeros without losing sub-cent precision (e.g. 0.075).
|
|
38
|
+
return String(parseFloat(dollars.toFixed(6)));
|
|
39
|
+
}
|
|
40
|
+
/** Parse a dollar input; returns null for anything that is not a finite, non-negative number. */
|
|
41
|
+
export function dollarsToMicros(value) {
|
|
42
|
+
const trimmed = value.trim();
|
|
43
|
+
if (trimmed === "")
|
|
44
|
+
return null;
|
|
45
|
+
const parsed = Number(trimmed);
|
|
46
|
+
if (!Number.isFinite(parsed) || parsed < 0)
|
|
47
|
+
return null;
|
|
48
|
+
return BigInt(Math.round(parsed * 1_000_000));
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=pricing-format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing-format.js","sourceRoot":"","sources":["../../src/billing/pricing-format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAE7F,8EAA8E;AAC9E,wEAAwE;AACxE,uEAAuE;AACvE,wCAAwC;AACxC,EAAE;AACF,uEAAuE;AACvE,oEAAoE;AACpE,0CAA0C;AAC1C,8EAA8E;AAE9E,2EAA2E;AAC3E,uEAAuE;AACvE,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAE9B,wDAAwD;AACxD,MAAM,CAAC,MAAM,iBAAiB,GAA2B;IACvD,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,OAAO;IACjC,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,QAAQ;IACnC,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,aAAa;IAC7C,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,YAAY;IAC3C,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,mBAAmB;CAC1D,CAAC;AAEF,oEAAoE;AACpE,MAAM,UAAU,UAAU,CAAC,gBAAwB;IACjD,MAAM,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAAC;IACrD,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACtD,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC;IAClC,OAAO,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACnD,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,GAAG,CAAC;IAChC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IAC3C,sEAAsE;IACtE,OAAO,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACxD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { ModelPricingOverride } from "@stigmer/protos/ai/stigmer/billing/v1/pricing_override_pb";
|
|
2
|
+
/** Input for {@link useDecidePricingOverride}. */
|
|
3
|
+
export interface DecidePricingOverrideInput {
|
|
4
|
+
/** The PENDING_SIGNOFF override to decide. */
|
|
5
|
+
readonly overrideId: string;
|
|
6
|
+
/**
|
|
7
|
+
* `true` approves (the override becomes ACTIVE and supersedes any
|
|
8
|
+
* current ACTIVE override on the same pricing key); `false` rejects.
|
|
9
|
+
*/
|
|
10
|
+
readonly approve: boolean;
|
|
11
|
+
/** Optional note recorded on the decision for the audit trail. */
|
|
12
|
+
readonly decisionNote?: string;
|
|
13
|
+
}
|
|
14
|
+
/** Return value of {@link useDecidePricingOverride}. */
|
|
15
|
+
export interface UseDecidePricingOverrideReturn {
|
|
16
|
+
/**
|
|
17
|
+
* Decide a pending pricing override. Returns the decided override with
|
|
18
|
+
* the operator's identity stamped.
|
|
19
|
+
*/
|
|
20
|
+
readonly decide: (input: DecidePricingOverrideInput) => Promise<ModelPricingOverride>;
|
|
21
|
+
/** `true` while a decision is being recorded. */
|
|
22
|
+
readonly isSubmitting: boolean;
|
|
23
|
+
/** Error from the last failed attempt, or `null` when healthy. */
|
|
24
|
+
readonly error: Error | null;
|
|
25
|
+
/** Reset `error` to `null`. */
|
|
26
|
+
readonly clearError: () => void;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Behavior hook for deciding PENDING_SIGNOFF pricing overrides from the
|
|
30
|
+
* pricing feedback loop.
|
|
31
|
+
*
|
|
32
|
+
* Wraps `billing.decideModelPricingOverride` with loading and error
|
|
33
|
+
* state. On approval the platform recomposes the effective registry
|
|
34
|
+
* immediately, so the parent should refetch its governance view after a
|
|
35
|
+
* successful decision.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```tsx
|
|
39
|
+
* const { decide, isSubmitting } = useDecidePricingOverride();
|
|
40
|
+
*
|
|
41
|
+
* await decide({ overrideId, approve: true, decisionNote: "Verified vs ledger" });
|
|
42
|
+
* refetchGovernance();
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare function useDecidePricingOverride(): UseDecidePricingOverrideReturn;
|
|
46
|
+
//# sourceMappingURL=useDecidePricingOverride.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDecidePricingOverride.d.ts","sourceRoot":"","sources":["../../src/billing/useDecidePricingOverride.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2DAA2D,CAAC;AAItG,kDAAkD;AAClD,MAAM,WAAW,0BAA0B;IACzC,8CAA8C;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,kEAAkE;IAClE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,wDAAwD;AACxD,MAAM,WAAW,8BAA8B;IAC7C;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACtF,iDAAiD;IACjD,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,kEAAkE;IAClE,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAC7B,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,wBAAwB,IAAI,8BAA8B,CAyBzE"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useCallback, useState } from "react";
|
|
3
|
+
import { useStigmer } from "../hooks.js";
|
|
4
|
+
import { toError } from "../internal/toError.js";
|
|
5
|
+
/**
|
|
6
|
+
* Behavior hook for deciding PENDING_SIGNOFF pricing overrides from the
|
|
7
|
+
* pricing feedback loop.
|
|
8
|
+
*
|
|
9
|
+
* Wraps `billing.decideModelPricingOverride` with loading and error
|
|
10
|
+
* state. On approval the platform recomposes the effective registry
|
|
11
|
+
* immediately, so the parent should refetch its governance view after a
|
|
12
|
+
* successful decision.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```tsx
|
|
16
|
+
* const { decide, isSubmitting } = useDecidePricingOverride();
|
|
17
|
+
*
|
|
18
|
+
* await decide({ overrideId, approve: true, decisionNote: "Verified vs ledger" });
|
|
19
|
+
* refetchGovernance();
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export function useDecidePricingOverride() {
|
|
23
|
+
const stigmer = useStigmer();
|
|
24
|
+
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
25
|
+
const [error, setError] = useState(null);
|
|
26
|
+
const decide = useCallback(async (input) => {
|
|
27
|
+
setIsSubmitting(true);
|
|
28
|
+
setError(null);
|
|
29
|
+
try {
|
|
30
|
+
return await stigmer.billing.decideModelPricingOverride(input);
|
|
31
|
+
}
|
|
32
|
+
catch (e) {
|
|
33
|
+
const err = toError(e);
|
|
34
|
+
setError(err);
|
|
35
|
+
throw err;
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
setIsSubmitting(false);
|
|
39
|
+
}
|
|
40
|
+
}, [stigmer.billing]);
|
|
41
|
+
const clearError = useCallback(() => setError(null), []);
|
|
42
|
+
return { decide, isSubmitting, error, clearError };
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=useDecidePricingOverride.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDecidePricingOverride.js","sourceRoot":"","sources":["../../src/billing/useDecidePricingOverride.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AA8BjD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,wBAAwB;IACtC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAEvD,MAAM,MAAM,GAAG,WAAW,CACxB,KAAK,EAAE,KAAiC,EAAiC,EAAE;QACzE,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,IAAI,CAAC;YACH,OAAO,MAAM,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACvB,QAAQ,CAAC,GAAG,CAAC,CAAC;YACd,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,eAAe,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACH,CAAC,EACD,CAAC,OAAO,CAAC,OAAO,CAAC,CAClB,CAAC;IAEF,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAEzD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { type ModelPricingBaseline } from "@stigmer/protos/ai/stigmer/billing/v1/model_pricing_baseline_pb";
|
|
2
|
+
import type { ModelPricingGovernanceEntry } from "@stigmer/protos/ai/stigmer/billing/v1/io_pb";
|
|
3
|
+
import type { ModelPricingOverride } from "@stigmer/protos/ai/stigmer/billing/v1/pricing_override_pb";
|
|
4
|
+
/**
|
|
5
|
+
* One model in the unified governance view: the ACTIVE catalog baseline
|
|
6
|
+
* joined with its effective-registry governance state and its
|
|
7
|
+
* append-only revision history.
|
|
8
|
+
*/
|
|
9
|
+
export interface ModelGovernanceRow {
|
|
10
|
+
/** Stable identity: `modelId|provider|harness` (the catalog key). */
|
|
11
|
+
readonly key: string;
|
|
12
|
+
/** The ACTIVE baseline revision (catalog fields + list rates). */
|
|
13
|
+
readonly baseline: ModelPricingBaseline;
|
|
14
|
+
/**
|
|
15
|
+
* The base-variant governance entry (baseline vs effective rates,
|
|
16
|
+
* active overrides, ledger reconcilability), or `null` when the
|
|
17
|
+
* governance view has no entry for this key — the row then renders
|
|
18
|
+
* baseline rates with no governance state.
|
|
19
|
+
*/
|
|
20
|
+
readonly governance: ModelPricingGovernanceEntry | null;
|
|
21
|
+
/** Governance entries for this model's named pricing variants. */
|
|
22
|
+
readonly variantGovernance: readonly ModelPricingGovernanceEntry[];
|
|
23
|
+
/** SUPERSEDED / RETIRED revisions, newest first as served. */
|
|
24
|
+
readonly history: readonly ModelPricingBaseline[];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Where the operator is in the console: browsing the model list,
|
|
28
|
+
* creating a new catalog entry, or focused on one model (viewing,
|
|
29
|
+
* editing, or retiring it).
|
|
30
|
+
*/
|
|
31
|
+
export type GovernanceFlow = {
|
|
32
|
+
readonly phase: "list";
|
|
33
|
+
} | {
|
|
34
|
+
readonly phase: "create";
|
|
35
|
+
} | {
|
|
36
|
+
readonly phase: "detail";
|
|
37
|
+
readonly modelKey: string;
|
|
38
|
+
readonly mode: "view" | "edit" | "retire";
|
|
39
|
+
};
|
|
40
|
+
/** Return value of {@link useModelGovernanceView}. */
|
|
41
|
+
export interface UseModelGovernanceViewReturn {
|
|
42
|
+
/** Unified model rows, filtered by {@link modelQuery}, sorted by display name. */
|
|
43
|
+
readonly models: readonly ModelGovernanceRow[];
|
|
44
|
+
/** PENDING_SIGNOFF overrides, filtered by {@link signOffQuery}, oldest first as served. */
|
|
45
|
+
readonly pendingOverrides: readonly ModelPricingOverride[];
|
|
46
|
+
/** Unfiltered pending-override count (for the Sign-Offs tab badge). */
|
|
47
|
+
readonly pendingCount: number;
|
|
48
|
+
/** Current search text over the model list. */
|
|
49
|
+
readonly modelQuery: string;
|
|
50
|
+
/** Set the model-list search text. */
|
|
51
|
+
readonly setModelQuery: (query: string) => void;
|
|
52
|
+
/** Current search text over the sign-off queue. */
|
|
53
|
+
readonly signOffQuery: string;
|
|
54
|
+
/** Set the sign-off search text. */
|
|
55
|
+
readonly setSignOffQuery: (query: string) => void;
|
|
56
|
+
/** Current console flow state. */
|
|
57
|
+
readonly flow: GovernanceFlow;
|
|
58
|
+
/** The focused model when {@link flow} is in the detail phase, else `null`. */
|
|
59
|
+
readonly selected: ModelGovernanceRow | null;
|
|
60
|
+
/** Focus one model (read-only detail). */
|
|
61
|
+
readonly openDetail: (modelKey: string) => void;
|
|
62
|
+
/** Open the add-model editor. */
|
|
63
|
+
readonly openCreate: () => void;
|
|
64
|
+
/** Switch the focused model into the edit form. */
|
|
65
|
+
readonly openEdit: () => void;
|
|
66
|
+
/** Switch the focused model into the retire confirmation. */
|
|
67
|
+
readonly openRetire: () => void;
|
|
68
|
+
/** Leave edit/retire back to the read-only detail. */
|
|
69
|
+
readonly backToDetail: () => void;
|
|
70
|
+
/** Return to the model list. */
|
|
71
|
+
readonly backToList: () => void;
|
|
72
|
+
/** `true` while either underlying fetch is in its initial load. */
|
|
73
|
+
readonly isLoading: boolean;
|
|
74
|
+
/** First error from the underlying fetches, or `null` when healthy. */
|
|
75
|
+
readonly error: Error | null;
|
|
76
|
+
/** Re-fetch both the catalog and the governance view. */
|
|
77
|
+
readonly refetch: () => void;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Behavior hook backing the pricing-governance console: joins the model
|
|
81
|
+
* registry baseline catalog ({@link useModelPricingBaselines}, with
|
|
82
|
+
* history) and the governance view ({@link usePricingGovernance}) into
|
|
83
|
+
* one row per catalog key, and owns the console's search and
|
|
84
|
+
* list/create/detail flow state.
|
|
85
|
+
*
|
|
86
|
+
* The two RPCs describe the same models from different angles — the
|
|
87
|
+
* catalog is what operators author, governance is what the pricing
|
|
88
|
+
* feedback loop composed on top — so the console renders them as one
|
|
89
|
+
* surface instead of two parallel tables. Per-variant governance
|
|
90
|
+
* entries fold into their model's row rather than appearing as
|
|
91
|
+
* top-level rows.
|
|
92
|
+
*
|
|
93
|
+
* Platform-operator surface: the caller needs `can_manage_model_pricing`
|
|
94
|
+
* on `platform:stigmer`; rates are raw provider prices (pre-markup).
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```tsx
|
|
98
|
+
* const view = useModelGovernanceView();
|
|
99
|
+
* return view.models.map((row) => <ModelRow key={row.key} row={row} />);
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
export declare function useModelGovernanceView(): UseModelGovernanceViewReturn;
|
|
103
|
+
//# sourceMappingURL=useModelGovernanceView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useModelGovernanceView.d.ts","sourceRoot":"","sources":["../../src/billing/useModelGovernanceView.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,iEAAiE,CAAC;AACzE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,6CAA6C,CAAC;AAC/F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2DAA2D,CAAC;AAItG;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,qEAAqE;IACrE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IACxC;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,2BAA2B,GAAG,IAAI,CAAC;IACxD,kEAAkE;IAClE,QAAQ,CAAC,iBAAiB,EAAE,SAAS,2BAA2B,EAAE,CAAC;IACnE,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,SAAS,oBAAoB,EAAE,CAAC;CACnD;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1B;IAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,GAC5B;IACE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;CAC3C,CAAC;AAEN,sDAAsD;AACtD,MAAM,WAAW,4BAA4B;IAC3C,kFAAkF;IAClF,QAAQ,CAAC,MAAM,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC/C,2FAA2F;IAC3F,QAAQ,CAAC,gBAAgB,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAC3D,uEAAuE;IACvE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,+CAA+C;IAC/C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,sCAAsC;IACtC,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,mDAAmD;IACnD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,oCAAoC;IACpC,QAAQ,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,kCAAkC;IAClC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,+EAA+E;IAC/E,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC7C,0CAA0C;IAC1C,QAAQ,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,iCAAiC;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;IAChC,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;IAC9B,6DAA6D;IAC7D,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;IAChC,sDAAsD;IACtD,QAAQ,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC;IAClC,gCAAgC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;IAChC,mEAAmE;IACnE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAC7B,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B;AAiBD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,sBAAsB,IAAI,4BAA4B,CAkKrE"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useCallback, useMemo, useState } from "react";
|
|
3
|
+
import { ModelPricingBaselineStatus, } from "@stigmer/protos/ai/stigmer/billing/v1/model_pricing_baseline_pb";
|
|
4
|
+
import { useModelPricingBaselines } from "./useModelPricingBaselines.js";
|
|
5
|
+
import { usePricingGovernance } from "./usePricingGovernance.js";
|
|
6
|
+
/** The catalog identity key shared by both data sources. */
|
|
7
|
+
function modelKey(entry) {
|
|
8
|
+
return `${entry.modelId}|${entry.provider}|${entry.harness}`;
|
|
9
|
+
}
|
|
10
|
+
function matchesQuery(query, ...fields) {
|
|
11
|
+
const q = query.trim().toLowerCase();
|
|
12
|
+
if (q === "")
|
|
13
|
+
return true;
|
|
14
|
+
return fields.some((field) => field.toLowerCase().includes(q));
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Behavior hook backing the pricing-governance console: joins the model
|
|
18
|
+
* registry baseline catalog ({@link useModelPricingBaselines}, with
|
|
19
|
+
* history) and the governance view ({@link usePricingGovernance}) into
|
|
20
|
+
* one row per catalog key, and owns the console's search and
|
|
21
|
+
* list/create/detail flow state.
|
|
22
|
+
*
|
|
23
|
+
* The two RPCs describe the same models from different angles — the
|
|
24
|
+
* catalog is what operators author, governance is what the pricing
|
|
25
|
+
* feedback loop composed on top — so the console renders them as one
|
|
26
|
+
* surface instead of two parallel tables. Per-variant governance
|
|
27
|
+
* entries fold into their model's row rather than appearing as
|
|
28
|
+
* top-level rows.
|
|
29
|
+
*
|
|
30
|
+
* Platform-operator surface: the caller needs `can_manage_model_pricing`
|
|
31
|
+
* on `platform:stigmer`; rates are raw provider prices (pre-markup).
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```tsx
|
|
35
|
+
* const view = useModelGovernanceView();
|
|
36
|
+
* return view.models.map((row) => <ModelRow key={row.key} row={row} />);
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export function useModelGovernanceView() {
|
|
40
|
+
// History is always fetched so opening a detail view never triggers a
|
|
41
|
+
// second round-trip; the catalog is small (dozens of models) and this
|
|
42
|
+
// is an operator-only surface.
|
|
43
|
+
const baselinesFetch = useModelPricingBaselines({ includeHistory: true });
|
|
44
|
+
const governanceFetch = usePricingGovernance();
|
|
45
|
+
const [modelQuery, setModelQuery] = useState("");
|
|
46
|
+
const [signOffQuery, setSignOffQuery] = useState("");
|
|
47
|
+
const [flow, setFlow] = useState({ phase: "list" });
|
|
48
|
+
const rows = useMemo(() => {
|
|
49
|
+
const baselines = baselinesFetch.baselines ?? [];
|
|
50
|
+
const entries = governanceFetch.governance?.entries ?? [];
|
|
51
|
+
const baseByKey = new Map();
|
|
52
|
+
const variantsByKey = new Map();
|
|
53
|
+
for (const entry of entries) {
|
|
54
|
+
const key = modelKey(entry);
|
|
55
|
+
if (entry.variant === "") {
|
|
56
|
+
baseByKey.set(key, entry);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
variantsByKey.set(key, [...(variantsByKey.get(key) ?? []), entry]);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const historyByKey = new Map();
|
|
63
|
+
for (const baseline of baselines) {
|
|
64
|
+
if (baseline.status === ModelPricingBaselineStatus.pricing_baseline_active)
|
|
65
|
+
continue;
|
|
66
|
+
const key = modelKey(baseline);
|
|
67
|
+
historyByKey.set(key, [...(historyByKey.get(key) ?? []), baseline]);
|
|
68
|
+
}
|
|
69
|
+
return baselines
|
|
70
|
+
.filter((b) => b.status === ModelPricingBaselineStatus.pricing_baseline_active)
|
|
71
|
+
.map((baseline) => {
|
|
72
|
+
const key = modelKey(baseline);
|
|
73
|
+
return {
|
|
74
|
+
key,
|
|
75
|
+
baseline,
|
|
76
|
+
governance: baseByKey.get(key) ?? null,
|
|
77
|
+
variantGovernance: variantsByKey.get(key) ?? [],
|
|
78
|
+
history: historyByKey.get(key) ?? [],
|
|
79
|
+
};
|
|
80
|
+
})
|
|
81
|
+
.sort((a, b) => (a.baseline.displayName || a.baseline.modelId).localeCompare(b.baseline.displayName || b.baseline.modelId));
|
|
82
|
+
}, [baselinesFetch.baselines, governanceFetch.governance]);
|
|
83
|
+
const models = useMemo(() => rows.filter((row) => matchesQuery(modelQuery, row.baseline.modelId, row.baseline.displayName, row.baseline.provider, row.baseline.harness)), [rows, modelQuery]);
|
|
84
|
+
const allPending = useMemo(() => governanceFetch.governance?.pendingOverrides ?? [], [governanceFetch.governance]);
|
|
85
|
+
const pendingOverrides = useMemo(() => allPending.filter((override) => matchesQuery(signOffQuery, override.modelId, override.variant)), [allPending, signOffQuery]);
|
|
86
|
+
// Resolve the focused row fresh each render so a refetch (e.g. after an
|
|
87
|
+
// edit) is reflected in the open detail; a retired model resolves to
|
|
88
|
+
// null and the console falls back to the list.
|
|
89
|
+
const selected = useMemo(() => {
|
|
90
|
+
if (flow.phase !== "detail")
|
|
91
|
+
return null;
|
|
92
|
+
return rows.find((row) => row.key === flow.modelKey) ?? null;
|
|
93
|
+
}, [flow, rows]);
|
|
94
|
+
const openDetail = useCallback((key) => setFlow({ phase: "detail", modelKey: key, mode: "view" }), []);
|
|
95
|
+
const openCreate = useCallback(() => setFlow({ phase: "create" }), []);
|
|
96
|
+
const openEdit = useCallback(() => setFlow((f) => f.phase === "detail" ? { ...f, mode: "edit" } : f), []);
|
|
97
|
+
const openRetire = useCallback(() => setFlow((f) => f.phase === "detail" ? { ...f, mode: "retire" } : f), []);
|
|
98
|
+
const backToDetail = useCallback(() => setFlow((f) => f.phase === "detail" ? { ...f, mode: "view" } : f), []);
|
|
99
|
+
const backToList = useCallback(() => setFlow({ phase: "list" }), []);
|
|
100
|
+
const refetch = useCallback(() => {
|
|
101
|
+
baselinesFetch.refetch();
|
|
102
|
+
governanceFetch.refetch();
|
|
103
|
+
}, [baselinesFetch.refetch, governanceFetch.refetch]);
|
|
104
|
+
const isLoading = baselinesFetch.isLoading || governanceFetch.isLoading;
|
|
105
|
+
const error = baselinesFetch.error ?? governanceFetch.error;
|
|
106
|
+
return useMemo(() => ({
|
|
107
|
+
models,
|
|
108
|
+
pendingOverrides,
|
|
109
|
+
pendingCount: allPending.length,
|
|
110
|
+
modelQuery,
|
|
111
|
+
setModelQuery,
|
|
112
|
+
signOffQuery,
|
|
113
|
+
setSignOffQuery,
|
|
114
|
+
flow,
|
|
115
|
+
selected,
|
|
116
|
+
openDetail,
|
|
117
|
+
openCreate,
|
|
118
|
+
openEdit,
|
|
119
|
+
openRetire,
|
|
120
|
+
backToDetail,
|
|
121
|
+
backToList,
|
|
122
|
+
isLoading,
|
|
123
|
+
error,
|
|
124
|
+
refetch,
|
|
125
|
+
}), [
|
|
126
|
+
models,
|
|
127
|
+
pendingOverrides,
|
|
128
|
+
allPending.length,
|
|
129
|
+
modelQuery,
|
|
130
|
+
signOffQuery,
|
|
131
|
+
flow,
|
|
132
|
+
selected,
|
|
133
|
+
openDetail,
|
|
134
|
+
openCreate,
|
|
135
|
+
openEdit,
|
|
136
|
+
openRetire,
|
|
137
|
+
backToDetail,
|
|
138
|
+
backToList,
|
|
139
|
+
isLoading,
|
|
140
|
+
error,
|
|
141
|
+
refetch,
|
|
142
|
+
]);
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=useModelGovernanceView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useModelGovernanceView.js","sourceRoot":"","sources":["../../src/billing/useModelGovernanceView.ts"],"names":[],"mappings":"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"}
|