@stigmer/react 3.2.3 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/index.d.ts.map +1 -1
- package/billing/index.js +4 -0
- package/billing/index.js.map +1 -1
- 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 +34 -0
- package/cursor-accounts/CursorAccountEditor.d.ts.map +1 -0
- package/cursor-accounts/CursorAccountEditor.js +67 -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 +32 -0
- package/cursor-accounts/CursorAccountsConsole.d.ts.map +1 -0
- package/cursor-accounts/CursorAccountsConsole.js +169 -0
- package/cursor-accounts/CursorAccountsConsole.js.map +1 -0
- package/cursor-accounts/MemberCoverageTable.d.ts +29 -0
- package/cursor-accounts/MemberCoverageTable.d.ts.map +1 -0
- package/cursor-accounts/MemberCoverageTable.js +150 -0
- package/cursor-accounts/MemberCoverageTable.js.map +1 -0
- package/cursor-accounts/MemberKeysPanel.d.ts +25 -0
- package/cursor-accounts/MemberKeysPanel.d.ts.map +1 -0
- package/cursor-accounts/MemberKeysPanel.js +115 -0
- package/cursor-accounts/MemberKeysPanel.js.map +1 -0
- package/cursor-accounts/badges.d.ts +9 -0
- package/cursor-accounts/badges.d.ts.map +1 -0
- package/cursor-accounts/badges.js +10 -0
- package/cursor-accounts/badges.js.map +1 -0
- package/cursor-accounts/cursor-account-coverage.d.ts +41 -0
- package/cursor-accounts/cursor-account-coverage.d.ts.map +1 -0
- package/cursor-accounts/cursor-account-coverage.js +26 -0
- package/cursor-accounts/cursor-account-coverage.js.map +1 -0
- package/cursor-accounts/cursor-account-format.d.ts +23 -0
- package/cursor-accounts/cursor-account-format.d.ts.map +1 -0
- package/cursor-accounts/cursor-account-format.js +41 -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 +223 -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 +37 -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 +62 -0
- package/datastore/recordFilter.d.ts.map +1 -0
- package/datastore/recordFilter.js +104 -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/execution/ExecutionProgress.d.ts.map +1 -1
- package/execution/ExecutionProgress.js +13 -4
- package/execution/ExecutionProgress.js.map +1 -1
- package/execution/MessageThread.d.ts.map +1 -1
- package/execution/MessageThread.js +10 -2
- package/execution/MessageThread.js.map +1 -1
- package/execution/useCreateAgentExecution.d.ts +31 -1
- package/execution/useCreateAgentExecution.d.ts.map +1 -1
- package/execution/useCreateAgentExecution.js +2 -0
- package/execution/useCreateAgentExecution.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 -4
- package/index.d.ts.map +1 -1
- package/index.js +18 -3
- package/index.js.map +1 -1
- package/internal/form-primitives.d.ts +10 -0
- package/internal/form-primitives.d.ts.map +1 -0
- package/internal/form-primitives.js +15 -0
- package/internal/form-primitives.js.map +1 -0
- 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/pricing-governance/BaselineEditor.d.ts +9 -0
- package/pricing-governance/BaselineEditor.d.ts.map +1 -0
- package/pricing-governance/BaselineEditor.js +270 -0
- package/pricing-governance/BaselineEditor.js.map +1 -0
- package/pricing-governance/ModelCatalogPanel.d.ts +28 -0
- package/pricing-governance/ModelCatalogPanel.d.ts.map +1 -0
- package/pricing-governance/ModelCatalogPanel.js +102 -0
- package/pricing-governance/ModelCatalogPanel.js.map +1 -0
- package/pricing-governance/ModelGovernanceDetail.d.ts +8 -0
- package/pricing-governance/ModelGovernanceDetail.d.ts.map +1 -0
- package/pricing-governance/ModelGovernanceDetail.js +64 -0
- package/pricing-governance/ModelGovernanceDetail.js.map +1 -0
- package/pricing-governance/OperatorAccessNotice.d.ts +12 -0
- package/pricing-governance/OperatorAccessNotice.d.ts.map +1 -0
- package/pricing-governance/OperatorAccessNotice.js +15 -0
- package/pricing-governance/OperatorAccessNotice.js.map +1 -0
- package/pricing-governance/PricingGovernanceConsole.d.ts +57 -0
- package/pricing-governance/PricingGovernanceConsole.d.ts.map +1 -0
- package/pricing-governance/PricingGovernanceConsole.js +164 -0
- package/pricing-governance/PricingGovernanceConsole.js.map +1 -0
- package/pricing-governance/PricingGovernancePanel.d.ts +26 -0
- package/pricing-governance/PricingGovernancePanel.d.ts.map +1 -0
- package/pricing-governance/PricingGovernancePanel.js +64 -0
- package/pricing-governance/PricingGovernancePanel.js.map +1 -0
- package/pricing-governance/RetireConfirm.d.ts +9 -0
- package/pricing-governance/RetireConfirm.d.ts.map +1 -0
- package/pricing-governance/RetireConfirm.js +19 -0
- package/pricing-governance/RetireConfirm.js.map +1 -0
- package/pricing-governance/governance-primitives.d.ts +33 -0
- package/pricing-governance/governance-primitives.d.ts.map +1 -0
- package/pricing-governance/governance-primitives.js +43 -0
- package/pricing-governance/governance-primitives.js.map +1 -0
- package/pricing-governance/index.d.ts +19 -0
- package/pricing-governance/index.d.ts.map +1 -0
- package/pricing-governance/index.js +20 -0
- package/pricing-governance/index.js.map +1 -0
- package/pricing-governance/pricing-format.d.ts +12 -0
- package/pricing-governance/pricing-format.d.ts.map +1 -0
- package/pricing-governance/pricing-format.js +50 -0
- package/pricing-governance/pricing-format.js.map +1 -0
- package/pricing-governance/useDecidePricingOverride.d.ts +46 -0
- package/pricing-governance/useDecidePricingOverride.d.ts.map +1 -0
- package/pricing-governance/useDecidePricingOverride.js +44 -0
- package/pricing-governance/useDecidePricingOverride.js.map +1 -0
- package/pricing-governance/useModelGovernanceView.d.ts +103 -0
- package/pricing-governance/useModelGovernanceView.d.ts.map +1 -0
- package/pricing-governance/useModelGovernanceView.js +144 -0
- package/pricing-governance/useModelGovernanceView.js.map +1 -0
- package/pricing-governance/useModelPricingBaselines.d.ts +40 -0
- package/pricing-governance/useModelPricingBaselines.d.ts.map +1 -0
- package/pricing-governance/useModelPricingBaselines.js +32 -0
- package/pricing-governance/useModelPricingBaselines.js.map +1 -0
- package/pricing-governance/usePricingGovernance.d.ts +39 -0
- package/pricing-governance/usePricingGovernance.d.ts.map +1 -0
- package/pricing-governance/usePricingGovernance.js +31 -0
- package/pricing-governance/usePricingGovernance.js.map +1 -0
- package/pricing-governance/useRetireModelPricingBaseline.d.ts +31 -0
- package/pricing-governance/useRetireModelPricingBaseline.d.ts.map +1 -0
- package/pricing-governance/useRetireModelPricingBaseline.js +36 -0
- package/pricing-governance/useRetireModelPricingBaseline.js.map +1 -0
- package/pricing-governance/useUpsertModelPricingBaseline.d.ts +38 -0
- package/pricing-governance/useUpsertModelPricingBaseline.d.ts.map +1 -0
- package/pricing-governance/useUpsertModelPricingBaseline.js +37 -0
- package/pricing-governance/useUpsertModelPricingBaseline.js.map +1 -0
- package/resource-creation/templates/workflow-templates.js +4 -4
- package/session/useCreateSession.d.ts +28 -0
- package/session/useCreateSession.d.ts.map +1 -1
- package/session/useCreateSession.js +2 -1
- package/session/useCreateSession.js.map +1 -1
- package/session/useEditSessionPrep.js +3 -3
- package/session/useEditSessionPrep.js.map +1 -1
- package/session/useNewSessionFlow.d.ts +30 -0
- package/session/useNewSessionFlow.d.ts.map +1 -1
- package/session/useNewSessionFlow.js +7 -1
- package/session/useNewSessionFlow.js.map +1 -1
- package/session/useUpdateSession.d.ts +29 -10
- package/session/useUpdateSession.d.ts.map +1 -1
- package/session/useUpdateSession.js +29 -10
- package/session/useUpdateSession.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/index.ts +5 -0
- package/src/channel/AgentChannelsPanel.tsx +27 -1
- package/src/composer/SessionComposer.tsx +1 -1
- package/src/cursor-accounts/CursorAccountEditor.tsx +229 -0
- package/src/cursor-accounts/CursorAccountsAccessNotice.tsx +36 -0
- package/src/cursor-accounts/CursorAccountsConsole.tsx +454 -0
- package/src/cursor-accounts/MemberCoverageTable.tsx +439 -0
- package/src/cursor-accounts/MemberKeysPanel.tsx +278 -0
- package/src/cursor-accounts/__tests__/CursorAccountsConsole.test.tsx +680 -0
- package/src/cursor-accounts/__tests__/cursor-account-coverage.test.ts +73 -0
- package/src/cursor-accounts/badges.tsx +26 -0
- package/src/cursor-accounts/cursor-account-coverage.ts +71 -0
- package/src/cursor-accounts/cursor-account-format.ts +45 -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 +570 -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 +422 -0
- package/src/datastore/RecordFormPanel.tsx +432 -0
- package/src/datastore/__tests__/CollectionRecordsBrowser.test.tsx +245 -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 +155 -0
- package/src/datastore/__tests__/RecordFormPanel.test.tsx +227 -0
- package/src/datastore/__tests__/recordFilter.test.ts +169 -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 +154 -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/ExecutionProgress.tsx +14 -4
- package/src/execution/MessageThread.tsx +10 -2
- package/src/execution/__tests__/ExecutionProgress.test.tsx +67 -0
- package/src/execution/__tests__/MessageThread.test.tsx +44 -0
- package/src/execution/__tests__/useArtifactInspection.test.tsx +12 -2
- package/src/execution/__tests__/useCreateAgentExecution.test.tsx +86 -0
- package/src/execution/useCreateAgentExecution.ts +41 -6
- 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 +172 -14
- package/src/internal/form-primitives.tsx +40 -0
- 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/pricing-governance/BaselineEditor.tsx +652 -0
- package/src/pricing-governance/ModelCatalogPanel.tsx +283 -0
- package/src/pricing-governance/ModelGovernanceDetail.tsx +289 -0
- package/src/pricing-governance/OperatorAccessNotice.tsx +32 -0
- package/src/pricing-governance/PricingGovernanceConsole.tsx +465 -0
- package/src/pricing-governance/PricingGovernancePanel.tsx +166 -0
- package/src/pricing-governance/RetireConfirm.tsx +82 -0
- package/src/pricing-governance/__tests__/ModelCatalogPanel.test.tsx +253 -0
- package/src/pricing-governance/__tests__/PricingGovernanceConsole.test.tsx +410 -0
- package/src/pricing-governance/__tests__/useModelGovernanceView.test.tsx +308 -0
- package/src/pricing-governance/governance-primitives.tsx +133 -0
- package/src/pricing-governance/index.ts +50 -0
- package/src/pricing-governance/pricing-format.ts +53 -0
- package/src/pricing-governance/useDecidePricingOverride.ts +78 -0
- package/src/pricing-governance/useModelGovernanceView.ts +290 -0
- package/src/pricing-governance/useModelPricingBaselines.ts +69 -0
- package/src/pricing-governance/usePricingGovernance.ts +57 -0
- package/src/pricing-governance/useRetireModelPricingBaseline.ts +65 -0
- package/src/pricing-governance/useUpsertModelPricingBaseline.ts +72 -0
- package/src/resource-creation/templates/workflow-templates.ts +4 -4
- package/src/session/__tests__/useCreateSession.test.tsx +94 -0
- package/src/session/__tests__/useNewSessionFlow.test.tsx +33 -0
- package/src/session/useCreateSession.ts +30 -0
- package/src/session/useEditSessionPrep.ts +3 -3
- package/src/session/useNewSessionFlow.ts +45 -1
- package/src/session/useUpdateSession.ts +29 -10
- 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,221 @@
|
|
|
1
|
+
import { describe, it, expect, vi, afterEach } from "vitest";
|
|
2
|
+
import { cleanup, render, screen, waitFor } from "@testing-library/react";
|
|
3
|
+
import type { ReactNode } from "react";
|
|
4
|
+
import { StigmerContext } from "../../context";
|
|
5
|
+
import {
|
|
6
|
+
useCheckPermission,
|
|
7
|
+
type CheckPermissionOptions,
|
|
8
|
+
type PermissionCheckResource,
|
|
9
|
+
} from "../useCheckPermission";
|
|
10
|
+
|
|
11
|
+
function createMockStigmer(checkMyPermission: ReturnType<typeof vi.fn>) {
|
|
12
|
+
return { iamPolicy: { checkMyPermission } } as never;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function wrapper(client: unknown) {
|
|
16
|
+
return function Wrapper({ children }: { children: ReactNode }) {
|
|
17
|
+
return (
|
|
18
|
+
<StigmerContext.Provider value={client as never}>
|
|
19
|
+
{children}
|
|
20
|
+
</StigmerContext.Provider>
|
|
21
|
+
);
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Renders the hook and exposes its state via data attributes. */
|
|
26
|
+
function Probe({
|
|
27
|
+
resource,
|
|
28
|
+
relation = "can_edit",
|
|
29
|
+
options,
|
|
30
|
+
}: {
|
|
31
|
+
resource: PermissionCheckResource | null;
|
|
32
|
+
relation?: string;
|
|
33
|
+
options?: CheckPermissionOptions;
|
|
34
|
+
}) {
|
|
35
|
+
const { allowed, isLoading, error } = useCheckPermission(
|
|
36
|
+
resource,
|
|
37
|
+
relation,
|
|
38
|
+
options,
|
|
39
|
+
);
|
|
40
|
+
return (
|
|
41
|
+
<div
|
|
42
|
+
data-testid="probe"
|
|
43
|
+
data-allowed={String(allowed)}
|
|
44
|
+
data-loading={String(isLoading)}
|
|
45
|
+
data-error={String(error !== null)}
|
|
46
|
+
/>
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const AGENT: PermissionCheckResource = { kind: "agent", id: "agt_1" };
|
|
51
|
+
|
|
52
|
+
/** A checkMyPermission stub that stays pending until resolved manually. */
|
|
53
|
+
function pendingCheck() {
|
|
54
|
+
let resolve!: (value: { isAuthorized: boolean }) => void;
|
|
55
|
+
let reject!: (err: unknown) => void;
|
|
56
|
+
const check = vi.fn().mockReturnValue(
|
|
57
|
+
new Promise((res, rej) => {
|
|
58
|
+
resolve = res;
|
|
59
|
+
reject = rej;
|
|
60
|
+
}),
|
|
61
|
+
);
|
|
62
|
+
return { check, resolve: (v: boolean) => resolve({ isAuthorized: v }), reject: (e: unknown) => reject(e) };
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
afterEach(cleanup);
|
|
66
|
+
|
|
67
|
+
describe("useCheckPermission — fail-open (default)", () => {
|
|
68
|
+
it("is allowed while the check is in flight", async () => {
|
|
69
|
+
const { check } = pendingCheck();
|
|
70
|
+
render(<Probe resource={AGENT} />, {
|
|
71
|
+
wrapper: wrapper(createMockStigmer(check)),
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
const probe = screen.getByTestId("probe");
|
|
75
|
+
expect(probe.getAttribute("data-allowed")).toBe("true");
|
|
76
|
+
await waitFor(() =>
|
|
77
|
+
expect(probe.getAttribute("data-loading")).toBe("true"),
|
|
78
|
+
);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it("respects an explicit server denial", async () => {
|
|
82
|
+
const check = vi.fn().mockResolvedValue({ isAuthorized: false });
|
|
83
|
+
render(<Probe resource={AGENT} />, {
|
|
84
|
+
wrapper: wrapper(createMockStigmer(check)),
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
await waitFor(() =>
|
|
88
|
+
expect(screen.getByTestId("probe").getAttribute("data-allowed")).toBe("false"),
|
|
89
|
+
);
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it("respects an explicit server grant", async () => {
|
|
93
|
+
const check = vi.fn().mockResolvedValue({ isAuthorized: true });
|
|
94
|
+
render(<Probe resource={AGENT} />, {
|
|
95
|
+
wrapper: wrapper(createMockStigmer(check)),
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
const probe = screen.getByTestId("probe");
|
|
99
|
+
await waitFor(() => expect(probe.getAttribute("data-loading")).toBe("false"));
|
|
100
|
+
expect(probe.getAttribute("data-allowed")).toBe("true");
|
|
101
|
+
expect(probe.getAttribute("data-error")).toBe("false");
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
it("fails open on RPC rejection (OSS single-user mode)", async () => {
|
|
105
|
+
const check = vi.fn().mockRejectedValue(new Error("unimplemented"));
|
|
106
|
+
render(<Probe resource={AGENT} />, {
|
|
107
|
+
wrapper: wrapper(createMockStigmer(check)),
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
const probe = screen.getByTestId("probe");
|
|
111
|
+
await waitFor(() => expect(probe.getAttribute("data-error")).toBe("true"));
|
|
112
|
+
expect(probe.getAttribute("data-allowed")).toBe("true");
|
|
113
|
+
expect(probe.getAttribute("data-loading")).toBe("false");
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
it("is allowed when resource is null (check skipped, no RPC)", () => {
|
|
117
|
+
const check = vi.fn();
|
|
118
|
+
render(<Probe resource={null} />, {
|
|
119
|
+
wrapper: wrapper(createMockStigmer(check)),
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
expect(screen.getByTestId("probe").getAttribute("data-allowed")).toBe("true");
|
|
123
|
+
expect(check).not.toHaveBeenCalled();
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
describe("useCheckPermission — fail-closed", () => {
|
|
128
|
+
const CLOSED: CheckPermissionOptions = { fail: "closed" };
|
|
129
|
+
|
|
130
|
+
it("is denied while the check is in flight (no flash of gated UI)", async () => {
|
|
131
|
+
const { check } = pendingCheck();
|
|
132
|
+
render(<Probe resource={AGENT} options={CLOSED} />, {
|
|
133
|
+
wrapper: wrapper(createMockStigmer(check)),
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
const probe = screen.getByTestId("probe");
|
|
137
|
+
expect(probe.getAttribute("data-allowed")).toBe("false");
|
|
138
|
+
await waitFor(() =>
|
|
139
|
+
expect(probe.getAttribute("data-loading")).toBe("true"),
|
|
140
|
+
);
|
|
141
|
+
expect(probe.getAttribute("data-allowed")).toBe("false");
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
it("is allowed only on an explicit server grant", async () => {
|
|
145
|
+
const check = vi.fn().mockResolvedValue({ isAuthorized: true });
|
|
146
|
+
render(<Probe resource={AGENT} options={CLOSED} />, {
|
|
147
|
+
wrapper: wrapper(createMockStigmer(check)),
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
await waitFor(() =>
|
|
151
|
+
expect(screen.getByTestId("probe").getAttribute("data-allowed")).toBe("true"),
|
|
152
|
+
);
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
it("fails closed on RPC rejection", async () => {
|
|
156
|
+
const check = vi.fn().mockRejectedValue(new Error("unimplemented"));
|
|
157
|
+
render(<Probe resource={AGENT} options={CLOSED} />, {
|
|
158
|
+
wrapper: wrapper(createMockStigmer(check)),
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
const probe = screen.getByTestId("probe");
|
|
162
|
+
await waitFor(() => expect(probe.getAttribute("data-error")).toBe("true"));
|
|
163
|
+
expect(probe.getAttribute("data-allowed")).toBe("false");
|
|
164
|
+
expect(probe.getAttribute("data-loading")).toBe("false");
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
it("is denied when resource is null (check skipped)", () => {
|
|
168
|
+
const check = vi.fn();
|
|
169
|
+
render(<Probe resource={null} options={CLOSED} />, {
|
|
170
|
+
wrapper: wrapper(createMockStigmer(check)),
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
expect(screen.getByTestId("probe").getAttribute("data-allowed")).toBe("false");
|
|
174
|
+
expect(check).not.toHaveBeenCalled();
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
describe("useCheckPermission — caching", () => {
|
|
179
|
+
it("serves repeat checks of the same triple from the mount cache", async () => {
|
|
180
|
+
const check = vi.fn().mockResolvedValue({ isAuthorized: true });
|
|
181
|
+
const { rerender } = render(<Probe resource={AGENT} />, {
|
|
182
|
+
wrapper: wrapper(createMockStigmer(check)),
|
|
183
|
+
});
|
|
184
|
+
await waitFor(() =>
|
|
185
|
+
expect(screen.getByTestId("probe").getAttribute("data-allowed")).toBe("true"),
|
|
186
|
+
);
|
|
187
|
+
|
|
188
|
+
// Switch relation (new triple → one more RPC), then switch back
|
|
189
|
+
// (cached triple → served without an RPC).
|
|
190
|
+
rerender(<Probe resource={AGENT} relation="can_delete" />);
|
|
191
|
+
await waitFor(() => expect(check).toHaveBeenCalledTimes(2));
|
|
192
|
+
rerender(<Probe resource={AGENT} relation="can_edit" />);
|
|
193
|
+
await waitFor(() =>
|
|
194
|
+
expect(screen.getByTestId("probe").getAttribute("data-allowed")).toBe("true"),
|
|
195
|
+
);
|
|
196
|
+
expect(check).toHaveBeenCalledTimes(2);
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
it("does not cache a failed check as a verdict", async () => {
|
|
200
|
+
// First mount errors; the error must not be pinned as `true` — a
|
|
201
|
+
// remount (fresh cache) with a healthy server gets the real verdict.
|
|
202
|
+
const failing = vi.fn().mockRejectedValue(new Error("blip"));
|
|
203
|
+
const { unmount } = render(
|
|
204
|
+
<Probe resource={AGENT} options={{ fail: "closed" }} />,
|
|
205
|
+
{ wrapper: wrapper(createMockStigmer(failing)) },
|
|
206
|
+
);
|
|
207
|
+
await waitFor(() =>
|
|
208
|
+
expect(screen.getByTestId("probe").getAttribute("data-error")).toBe("true"),
|
|
209
|
+
);
|
|
210
|
+
expect(screen.getByTestId("probe").getAttribute("data-allowed")).toBe("false");
|
|
211
|
+
unmount();
|
|
212
|
+
|
|
213
|
+
const healthy = vi.fn().mockResolvedValue({ isAuthorized: true });
|
|
214
|
+
render(<Probe resource={AGENT} options={{ fail: "closed" }} />, {
|
|
215
|
+
wrapper: wrapper(createMockStigmer(healthy)),
|
|
216
|
+
});
|
|
217
|
+
await waitFor(() =>
|
|
218
|
+
expect(screen.getByTestId("probe").getAttribute("data-allowed")).toBe("true"),
|
|
219
|
+
);
|
|
220
|
+
});
|
|
221
|
+
});
|
package/src/iam-policy/index.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useEffect,
|
|
3
|
+
import { useEffect, useRef, useState } from "react";
|
|
4
4
|
import { create } from "@bufbuild/protobuf";
|
|
5
5
|
import {
|
|
6
6
|
CheckMyPermissionInputSchema,
|
|
@@ -18,6 +18,25 @@ export interface PermissionCheckResource {
|
|
|
18
18
|
readonly id: string;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
/** Options for {@link useCheckPermission}. */
|
|
22
|
+
export interface CheckPermissionOptions {
|
|
23
|
+
/**
|
|
24
|
+
* Behavior when authorization cannot be confirmed — the check is in
|
|
25
|
+
* flight, the RPC failed, the resource is `null`, or the server does
|
|
26
|
+
* not implement authorization checks (OSS edition).
|
|
27
|
+
*
|
|
28
|
+
* - `"open"` (default): `allowed` is `true`. Right for gating
|
|
29
|
+
* *capabilities* (buttons, actions) — the server re-checks every
|
|
30
|
+
* request anyway, and all UI stays visible in single-user local
|
|
31
|
+
* mode.
|
|
32
|
+
* - `"closed"`: `allowed` is `false` until the server explicitly
|
|
33
|
+
* authorizes. Right for *discoverability* surfaces (navigation to
|
|
34
|
+
* operator-only areas) that must not appear on deployments where
|
|
35
|
+
* the feature does not exist.
|
|
36
|
+
*/
|
|
37
|
+
readonly fail?: "open" | "closed";
|
|
38
|
+
}
|
|
39
|
+
|
|
21
40
|
/** Return value of {@link useCheckPermission}. */
|
|
22
41
|
export interface UseCheckPermissionReturn {
|
|
23
42
|
/** Whether the current user has the specified permission. */
|
|
@@ -34,21 +53,24 @@ export interface UseCheckPermissionReturn {
|
|
|
34
53
|
*
|
|
35
54
|
* Wraps `iamPolicy.checkMyPermission()` — the dedicated self-check RPC
|
|
36
55
|
* where the server derives the principal from the authenticated token
|
|
37
|
-
* (the client never names a principal) — with caching and
|
|
38
|
-
* degradation.
|
|
39
|
-
* (OSS edition where the IAM service
|
|
40
|
-
* returns `allowed: true`
|
|
41
|
-
* local mode.
|
|
56
|
+
* (the client never names a principal) — with caching and configurable
|
|
57
|
+
* degradation. By default the hook *fails open*: when the server does
|
|
58
|
+
* not support authorization checks (OSS edition where the IAM service
|
|
59
|
+
* is not registered), it returns `allowed: true` so all UI remains
|
|
60
|
+
* visible in single-user local mode. Pass `{ fail: "closed" }` for
|
|
61
|
+
* surfaces that must stay hidden until authorization is confirmed
|
|
62
|
+
* (see {@link CheckPermissionOptions}).
|
|
42
63
|
*
|
|
43
|
-
* Pass `null` as `resource` to skip the check
|
|
44
|
-
*
|
|
45
|
-
* flashing hidden UI).
|
|
64
|
+
* Pass `null` as `resource` to skip the check — the result resolves
|
|
65
|
+
* through the fail mode (`allowed: true` under the default fail-open).
|
|
46
66
|
*
|
|
47
|
-
*
|
|
48
|
-
* of the component mount.
|
|
67
|
+
* Only genuine server verdicts are cached (per (kind, id, relation)
|
|
68
|
+
* triple, for the lifetime of the component mount). A failed check is
|
|
69
|
+
* never cached, so a transient error does not pin a wrong answer.
|
|
49
70
|
*
|
|
50
71
|
* @param resource - The resource to check, or `null` to skip.
|
|
51
72
|
* @param relation - The permission to check (e.g. "can_edit", "can_grant_access").
|
|
73
|
+
* @param options - Fail-mode configuration; see {@link CheckPermissionOptions}.
|
|
52
74
|
*
|
|
53
75
|
* @example
|
|
54
76
|
* ```tsx
|
|
@@ -63,9 +85,13 @@ export interface UseCheckPermissionReturn {
|
|
|
63
85
|
export function useCheckPermission(
|
|
64
86
|
resource: PermissionCheckResource | null,
|
|
65
87
|
relation: string,
|
|
88
|
+
options?: CheckPermissionOptions,
|
|
66
89
|
): UseCheckPermissionReturn {
|
|
67
90
|
const stigmer = useStigmer();
|
|
68
|
-
const
|
|
91
|
+
const failMode = options?.fail ?? "open";
|
|
92
|
+
const failValue = failMode === "open";
|
|
93
|
+
|
|
94
|
+
const [allowed, setAllowed] = useState(failValue);
|
|
69
95
|
const [isLoading, setIsLoading] = useState(false);
|
|
70
96
|
const [error, setError] = useState<Error | null>(null);
|
|
71
97
|
|
|
@@ -74,7 +100,7 @@ export function useCheckPermission(
|
|
|
74
100
|
|
|
75
101
|
useEffect(() => {
|
|
76
102
|
if (!resource || !cacheKey) {
|
|
77
|
-
setAllowed(
|
|
103
|
+
setAllowed(failValue);
|
|
78
104
|
setIsLoading(false);
|
|
79
105
|
return;
|
|
80
106
|
}
|
|
@@ -87,6 +113,7 @@ export function useCheckPermission(
|
|
|
87
113
|
}
|
|
88
114
|
|
|
89
115
|
let cancelled = false;
|
|
116
|
+
setAllowed(failValue);
|
|
90
117
|
setIsLoading(true);
|
|
91
118
|
|
|
92
119
|
const input = create(CheckMyPermissionInputSchema, {
|
|
@@ -108,11 +135,10 @@ export function useCheckPermission(
|
|
|
108
135
|
})
|
|
109
136
|
.catch((err: unknown) => {
|
|
110
137
|
if (cancelled) return;
|
|
111
|
-
//
|
|
112
|
-
//
|
|
113
|
-
//
|
|
114
|
-
|
|
115
|
-
setAllowed(true);
|
|
138
|
+
// Degradation is fail-mode-resolved and deliberately NOT cached:
|
|
139
|
+
// an error is not an authorization verdict, and caching it would
|
|
140
|
+
// pin a possibly-wrong answer for the mount's lifetime.
|
|
141
|
+
setAllowed(failValue);
|
|
116
142
|
setError(err instanceof Error ? err : new Error(String(err)));
|
|
117
143
|
})
|
|
118
144
|
.finally(() => {
|
|
@@ -122,7 +148,7 @@ export function useCheckPermission(
|
|
|
122
148
|
return () => {
|
|
123
149
|
cancelled = true;
|
|
124
150
|
};
|
|
125
|
-
}, [cacheKey, resource?.kind, resource?.id, relation, stigmer]);
|
|
151
|
+
}, [cacheKey, resource?.kind, resource?.id, relation, failValue, stigmer]);
|
|
126
152
|
|
|
127
153
|
return { allowed, isLoading, error };
|
|
128
154
|
}
|
package/src/index.ts
CHANGED
|
@@ -677,6 +677,88 @@ export type {
|
|
|
677
677
|
AgentWizardData,
|
|
678
678
|
} from "./agent/index.js";
|
|
679
679
|
|
|
680
|
+
// Datastore — data hooks (kind family + describe projection), record
|
|
681
|
+
// hooks (find/insert/update/delete + grid collection), guarded delete,
|
|
682
|
+
// the canonical value semantics of declared fields, the typed filter
|
|
683
|
+
// model, and the six styled components (detail view, records browser,
|
|
684
|
+
// filter builder, record form, schema view, sync report, delete dialog)
|
|
685
|
+
export {
|
|
686
|
+
useDatastore,
|
|
687
|
+
useDatastoreList,
|
|
688
|
+
useDatastoreCount,
|
|
689
|
+
useDatastoreSearch,
|
|
690
|
+
useDatastoreDescription,
|
|
691
|
+
DEFAULT_PARTITION,
|
|
692
|
+
useRecordList,
|
|
693
|
+
useInsertRecord,
|
|
694
|
+
useUpdateRecord,
|
|
695
|
+
useDeleteRecord,
|
|
696
|
+
useRecordCollection,
|
|
697
|
+
useDeleteDatastore,
|
|
698
|
+
buildUpdateFields,
|
|
699
|
+
coerceFieldValue,
|
|
700
|
+
formatFieldValue,
|
|
701
|
+
formatSystemTimestamp,
|
|
702
|
+
isListOperator,
|
|
703
|
+
isSortableField,
|
|
704
|
+
isValuelessOperator,
|
|
705
|
+
operatorsForField,
|
|
706
|
+
OPERATOR_LABELS,
|
|
707
|
+
RESERVED_FIELD_NAMES,
|
|
708
|
+
SYSTEM_FIELD_OPERATORS,
|
|
709
|
+
buildRecordFilter,
|
|
710
|
+
filterableFields,
|
|
711
|
+
formatConditionChip,
|
|
712
|
+
isConditionComplete,
|
|
713
|
+
FieldValueControl,
|
|
714
|
+
FIELD_INPUT_CLASSES,
|
|
715
|
+
CollectionSchemaView,
|
|
716
|
+
formatSubject,
|
|
717
|
+
DatastoreSyncReport,
|
|
718
|
+
RecordFilterBuilder,
|
|
719
|
+
RecordFormPanel,
|
|
720
|
+
CollectionRecordsBrowser,
|
|
721
|
+
DeleteDatastoreDialog,
|
|
722
|
+
DatastoreDetailView,
|
|
723
|
+
DatastoreIcon,
|
|
724
|
+
} from "./datastore/index.js";
|
|
725
|
+
export type {
|
|
726
|
+
UseDatastoreReturn,
|
|
727
|
+
UseDatastoreListOptions,
|
|
728
|
+
UseDatastoreListReturn,
|
|
729
|
+
UseDatastoreCountOptions,
|
|
730
|
+
UseDatastoreCountReturn,
|
|
731
|
+
UseDatastoreSearchOptions,
|
|
732
|
+
UseDatastoreSearchReturn,
|
|
733
|
+
UseDatastoreDescriptionReturn,
|
|
734
|
+
RecordScope,
|
|
735
|
+
UseRecordListParams,
|
|
736
|
+
UseRecordListReturn,
|
|
737
|
+
InsertRecordArgs,
|
|
738
|
+
UseInsertRecordReturn,
|
|
739
|
+
UpdateRecordArgs,
|
|
740
|
+
UseUpdateRecordReturn,
|
|
741
|
+
DeleteRecordArgs,
|
|
742
|
+
UseDeleteRecordReturn,
|
|
743
|
+
RecordColumnDef,
|
|
744
|
+
UseRecordCollectionOptions,
|
|
745
|
+
UseRecordCollectionReturn,
|
|
746
|
+
DeleteDatastoreArgs,
|
|
747
|
+
UseDeleteDatastoreReturn,
|
|
748
|
+
CoerceResult,
|
|
749
|
+
FilterableField,
|
|
750
|
+
RecordConditionDraft,
|
|
751
|
+
FieldValueControlProps,
|
|
752
|
+
CollectionSchemaViewProps,
|
|
753
|
+
DatastoreSyncReportProps,
|
|
754
|
+
RecordFilterBuilderProps,
|
|
755
|
+
RecordFormPanelProps,
|
|
756
|
+
CollectionRecordsBrowserProps,
|
|
757
|
+
DeleteDatastoreDialogProps,
|
|
758
|
+
DatastoreDetailTab,
|
|
759
|
+
DatastoreDetailViewProps,
|
|
760
|
+
} from "./datastore/index.js";
|
|
761
|
+
|
|
680
762
|
// Environment — data hooks, list hook, personal convenience hook, secret reveal, variable management, env var form, system env vars, and styled components
|
|
681
763
|
export {
|
|
682
764
|
useEnvironment,
|
|
@@ -770,6 +852,7 @@ export type {
|
|
|
770
852
|
UseShareFlowReturn,
|
|
771
853
|
ShareFlowResource,
|
|
772
854
|
UseCheckPermissionReturn,
|
|
855
|
+
CheckPermissionOptions,
|
|
773
856
|
PermissionCheckResource,
|
|
774
857
|
RoleSelectorProps,
|
|
775
858
|
PrincipalPickerProps,
|
|
@@ -826,7 +909,8 @@ export type {
|
|
|
826
909
|
OrgSwitcherProps,
|
|
827
910
|
} from "./organization/index.js";
|
|
828
911
|
|
|
829
|
-
// Billing — data hooks, behavior hooks, styled components,
|
|
912
|
+
// Billing — customer-facing data hooks, behavior hooks, styled components,
|
|
913
|
+
// catalog, and formatting utilities
|
|
830
914
|
export {
|
|
831
915
|
useBillingAccount,
|
|
832
916
|
useCreditLedger,
|
|
@@ -873,8 +957,71 @@ export type {
|
|
|
873
957
|
CreditPackInfo,
|
|
874
958
|
} from "./billing/index.js";
|
|
875
959
|
|
|
960
|
+
// Pricing governance — platform-operator authoring of the model registry
|
|
961
|
+
// baseline and pricing-override sign-offs (gated on can_manage_model_pricing)
|
|
962
|
+
export {
|
|
963
|
+
usePricingGovernance,
|
|
964
|
+
useModelPricingBaselines,
|
|
965
|
+
useModelGovernanceView,
|
|
966
|
+
useDecidePricingOverride,
|
|
967
|
+
useUpsertModelPricingBaseline,
|
|
968
|
+
useRetireModelPricingBaseline,
|
|
969
|
+
PricingGovernancePanel,
|
|
970
|
+
ModelCatalogPanel,
|
|
971
|
+
PricingGovernanceConsole,
|
|
972
|
+
} from "./pricing-governance/index.js";
|
|
973
|
+
export type {
|
|
974
|
+
UsePricingGovernanceReturn,
|
|
975
|
+
UseModelPricingBaselinesOptions,
|
|
976
|
+
UseModelPricingBaselinesReturn,
|
|
977
|
+
GovernanceFlow,
|
|
978
|
+
ModelGovernanceRow,
|
|
979
|
+
UseModelGovernanceViewReturn,
|
|
980
|
+
DecidePricingOverrideInput,
|
|
981
|
+
UseDecidePricingOverrideReturn,
|
|
982
|
+
UpsertModelPricingBaselineInput,
|
|
983
|
+
UseUpsertModelPricingBaselineReturn,
|
|
984
|
+
RetireModelPricingBaselineInput,
|
|
985
|
+
UseRetireModelPricingBaselineReturn,
|
|
986
|
+
PricingGovernancePanelProps,
|
|
987
|
+
ModelCatalogPanelProps,
|
|
988
|
+
PricingGovernanceConsoleProps,
|
|
989
|
+
PricingGovernanceTab,
|
|
990
|
+
} from "./pricing-governance/index.js";
|
|
991
|
+
|
|
992
|
+
// Cursor accounts — platform-operator management of managed Cursor teams
|
|
993
|
+
// (admin keys, member execution keys, org assignments, roster/spend)
|
|
994
|
+
export {
|
|
995
|
+
useCursorAccounts,
|
|
996
|
+
useCursorAccountView,
|
|
997
|
+
useUpsertCursorAccount,
|
|
998
|
+
useDeleteCursorAccount,
|
|
999
|
+
useCursorMemberKeyActions,
|
|
1000
|
+
useSyncCursorAccount,
|
|
1001
|
+
CursorAccountsConsole,
|
|
1002
|
+
CursorAccountEditor,
|
|
1003
|
+
CursorAccountsAccessNotice,
|
|
1004
|
+
} from "./cursor-accounts/index.js";
|
|
1005
|
+
export type {
|
|
1006
|
+
UseCursorAccountsReturn,
|
|
1007
|
+
UseCursorAccountViewReturn,
|
|
1008
|
+
UseUpsertCursorAccountReturn,
|
|
1009
|
+
DeleteCursorAccountInput,
|
|
1010
|
+
UseDeleteCursorAccountReturn,
|
|
1011
|
+
AddCursorMemberKeyInput,
|
|
1012
|
+
RemoveCursorMemberKeyInput,
|
|
1013
|
+
UseCursorMemberKeyActionsReturn,
|
|
1014
|
+
UseSyncCursorAccountReturn,
|
|
1015
|
+
CursorAccountsConsoleProps,
|
|
1016
|
+
CursorAccountEditorProps,
|
|
1017
|
+
} from "./cursor-accounts/index.js";
|
|
1018
|
+
|
|
876
1019
|
// Settings — navigation structure + section components shared across app shells
|
|
877
|
-
export {
|
|
1020
|
+
export {
|
|
1021
|
+
SETTINGS_NAV_GROUPS,
|
|
1022
|
+
PLATFORM_SETTINGS_NAV_GROUP,
|
|
1023
|
+
useSettingsNavGroups,
|
|
1024
|
+
} from "./settings/index.js";
|
|
878
1025
|
export type { SettingsNavItem, SettingsNavGroup } from "./settings/index.js";
|
|
879
1026
|
export { ApiKeysSection } from "./settings/index.js";
|
|
880
1027
|
export { MembersSection } from "./settings/index.js";
|
|
@@ -1138,15 +1285,8 @@ export {
|
|
|
1138
1285
|
findStreamingPlan,
|
|
1139
1286
|
PLAN_ARTIFACT_NAME,
|
|
1140
1287
|
PLAN_ARTIFACT_SUFFIX,
|
|
1141
|
-
parseResourceYaml,
|
|
1142
|
-
serializeAgentYaml,
|
|
1143
|
-
serializeMcpServerYaml,
|
|
1144
|
-
serializeAgentInputYaml,
|
|
1145
|
-
serializeMcpServerInputYaml,
|
|
1146
1288
|
useApplyResource,
|
|
1147
1289
|
useExportResource,
|
|
1148
|
-
useImportResource,
|
|
1149
|
-
ImportResourceDialog,
|
|
1150
1290
|
VisibilitySelector,
|
|
1151
1291
|
VisibilityBadge,
|
|
1152
1292
|
blueprintVisibilityLevels,
|
|
@@ -1163,16 +1303,11 @@ export type {
|
|
|
1163
1303
|
SessionPlan,
|
|
1164
1304
|
StreamingPlan,
|
|
1165
1305
|
UseDetectSkillPackageReturn,
|
|
1166
|
-
ParsedResource,
|
|
1167
1306
|
UseApplyResourceReturn,
|
|
1168
1307
|
ApplyResourceResult,
|
|
1169
1308
|
PushSkillParams,
|
|
1170
1309
|
UseExportResourceOptions,
|
|
1171
1310
|
UseExportResourceReturn,
|
|
1172
|
-
ImportFormat,
|
|
1173
|
-
ImportPreview,
|
|
1174
|
-
UseImportResourceReturn,
|
|
1175
|
-
ImportResourceDialogProps,
|
|
1176
1311
|
VisibilitySelectorProps,
|
|
1177
1312
|
VisibilityBadgeProps,
|
|
1178
1313
|
VisibilityLevelOption,
|
|
@@ -1181,6 +1316,29 @@ export type {
|
|
|
1181
1316
|
UseUpdateVisibilityReturn,
|
|
1182
1317
|
} from "./library/index.js";
|
|
1183
1318
|
|
|
1319
|
+
// Manifest — kind-agnostic YAML edit/apply (editor, hooks, dialogs)
|
|
1320
|
+
export {
|
|
1321
|
+
YamlEditor,
|
|
1322
|
+
useEditResourceYaml,
|
|
1323
|
+
useApplyManifest,
|
|
1324
|
+
EditResourceYamlDialog,
|
|
1325
|
+
ApplyManifestDialog,
|
|
1326
|
+
RedactedSecretsNotice,
|
|
1327
|
+
} from "./manifest/index.js";
|
|
1328
|
+
export type {
|
|
1329
|
+
YamlEditorProps,
|
|
1330
|
+
EditYamlTarget,
|
|
1331
|
+
EditYamlValidation,
|
|
1332
|
+
UseEditResourceYamlOptions,
|
|
1333
|
+
UseEditResourceYamlReturn,
|
|
1334
|
+
ManifestEntryStatus,
|
|
1335
|
+
ManifestPreviewEntry,
|
|
1336
|
+
UseApplyManifestReturn,
|
|
1337
|
+
EditResourceYamlDialogProps,
|
|
1338
|
+
ApplyManifestDialogProps,
|
|
1339
|
+
RedactedSecretsNoticeProps,
|
|
1340
|
+
} from "./manifest/index.js";
|
|
1341
|
+
|
|
1184
1342
|
// Action menu — compound component for resource item actions
|
|
1185
1343
|
export { ActionMenu } from "./action-menu/index.js";
|
|
1186
1344
|
export type {
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { cn } from "@stigmer/theme";
|
|
4
|
+
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// Shared form primitives for the operator consoles (pricing-governance
|
|
7
|
+
// editors and search inputs, cursor-accounts editor and key forms).
|
|
8
|
+
// Internal — never exported from the package barrel.
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
|
|
11
|
+
/** Standard text-input styling for the operator consoles. */
|
|
12
|
+
export const INPUT_CLASSES = cn(
|
|
13
|
+
"w-full rounded-md border border-input bg-background px-2.5 py-1.5 text-xs text-foreground",
|
|
14
|
+
"placeholder:text-muted-foreground",
|
|
15
|
+
"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
|
|
16
|
+
"disabled:pointer-events-none disabled:opacity-50",
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
/** Labelled form field wrapper. */
|
|
20
|
+
export function Field({
|
|
21
|
+
label,
|
|
22
|
+
required,
|
|
23
|
+
className,
|
|
24
|
+
children,
|
|
25
|
+
}: {
|
|
26
|
+
readonly label: string;
|
|
27
|
+
readonly required?: boolean;
|
|
28
|
+
readonly className?: string;
|
|
29
|
+
readonly children: React.ReactNode;
|
|
30
|
+
}) {
|
|
31
|
+
return (
|
|
32
|
+
<label className={cn("block space-y-1", className)}>
|
|
33
|
+
<span className="text-[11px] font-medium text-muted-foreground">
|
|
34
|
+
{label}
|
|
35
|
+
{required ? " *" : ""}
|
|
36
|
+
</span>
|
|
37
|
+
{children}
|
|
38
|
+
</label>
|
|
39
|
+
);
|
|
40
|
+
}
|
package/src/library/index.ts
CHANGED
|
@@ -40,16 +40,6 @@ export type { StreamingPlan } from "./detect-streaming-plan.js";
|
|
|
40
40
|
export { useDetectSkillPackage } from "./useDetectSkillPackage.js";
|
|
41
41
|
export type { UseDetectSkillPackageReturn } from "./useDetectSkillPackage.js";
|
|
42
42
|
|
|
43
|
-
export { parseResourceYaml } from "./parse-resource-yaml.js";
|
|
44
|
-
export type { ParsedResource } from "./parse-resource-yaml.js";
|
|
45
|
-
|
|
46
|
-
export {
|
|
47
|
-
serializeAgentYaml,
|
|
48
|
-
serializeMcpServerYaml,
|
|
49
|
-
serializeAgentInputYaml,
|
|
50
|
-
serializeMcpServerInputYaml,
|
|
51
|
-
} from "./serialize-resource-yaml.js";
|
|
52
|
-
|
|
53
43
|
export { serializeWorkflowYaml, parseWorkflowYaml } from "../workflow/serialize-workflow-yaml.js";
|
|
54
44
|
|
|
55
45
|
export { useApplyResource } from "./useApplyResource.js";
|
|
@@ -65,16 +55,6 @@ export type {
|
|
|
65
55
|
UseExportResourceReturn,
|
|
66
56
|
} from "./useExportResource.js";
|
|
67
57
|
|
|
68
|
-
export { useImportResource } from "./useImportResource.js";
|
|
69
|
-
export type {
|
|
70
|
-
ImportFormat,
|
|
71
|
-
ImportPreview,
|
|
72
|
-
UseImportResourceReturn,
|
|
73
|
-
} from "./useImportResource.js";
|
|
74
|
-
|
|
75
|
-
export { ImportResourceDialog } from "./ImportResourceDialog.js";
|
|
76
|
-
export type { ImportResourceDialogProps } from "./ImportResourceDialog.js";
|
|
77
|
-
|
|
78
58
|
export { VisibilitySelector, VisibilityBadge } from "./VisibilitySelector.js";
|
|
79
59
|
export type {
|
|
80
60
|
VisibilitySelectorProps,
|