@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
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { useCallback, useMemo, useRef, useState } from "react";
|
|
3
|
-
import { stringify as stringifyYaml } from "yaml";
|
|
4
|
-
import { useStigmer } from "../hooks.js";
|
|
5
|
-
import { toError } from "../internal/toError.js";
|
|
6
|
-
import { parseResourceYaml } from "./parse-resource-yaml.js";
|
|
7
|
-
// ---------------------------------------------------------------------------
|
|
8
|
-
// Hook
|
|
9
|
-
// ---------------------------------------------------------------------------
|
|
10
|
-
/**
|
|
11
|
-
* Headless import hook for Stigmer resources.
|
|
12
|
-
*
|
|
13
|
-
* Orchestrates the file import workflow:
|
|
14
|
-
* 1. User selects a `.yaml`, `.yml`, or `.json` file
|
|
15
|
-
* 2. `readFile` reads the content, detects the format, and validates
|
|
16
|
-
* the structure via `parseResourceYaml`
|
|
17
|
-
* 3. On success, `preview` is populated with kind, name, slug, format
|
|
18
|
-
* 4. On validation error, `error` is populated with a user-facing message
|
|
19
|
-
* 5. User confirms → `apply(org)` calls the appropriate SDK `apply()` method
|
|
20
|
-
*
|
|
21
|
-
* Follows the established mutation-hook pattern: `isApplying` + `error` +
|
|
22
|
-
* `reset`. The `preview` state enables a confirmation step before committing
|
|
23
|
-
* (Nielsen heuristic #3: user control, #5: error prevention).
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* ```tsx
|
|
27
|
-
* const { readFile, preview, error, reset, apply, isApplying } = useImportResource();
|
|
28
|
-
*
|
|
29
|
-
* const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
|
30
|
-
* const file = e.target.files?.[0];
|
|
31
|
-
* if (file) readFile(file);
|
|
32
|
-
* };
|
|
33
|
-
*
|
|
34
|
-
* if (preview) {
|
|
35
|
-
* return (
|
|
36
|
-
* <div>
|
|
37
|
-
* <p>Import {preview.kind}: {preview.name}</p>
|
|
38
|
-
* <button onClick={() => apply(org)} disabled={isApplying}>
|
|
39
|
-
* Confirm
|
|
40
|
-
* </button>
|
|
41
|
-
* </div>
|
|
42
|
-
* );
|
|
43
|
-
* }
|
|
44
|
-
* ```
|
|
45
|
-
*
|
|
46
|
-
* @see {@link parseResourceYaml} for the validation logic
|
|
47
|
-
* @see {@link ImportResourceDialog} for the styled component that composes this hook
|
|
48
|
-
*/
|
|
49
|
-
export function useImportResource() {
|
|
50
|
-
const stigmer = useStigmer();
|
|
51
|
-
const [preview, setPreview] = useState(null);
|
|
52
|
-
const [error, setError] = useState(null);
|
|
53
|
-
const [isApplying, setIsApplying] = useState(false);
|
|
54
|
-
const contentRef = useRef(null);
|
|
55
|
-
const parsedRef = useRef(null);
|
|
56
|
-
const reset = useCallback(() => {
|
|
57
|
-
setPreview(null);
|
|
58
|
-
setError(null);
|
|
59
|
-
setIsApplying(false);
|
|
60
|
-
contentRef.current = null;
|
|
61
|
-
parsedRef.current = null;
|
|
62
|
-
}, []);
|
|
63
|
-
const readFile = useCallback(async (file) => {
|
|
64
|
-
setPreview(null);
|
|
65
|
-
setError(null);
|
|
66
|
-
contentRef.current = null;
|
|
67
|
-
parsedRef.current = null;
|
|
68
|
-
let text;
|
|
69
|
-
try {
|
|
70
|
-
text = await file.text();
|
|
71
|
-
}
|
|
72
|
-
catch {
|
|
73
|
-
setError("Failed to read the selected file.");
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
if (!text.trim()) {
|
|
77
|
-
setError("The selected file is empty.");
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
const format = detectFormat(file.name, text);
|
|
81
|
-
// For JSON files, convert to YAML-parseable content first.
|
|
82
|
-
// parseResourceYaml expects YAML, but since YAML is a superset of JSON,
|
|
83
|
-
// we can pass JSON directly. However for cleaner error messages, we
|
|
84
|
-
// normalize JSON → plain object → YAML string if needed.
|
|
85
|
-
let yamlContent;
|
|
86
|
-
if (format === "json") {
|
|
87
|
-
try {
|
|
88
|
-
const parsed = JSON.parse(text);
|
|
89
|
-
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
90
|
-
setError("JSON file must contain a single object (not an array or primitive).");
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
yamlContent = stringifyYaml(parsed);
|
|
94
|
-
}
|
|
95
|
-
catch {
|
|
96
|
-
setError("The file does not contain valid JSON.");
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
yamlContent = text;
|
|
102
|
-
}
|
|
103
|
-
// Validate structure using the existing parser. We use a dummy org
|
|
104
|
-
// here — the real org is provided at apply time.
|
|
105
|
-
let parsed;
|
|
106
|
-
try {
|
|
107
|
-
parsed = parseResourceYaml(yamlContent, "__preview__");
|
|
108
|
-
}
|
|
109
|
-
catch (err) {
|
|
110
|
-
setError(err instanceof Error ? err.message : "Failed to validate resource file.");
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
contentRef.current = yamlContent;
|
|
114
|
-
parsedRef.current = parsed;
|
|
115
|
-
setPreview({
|
|
116
|
-
kind: parsed.kind,
|
|
117
|
-
name: parsed.input.name,
|
|
118
|
-
slug: "slug" in parsed.input ? parsed.input.slug : undefined,
|
|
119
|
-
format,
|
|
120
|
-
rawContent: text,
|
|
121
|
-
});
|
|
122
|
-
}, []);
|
|
123
|
-
const apply = useCallback(async (org) => {
|
|
124
|
-
const content = contentRef.current;
|
|
125
|
-
if (!content) {
|
|
126
|
-
throw new Error("No file has been validated. Call readFile first.");
|
|
127
|
-
}
|
|
128
|
-
setIsApplying(true);
|
|
129
|
-
setError(null);
|
|
130
|
-
try {
|
|
131
|
-
const parsed = parseResourceYaml(content, org);
|
|
132
|
-
switch (parsed.kind) {
|
|
133
|
-
case "Agent": {
|
|
134
|
-
const agent = await stigmer.agent.apply(parsed.input);
|
|
135
|
-
return {
|
|
136
|
-
kind: "Agent",
|
|
137
|
-
name: agent.metadata?.name ?? parsed.input.name,
|
|
138
|
-
org: agent.metadata?.org ?? org,
|
|
139
|
-
slug: agent.metadata?.slug ?? parsed.input.name,
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
case "McpServer": {
|
|
143
|
-
const mcpServer = await stigmer.mcpServer.apply(parsed.input);
|
|
144
|
-
return {
|
|
145
|
-
kind: "McpServer",
|
|
146
|
-
name: mcpServer.metadata?.name ?? parsed.input.name,
|
|
147
|
-
org: mcpServer.metadata?.org ?? org,
|
|
148
|
-
slug: mcpServer.metadata?.slug ?? parsed.input.name,
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
catch (err) {
|
|
154
|
-
const message = toError(err).message;
|
|
155
|
-
setError(message);
|
|
156
|
-
throw err;
|
|
157
|
-
}
|
|
158
|
-
finally {
|
|
159
|
-
setIsApplying(false);
|
|
160
|
-
}
|
|
161
|
-
}, [stigmer]);
|
|
162
|
-
return useMemo(() => ({ readFile, preview, error, reset, apply, isApplying }), [readFile, preview, error, reset, apply, isApplying]);
|
|
163
|
-
}
|
|
164
|
-
// ---------------------------------------------------------------------------
|
|
165
|
-
// Format detection
|
|
166
|
-
// ---------------------------------------------------------------------------
|
|
167
|
-
const JSON_EXTENSIONS = new Set([".json"]);
|
|
168
|
-
const YAML_EXTENSIONS = new Set([".yaml", ".yml"]);
|
|
169
|
-
function detectFormat(filename, content) {
|
|
170
|
-
const lowerName = filename.toLowerCase();
|
|
171
|
-
const dotIndex = lowerName.lastIndexOf(".");
|
|
172
|
-
if (dotIndex >= 0) {
|
|
173
|
-
const ext = lowerName.slice(dotIndex);
|
|
174
|
-
if (JSON_EXTENSIONS.has(ext))
|
|
175
|
-
return "json";
|
|
176
|
-
if (YAML_EXTENSIONS.has(ext))
|
|
177
|
-
return "yaml";
|
|
178
|
-
}
|
|
179
|
-
// Fallback: try parsing as JSON. If it parses, treat as JSON.
|
|
180
|
-
try {
|
|
181
|
-
JSON.parse(content);
|
|
182
|
-
return "json";
|
|
183
|
-
}
|
|
184
|
-
catch {
|
|
185
|
-
return "yaml";
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
//# sourceMappingURL=useImportResource.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useImportResource.js","sourceRoot":"","sources":["../../src/library/useImportResource.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAuB,MAAM,0BAA0B,CAAC;AAoDlF,8EAA8E;AAC9E,OAAO;AACP,8EAA8E;AAE9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAuB,IAAI,CAAC,CAAC;IACnE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACxD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpD,MAAM,UAAU,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IAEtD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1B,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;IAC3B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,IAAU,EAAE,EAAE;QAChD,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1B,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;QAEzB,IAAI,IAAY,CAAC;QACjB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,CAAC,mCAAmC,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,QAAQ,CAAC,6BAA6B,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAE7C,2DAA2D;QAC3D,wEAAwE;QACxE,oEAAoE;QACpE,yDAAyD;QACzD,IAAI,WAAmB,CAAC;QACxB,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;gBAC3C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC3E,QAAQ,CAAC,qEAAqE,CAAC,CAAC;oBAChF,OAAO;gBACT,CAAC;gBACD,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;YACtC,CAAC;YAAC,MAAM,CAAC;gBACP,QAAQ,CAAC,uCAAuC,CAAC,CAAC;gBAClD,OAAO;YACT,CAAC;QACH,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;QAED,mEAAmE;QACnE,iDAAiD;QACjD,IAAI,MAAsB,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,GAAG,iBAAiB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC;YACnF,OAAO;QACT,CAAC;QAED,UAAU,CAAC,OAAO,GAAG,WAAW,CAAC;QACjC,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC;QAE3B,UAAU,CAAC;YACT,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI;YACvB,IAAI,EAAE,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAE,MAAM,CAAC,KAAK,CAAC,IAA2B,CAAC,CAAC,CAAC,SAAS;YACpF,MAAM;YACN,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,GAAW,EAAgC,EAAE;QAC5E,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QACnC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QAED,aAAa,CAAC,IAAI,CAAC,CAAC;QACpB,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAE/C,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;gBACpB,KAAK,OAAO,CAAC,CAAC,CAAC;oBACb,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACtD,OAAO;wBACL,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI;wBAC/C,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,GAAG;wBAC/B,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI;qBAChD,CAAC;gBACJ,CAAC;gBACD,KAAK,WAAW,CAAC,CAAC,CAAC;oBACjB,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC9D,OAAO;wBACL,IAAI,EAAE,WAAW;wBACjB,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI;wBACnD,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE,GAAG,IAAI,GAAG;wBACnC,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI;qBACpD,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;YACrC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAClB,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,aAAa,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAC9D,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CACrD,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3C,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAEnD,SAAS,YAAY,CAAC,QAAgB,EAAE,OAAe;IACrD,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QAClB,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,MAAM,CAAC;QAC5C,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,MAAM,CAAC;IAC9C,CAAC;IAED,8DAA8D;IAC9D,IAAI,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACpB,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from "vitest";
|
|
2
|
-
import {
|
|
3
|
-
AGENT_EXECUTION_DOCUMENT_ENTRY_ID,
|
|
4
|
-
agentExecutionTabPath,
|
|
5
|
-
parseAgentExecutionTabPath,
|
|
6
|
-
} from "../agent-execution-document";
|
|
7
|
-
import { ARTIFACT_DOCUMENT_ENTRY_ID } from "../artifact-document";
|
|
8
|
-
import { FILE_CHANGE_DOCUMENT_ENTRY_ID } from "../file-change-document";
|
|
9
|
-
|
|
10
|
-
describe("agent-execution-document identity", () => {
|
|
11
|
-
it("has a distinct family id from the other virtual-document families", () => {
|
|
12
|
-
expect(AGENT_EXECUTION_DOCUMENT_ENTRY_ID).not.toBe(ARTIFACT_DOCUMENT_ENTRY_ID);
|
|
13
|
-
expect(AGENT_EXECUTION_DOCUMENT_ENTRY_ID).not.toBe(FILE_CHANGE_DOCUMENT_ENTRY_ID);
|
|
14
|
-
// NUL-namespaced so it can never alias a real workspace entry id.
|
|
15
|
-
expect(AGENT_EXECUTION_DOCUMENT_ENTRY_ID.startsWith("\u0000")).toBe(true);
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
it("labels the tab with the task name (path basename)", () => {
|
|
19
|
-
const path = agentExecutionTabPath("aex_abc123", "summarize-report");
|
|
20
|
-
expect(path).toBe("aex_abc123/summarize-report");
|
|
21
|
-
expect(path.split("/").pop()).toBe("summarize-report");
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it("round-trips the child execution id", () => {
|
|
25
|
-
const path = agentExecutionTabPath("aex_abc123", "summarize-report");
|
|
26
|
-
expect(parseAgentExecutionTabPath(path)).toBe("aex_abc123");
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it("round-trips the id when the task name itself contains a separator", () => {
|
|
30
|
-
const path = agentExecutionTabPath("aex_abc123", "stage/publish");
|
|
31
|
-
expect(parseAgentExecutionTabPath(path)).toBe("aex_abc123");
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
it("keeps two calls to the same agent distinct (per-child identity)", () => {
|
|
35
|
-
const first = agentExecutionTabPath("aex_1", "call-agent");
|
|
36
|
-
const second = agentExecutionTabPath("aex_2", "call-agent");
|
|
37
|
-
expect(first).not.toBe(second);
|
|
38
|
-
expect(parseAgentExecutionTabPath(first)).toBe("aex_1");
|
|
39
|
-
expect(parseAgentExecutionTabPath(second)).toBe("aex_2");
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
it("degrades to the whole path when no separator is present", () => {
|
|
43
|
-
expect(parseAgentExecutionTabPath("aex_bare")).toBe("aex_bare");
|
|
44
|
-
});
|
|
45
|
-
});
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
// Identity of agent-execution transcript tabs in the workspace surface's
|
|
2
|
-
// editor group. Domain: execution (the transcript renderer and the
|
|
3
|
-
// AgentExecution data model are execution-domain; the workflow panel is the
|
|
4
|
-
// first host, and a future session-side consumer — e.g. sub-agent expansion —
|
|
5
|
-
// would share this identity rather than minting a divergent one).
|
|
6
|
-
//
|
|
7
|
-
// Kept in its own module (not in a component file) so behavior-only
|
|
8
|
-
// consumers — the panel controller opens the tabs, the viewer routes them —
|
|
9
|
-
// depend on the identity without pulling the transcript renderer into their
|
|
10
|
-
// module graph (DD-003 headless-first). Mirrors artifact-document.ts and
|
|
11
|
-
// file-change-document.ts.
|
|
12
|
-
|
|
13
|
-
import { virtualEntryId } from "../internal/store/index.js";
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Virtual entry id of the agent-execution transcript document FAMILY. Like
|
|
17
|
-
* artifacts and file changes (and unlike the session's single plan tab),
|
|
18
|
-
* transcripts are many: every opened child AgentExecution shares this one
|
|
19
|
-
* entry id and is distinguished by its id-derived tab path, so
|
|
20
|
-
* `editorKey(AGENT_EXECUTION_DOCUMENT_ENTRY_ID, path)` yields one tab per
|
|
21
|
-
* child execution — the VS Code "each file is a tab" model. The
|
|
22
|
-
* NUL-namespaced virtual id can never alias a real workspace entry, and its
|
|
23
|
-
* distinct `"agentexec"` kind can never collide with the
|
|
24
|
-
* `"artifact"`/`"filechange"`/`"plan"` families.
|
|
25
|
-
*/
|
|
26
|
-
export const AGENT_EXECUTION_DOCUMENT_ENTRY_ID = virtualEntryId("agentexec");
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* The identity of a child AgentExecution's transcript tab within the family.
|
|
30
|
-
*
|
|
31
|
-
* The path deliberately CARRIES the child execution id (unlike artifact tabs,
|
|
32
|
-
* which need an owner-level record map to resolve content): a transcript
|
|
33
|
-
* needs only the id to fetch/stream itself, so the viewer parses it straight
|
|
34
|
-
* back out with {@link parseAgentExecutionTabPath} — no lookup map to keep in
|
|
35
|
-
* sync. The suffix is the AGENT_CALL task name because the editor tab's LABEL
|
|
36
|
-
* is the path's basename: the task name correlates the tab with the DAG node
|
|
37
|
-
* the user opened it from, and keeps two calls to the same agent distinct.
|
|
38
|
-
*/
|
|
39
|
-
export function agentExecutionTabPath(
|
|
40
|
-
childExecutionId: string,
|
|
41
|
-
taskName: string,
|
|
42
|
-
): string {
|
|
43
|
-
return `${childExecutionId}/${taskName}`;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Recovers the child execution id from a transcript tab's path — the inverse
|
|
48
|
-
* of {@link agentExecutionTabPath}. Splits on the FIRST separator: execution
|
|
49
|
-
* ids never contain `/`, so a task name that does still round-trips.
|
|
50
|
-
*/
|
|
51
|
-
export function parseAgentExecutionTabPath(path: string): string {
|
|
52
|
-
const separator = path.indexOf("/");
|
|
53
|
-
return separator === -1 ? path : path.slice(0, separator);
|
|
54
|
-
}
|
|
@@ -1,227 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import { useCallback, useEffect, useRef } from "react";
|
|
4
|
-
import { cn } from "@stigmer/theme";
|
|
5
|
-
import { toast } from "../feedback/toast.js";
|
|
6
|
-
import { useImportResource } from "./useImportResource.js";
|
|
7
|
-
import type { ApplyResourceResult } from "./useApplyResource.js";
|
|
8
|
-
|
|
9
|
-
// ---------------------------------------------------------------------------
|
|
10
|
-
// Props
|
|
11
|
-
// ---------------------------------------------------------------------------
|
|
12
|
-
|
|
13
|
-
/** Props for {@link ImportResourceDialog}. */
|
|
14
|
-
export interface ImportResourceDialogProps {
|
|
15
|
-
/** Whether the dialog is open. */
|
|
16
|
-
readonly open: boolean;
|
|
17
|
-
/** Called when the dialog should open or close. */
|
|
18
|
-
readonly onOpenChange: (open: boolean) => void;
|
|
19
|
-
/** Target organization slug to apply the imported resource to. */
|
|
20
|
-
readonly org: string;
|
|
21
|
-
/** Called after a successful import. Use for navigation or list refresh. */
|
|
22
|
-
readonly onSuccess?: (result: ApplyResourceResult) => void;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
// ---------------------------------------------------------------------------
|
|
26
|
-
// Component
|
|
27
|
-
// ---------------------------------------------------------------------------
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Modal dialog for importing a Stigmer resource from a YAML or JSON file.
|
|
31
|
-
*
|
|
32
|
-
* Workflow:
|
|
33
|
-
* 1. User selects a `.yaml`, `.yml`, or `.json` file via the file picker
|
|
34
|
-
* 2. The file is validated and a preview card shows the detected resource
|
|
35
|
-
* 3. User confirms the import, which calls `apply()` on the target org
|
|
36
|
-
* 4. On success: toast notification and `onSuccess` callback
|
|
37
|
-
* 5. On error: inline error message with guidance
|
|
38
|
-
*
|
|
39
|
-
* Uses the native `<dialog>` element for built-in focus trapping, Escape
|
|
40
|
-
* key handling, and backdrop — consistent with {@link ConfirmDialog}.
|
|
41
|
-
*
|
|
42
|
-
* Zero Console dependencies — safe for platform builder embedding.
|
|
43
|
-
*
|
|
44
|
-
* @example
|
|
45
|
-
* ```tsx
|
|
46
|
-
* const [open, setOpen] = useState(false);
|
|
47
|
-
*
|
|
48
|
-
* <ImportResourceDialog
|
|
49
|
-
* open={open}
|
|
50
|
-
* onOpenChange={setOpen}
|
|
51
|
-
* org={activeOrg}
|
|
52
|
-
* onSuccess={(result) => {
|
|
53
|
-
* router.push(`/library/${result.kind === "Agent" ? "agents" : "mcp-servers"}`);
|
|
54
|
-
* }}
|
|
55
|
-
* />
|
|
56
|
-
* ```
|
|
57
|
-
*/
|
|
58
|
-
export function ImportResourceDialog({
|
|
59
|
-
open,
|
|
60
|
-
onOpenChange,
|
|
61
|
-
org,
|
|
62
|
-
onSuccess,
|
|
63
|
-
}: ImportResourceDialogProps) {
|
|
64
|
-
const dialogRef = useRef<HTMLDialogElement>(null);
|
|
65
|
-
const fileInputRef = useRef<HTMLInputElement>(null);
|
|
66
|
-
const { readFile, preview, error, reset, apply, isApplying } = useImportResource();
|
|
67
|
-
|
|
68
|
-
// Sync dialog open state with the native <dialog> element.
|
|
69
|
-
useEffect(() => {
|
|
70
|
-
const dialog = dialogRef.current;
|
|
71
|
-
if (!dialog) return;
|
|
72
|
-
if (open && !dialog.open) {
|
|
73
|
-
dialog.showModal();
|
|
74
|
-
} else if (!open && dialog.open) {
|
|
75
|
-
dialog.close();
|
|
76
|
-
}
|
|
77
|
-
}, [open]);
|
|
78
|
-
|
|
79
|
-
// Reset state when the dialog opens.
|
|
80
|
-
useEffect(() => {
|
|
81
|
-
if (open) {
|
|
82
|
-
reset();
|
|
83
|
-
if (fileInputRef.current) {
|
|
84
|
-
fileInputRef.current.value = "";
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}, [open, reset]);
|
|
88
|
-
|
|
89
|
-
const handleCancel = useCallback(
|
|
90
|
-
(e: React.SyntheticEvent) => {
|
|
91
|
-
e.preventDefault();
|
|
92
|
-
onOpenChange(false);
|
|
93
|
-
},
|
|
94
|
-
[onOpenChange],
|
|
95
|
-
);
|
|
96
|
-
|
|
97
|
-
const handleClose = useCallback(() => {
|
|
98
|
-
onOpenChange(false);
|
|
99
|
-
}, [onOpenChange]);
|
|
100
|
-
|
|
101
|
-
const handleFileChange = useCallback(
|
|
102
|
-
(e: React.ChangeEvent<HTMLInputElement>) => {
|
|
103
|
-
const file = e.target.files?.[0];
|
|
104
|
-
if (file) {
|
|
105
|
-
readFile(file);
|
|
106
|
-
}
|
|
107
|
-
},
|
|
108
|
-
[readFile],
|
|
109
|
-
);
|
|
110
|
-
|
|
111
|
-
const handleConfirm = useCallback(async () => {
|
|
112
|
-
try {
|
|
113
|
-
const result = await apply(org);
|
|
114
|
-
toast.success(`${result.kind === "Agent" ? "Agent" : "MCP Server"} "${result.name}" imported successfully`);
|
|
115
|
-
onOpenChange(false);
|
|
116
|
-
onSuccess?.(result);
|
|
117
|
-
} catch {
|
|
118
|
-
// error is set by the hook
|
|
119
|
-
}
|
|
120
|
-
}, [apply, org, onOpenChange, onSuccess]);
|
|
121
|
-
|
|
122
|
-
return (
|
|
123
|
-
<dialog
|
|
124
|
-
ref={dialogRef}
|
|
125
|
-
onCancel={handleCancel}
|
|
126
|
-
className={cn(
|
|
127
|
-
"fixed inset-0 z-50 m-auto w-full max-w-md rounded-lg border border-border bg-popover p-0 text-popover-foreground shadow-lg",
|
|
128
|
-
"backdrop:bg-black/50",
|
|
129
|
-
"open:animate-in open:fade-in-0 open:zoom-in-95",
|
|
130
|
-
)}
|
|
131
|
-
>
|
|
132
|
-
<div className="flex flex-col gap-5 p-6">
|
|
133
|
-
{/* Header */}
|
|
134
|
-
<div className="flex flex-col gap-1">
|
|
135
|
-
<h3 className="text-base font-semibold text-foreground">
|
|
136
|
-
Import resource
|
|
137
|
-
</h3>
|
|
138
|
-
<p className="text-sm text-muted-foreground">
|
|
139
|
-
Select a YAML or JSON file containing a Stigmer Agent or MCP Server definition.
|
|
140
|
-
</p>
|
|
141
|
-
</div>
|
|
142
|
-
|
|
143
|
-
{/* File picker */}
|
|
144
|
-
<div>
|
|
145
|
-
<input
|
|
146
|
-
ref={fileInputRef}
|
|
147
|
-
type="file"
|
|
148
|
-
accept=".yaml,.yml,.json"
|
|
149
|
-
onChange={handleFileChange}
|
|
150
|
-
className={cn(
|
|
151
|
-
"w-full rounded-md border border-input bg-background px-3 py-2 text-sm text-foreground",
|
|
152
|
-
"file:mr-3 file:rounded-md file:border-0 file:bg-primary file:px-2.5 file:py-1 file:text-xs file:font-medium file:text-primary-foreground",
|
|
153
|
-
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
154
|
-
)}
|
|
155
|
-
aria-label="Select resource file"
|
|
156
|
-
/>
|
|
157
|
-
</div>
|
|
158
|
-
|
|
159
|
-
{/* Validation error */}
|
|
160
|
-
{error && (
|
|
161
|
-
<div
|
|
162
|
-
role="alert"
|
|
163
|
-
className="rounded-md border border-destructive bg-card px-3 py-2.5 text-sm text-destructive"
|
|
164
|
-
>
|
|
165
|
-
{error}
|
|
166
|
-
</div>
|
|
167
|
-
)}
|
|
168
|
-
|
|
169
|
-
{/* Preview card */}
|
|
170
|
-
{preview && !error && (
|
|
171
|
-
<div className="rounded-md border border-border bg-card px-4 py-3">
|
|
172
|
-
<div className="flex items-center gap-2">
|
|
173
|
-
<span className="inline-flex rounded bg-muted px-1.5 py-0.5 text-xs font-medium text-muted-foreground">
|
|
174
|
-
{preview.kind === "Agent" ? "Agent" : "MCP Server"}
|
|
175
|
-
</span>
|
|
176
|
-
<span className="inline-flex rounded bg-muted px-1.5 py-0.5 text-xs text-muted-foreground uppercase">
|
|
177
|
-
{preview.format}
|
|
178
|
-
</span>
|
|
179
|
-
</div>
|
|
180
|
-
<p className="mt-1.5 text-sm font-medium text-foreground">
|
|
181
|
-
{preview.name}
|
|
182
|
-
</p>
|
|
183
|
-
{preview.slug && preview.slug !== preview.name && (
|
|
184
|
-
<p className="mt-0.5 text-xs text-muted-foreground">
|
|
185
|
-
{preview.slug}
|
|
186
|
-
</p>
|
|
187
|
-
)}
|
|
188
|
-
<p className="mt-1.5 text-xs text-muted-foreground">
|
|
189
|
-
Will be applied to <span className="font-medium text-foreground">{org}</span>
|
|
190
|
-
</p>
|
|
191
|
-
</div>
|
|
192
|
-
)}
|
|
193
|
-
|
|
194
|
-
{/* Actions */}
|
|
195
|
-
<div className="flex justify-end gap-2">
|
|
196
|
-
<button
|
|
197
|
-
type="button"
|
|
198
|
-
onClick={handleClose}
|
|
199
|
-
disabled={isApplying}
|
|
200
|
-
className={cn(
|
|
201
|
-
"rounded-md px-3 py-1.5 text-sm font-medium transition-colors",
|
|
202
|
-
"border border-input bg-background text-foreground",
|
|
203
|
-
"hover:bg-accent hover:text-accent-foreground",
|
|
204
|
-
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
205
|
-
"disabled:pointer-events-none disabled:opacity-50",
|
|
206
|
-
)}
|
|
207
|
-
>
|
|
208
|
-
Cancel
|
|
209
|
-
</button>
|
|
210
|
-
<button
|
|
211
|
-
type="button"
|
|
212
|
-
onClick={handleConfirm}
|
|
213
|
-
disabled={!preview || !!error || isApplying}
|
|
214
|
-
className={cn(
|
|
215
|
-
"rounded-md px-3 py-1.5 text-sm font-medium transition-colors",
|
|
216
|
-
"bg-primary text-primary-foreground hover:bg-primary-hover",
|
|
217
|
-
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
218
|
-
"disabled:pointer-events-none disabled:opacity-50",
|
|
219
|
-
)}
|
|
220
|
-
>
|
|
221
|
-
{isApplying ? "Importing\u2026" : "Import"}
|
|
222
|
-
</button>
|
|
223
|
-
</div>
|
|
224
|
-
</div>
|
|
225
|
-
</dialog>
|
|
226
|
-
);
|
|
227
|
-
}
|