@stigmer/react 3.2.2 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent/AgentDetailView.d.ts.map +1 -1
- package/agent/AgentDetailView.js +6 -3
- package/agent/AgentDetailView.js.map +1 -1
- 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/execution/index.d.ts +1 -2
- package/execution/index.d.ts.map +1 -1
- package/execution/index.js +0 -1
- package/execution/index.js.map +1 -1
- package/execution/useLiveAgentExecution.d.ts +17 -1
- package/execution/useLiveAgentExecution.d.ts.map +1 -1
- package/execution/useLiveAgentExecution.js +19 -4
- package/execution/useLiveAgentExecution.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 +16 -10
- package/index.d.ts.map +1 -1
- package/index.js +16 -5
- package/index.js.map +1 -1
- package/internal/useInViewport.d.ts +24 -0
- package/internal/useInViewport.d.ts.map +1 -0
- package/internal/useInViewport.js +49 -0
- package/internal/useInViewport.js.map +1 -0
- package/library/VisibilitySelector.d.ts +22 -6
- package/library/VisibilitySelector.d.ts.map +1 -1
- package/library/VisibilitySelector.js +12 -4
- package/library/VisibilitySelector.js.map +1 -1
- package/library/index.d.ts +1 -8
- 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/McpServerDetailView.d.ts.map +1 -1
- package/mcp-server/McpServerDetailView.js +4 -3
- package/mcp-server/McpServerDetailView.js.map +1 -1
- 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/SessionViewer.js +8 -1
- package/session/SessionViewer.js.map +1 -1
- package/session/audience.d.ts +6 -1
- package/session/audience.d.ts.map +1 -1
- 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/skill/SkillDetailView.d.ts.map +1 -1
- package/skill/SkillDetailView.js +4 -3
- package/skill/SkillDetailView.js.map +1 -1
- package/src/access/__tests__/useManageAccess.test.tsx +104 -0
- package/src/agent/AgentDetailView.tsx +9 -3
- 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/execution/__tests__/useLiveAgentExecution.test.tsx +125 -0
- package/src/execution/index.ts +4 -7
- package/src/execution/useLiveAgentExecution.ts +41 -3
- 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 +167 -18
- package/src/internal/__tests__/useInViewport.test.tsx +115 -0
- package/src/internal/useInViewport.ts +63 -0
- package/src/library/VisibilitySelector.tsx +50 -9
- package/src/library/__tests__/VisibilitySelector.test.tsx +38 -0
- package/src/library/index.ts +4 -21
- 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/McpServerDetailView.tsx +7 -3
- package/src/mcp-server/steps/ReviewStep.tsx +2 -3
- package/src/resource-creation/templates/workflow-templates.ts +4 -4
- package/src/session/SessionViewer.tsx +7 -1
- package/src/session/__tests__/audienceWiring.test.tsx +31 -1
- package/src/session/audience.ts +6 -1
- 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/skill/SkillDetailView.tsx +7 -3
- package/src/workflow/WorkflowAgentCallTranscript.tsx +279 -0
- package/src/workflow/WorkflowDetailView.tsx +7 -3
- package/src/workflow/WorkflowExecutionViewer.tsx +20 -77
- package/src/workflow/WorkflowTaskApprovalSummary.tsx +45 -8
- package/src/workflow/WorkflowYamlEditor.tsx +6 -270
- package/src/workflow/__tests__/WorkflowAgentCallTranscript.liveregion.test.tsx +124 -0
- package/src/workflow/__tests__/{WorkflowAgentExecutionDocument.test.tsx → WorkflowAgentCallTranscript.test.tsx} +146 -121
- package/src/workflow/__tests__/WorkflowExecutionViewer.approvals.test.tsx +81 -220
- package/src/workflow/__tests__/WorkflowExecutionViewer.reconciliation.test.tsx +17 -16
- package/src/workflow/__tests__/WorkflowTaskApprovalSummary.test.tsx +52 -2
- package/src/workflow/__tests__/WorkflowTaskThread.test.tsx +168 -185
- package/src/workflow/__tests__/agent-call-live-experience.test.ts +4 -4
- package/src/workflow/__tests__/task-approval.test.ts +119 -0
- package/src/workflow/__tests__/task-presentation.test.ts +35 -1
- package/src/workflow/__tests__/useWorkflowExecutionPanel.test.ts +0 -57
- package/src/workflow/index.ts +6 -3
- package/src/workflow/task-detail/index.ts +3 -0
- package/src/workflow/task-detail/task-approval.ts +95 -1
- package/src/workflow/thread/WorkflowTaskThread.tsx +96 -252
- package/src/workflow/thread/task-presentation.ts +8 -2
- package/src/workflow/useWorkflowExecutionPanel.ts +0 -47
- package/styles.css +1 -1
- package/workflow/CanvasTransitionEdge.d.ts +1 -1
- package/workflow/WorkflowAgentCallTranscript.d.ts +87 -0
- package/workflow/WorkflowAgentCallTranscript.d.ts.map +1 -0
- package/workflow/WorkflowAgentCallTranscript.js +98 -0
- package/workflow/WorkflowAgentCallTranscript.js.map +1 -0
- package/workflow/WorkflowDetailView.d.ts.map +1 -1
- package/workflow/WorkflowDetailView.js +4 -3
- package/workflow/WorkflowDetailView.js.map +1 -1
- package/workflow/WorkflowExecutionViewer.d.ts.map +1 -1
- package/workflow/WorkflowExecutionViewer.js +23 -52
- package/workflow/WorkflowExecutionViewer.js.map +1 -1
- package/workflow/WorkflowTaskApprovalSummary.d.ts +1 -1
- package/workflow/WorkflowTaskApprovalSummary.d.ts.map +1 -1
- package/workflow/WorkflowTaskApprovalSummary.js +18 -1
- package/workflow/WorkflowTaskApprovalSummary.js.map +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/workflow/index.d.ts +2 -2
- package/workflow/index.d.ts.map +1 -1
- package/workflow/index.js +2 -2
- package/workflow/index.js.map +1 -1
- package/workflow/task-detail/index.d.ts +1 -1
- package/workflow/task-detail/index.d.ts.map +1 -1
- package/workflow/task-detail/index.js +1 -1
- package/workflow/task-detail/index.js.map +1 -1
- package/workflow/task-detail/task-approval.d.ts +44 -1
- package/workflow/task-detail/task-approval.d.ts.map +1 -1
- package/workflow/task-detail/task-approval.js +47 -0
- package/workflow/task-detail/task-approval.js.map +1 -1
- package/workflow/thread/WorkflowTaskThread.d.ts +17 -25
- package/workflow/thread/WorkflowTaskThread.d.ts.map +1 -1
- package/workflow/thread/WorkflowTaskThread.js +60 -105
- package/workflow/thread/WorkflowTaskThread.js.map +1 -1
- package/workflow/thread/task-presentation.d.ts.map +1 -1
- package/workflow/thread/task-presentation.js +7 -2
- package/workflow/thread/task-presentation.js.map +1 -1
- package/workflow/useWorkflowExecutionPanel.d.ts +0 -12
- package/workflow/useWorkflowExecutionPanel.d.ts.map +1 -1
- package/workflow/useWorkflowExecutionPanel.js +0 -12
- package/workflow/useWorkflowExecutionPanel.js.map +1 -1
- package/execution/agent-execution-document.d.ts +0 -31
- package/execution/agent-execution-document.d.ts.map +0 -1
- package/execution/agent-execution-document.js +0 -48
- package/execution/agent-execution-document.js.map +0 -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/execution/__tests__/agent-execution-document.test.ts +0 -45
- package/src/execution/agent-execution-document.ts +0 -54
- 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
- package/src/workflow/WorkflowAgentExecutionDocument.tsx +0 -283
- package/workflow/WorkflowAgentExecutionDocument.d.ts +0 -79
- package/workflow/WorkflowAgentExecutionDocument.d.ts.map +0 -1
- package/workflow/WorkflowAgentExecutionDocument.js +0 -87
- package/workflow/WorkflowAgentExecutionDocument.js.map +0 -1
|
@@ -27,15 +27,7 @@ import {
|
|
|
27
27
|
FILE_CHANGE_DOCUMENT_ENTRY_ID,
|
|
28
28
|
fileChangeTabPath,
|
|
29
29
|
} from "../execution/file-change-document.js";
|
|
30
|
-
import {
|
|
31
|
-
AGENT_EXECUTION_DOCUMENT_ENTRY_ID,
|
|
32
|
-
parseAgentExecutionTabPath,
|
|
33
|
-
} from "../execution/agent-execution-document.js";
|
|
34
30
|
import { FileChangeDiff } from "../execution/FileChangesView.js";
|
|
35
|
-
import {
|
|
36
|
-
WorkflowAgentExecutionDocument,
|
|
37
|
-
type WorkflowAgentExecutionHitl,
|
|
38
|
-
} from "./WorkflowAgentExecutionDocument.js";
|
|
39
31
|
import {
|
|
40
32
|
WorkspaceSurface,
|
|
41
33
|
type SurfaceVirtualDocument,
|
|
@@ -281,14 +273,15 @@ export const WorkflowExecutionViewer = memo(function WorkflowExecutionViewer({
|
|
|
281
273
|
onSuccess: refetchExecution,
|
|
282
274
|
});
|
|
283
275
|
|
|
284
|
-
// The
|
|
285
|
-
// instance,
|
|
286
|
-
//
|
|
287
|
-
//
|
|
288
|
-
// the individual fields (DD-010): the bundle's
|
|
289
|
-
// churn on `actions` (a lifecycle action's
|
|
290
|
-
//
|
|
291
|
-
|
|
276
|
+
// The thread's HITL bundle (T06/T07) — ONE bundle from the single actions
|
|
277
|
+
// instance, covering all three gate kinds: the child-gate fields (which
|
|
278
|
+
// the thread hands to gating agent-call cards' inline transcripts, as the
|
|
279
|
+
// `WorkflowAgentExecutionHitl` subset) plus the task-level (human_input)
|
|
280
|
+
// approval wiring. Deps are the individual fields (DD-010): the bundle's
|
|
281
|
+
// ref must survive unrelated churn on `actions` (a lifecycle action's
|
|
282
|
+
// isSubmitting flip), and the thread scopes it to gating cards, so a
|
|
283
|
+
// decision's in-flight flip re-renders the gating card only.
|
|
284
|
+
const threadHitl = useMemo<WorkflowThreadHitl>(
|
|
292
285
|
() => ({
|
|
293
286
|
submitApproval: actions.submitApproval,
|
|
294
287
|
approvalSubmittingToolCallIds: actions.approvalSubmittingToolCallIds,
|
|
@@ -296,6 +289,9 @@ export const WorkflowExecutionViewer = memo(function WorkflowExecutionViewer({
|
|
|
296
289
|
submitFileDecision: actions.submitFileDecision,
|
|
297
290
|
fileDecisionSubmittingKeys: actions.fileDecisionSubmittingKeys,
|
|
298
291
|
fileDecisionErrorsByKey: actions.fileDecisionErrorsByKey,
|
|
292
|
+
submitTaskApproval: actions.submitTaskApproval,
|
|
293
|
+
taskApprovalSubmittingTaskNames: actions.taskApprovalSubmittingTaskNames,
|
|
294
|
+
taskApprovalErrorsByTaskName: actions.taskApprovalErrorsByTaskName,
|
|
299
295
|
}),
|
|
300
296
|
[
|
|
301
297
|
actions.submitApproval,
|
|
@@ -304,24 +300,6 @@ export const WorkflowExecutionViewer = memo(function WorkflowExecutionViewer({
|
|
|
304
300
|
actions.submitFileDecision,
|
|
305
301
|
actions.fileDecisionSubmittingKeys,
|
|
306
302
|
actions.fileDecisionErrorsByKey,
|
|
307
|
-
],
|
|
308
|
-
);
|
|
309
|
-
|
|
310
|
-
// The thread's HITL bundle (T06): the child-gate fields PLUS the
|
|
311
|
-
// task-level (human_input) approval wiring — since the gating card is
|
|
312
|
-
// the only decision surface, the thread carries all three gate kinds.
|
|
313
|
-
// A separate memo from `childGateHitl` so a human_input decision's
|
|
314
|
-
// in-flight flip re-renders the gating card, never the open transcript
|
|
315
|
-
// documents (DD-010).
|
|
316
|
-
const threadHitl = useMemo<WorkflowThreadHitl>(
|
|
317
|
-
() => ({
|
|
318
|
-
...childGateHitl,
|
|
319
|
-
submitTaskApproval: actions.submitTaskApproval,
|
|
320
|
-
taskApprovalSubmittingTaskNames: actions.taskApprovalSubmittingTaskNames,
|
|
321
|
-
taskApprovalErrorsByTaskName: actions.taskApprovalErrorsByTaskName,
|
|
322
|
-
}),
|
|
323
|
-
[
|
|
324
|
-
childGateHitl,
|
|
325
303
|
actions.submitTaskApproval,
|
|
326
304
|
actions.taskApprovalSubmittingTaskNames,
|
|
327
305
|
actions.taskApprovalErrorsByTaskName,
|
|
@@ -586,13 +564,12 @@ export const WorkflowExecutionViewer = memo(function WorkflowExecutionViewer({
|
|
|
586
564
|
taskStates={effectiveTaskStates}
|
|
587
565
|
totalTasks={effectiveTotalTasks}
|
|
588
566
|
isRunning={isRunning}
|
|
589
|
-
|
|
590
|
-
// In-card HITL (S10/T06): all three gate kinds decide on
|
|
591
|
-
// gating card
|
|
592
|
-
//
|
|
567
|
+
onNavigateToAgentExecution={onNavigateToAgentExecution}
|
|
568
|
+
// In-card HITL (S10/T06/T07): all three gate kinds decide on
|
|
569
|
+
// the gating card — human_input on the card itself, child tool
|
|
570
|
+
// approvals and file reviews inside the card's inline child
|
|
571
|
+
// transcript (which streams them from the child directly).
|
|
593
572
|
hitl={threadHitl}
|
|
594
|
-
pendingApprovals={execution?.status?.pendingApprovals}
|
|
595
|
-
pendingFileReviews={execution?.status?.pendingFileReviews}
|
|
596
573
|
// Full per-task I/O for the card bodies (T04) — an O(1)
|
|
597
574
|
// per-card snapshot lookup.
|
|
598
575
|
taskSnapshotsByName={taskSnapshotsByName}
|
|
@@ -632,9 +609,7 @@ export const WorkflowExecutionViewer = memo(function WorkflowExecutionViewer({
|
|
|
632
609
|
fileChangesState={fileChangesState}
|
|
633
610
|
costSummary={costSummary}
|
|
634
611
|
taskStates={effectiveTaskStates}
|
|
635
|
-
onNavigateToAgentExecution={onNavigateToAgentExecution}
|
|
636
612
|
onApplyFix={onNavigateToWorkflowEditor ? handleApplyFix : undefined}
|
|
637
|
-
transcriptHitl={childGateHitl}
|
|
638
613
|
/>
|
|
639
614
|
) : null
|
|
640
615
|
}
|
|
@@ -654,8 +629,9 @@ export const WorkflowExecutionViewer = memo(function WorkflowExecutionViewer({
|
|
|
654
629
|
* open-editor group (keeping that subscription out of the streaming owner),
|
|
655
630
|
* assembles the rail facets, and resolves open virtual-document tabs back to
|
|
656
631
|
* their records (artifact tabs → `Artifact`, file-change tabs → the current
|
|
657
|
-
* net `FileChange`,
|
|
658
|
-
*
|
|
632
|
+
* net `FileChange`, the diagnosis tab → `WorkflowRepairCard`). Child
|
|
633
|
+
* transcripts are NOT a document family here — since T07 they render inline
|
|
634
|
+
* in the thread's agent-call cards.
|
|
659
635
|
*/
|
|
660
636
|
function ExecutionWorkspacePanel({
|
|
661
637
|
panel,
|
|
@@ -665,9 +641,7 @@ function ExecutionWorkspacePanel({
|
|
|
665
641
|
fileChangesState,
|
|
666
642
|
costSummary,
|
|
667
643
|
taskStates,
|
|
668
|
-
onNavigateToAgentExecution,
|
|
669
644
|
onApplyFix,
|
|
670
|
-
transcriptHitl,
|
|
671
645
|
}: {
|
|
672
646
|
readonly panel: WorkflowExecutionPanelController;
|
|
673
647
|
readonly executionId: string;
|
|
@@ -676,11 +650,8 @@ function ExecutionWorkspacePanel({
|
|
|
676
650
|
readonly fileChangesState: UseWorkflowExecutionFileChangesReturn;
|
|
677
651
|
readonly costSummary: DerivedCostSummary;
|
|
678
652
|
readonly taskStates: ReadonlyMap<string, DerivedTaskState>;
|
|
679
|
-
readonly onNavigateToAgentExecution?: (agentExecutionId: string) => void;
|
|
680
653
|
/** "Apply Fix" from the diagnosis document — host-routed (DD-004). */
|
|
681
654
|
readonly onApplyFix?: (yaml: string) => void;
|
|
682
|
-
/** Workflow-level HITL wiring for open transcript documents (S5). */
|
|
683
|
-
readonly transcriptHitl: WorkflowAgentExecutionHitl;
|
|
684
655
|
}) {
|
|
685
656
|
const { editors, activeFile } = useWorkspaceEditors(panel.editorsStore);
|
|
686
657
|
|
|
@@ -732,7 +703,6 @@ function ExecutionWorkspacePanel({
|
|
|
732
703
|
(editor) =>
|
|
733
704
|
editor.entryId === ARTIFACT_DOCUMENT_ENTRY_ID ||
|
|
734
705
|
editor.entryId === FILE_CHANGE_DOCUMENT_ENTRY_ID ||
|
|
735
|
-
editor.entryId === AGENT_EXECUTION_DOCUMENT_ENTRY_ID ||
|
|
736
706
|
editor.entryId === DIAGNOSIS_DOCUMENT_ENTRY_ID,
|
|
737
707
|
)
|
|
738
708
|
.map((editor) => {
|
|
@@ -761,30 +731,6 @@ function ExecutionWorkspacePanel({
|
|
|
761
731
|
),
|
|
762
732
|
};
|
|
763
733
|
}
|
|
764
|
-
if (editor.entryId === AGENT_EXECUTION_DOCUMENT_ENTRY_ID) {
|
|
765
|
-
// The tab path CARRIES the child id (no lookup map — unlike the
|
|
766
|
-
// artifact/change families, a transcript needs only its id to
|
|
767
|
-
// fetch/stream itself). The suffix is the AGENT_CALL task name;
|
|
768
|
-
// its live state provides the agent slug for the header.
|
|
769
|
-
const childExecutionId = parseAgentExecutionTabPath(editor.path);
|
|
770
|
-
const taskName = editor.path.slice(childExecutionId.length + 1);
|
|
771
|
-
return {
|
|
772
|
-
entryId: AGENT_EXECUTION_DOCUMENT_ENTRY_ID,
|
|
773
|
-
path: editor.path,
|
|
774
|
-
// Keyed by tab path so the mounted fetch/stream survives
|
|
775
|
-
// unrelated editors churn while this tab stays active.
|
|
776
|
-
content: (
|
|
777
|
-
<WorkflowAgentExecutionDocument
|
|
778
|
-
key={editor.path}
|
|
779
|
-
childExecutionId={childExecutionId}
|
|
780
|
-
taskName={taskName}
|
|
781
|
-
agentSlug={taskStates.get(taskName)?.agentSlug || undefined}
|
|
782
|
-
onNavigateToAgentExecution={onNavigateToAgentExecution}
|
|
783
|
-
hitl={transcriptHitl}
|
|
784
|
-
/>
|
|
785
|
-
),
|
|
786
|
-
};
|
|
787
|
-
}
|
|
788
734
|
if (editor.entryId === FILE_CHANGE_DOCUMENT_ENTRY_ID) {
|
|
789
735
|
const change = fileChangeByTabPath.get(editor.path);
|
|
790
736
|
return {
|
|
@@ -814,9 +760,6 @@ function ExecutionWorkspacePanel({
|
|
|
814
760
|
editors,
|
|
815
761
|
artifactByTabPath,
|
|
816
762
|
fileChangeByTabPath,
|
|
817
|
-
taskStates,
|
|
818
|
-
onNavigateToAgentExecution,
|
|
819
|
-
transcriptHitl,
|
|
820
763
|
executionId,
|
|
821
764
|
org,
|
|
822
765
|
onApplyFix,
|
|
@@ -7,7 +7,11 @@ import { cn } from "@stigmer/theme";
|
|
|
7
7
|
import { MARKDOWN_COMPONENTS, REMARK_PLUGINS } from "../internal/markdown-components.js";
|
|
8
8
|
import { formatDuration, formatTimestamp } from "./format-utils.js";
|
|
9
9
|
import type { TaskOutcome } from "./WorkflowTaskApprovalCard.js";
|
|
10
|
-
import
|
|
10
|
+
import {
|
|
11
|
+
deriveTaskReviewer,
|
|
12
|
+
type TaskDetailApprovalDecision,
|
|
13
|
+
type TaskReviewerView,
|
|
14
|
+
} from "./task-detail/task-approval.js";
|
|
11
15
|
|
|
12
16
|
/** Props for {@link WorkflowTaskApprovalSummary}. */
|
|
13
17
|
export interface WorkflowTaskApprovalSummaryProps {
|
|
@@ -82,6 +86,11 @@ export const WorkflowTaskApprovalSummary = memo(function WorkflowTaskApprovalSum
|
|
|
82
86
|
|
|
83
87
|
const formEntries = useMemo(() => extractFormEntries(decision?.formData ?? null), [decision]);
|
|
84
88
|
|
|
89
|
+
const reviewer = useMemo(
|
|
90
|
+
() => (decision ? deriveTaskReviewer(decision) : null),
|
|
91
|
+
[decision],
|
|
92
|
+
);
|
|
93
|
+
|
|
85
94
|
return (
|
|
86
95
|
<div
|
|
87
96
|
role="group"
|
|
@@ -116,20 +125,16 @@ export const WorkflowTaskApprovalSummary = memo(function WorkflowTaskApprovalSum
|
|
|
116
125
|
{/* Reviewer + timing */}
|
|
117
126
|
{!isFinalizing && (
|
|
118
127
|
<div className="mt-1.5 flex flex-wrap items-center gap-x-1.5 text-[11px] text-muted-foreground">
|
|
119
|
-
{
|
|
120
|
-
<span>
|
|
121
|
-
by <span className="font-medium text-foreground">{decision!.reviewer}</span>
|
|
122
|
-
</span>
|
|
123
|
-
)}
|
|
128
|
+
{reviewer && <ReviewerChip reviewer={reviewer} />}
|
|
124
129
|
{decision!.respondedAt && (
|
|
125
130
|
<>
|
|
126
|
-
{
|
|
131
|
+
{reviewer && <Dot />}
|
|
127
132
|
<span className="tabular-nums">{formatTimestamp(decision!.respondedAt)}</span>
|
|
128
133
|
</>
|
|
129
134
|
)}
|
|
130
135
|
{decision!.waitDurationMs > 0 && (
|
|
131
136
|
<>
|
|
132
|
-
{(
|
|
137
|
+
{(reviewer || decision!.respondedAt) && <Dot />}
|
|
133
138
|
<span className="tabular-nums">waited {formatDuration(decision!.waitDurationMs)}</span>
|
|
134
139
|
</>
|
|
135
140
|
)}
|
|
@@ -178,6 +183,38 @@ export const WorkflowTaskApprovalSummary = memo(function WorkflowTaskApprovalSum
|
|
|
178
183
|
);
|
|
179
184
|
});
|
|
180
185
|
|
|
186
|
+
// ---------------------------------------------------------------------------
|
|
187
|
+
// Reviewer chip
|
|
188
|
+
// ---------------------------------------------------------------------------
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* `by <avatar> Ada Lovelace` — the reviewer's display identity, following
|
|
192
|
+
* the platform's actor pattern (see `WorkflowVersionTimeline`). The email
|
|
193
|
+
* rides as a native tooltip when it is not already the visible label. A
|
|
194
|
+
* label that fell through to the raw identity (legacy records) renders
|
|
195
|
+
* de-emphasized — internal IDs are never presented as if they were names.
|
|
196
|
+
*/
|
|
197
|
+
function ReviewerChip({ reviewer }: { readonly reviewer: TaskReviewerView }) {
|
|
198
|
+
return (
|
|
199
|
+
<span className="flex items-center gap-1">
|
|
200
|
+
by{" "}
|
|
201
|
+
{reviewer.avatar && (
|
|
202
|
+
<img src={reviewer.avatar} alt="" className="size-3.5 rounded-full" />
|
|
203
|
+
)}
|
|
204
|
+
<span
|
|
205
|
+
className={cn(
|
|
206
|
+
reviewer.isRawId
|
|
207
|
+
? "font-mono text-[10px] text-muted-foreground"
|
|
208
|
+
: "font-medium text-foreground",
|
|
209
|
+
)}
|
|
210
|
+
title={reviewer.email || undefined}
|
|
211
|
+
>
|
|
212
|
+
{reviewer.label}
|
|
213
|
+
</span>
|
|
214
|
+
</span>
|
|
215
|
+
);
|
|
216
|
+
}
|
|
217
|
+
|
|
181
218
|
// ---------------------------------------------------------------------------
|
|
182
219
|
// Tone (visual treatment of the chosen outcome)
|
|
183
220
|
// ---------------------------------------------------------------------------
|
|
@@ -1,271 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
// The schema-aware YAML editor started life here (T10) and was promoted to
|
|
2
|
+
// the manifest domain when resource YAML editing became a cross-kind
|
|
3
|
+
// concern. These aliases keep the original workflow-scoped names stable —
|
|
4
|
+
// both are public API (exported from the package index).
|
|
2
5
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
useEffect,
|
|
6
|
-
memo,
|
|
7
|
-
type CSSProperties,
|
|
8
|
-
} from "react";
|
|
9
|
-
import { cn } from "@stigmer/theme";
|
|
10
|
-
import { EditorState, Compartment } from "@codemirror/state";
|
|
11
|
-
import { EditorView, keymap, lineNumbers, highlightActiveLine, drawSelection, highlightSpecialChars } from "@codemirror/view";
|
|
12
|
-
import { yaml } from "@codemirror/lang-yaml";
|
|
13
|
-
import { syntaxHighlighting, HighlightStyle, bracketMatching, indentOnInput, foldGutter } from "@codemirror/language";
|
|
14
|
-
import { tags } from "@lezer/highlight";
|
|
15
|
-
import { lintGutter, type Diagnostic, setDiagnostics } from "@codemirror/lint";
|
|
16
|
-
import { defaultKeymap, indentWithTab, history, historyKeymap } from "@codemirror/commands";
|
|
17
|
-
import { autocompletion } from "@codemirror/autocomplete";
|
|
18
|
-
|
|
19
|
-
/** Props for {@link WorkflowYamlEditor}. */
|
|
20
|
-
export interface WorkflowYamlEditorProps {
|
|
21
|
-
/** Current YAML content. */
|
|
22
|
-
readonly value: string;
|
|
23
|
-
/** Called when the editor content changes. */
|
|
24
|
-
readonly onChange?: (value: string) => void;
|
|
25
|
-
/** Validation diagnostics to display as inline markers. */
|
|
26
|
-
readonly diagnostics?: readonly Diagnostic[];
|
|
27
|
-
/** Whether the editor is read-only. @default false */
|
|
28
|
-
readonly readOnly?: boolean;
|
|
29
|
-
/** Additional CSS class names for the root container. */
|
|
30
|
-
readonly className?: string;
|
|
31
|
-
/** Additional inline styles for the root container. */
|
|
32
|
-
readonly style?: CSSProperties;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Schema-aware YAML editor built on CodeMirror 6.
|
|
37
|
-
*
|
|
38
|
-
* Provides syntax highlighting, line numbers, bracket matching,
|
|
39
|
-
* code folding, undo/redo, and inline diagnostic markers driven by
|
|
40
|
-
* external validation (via the `diagnostics` prop).
|
|
41
|
-
*
|
|
42
|
-
* Themed via `--stgm-*` CSS custom properties to respect the host
|
|
43
|
-
* application's design tokens.
|
|
44
|
-
*
|
|
45
|
-
* This is an optional SDK component — it requires CodeMirror peer
|
|
46
|
-
* dependencies which are tree-shaken when not imported (DD-013).
|
|
47
|
-
*
|
|
48
|
-
* @example
|
|
49
|
-
* ```tsx
|
|
50
|
-
* <WorkflowYamlEditor
|
|
51
|
-
* value={yaml}
|
|
52
|
-
* onChange={setYaml}
|
|
53
|
-
* diagnostics={diagnostics}
|
|
54
|
-
* />
|
|
55
|
-
* ```
|
|
56
|
-
*
|
|
57
|
-
* @since T10 (YAML Editor with Graph Preview)
|
|
58
|
-
*/
|
|
59
|
-
export const WorkflowYamlEditor = memo(function WorkflowYamlEditor({
|
|
60
|
-
value,
|
|
61
|
-
onChange,
|
|
62
|
-
diagnostics,
|
|
63
|
-
readOnly = false,
|
|
64
|
-
className,
|
|
65
|
-
style,
|
|
66
|
-
}: WorkflowYamlEditorProps) {
|
|
67
|
-
const containerRef = useRef<HTMLDivElement>(null);
|
|
68
|
-
const viewRef = useRef<EditorView | null>(null);
|
|
69
|
-
const readOnlyCompartment = useRef(new Compartment());
|
|
70
|
-
const onChangeRef = useRef(onChange);
|
|
71
|
-
onChangeRef.current = onChange;
|
|
72
|
-
|
|
73
|
-
const isInternalUpdate = useRef(false);
|
|
74
|
-
|
|
75
|
-
useEffect(() => {
|
|
76
|
-
if (!containerRef.current) return;
|
|
77
|
-
|
|
78
|
-
const updateListener = EditorView.updateListener.of((update) => {
|
|
79
|
-
if (update.docChanged) {
|
|
80
|
-
isInternalUpdate.current = true;
|
|
81
|
-
onChangeRef.current?.(update.state.doc.toString());
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
const state = EditorState.create({
|
|
86
|
-
doc: value,
|
|
87
|
-
extensions: [
|
|
88
|
-
lineNumbers(),
|
|
89
|
-
highlightActiveLine(),
|
|
90
|
-
highlightSpecialChars(),
|
|
91
|
-
drawSelection(),
|
|
92
|
-
bracketMatching(),
|
|
93
|
-
indentOnInput(),
|
|
94
|
-
foldGutter(),
|
|
95
|
-
history(),
|
|
96
|
-
yaml(),
|
|
97
|
-
syntaxHighlighting(stigmerHighlightStyle, { fallback: true }),
|
|
98
|
-
autocompletion(),
|
|
99
|
-
lintGutter(),
|
|
100
|
-
keymap.of([...defaultKeymap, ...historyKeymap, indentWithTab]),
|
|
101
|
-
readOnlyCompartment.current.of(EditorState.readOnly.of(readOnly)),
|
|
102
|
-
stigmerTheme,
|
|
103
|
-
updateListener,
|
|
104
|
-
],
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
const view = new EditorView({
|
|
108
|
-
state,
|
|
109
|
-
parent: containerRef.current,
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
viewRef.current = view;
|
|
113
|
-
|
|
114
|
-
return () => {
|
|
115
|
-
view.destroy();
|
|
116
|
-
viewRef.current = null;
|
|
117
|
-
};
|
|
118
|
-
}, []);
|
|
119
|
-
|
|
120
|
-
// Sync external value changes into the editor
|
|
121
|
-
useEffect(() => {
|
|
122
|
-
const view = viewRef.current;
|
|
123
|
-
if (!view) return;
|
|
124
|
-
|
|
125
|
-
if (isInternalUpdate.current) {
|
|
126
|
-
isInternalUpdate.current = false;
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
const currentDoc = view.state.doc.toString();
|
|
131
|
-
if (currentDoc !== value) {
|
|
132
|
-
view.dispatch({
|
|
133
|
-
changes: {
|
|
134
|
-
from: 0,
|
|
135
|
-
to: currentDoc.length,
|
|
136
|
-
insert: value,
|
|
137
|
-
},
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
}, [value]);
|
|
141
|
-
|
|
142
|
-
useEffect(() => {
|
|
143
|
-
const view = viewRef.current;
|
|
144
|
-
if (!view) return;
|
|
145
|
-
|
|
146
|
-
view.dispatch({
|
|
147
|
-
effects: readOnlyCompartment.current.reconfigure(
|
|
148
|
-
EditorState.readOnly.of(readOnly),
|
|
149
|
-
),
|
|
150
|
-
});
|
|
151
|
-
}, [readOnly]);
|
|
152
|
-
|
|
153
|
-
// Sync diagnostics into CodeMirror's lint system
|
|
154
|
-
useEffect(() => {
|
|
155
|
-
const view = viewRef.current;
|
|
156
|
-
if (!view) return;
|
|
157
|
-
|
|
158
|
-
const cmDiags: Diagnostic[] = diagnostics
|
|
159
|
-
? diagnostics.map((d) => ({
|
|
160
|
-
...d,
|
|
161
|
-
from: Math.min(d.from, view.state.doc.length),
|
|
162
|
-
to: Math.min(d.to, view.state.doc.length),
|
|
163
|
-
}))
|
|
164
|
-
: [];
|
|
165
|
-
|
|
166
|
-
view.dispatch(setDiagnostics(view.state, cmDiags));
|
|
167
|
-
}, [diagnostics]);
|
|
168
|
-
|
|
169
|
-
return (
|
|
170
|
-
<div
|
|
171
|
-
ref={containerRef}
|
|
172
|
-
className={cn(
|
|
173
|
-
"stgm-yaml-editor overflow-auto rounded-md border border-border bg-background font-mono text-sm",
|
|
174
|
-
className,
|
|
175
|
-
)}
|
|
176
|
-
style={style}
|
|
177
|
-
/>
|
|
178
|
-
);
|
|
179
|
-
});
|
|
180
|
-
|
|
181
|
-
// ---------------------------------------------------------------------------
|
|
182
|
-
// Syntax highlighting: maps lezer tags to --stgm-syntax-* CSS variables
|
|
183
|
-
// ---------------------------------------------------------------------------
|
|
184
|
-
|
|
185
|
-
const stigmerHighlightStyle = HighlightStyle.define([
|
|
186
|
-
{ tag: tags.propertyName, color: "var(--stgm-syntax-property, #0550ae)" },
|
|
187
|
-
{ tag: tags.tagName, color: "var(--stgm-syntax-tag, #cf222e)" },
|
|
188
|
-
{ tag: tags.keyword, color: "var(--stgm-syntax-keyword, #8250df)", fontWeight: "bold" },
|
|
189
|
-
{ tag: tags.string, color: "var(--stgm-syntax-string, #0a3069)" },
|
|
190
|
-
{ tag: tags.number, color: "var(--stgm-syntax-number, #953800)" },
|
|
191
|
-
{ tag: [tags.bool, tags.null], color: "var(--stgm-syntax-bool, #8250df)" },
|
|
192
|
-
{ tag: tags.atom, color: "var(--stgm-syntax-atom, #cf222e)" },
|
|
193
|
-
{ tag: tags.comment, color: "var(--stgm-syntax-comment, #6e7781)", fontStyle: "italic" },
|
|
194
|
-
{ tag: tags.meta, color: "var(--stgm-syntax-meta, #8250df)" },
|
|
195
|
-
{ tag: tags.name, color: "var(--stgm-foreground, #1a1a2e)" },
|
|
196
|
-
{ tag: tags.definition(tags.name), color: "var(--stgm-syntax-property, #0550ae)" },
|
|
197
|
-
{ tag: tags.separator, color: "var(--stgm-muted-foreground, #737373)" },
|
|
198
|
-
{ tag: tags.punctuation, color: "var(--stgm-muted-foreground, #737373)" },
|
|
199
|
-
]);
|
|
200
|
-
|
|
201
|
-
// ---------------------------------------------------------------------------
|
|
202
|
-
// CodeMirror theme bridge: maps --stgm-* tokens to editor styles
|
|
203
|
-
// ---------------------------------------------------------------------------
|
|
204
|
-
|
|
205
|
-
const stigmerTheme = EditorView.theme({
|
|
206
|
-
"&": {
|
|
207
|
-
height: "100%",
|
|
208
|
-
backgroundColor: "var(--stgm-background, #fff)",
|
|
209
|
-
color: "var(--stgm-foreground, #1a1a2e)",
|
|
210
|
-
fontSize: "13px",
|
|
211
|
-
},
|
|
212
|
-
".cm-content": {
|
|
213
|
-
caretColor: "var(--stgm-foreground, #1a1a2e)",
|
|
214
|
-
fontFamily: "var(--stgm-font-mono, ui-monospace, monospace)",
|
|
215
|
-
padding: "8px 0",
|
|
216
|
-
},
|
|
217
|
-
".cm-cursor, .cm-dropCursor": {
|
|
218
|
-
borderLeftColor: "var(--stgm-foreground, #1a1a2e)",
|
|
219
|
-
},
|
|
220
|
-
"&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection":
|
|
221
|
-
{
|
|
222
|
-
backgroundColor: "var(--stgm-accent, #e0e7ff)",
|
|
223
|
-
},
|
|
224
|
-
".cm-gutters": {
|
|
225
|
-
backgroundColor: "var(--stgm-muted, #f5f5f5)",
|
|
226
|
-
color: "var(--stgm-muted-foreground, #737373)",
|
|
227
|
-
border: "none",
|
|
228
|
-
borderRight: "1px solid var(--stgm-border, #e5e5e5)",
|
|
229
|
-
},
|
|
230
|
-
".cm-activeLineGutter": {
|
|
231
|
-
backgroundColor: "var(--stgm-accent, #e0e7ff)",
|
|
232
|
-
},
|
|
233
|
-
".cm-activeLine": {
|
|
234
|
-
backgroundColor: "color-mix(in srgb, var(--stgm-accent, #e0e7ff) 30%, transparent)",
|
|
235
|
-
},
|
|
236
|
-
".cm-foldPlaceholder": {
|
|
237
|
-
backgroundColor: "var(--stgm-muted, #f5f5f5)",
|
|
238
|
-
border: "1px solid var(--stgm-border, #e5e5e5)",
|
|
239
|
-
color: "var(--stgm-muted-foreground, #737373)",
|
|
240
|
-
},
|
|
241
|
-
".cm-tooltip": {
|
|
242
|
-
backgroundColor: "var(--stgm-popover, #fff)",
|
|
243
|
-
color: "var(--stgm-popover-foreground, #1a1a2e)",
|
|
244
|
-
border: "1px solid var(--stgm-border, #e5e5e5)",
|
|
245
|
-
borderRadius: "6px",
|
|
246
|
-
boxShadow: "0 2px 8px rgba(0,0,0,0.08)",
|
|
247
|
-
},
|
|
248
|
-
".cm-tooltip-autocomplete": {
|
|
249
|
-
"& > ul > li[aria-selected]": {
|
|
250
|
-
backgroundColor: "var(--stgm-accent, #e0e7ff)",
|
|
251
|
-
color: "var(--stgm-accent-foreground, #1a1a2e)",
|
|
252
|
-
},
|
|
253
|
-
},
|
|
254
|
-
".cm-diagnostic-error": {
|
|
255
|
-
borderLeft: "3px solid var(--stgm-destructive, #ef4444)",
|
|
256
|
-
},
|
|
257
|
-
".cm-diagnostic-warning": {
|
|
258
|
-
borderLeft: "3px solid var(--stgm-warning, #f59e0b)",
|
|
259
|
-
},
|
|
260
|
-
".cm-diagnostic-info": {
|
|
261
|
-
borderLeft: "3px solid var(--stgm-primary, #6366f1)",
|
|
262
|
-
},
|
|
263
|
-
".cm-lint-marker-error": {
|
|
264
|
-
content: "'●'",
|
|
265
|
-
color: "var(--stgm-destructive, #ef4444)",
|
|
266
|
-
},
|
|
267
|
-
".cm-lint-marker-warning": {
|
|
268
|
-
content: "'●'",
|
|
269
|
-
color: "var(--stgm-warning, #f59e0b)",
|
|
270
|
-
},
|
|
271
|
-
});
|
|
6
|
+
export { YamlEditor as WorkflowYamlEditor } from "../manifest/YamlEditor.js";
|
|
7
|
+
export type { YamlEditorProps as WorkflowYamlEditorProps } from "../manifest/YamlEditor.js";
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
// The T07 stacked-live-region check: several inline transcripts mount
|
|
2
|
+
// several REAL MessageThreads, each carrying its own `role="log"
|
|
3
|
+
// aria-live="polite"` scroller, under the viewer's one task-state
|
|
4
|
+
// announcer. This pins the a11y-relevant facts that make the stack
|
|
5
|
+
// acceptable rather than noisy:
|
|
6
|
+
//
|
|
7
|
+
// - each live region is scoped to ITS transcript (announcements name their
|
|
8
|
+
// own child's content, never a sibling's);
|
|
9
|
+
// - `polite` regions only announce on CONTENT CHANGE — a settled child's
|
|
10
|
+
// transcript never mutates, so it is permanently silent;
|
|
11
|
+
// - the viewport gate (useInViewport → useLiveAgentExecution's `live`)
|
|
12
|
+
// pauses off-screen streams, so at most the on-screen running children
|
|
13
|
+
// mutate concurrently.
|
|
14
|
+
//
|
|
15
|
+
// If a live round ever proves this noisy in real screen readers, the
|
|
16
|
+
// planned fallback is a backward-compatible `ariaLive` opt-out prop on
|
|
17
|
+
// MessageThread (DD-011) — not committed speculatively.
|
|
18
|
+
|
|
19
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
20
|
+
import { render, cleanup, within, screen } from "@testing-library/react";
|
|
21
|
+
import { create } from "@bufbuild/protobuf";
|
|
22
|
+
import {
|
|
23
|
+
AgentExecutionSchema,
|
|
24
|
+
AgentExecutionStatusSchema,
|
|
25
|
+
type AgentExecution,
|
|
26
|
+
} from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
|
|
27
|
+
import { ApiResourceMetadataSchema } from "@stigmer/protos/ai/stigmer/commons/apiresource/metadata_pb";
|
|
28
|
+
import { AgentMessageSchema } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/message_pb";
|
|
29
|
+
import {
|
|
30
|
+
ExecutionPhase,
|
|
31
|
+
MessageType,
|
|
32
|
+
} from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
33
|
+
|
|
34
|
+
vi.mock("../../execution/useLiveAgentExecution", () => ({
|
|
35
|
+
useLiveAgentExecution: vi.fn(),
|
|
36
|
+
}));
|
|
37
|
+
|
|
38
|
+
import { useLiveAgentExecution } from "../../execution/useLiveAgentExecution";
|
|
39
|
+
import { WorkflowAgentCallTranscript } from "../WorkflowAgentCallTranscript";
|
|
40
|
+
|
|
41
|
+
const mockUseLiveAgentExecution = vi.mocked(useLiveAgentExecution);
|
|
42
|
+
|
|
43
|
+
function executionWithMessage(id: string, text: string): AgentExecution {
|
|
44
|
+
const exec = create(AgentExecutionSchema);
|
|
45
|
+
exec.metadata = create(ApiResourceMetadataSchema, { id });
|
|
46
|
+
exec.status = create(AgentExecutionStatusSchema, {
|
|
47
|
+
phase: ExecutionPhase.EXECUTION_COMPLETED,
|
|
48
|
+
messages: [
|
|
49
|
+
create(AgentMessageSchema, {
|
|
50
|
+
type: MessageType.MESSAGE_AI,
|
|
51
|
+
content: text,
|
|
52
|
+
}),
|
|
53
|
+
],
|
|
54
|
+
});
|
|
55
|
+
return exec;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
beforeEach(() => {
|
|
59
|
+
vi.clearAllMocks();
|
|
60
|
+
// MessageThread's auto-scroll + the transcript's viewport gate both need
|
|
61
|
+
// observers happy-dom lacks.
|
|
62
|
+
vi.stubGlobal(
|
|
63
|
+
"IntersectionObserver",
|
|
64
|
+
vi.fn(() => ({
|
|
65
|
+
observe: vi.fn(),
|
|
66
|
+
unobserve: vi.fn(),
|
|
67
|
+
disconnect: vi.fn(),
|
|
68
|
+
takeRecords: vi.fn(() => []),
|
|
69
|
+
})),
|
|
70
|
+
);
|
|
71
|
+
vi.stubGlobal(
|
|
72
|
+
"ResizeObserver",
|
|
73
|
+
vi.fn(() => ({ observe: vi.fn(), unobserve: vi.fn(), disconnect: vi.fn() })),
|
|
74
|
+
);
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
afterEach(() => {
|
|
78
|
+
cleanup();
|
|
79
|
+
vi.restoreAllMocks();
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
describe("WorkflowAgentCallTranscript — stacked live regions (T07 a11y)", () => {
|
|
83
|
+
it("scopes each transcript's polite log region to its own child's content, under the viewer-style announcer", () => {
|
|
84
|
+
mockUseLiveAgentExecution.mockImplementation((id) => ({
|
|
85
|
+
execution: executionWithMessage(id!, `report from ${id}`),
|
|
86
|
+
phase: ExecutionPhase.EXECUTION_COMPLETED,
|
|
87
|
+
isLoading: false,
|
|
88
|
+
isStreaming: false,
|
|
89
|
+
isReconnecting: false,
|
|
90
|
+
error: null,
|
|
91
|
+
reconnect: vi.fn(),
|
|
92
|
+
}));
|
|
93
|
+
|
|
94
|
+
const { container } = render(
|
|
95
|
+
<div>
|
|
96
|
+
{/* The viewer's single always-visible task-state announcer. */}
|
|
97
|
+
<div role="log" aria-live="polite" data-testid="viewer-announcer" />
|
|
98
|
+
<WorkflowAgentCallTranscript childExecutionId="aex_a" agentSlug="alpha" />
|
|
99
|
+
<WorkflowAgentCallTranscript childExecutionId="aex_b" agentSlug="beta" />
|
|
100
|
+
</div>,
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
// Three polite regions coexist: the announcer + one per transcript.
|
|
104
|
+
const regions = Array.from(
|
|
105
|
+
container.querySelectorAll('[aria-live="polite"]'),
|
|
106
|
+
);
|
|
107
|
+
expect(regions).toHaveLength(3);
|
|
108
|
+
for (const region of regions) {
|
|
109
|
+
expect(region.getAttribute("aria-live")).toBe("polite");
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// Scoping: each transcript's log carries ONLY its own child's content —
|
|
113
|
+
// an announcement can never attribute one agent's words to another.
|
|
114
|
+
const transcriptA = screen.getByRole("group", {
|
|
115
|
+
name: "Transcript of agent alpha",
|
|
116
|
+
});
|
|
117
|
+
const transcriptB = screen.getByRole("group", {
|
|
118
|
+
name: "Transcript of agent beta",
|
|
119
|
+
});
|
|
120
|
+
expect(within(transcriptA).getByText("report from aex_a")).toBeTruthy();
|
|
121
|
+
expect(within(transcriptA).queryByText("report from aex_b")).toBeNull();
|
|
122
|
+
expect(within(transcriptB).getByText("report from aex_b")).toBeTruthy();
|
|
123
|
+
});
|
|
124
|
+
});
|