From 01cae62f1c70feca3c4e2714cc262c5b5c186919 Mon Sep 17 00:00:00 2001 From: Rohit Rai Date: Tue, 22 Sep 2026 00:34:26 +0530 Subject: [PATCH 1/3] feat(boost): rename first-release packages to AI Catalog --- .../boost/.changeset/ai-catalog-rename.md | 16 ++ .../.changeset/ai-catalog-translations.md | 2 +- workspaces/boost/.changeset/config.json | 10 +- workspaces/boost/AGENTS.md | 29 ++-- workspaces/boost/README.md | 37 +++-- workspaces/boost/app-config.yaml | 16 +- .../e2e-tests/boost.AiCatalogPage.test.ts | 2 +- .../e2e-tests/boost.translations.test.ts | 8 +- .../boost/e2e-tests/utils/translations.ts | 34 ++-- .../boost/examples/app-config.connectors.yaml | 4 +- .../specs/ai-catalog-browse-view/spec.md | 4 +- .../specs/ai-catalog-dynamic-plugin/spec.md | 26 +-- .../ai-catalog-entity-extensions/spec.md | 10 +- .../ai-catalog-filter-customization/spec.md | 10 +- .../specs/ai-catalog-translations/spec.md | 6 +- .../specs/ogx-entity-provider/spec.md | 39 +++-- workspaces/boost/packages/app/package.json | 2 +- workspaces/boost/packages/app/src/App.tsx | 4 +- .../packages/app/src/modules/nav/Sidebar.tsx | 4 +- .../app/src/modules/sampleFilter/index.ts | 4 +- .../.eslintrc.js | 0 .../CHANGELOG.md | 0 .../package.json | 23 +-- .../report.api.md | 2 +- .../src/aiAssetTaxonomy.test.ts | 0 .../src/aiAssetTaxonomy.ts | 2 +- .../src/index.test.ts | 4 +- .../src/index.ts | 4 +- .../src/ingestion-health.ts | 0 .../src/permissions.ts | 0 .../src/types.ts | 0 .../.eslintrc.js | 0 .../CHANGELOG.md | 0 .../README.md | 12 +- .../package.json | 23 +-- .../report.api.md | 2 +- .../src/ca-bundle.test.ts | 0 .../src/ca-bundle.ts | 0 .../src/config.test.ts | 0 .../src/config.ts | 0 .../src/fault-isolation.test.ts | 0 .../src/fault-isolation.ts | 0 .../src/index.ts | 2 +- .../src/types.ts | 0 .../.eslintrc.js | 0 .../CHANGELOG.md | 0 .../README.md | 16 +- .../package.json | 21 +-- .../report.api.md | 2 +- .../src/AIAssetEntityProvider.ts | 0 .../src/AIAssetValidator.test.ts | 0 .../src/AIAssetValidator.ts | 0 .../src/DeltaSyncManager.test.ts | 0 .../src/DeltaSyncManager.ts | 0 .../src/Neo4jSyncAdapter.ts | 0 .../src/SkillBundleMetadata.ts | 0 .../src/annotations.ts | 0 .../src/index.ts | 0 .../src/normalizeAIAssetVersion.test.ts | 0 .../src/normalizeAIAssetVersion.ts | 0 .../src/validateAIAssetEntity.test.ts | 0 .../src/validateAIAssetEntity.ts | 0 .../{boost => ai-catalog}/.eslintrc.js | 0 .../{boost => ai-catalog}/CHANGELOG.md | 0 workspaces/boost/plugins/ai-catalog/README.md | 30 ++++ .../{boost => ai-catalog}/package.json | 26 ++- .../report-translations.api.md | 14 +- .../{boost => ai-catalog}/report.api.md | 30 ++-- .../AiCatalogFilterBlueprint.test.ts | 0 .../blueprints/AiCatalogFilterBlueprint.ts | 6 +- .../components/catalog/AiAssetCard.module.css | 0 .../components/catalog/AiAssetCard.test.tsx | 0 .../src/components/catalog/AiAssetCard.tsx | 0 .../catalog/AiCatalogTable.module.css | 0 .../catalog/AiCatalogTable.test.tsx | 4 +- .../src/components/catalog/AiCatalogTable.tsx | 0 .../catalog/AssetTypeBadge.module.css | 0 .../src/components/catalog/AssetTypeBadge.tsx | 0 .../catalog/CatalogErrorBoundary.test.tsx | 0 .../catalog/CatalogErrorBoundary.tsx | 0 .../CatalogFilters/CatalogFilters.module.css | 0 .../CatalogFilters/CatalogFilters.test.tsx | 0 .../catalog/CatalogFilters/CatalogFilters.tsx | 0 .../CatalogFilters/FilterDrawer.module.css | 0 .../CatalogFilters/FilterDrawer.test.tsx | 0 .../catalog/CatalogFilters/FilterDrawer.tsx | 0 .../CatalogResults/CatalogEmptyState.tsx | 0 .../CatalogResults/CatalogErrorState.tsx | 0 .../CatalogResults/CatalogLoadingState.tsx | 0 .../CatalogResults/CatalogResults.module.css | 0 .../catalog/CatalogResults/CatalogResults.tsx | 0 .../EmptyFilteredState.test.tsx | 4 +- .../CatalogResults/EmptyFilteredState.tsx | 0 .../catalog/CatalogToolbar.module.css | 0 .../src/components/catalog/CatalogToolbar.tsx | 0 .../entity/AgentInstructionsCard.test.tsx | 6 +- .../catalog/entity/AgentInstructionsCard.tsx | 0 .../entity/AssetDetails/AgentDetails.tsx | 0 .../AssetDetails/AssetDetailsCard.test.tsx | 4 +- .../entity/AssetDetails/AssetDetailsCard.tsx | 0 .../entity/AssetDetails/AvailableModels.tsx | 0 .../AvailableModelsDialog.test.tsx | 4 +- .../AssetDetails/AvailableModelsDialog.tsx | 0 .../entity/AssetDetails/DetailField.tsx | 0 .../AssetDetails/HandoffTargets.test.tsx | 0 .../entity/AssetDetails/HandoffTargets.tsx | 0 .../entity/AssetDetails/McpServerDetails.tsx | 0 .../AssetDetails/ModelServerDetails.tsx | 0 .../entity/AssetDetails/RuleDetails.tsx | 0 .../entity/AssetDetails/SkillDetails.tsx | 0 .../AssetDetails/assetDetailsData.test.ts | 0 .../entity/AssetDetails/assetDetailsData.ts | 0 .../catalog/entity/UsageCard.test.tsx | 0 .../components/catalog/entity/UsageCard.tsx | 2 +- .../src/extensions/aiCatalogFilters.ts | 0 .../src/extensions/aiCatalogPage.tsx | 0 .../src/extensions/entityCards.tsx | 2 +- .../filters/builtInFilterDefinitions.test.ts | 0 .../src/filters/builtInFilterDefinitions.ts | 0 .../src/hooks/useAiAssets.test.ts | 0 .../src/hooks/useAiAssets.ts | 2 +- .../src/hooks/useTranslation.ts | 6 +- .../src/hooks/useUrlFilters.test.ts | 0 .../src/hooks/useUrlFilters.ts | 0 .../src/images/empty-state-illustration.png | Bin .../{boost => ai-catalog}/src/index.ts | 10 +- .../src/nfsExports.test.ts | 10 +- .../src/pages/AiCatalogPage.module.css | 6 +- .../src/pages/AiCatalogPage.test.tsx | 4 +- .../src/pages/AiCatalogPage.tsx | 0 .../{boost => ai-catalog}/src/plugin.tsx | 6 +- .../{boost => ai-catalog}/src/routes.ts | 0 .../{boost => ai-catalog}/src/setupTests.ts | 0 .../src/translations/de.ts | 10 +- .../src/translations/es.ts | 10 +- .../src/translations/fr.ts | 10 +- .../src/translations/index.ts | 22 +-- .../src/translations/it.ts | 10 +- .../src/translations/ja.ts | 10 +- .../src/translations/ref.test.ts | 28 ++-- .../src/translations/ref.ts | 10 +- .../src/utils/categoryMeta.test.ts | 0 .../src/utils/categoryMeta.ts | 16 +- .../src/utils/entityFields.test.ts | 0 .../src/utils/entityFields.ts | 0 .../src/utils/entityFiltering.test.ts | 0 .../src/utils/entityFiltering.ts | 0 .../src/utils/entityLinks.test.ts | 0 .../src/utils/entityLinks.ts | 0 .../src/utils/usageActions.test.ts | 0 .../src/utils/usageActions.ts | 0 .../boost-backend-module-kagenti/package.json | 4 +- .../src/provider/KagentiProvider.test.ts | 2 +- .../src/provider/KagentiProvider.ts | 2 +- .../boost-backend-module-ogx/package.json | 4 +- .../src/provider/ResponsesApiProvider.test.ts | 2 +- .../src/provider/ResponsesApiProvider.ts | 2 +- .../boost/plugins/boost-backend/package.json | 6 +- .../boost/plugins/boost-backend/report.api.md | 36 ++-- .../src/agents/AgentLifecycleStore.ts | 2 +- .../boost-backend/src/agents/lifecycle.ts | 2 +- .../boost-backend/src/agents/routes.test.ts | 2 +- .../boost-backend/src/agents/routes.ts | 2 +- .../src/ai-catalog/CatalogAssetLoader.ts | 2 +- .../src/ai-catalog/routes.test.ts | 2 +- .../boost-backend/src/ai-catalog/routes.ts | 2 +- .../boost-backend/src/ai-catalog/rules.ts | 2 +- .../src/approval/BackendApprovalStore.test.ts | 2 +- .../src/approval/BackendApprovalStore.ts | 2 +- .../src/chat/ConversationStore.ts | 2 +- .../src/chat/conversationRoutes.test.ts | 2 +- .../src/chat/conversationRoutes.ts | 2 +- .../boost-backend/src/chat/routes.test.ts | 2 +- .../plugins/boost-backend/src/chat/routes.ts | 4 +- .../src/ingestion/ErrorClassifier.test.ts | 2 +- .../src/ingestion/ErrorClassifier.ts | 2 +- .../src/ingestion/HealthStatusService.test.ts | 2 +- .../src/ingestion/HealthStatusService.ts | 2 +- .../src/ingestion/SyncAttemptsStore.ts | 2 +- .../src/ingestion/routes.test.ts | 2 +- .../boost-backend/src/ingestion/routes.ts | 2 +- .../boost-backend/src/kagenti/routes.ts | 2 +- .../boost-backend/src/mcp/McpServerStore.ts | 2 +- .../boost-backend/src/mcp/routes.test.ts | 2 +- .../plugins/boost-backend/src/mcp/routes.ts | 4 +- .../src/middleware/security.test.ts | 2 +- .../boost-backend/src/middleware/security.ts | 2 +- .../boost/plugins/boost-backend/src/plugin.ts | 4 +- .../src/provider/ProviderManager.test.ts | 2 +- .../src/provider/ProviderManager.ts | 2 +- .../boost-backend/src/skills/routes.ts | 2 +- .../src/tools/ToolLifecycleStore.ts | 2 +- .../boost-backend/src/tools/lifecycle.ts | 2 +- .../boost-backend/src/tools/routes.test.ts | 2 +- .../plugins/boost-backend/src/tools/routes.ts | 4 +- .../boost-migration-readiness/package.json | 6 +- .../boost-migration-readiness/report.api.md | 2 +- .../boost-migration-readiness/src/analyze.ts | 2 +- .../boost-migration-readiness/src/index.ts | 2 +- .../src/mappings.test.ts | 2 +- .../boost-migration-readiness/src/mappings.ts | 2 +- .../boost-migration-readiness/src/types.ts | 2 +- .../boost/plugins/boost-node/package.json | 6 +- .../boost/plugins/boost-node/report.api.md | 2 +- .../plugins/boost-node/src/extensions.ts | 2 +- .../boost/plugins/boost-node/src/services.ts | 2 +- .../boost-responses-api-toolkit/package.json | 6 +- .../boost-responses-api-toolkit/report.api.md | 4 +- .../src/requestBuilder.test.ts | 2 +- .../src/requestBuilder.ts | 2 +- .../src/responseParser.ts | 2 +- .../plugins/boost-toolscope/package.json | 4 - workspaces/boost/plugins/boost/README.md | 30 ---- .../plugins/ogx-entity-provider/config.d.ts | 56 +------ .../plugins/ogx-entity-provider/package.json | 4 +- .../ogx-entity-provider/src/module.test.ts | 88 ++++------ .../plugins/ogx-entity-provider/src/module.ts | 24 +-- .../providers/OgxAgentEntityProvider.test.ts | 2 +- .../src/providers/OgxAgentEntityProvider.ts | 2 +- .../providers/OgxModelEntityProvider.test.ts | 2 +- .../src/providers/OgxModelEntityProvider.ts | 2 +- workspaces/boost/specifications/CURRENT.md | 42 ++--- .../rhdhplan1505-1-staged-issues.md | 40 ++--- .../boost-frontend-architecture.md | 6 +- .../prd/ai-chat-interaction-experience.md | 4 +- .../prd/platform-operations-deployment.md | 2 +- workspaces/boost/yarn.lock | 154 +++++++++--------- 227 files changed, 610 insertions(+), 718 deletions(-) create mode 100644 workspaces/boost/.changeset/ai-catalog-rename.md rename workspaces/boost/plugins/{boost-common => ai-catalog-common}/.eslintrc.js (100%) rename workspaces/boost/plugins/{boost-common => ai-catalog-common}/CHANGELOG.md (100%) rename workspaces/boost/plugins/{boost-common => ai-catalog-common}/package.json (57%) rename workspaces/boost/plugins/{boost-common => ai-catalog-common}/report.api.md (99%) rename workspaces/boost/plugins/{boost-common => ai-catalog-common}/src/aiAssetTaxonomy.test.ts (100%) rename workspaces/boost/plugins/{boost-common => ai-catalog-common}/src/aiAssetTaxonomy.ts (97%) rename workspaces/boost/plugins/{boost-common => ai-catalog-common}/src/index.test.ts (99%) rename workspaces/boost/plugins/{boost-common => ai-catalog-common}/src/index.ts (85%) rename workspaces/boost/plugins/{boost-common => ai-catalog-common}/src/ingestion-health.ts (100%) rename workspaces/boost/plugins/{boost-common => ai-catalog-common}/src/permissions.ts (100%) rename workspaces/boost/plugins/{boost-common => ai-catalog-common}/src/types.ts (100%) rename workspaces/boost/plugins/{boost-connector-utils => ai-catalog-connector-utils}/.eslintrc.js (100%) rename workspaces/boost/plugins/{boost-connector-utils => ai-catalog-connector-utils}/CHANGELOG.md (100%) rename workspaces/boost/plugins/{boost-connector-utils => ai-catalog-connector-utils}/README.md (94%) rename workspaces/boost/plugins/{boost-connector-utils => ai-catalog-connector-utils}/package.json (51%) rename workspaces/boost/plugins/{boost-connector-utils => ai-catalog-connector-utils}/report.api.md (98%) rename workspaces/boost/plugins/{boost-connector-utils => ai-catalog-connector-utils}/src/ca-bundle.test.ts (100%) rename workspaces/boost/plugins/{boost-connector-utils => ai-catalog-connector-utils}/src/ca-bundle.ts (100%) rename workspaces/boost/plugins/{boost-connector-utils => ai-catalog-connector-utils}/src/config.test.ts (100%) rename workspaces/boost/plugins/{boost-connector-utils => ai-catalog-connector-utils}/src/config.ts (100%) rename workspaces/boost/plugins/{boost-connector-utils => ai-catalog-connector-utils}/src/fault-isolation.test.ts (100%) rename workspaces/boost/plugins/{boost-connector-utils => ai-catalog-connector-utils}/src/fault-isolation.ts (100%) rename workspaces/boost/plugins/{boost-connector-utils => ai-catalog-connector-utils}/src/index.ts (94%) rename workspaces/boost/plugins/{boost-connector-utils => ai-catalog-connector-utils}/src/types.ts (100%) rename workspaces/boost/plugins/{boost-entity-provider-sdk => ai-catalog-entity-provider-sdk}/.eslintrc.js (100%) rename workspaces/boost/plugins/{boost-entity-provider-sdk => ai-catalog-entity-provider-sdk}/CHANGELOG.md (100%) rename workspaces/boost/plugins/{boost-entity-provider-sdk => ai-catalog-entity-provider-sdk}/README.md (92%) rename workspaces/boost/plugins/{boost-entity-provider-sdk => ai-catalog-entity-provider-sdk}/package.json (59%) rename workspaces/boost/plugins/{boost-entity-provider-sdk => ai-catalog-entity-provider-sdk}/report.api.md (99%) rename workspaces/boost/plugins/{boost-entity-provider-sdk => ai-catalog-entity-provider-sdk}/src/AIAssetEntityProvider.ts (100%) rename workspaces/boost/plugins/{boost-entity-provider-sdk => ai-catalog-entity-provider-sdk}/src/AIAssetValidator.test.ts (100%) rename workspaces/boost/plugins/{boost-entity-provider-sdk => ai-catalog-entity-provider-sdk}/src/AIAssetValidator.ts (100%) rename workspaces/boost/plugins/{boost-entity-provider-sdk => ai-catalog-entity-provider-sdk}/src/DeltaSyncManager.test.ts (100%) rename workspaces/boost/plugins/{boost-entity-provider-sdk => ai-catalog-entity-provider-sdk}/src/DeltaSyncManager.ts (100%) rename workspaces/boost/plugins/{boost-entity-provider-sdk => ai-catalog-entity-provider-sdk}/src/Neo4jSyncAdapter.ts (100%) rename workspaces/boost/plugins/{boost-entity-provider-sdk => ai-catalog-entity-provider-sdk}/src/SkillBundleMetadata.ts (100%) rename workspaces/boost/plugins/{boost-entity-provider-sdk => ai-catalog-entity-provider-sdk}/src/annotations.ts (100%) rename workspaces/boost/plugins/{boost-entity-provider-sdk => ai-catalog-entity-provider-sdk}/src/index.ts (100%) rename workspaces/boost/plugins/{boost-entity-provider-sdk => ai-catalog-entity-provider-sdk}/src/normalizeAIAssetVersion.test.ts (100%) rename workspaces/boost/plugins/{boost-entity-provider-sdk => ai-catalog-entity-provider-sdk}/src/normalizeAIAssetVersion.ts (100%) rename workspaces/boost/plugins/{boost-entity-provider-sdk => ai-catalog-entity-provider-sdk}/src/validateAIAssetEntity.test.ts (100%) rename workspaces/boost/plugins/{boost-entity-provider-sdk => ai-catalog-entity-provider-sdk}/src/validateAIAssetEntity.ts (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/.eslintrc.js (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/CHANGELOG.md (100%) create mode 100644 workspaces/boost/plugins/ai-catalog/README.md rename workspaces/boost/plugins/{boost => ai-catalog}/package.json (71%) rename workspaces/boost/plugins/{boost => ai-catalog}/report-translations.api.md (92%) rename workspaces/boost/plugins/{boost => ai-catalog}/report.api.md (93%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/blueprints/AiCatalogFilterBlueprint.test.ts (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/blueprints/AiCatalogFilterBlueprint.ts (94%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/AiAssetCard.module.css (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/AiAssetCard.test.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/AiAssetCard.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/AiCatalogTable.module.css (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/AiCatalogTable.test.tsx (95%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/AiCatalogTable.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/AssetTypeBadge.module.css (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/AssetTypeBadge.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/CatalogErrorBoundary.test.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/CatalogErrorBoundary.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/CatalogFilters/CatalogFilters.module.css (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/CatalogFilters/CatalogFilters.test.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/CatalogFilters/CatalogFilters.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/CatalogFilters/FilterDrawer.module.css (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/CatalogFilters/FilterDrawer.test.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/CatalogFilters/FilterDrawer.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/CatalogResults/CatalogEmptyState.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/CatalogResults/CatalogErrorState.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/CatalogResults/CatalogLoadingState.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/CatalogResults/CatalogResults.module.css (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/CatalogResults/CatalogResults.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/CatalogResults/EmptyFilteredState.test.tsx (92%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/CatalogResults/EmptyFilteredState.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/CatalogToolbar.module.css (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/CatalogToolbar.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/entity/AgentInstructionsCard.test.tsx (92%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/entity/AgentInstructionsCard.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/entity/AssetDetails/AgentDetails.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/entity/AssetDetails/AssetDetailsCard.test.tsx (99%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/entity/AssetDetails/AssetDetailsCard.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/entity/AssetDetails/AvailableModels.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/entity/AssetDetails/AvailableModelsDialog.test.tsx (94%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/entity/AssetDetails/AvailableModelsDialog.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/entity/AssetDetails/DetailField.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/entity/AssetDetails/HandoffTargets.test.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/entity/AssetDetails/HandoffTargets.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/entity/AssetDetails/McpServerDetails.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/entity/AssetDetails/ModelServerDetails.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/entity/AssetDetails/RuleDetails.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/entity/AssetDetails/SkillDetails.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/entity/AssetDetails/assetDetailsData.test.ts (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/entity/AssetDetails/assetDetailsData.ts (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/entity/UsageCard.test.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/components/catalog/entity/UsageCard.tsx (98%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/extensions/aiCatalogFilters.ts (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/extensions/aiCatalogPage.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/extensions/entityCards.tsx (98%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/filters/builtInFilterDefinitions.test.ts (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/filters/builtInFilterDefinitions.ts (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/hooks/useAiAssets.test.ts (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/hooks/useAiAssets.ts (97%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/hooks/useTranslation.ts (81%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/hooks/useUrlFilters.test.ts (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/hooks/useUrlFilters.ts (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/images/empty-state-illustration.png (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/index.ts (83%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/nfsExports.test.ts (75%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/pages/AiCatalogPage.module.css (91%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/pages/AiCatalogPage.test.tsx (98%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/pages/AiCatalogPage.tsx (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/plugin.tsx (89%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/routes.ts (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/setupTests.ts (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/translations/de.ts (94%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/translations/es.ts (94%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/translations/fr.ts (95%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/translations/index.ts (67%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/translations/it.ts (94%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/translations/ja.ts (95%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/translations/ref.test.ts (81%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/translations/ref.ts (93%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/utils/categoryMeta.test.ts (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/utils/categoryMeta.ts (79%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/utils/entityFields.test.ts (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/utils/entityFields.ts (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/utils/entityFiltering.test.ts (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/utils/entityFiltering.ts (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/utils/entityLinks.test.ts (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/utils/entityLinks.ts (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/utils/usageActions.test.ts (100%) rename workspaces/boost/plugins/{boost => ai-catalog}/src/utils/usageActions.ts (100%) delete mode 100644 workspaces/boost/plugins/boost/README.md diff --git a/workspaces/boost/.changeset/ai-catalog-rename.md b/workspaces/boost/.changeset/ai-catalog-rename.md new file mode 100644 index 00000000000..ecafb27b2a3 --- /dev/null +++ b/workspaces/boost/.changeset/ai-catalog-rename.md @@ -0,0 +1,16 @@ +--- +'@red-hat-developer-hub/backstage-plugin-ai-catalog': minor +'@red-hat-developer-hub/backstage-plugin-ai-catalog-common': minor +'@red-hat-developer-hub/backstage-plugin-ai-catalog-connector-utils': minor +'@red-hat-developer-hub/backstage-plugin-ai-catalog-entity-provider-sdk': minor +'@red-hat-developer-hub/backstage-plugin-ogx-entity-provider': minor +'@red-hat-developer-hub/backstage-plugin-boost-backend': patch +'@red-hat-developer-hub/backstage-plugin-boost-backend-module-kagenti': patch +'@red-hat-developer-hub/backstage-plugin-boost-backend-module-ogx': patch +'@red-hat-developer-hub/backstage-plugin-boost-node': patch +'@red-hat-developer-hub/backstage-plugin-boost-responses-api-toolkit': patch +'@red-hat-developer-hub/backstage-plugin-boost-migration-readiness': patch +'@red-hat-developer-hub/backstage-plugin-boost-toolscope': patch +--- + +Rename the first-release AI Catalog package family and update consumers to the new public package identities. diff --git a/workspaces/boost/.changeset/ai-catalog-translations.md b/workspaces/boost/.changeset/ai-catalog-translations.md index df0b1ab9dbd..8fb56fba02f 100644 --- a/workspaces/boost/.changeset/ai-catalog-translations.md +++ b/workspaces/boost/.changeset/ai-catalog-translations.md @@ -1,5 +1,5 @@ --- -'@red-hat-developer-hub/backstage-plugin-boost': minor +'@red-hat-developer-hub/backstage-plugin-ai-catalog': minor --- Add German, Spanish, French, Italian, and Japanese translation files for the AI Catalog frontend. Register all five locales as lazy imports in the translation resource. Add focused tests for locale key parity, interpolation placeholder preservation, and Playwright locale coverage. diff --git a/workspaces/boost/.changeset/config.json b/workspaces/boost/.changeset/config.json index 8208df00f28..e7a51dfcbda 100644 --- a/workspaces/boost/.changeset/config.json +++ b/workspaces/boost/.changeset/config.json @@ -2,7 +2,15 @@ "$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json", "changelog": "@changesets/cli/changelog", "commit": false, - "fixed": [], + "fixed": [ + [ + "@red-hat-developer-hub/backstage-plugin-ai-catalog", + "@red-hat-developer-hub/backstage-plugin-ai-catalog-common", + "@red-hat-developer-hub/backstage-plugin-ai-catalog-connector-utils", + "@red-hat-developer-hub/backstage-plugin-ai-catalog-entity-provider-sdk", + "@red-hat-developer-hub/backstage-plugin-ogx-entity-provider" + ] + ], "linked": [], "access": "public", "baseBranch": "main", diff --git a/workspaces/boost/AGENTS.md b/workspaces/boost/AGENTS.md index fd2f829629c..8da3c9e9d2a 100644 --- a/workspaces/boost/AGENTS.md +++ b/workspaces/boost/AGENTS.md @@ -197,18 +197,19 @@ Connector schema migrations (`migrateConnectorSchemas` in ### Package structure -| Package | Purpose | -| ------------------------------ | --------------------------------------------------------------------------------------------- | -| `boost` | Chat UI, agent gallery, admin panels, composable routable extensions | -| `boost-common` | Shared types, permissions (browser-safe, `common-library` role) | -| `boost-node` | `boostAiProviderServiceRef`, extension points (`node-library` role) | -| `boost-connector-utils` | Shared connector utils (`node-library` role) — CA bundle, fault isolation, startup validation | -| `boost-backend` | Core routes, services, middleware, ProviderManager | -| `boost-backend-module-ogx` | OGX provider module | -| `boost-backend-module-kagenti` | Kagenti provider module | -| `ogx-entity-provider` | Independently deployable catalog entity provider | -| `kagenti-entity-provider` | Independently deployable catalog entity provider | -| `boost-migration-readiness` | Migration-readiness CLI tool (`node-library` role with custom CLI build) | +| Package | Purpose | +| -------------------------------- | --------------------------------------------------------------------------------------------- | +| `ai-catalog` | AI Catalog browse UI and composable routable extensions | +| `ai-catalog-common` | Shared types, permissions (browser-safe, `common-library` role) | +| `boost-node` | `boostAiProviderServiceRef`, extension points (`node-library` role) | +| `ai-catalog-connector-utils` | Shared connector utils (`node-library` role) — CA bundle, fault isolation, startup validation | +| `boost-backend` | Core routes, services, middleware, ProviderManager | +| `boost-backend-module-ogx` | OGX provider module | +| `boost-backend-module-kagenti` | Kagenti provider module | +| `ai-catalog-entity-provider-sdk` | Shared entity-provider SDK (`node-library` role) — annotations, validation, and sync adapters | +| `ogx-entity-provider` | Independently deployable catalog entity provider | +| `kagenti-entity-provider` | Independently deployable catalog entity provider | +| `boost-migration-readiness` | Migration-readiness CLI tool (`node-library` role with custom CLI build) | ### CLI binary packages @@ -287,10 +288,10 @@ value is an empty string (e.g., from env var substitution like `${UNSET_ENV_VAR:-}`), rather than returning `undefined`. When reading config values that may come from environment variable substitution, use `safeGetOptionalString` from -`@red-hat-developer-hub/backstage-plugin-boost-connector-utils`: +`@red-hat-developer-hub/backstage-plugin-ai-catalog-connector-utils`: ```ts -import { safeGetOptionalString } from '@red-hat-developer-hub/backstage-plugin-boost-connector-utils'; +import { safeGetOptionalString } from '@red-hat-developer-hub/backstage-plugin-ai-catalog-connector-utils'; const endpoint = safeGetOptionalString(config, 'endpoint'); ``` diff --git a/workspaces/boost/README.md b/workspaces/boost/README.md index 04c4a68ceca..94d25fdd75f 100644 --- a/workspaces/boost/README.md +++ b/workspaces/boost/README.md @@ -45,18 +45,31 @@ planning unless [`CURRENT.md`](specifications/CURRENT.md) says otherwise. ## Plugins -| Plugin | Package | Description | -| ---------------------------- | ---------------------------------------------------------------------- | -------------------------------------------------------------------------- | -| boost | `@red-hat-developer-hub/backstage-plugin-boost` | Frontend plugin — AI Catalog browse page and entity extensions | -| boost-backend | `@red-hat-developer-hub/backstage-plugin-boost-backend` | Backend plugin — chat, agent lifecycle, MCP, admin APIs | -| boost-common | `@red-hat-developer-hub/backstage-plugin-boost-common` | Shared types and permissions | -| boost-node | `@red-hat-developer-hub/backstage-plugin-boost-node` | Node library — service refs and extension points | -| boost-connector-utils | `@red-hat-developer-hub/backstage-plugin-boost-connector-utils` | Shared CA/fault-isolation/startup helpers for AI catalog connectors | -| boost-backend-module-ogx | `@red-hat-developer-hub/backstage-plugin-boost-backend-module-ogx` | OGX provider module | -| boost-backend-module-kagenti | `@red-hat-developer-hub/backstage-plugin-boost-backend-module-kagenti` | Kagenti provider module | -| ogx-entity-provider | `@red-hat-developer-hub/backstage-plugin-ogx-entity-provider` | OGX catalog entity provider | -| kagenti-entity-provider | `@red-hat-developer-hub/backstage-plugin-kagenti-entity-provider` | Kagenti catalog entity provider | -| boost-migration-readiness | `@red-hat-developer-hub/backstage-plugin-boost-migration-readiness` | Read-only CLI assessing AI asset entities against upstream Backstage kinds | +| Plugin | Package | Description | +| ------------------------------ | ------------------------------------------------------------------------ | -------------------------------------------------------------------------- | +| ai-catalog | `@red-hat-developer-hub/backstage-plugin-ai-catalog` | Frontend plugin — AI Catalog browse page and entity extensions | +| boost-backend | `@red-hat-developer-hub/backstage-plugin-boost-backend` | Backend plugin — chat, agent lifecycle, MCP, admin APIs | +| ai-catalog-common | `@red-hat-developer-hub/backstage-plugin-ai-catalog-common` | Shared types and permissions | +| boost-node | `@red-hat-developer-hub/backstage-plugin-boost-node` | Node library — service refs and extension points | +| ai-catalog-connector-utils | `@red-hat-developer-hub/backstage-plugin-ai-catalog-connector-utils` | Shared CA/fault-isolation/startup helpers for AI Catalog connectors | +| ai-catalog-entity-provider-sdk | `@red-hat-developer-hub/backstage-plugin-ai-catalog-entity-provider-sdk` | SDK for AI Catalog entity providers | +| boost-backend-module-ogx | `@red-hat-developer-hub/backstage-plugin-boost-backend-module-ogx` | OGX provider module | +| boost-backend-module-kagenti | `@red-hat-developer-hub/backstage-plugin-boost-backend-module-kagenti` | Kagenti provider module | +| ogx-entity-provider | `@red-hat-developer-hub/backstage-plugin-ogx-entity-provider` | OGX catalog entity provider | +| kagenti-entity-provider | `@red-hat-developer-hub/backstage-plugin-kagenti-entity-provider` | Kagenti catalog entity provider | +| boost-migration-readiness | `@red-hat-developer-hub/backstage-plugin-boost-migration-readiness` | Read-only CLI assessing AI asset entities against upstream Backstage kinds | + +## Consumer migration + +For the first release, install `@red-hat-developer-hub/backstage-plugin-ai-catalog` +and `@red-hat-developer-hub/backstage-plugin-ogx-entity-provider`; the common, +connector-utils, and entity-provider-sdk packages are supporting dependencies. +Update frontend imports and the dynamic-plugin export path from `boost` to +`ai-catalog`, and configure the standalone OGX provider under +`ai-catalog.entityProviders.ogx`. The old package names and standalone Boost +configuration paths are not compatibility aliases. Deferred Boost backend +contracts such as `/api/boost`, `boost.providers.ogx`, and `BOOST_*` environment +variables remain unchanged. ## Compatibility diff --git a/workspaces/boost/app-config.yaml b/workspaces/boost/app-config.yaml index 9bf94ba63ee..f3695c98ea2 100644 --- a/workspaces/boost/app-config.yaml +++ b/workspaces/boost/app-config.yaml @@ -13,7 +13,7 @@ app: defaultLanguage: en availableLanguages: [en, de, es, fr, it, ja] # Example: disable a built-in filter - # - ai-catalog-filter:boost/owner: false + # - ai-catalog-filter:ai-catalog/owner: false organization: name: Red Hat @@ -77,13 +77,7 @@ catalog: User, ] -boost: - security: - mode: 'development-only-no-auth' - adminUsers: - - 'user:default/admin' - - 'user:default/guest' - +ai-catalog: entityProviders: ogx: baseUrl: ${BOOST_OGX_URL:-http://localhost:8321} @@ -228,6 +222,12 @@ boost: lifecycleStage: published createdBy: user:default/admin +boost: + security: + mode: 'development-only-no-auth' + adminUsers: + - 'user:default/admin' + - 'user:default/guest' providers: ogx: baseUrl: ${BOOST_OGX_URL:-http://localhost:8321} diff --git a/workspaces/boost/e2e-tests/boost.AiCatalogPage.test.ts b/workspaces/boost/e2e-tests/boost.AiCatalogPage.test.ts index 7c45d5533f4..8e90266510f 100644 --- a/workspaces/boost/e2e-tests/boost.AiCatalogPage.test.ts +++ b/workspaces/boost/e2e-tests/boost.AiCatalogPage.test.ts @@ -126,7 +126,7 @@ async function loadTwoAssetCatalog(page: Page) { await expect(catalogCount(page, 2)).toBeVisible(); } -test.describe('Boost AI Catalog', () => { +test.describe('AI Catalog', () => { test('renders the AI Catalog heading after guest sign-in', async ({ page, }, testInfo) => { diff --git a/workspaces/boost/e2e-tests/boost.translations.test.ts b/workspaces/boost/e2e-tests/boost.translations.test.ts index a36cd0fe41d..e702cd4e125 100644 --- a/workspaces/boost/e2e-tests/boost.translations.test.ts +++ b/workspaces/boost/e2e-tests/boost.translations.test.ts @@ -17,7 +17,7 @@ import { expect, test, type Page, type Route } from '@playwright/test'; import { runAccessibilityTests } from './utils/accessibility'; -import { getTranslations, type BoostMessages } from './utils/translations'; +import { getTranslations, type AiCatalogMessages } from './utils/translations'; const LOCALE_DISPLAY_NAMES: Record = { en: 'English', @@ -102,7 +102,7 @@ async function signInAndSwitchLocale( } } -test.describe('Boost AI Catalog translations', () => { +test.describe('AI Catalog translations', () => { test('renders representative strings in the configured locale', async ({ page, }) => { @@ -110,7 +110,7 @@ test.describe('Boost AI Catalog translations', () => { () => globalThis.navigator.language, ); const baseLocale = currentLocale.split('-')[0]; - const translations: BoostMessages = getTranslations(baseLocale); + const translations: AiCatalogMessages = getTranslations(baseLocale); await mockCatalogEntities(page, [skillEntity]); await signInAndSwitchLocale(page, currentLocale); @@ -141,7 +141,7 @@ test.describe('Boost AI Catalog translations', () => { () => globalThis.navigator.language, ); const baseLocale = currentLocale.split('-')[0]; - const translations: BoostMessages = getTranslations(baseLocale); + const translations: AiCatalogMessages = getTranslations(baseLocale); await mockCatalogEntities(page, []); await signInAndSwitchLocale(page, currentLocale); diff --git a/workspaces/boost/e2e-tests/utils/translations.ts b/workspaces/boost/e2e-tests/utils/translations.ts index 6c378bea045..d7bdec6e502 100644 --- a/workspaces/boost/e2e-tests/utils/translations.ts +++ b/workspaces/boost/e2e-tests/utils/translations.ts @@ -16,18 +16,18 @@ // These translation files are not exported by the package, so relative imports are necessary for e2e tests /* eslint-disable @backstage/no-relative-monorepo-imports */ -import { boostMessages } from '../../plugins/boost/src/translations/ref.js'; -import boostTranslationDe from '../../plugins/boost/src/translations/de.js'; -import boostTranslationEs from '../../plugins/boost/src/translations/es.js'; -import boostTranslationFr from '../../plugins/boost/src/translations/fr.js'; -import boostTranslationIt from '../../plugins/boost/src/translations/it.js'; -import boostTranslationJa from '../../plugins/boost/src/translations/ja.js'; +import { aiCatalogMessages } from '../../plugins/ai-catalog/src/translations/ref.js'; +import aiCatalogTranslationDe from '../../plugins/ai-catalog/src/translations/de.js'; +import aiCatalogTranslationEs from '../../plugins/ai-catalog/src/translations/es.js'; +import aiCatalogTranslationFr from '../../plugins/ai-catalog/src/translations/fr.js'; +import aiCatalogTranslationIt from '../../plugins/ai-catalog/src/translations/it.js'; +import aiCatalogTranslationJa from '../../plugins/ai-catalog/src/translations/ja.js'; /* eslint-enable @backstage/no-relative-monorepo-imports */ -export type BoostMessages = typeof boostMessages; +export type AiCatalogMessages = typeof aiCatalogMessages; function transformFlatMessagesIntoTree( - flatMessages: typeof boostTranslationDe.messages, + flatMessages: typeof aiCatalogTranslationDe.messages, ) { const messages = {} as Record; for (const key of Object.keys(flatMessages)) { @@ -40,24 +40,24 @@ function transformFlatMessagesIntoTree( current[path[path.length - 1]] = flatMessages[key as keyof typeof flatMessages]; } - return messages as BoostMessages; + return messages as AiCatalogMessages; } -export function getTranslations(locale: string): BoostMessages { +export function getTranslations(locale: string): AiCatalogMessages { switch (locale) { case 'en': - return boostMessages; + return aiCatalogMessages; case 'de': - return transformFlatMessagesIntoTree(boostTranslationDe.messages); + return transformFlatMessagesIntoTree(aiCatalogTranslationDe.messages); case 'es': - return transformFlatMessagesIntoTree(boostTranslationEs.messages); + return transformFlatMessagesIntoTree(aiCatalogTranslationEs.messages); case 'fr': - return transformFlatMessagesIntoTree(boostTranslationFr.messages); + return transformFlatMessagesIntoTree(aiCatalogTranslationFr.messages); case 'it': - return transformFlatMessagesIntoTree(boostTranslationIt.messages); + return transformFlatMessagesIntoTree(aiCatalogTranslationIt.messages); case 'ja': - return transformFlatMessagesIntoTree(boostTranslationJa.messages); + return transformFlatMessagesIntoTree(aiCatalogTranslationJa.messages); default: - return boostMessages; + return aiCatalogMessages; } } diff --git a/workspaces/boost/examples/app-config.connectors.yaml b/workspaces/boost/examples/app-config.connectors.yaml index eb7b435a211..a8a29066ca6 100644 --- a/workspaces/boost/examples/app-config.connectors.yaml +++ b/workspaces/boost/examples/app-config.connectors.yaml @@ -1,6 +1,6 @@ # Reference App-Config for AI Catalog Connectors # -# This file demonstrates the configurable fields for Boost AI catalog +# This file demonstrates the configurable fields for AI Catalog # connectors under ai-catalog.providers (RHOAI MCP Catalog, OCI Skill # Registry). Copy the relevant sections into your app-config.yaml and # adjust values for your deployment environment. @@ -12,7 +12,7 @@ # Each connector reads its own Config subtree — shared utilities do not # hard-code config paths. # -# See also: workspaces/boost/plugins/boost-connector-utils/README.md +# See also: workspaces/boost/plugins/ai-catalog-connector-utils/README.md # -------------------------------------------------------------------------- # Internet-Connected Deployment (default) diff --git a/workspaces/boost/openspec/specs/ai-catalog-browse-view/spec.md b/workspaces/boost/openspec/specs/ai-catalog-browse-view/spec.md index fe96069357b..ec97bd226e5 100644 --- a/workspaces/boost/openspec/specs/ai-catalog-browse-view/spec.md +++ b/workspaces/boost/openspec/specs/ai-catalog-browse-view/spec.md @@ -2,13 +2,13 @@ > **Status: Implemented** — Current RHDH 2.1 release source of truth. > -> **Scope:** `plugins/boost` AI Catalog browse page. This spec describes +> **Scope:** `plugins/ai-catalog` AI Catalog browse page. This spec describes > shipped frontend behavior, not backend ingestion or authorization. ## Purpose This specification describes the shipped AI Catalog browse page in -`plugins/boost`, including entity discovery, card/table presentation, search, +`plugins/ai-catalog`, including entity discovery, card/table presentation, search, filtering, pagination, and its loading, empty, and error states. ## Requirements diff --git a/workspaces/boost/openspec/specs/ai-catalog-dynamic-plugin/spec.md b/workspaces/boost/openspec/specs/ai-catalog-dynamic-plugin/spec.md index 545b4f98606..10cd5d2eeea 100644 --- a/workspaces/boost/openspec/specs/ai-catalog-dynamic-plugin/spec.md +++ b/workspaces/boost/openspec/specs/ai-catalog-dynamic-plugin/spec.md @@ -2,12 +2,12 @@ > **Status: Implemented** — Current RHDH 2.1 release source of truth. > -> **Scope:** Dynamic-plugin packaging for `plugins/boost` through the RHDH +> **Scope:** Dynamic-plugin packaging for `plugins/ai-catalog` through the RHDH > overlay export pipeline. ## Purpose -This specification describes how the shipped `plugins/boost` frontend is +This specification describes how the shipped `plugins/ai-catalog` frontend is registered and exported as an RHDH dynamic plugin through the overlay CI pipeline. @@ -25,7 +25,7 @@ tooling. #### Scenario: Package has no local dynamic-export output -- **GIVEN** `plugins/boost/package.json` +- **GIVEN** `plugins/ai-catalog/package.json` - **THEN** its scripts do not define `export-dynamic` - **AND** its published `files` do not include `dist-dynamic/` @@ -36,25 +36,25 @@ The OCI-packaged plugin MUST load correctly in an RHDH deployment. #### Scenario: Plugin loads with Module Federation - **GIVEN** an RHDH deployment with `ENABLE_STANDARD_MODULE_FEDERATION=true` -- **AND** the boost frontend dynamic plugin is installed via `dynamic-plugins.yaml` with `enabled: true` +- **AND** the AI Catalog frontend dynamic plugin is installed via `dynamic-plugins.yaml` with `enabled: true` - **WHEN** a user navigates to the RHDH instance - **THEN** the "AI Catalog" nav item appears in the sidebar - **AND** navigating to `/ai-catalog` renders the browse page #### Scenario: Entity page extensions mount -- **GIVEN** the boost frontend dynamic plugin is installed +- **GIVEN** the AI Catalog frontend dynamic plugin is installed - **WHEN** a user navigates to a catalog entity page for an AI asset - **THEN** the AI asset details, agent instructions, and Usage cards render when their required entity data exists -- **AND** they use the `entity-card:boost/ai-asset-details`, - `entity-card:boost/agent-instructions`, and `entity-card:boost/usage` +- **AND** they use the `entity-card:ai-catalog/ai-asset-details`, + `entity-card:ai-catalog/agent-instructions`, and `entity-card:ai-catalog/usage` extension IDs #### Scenario: Extensions absent on non-AI entities -- **GIVEN** the boost frontend dynamic plugin is installed +- **GIVEN** the AI Catalog frontend dynamic plugin is installed - **WHEN** a user navigates to a catalog entity page for a non-AI entity (e.g., a regular Component) -- **THEN** no boost entity cards are rendered +- **THEN** no AI Catalog entity cards are rendered ### Requirement: Adopter Overrides @@ -62,20 +62,20 @@ Deployers MUST be able to customize the plugin via `app.extensions` in `app-conf #### Scenario: Disable an entity card -- **GIVEN** the deployer sets `entity-card:boost/ai-asset-details: false` in `app.extensions` +- **GIVEN** the deployer sets `entity-card:ai-catalog/ai-asset-details: false` in `app.extensions` - **WHEN** a user views an AI asset entity page - **THEN** the AI asset details card is not rendered -- **AND** other boost cards still render +- **AND** other AI Catalog cards still render #### Scenario: Change entity filter on a card -- **GIVEN** the deployer sets `entity-card:boost/ai-asset-details` with a `config.filter` that excludes AI asset kinds +- **GIVEN** the deployer sets `entity-card:ai-catalog/ai-asset-details` with a `config.filter` that excludes AI asset kinds - **WHEN** a user views an AiResource entity page - **THEN** the AI asset details card is not rendered (filter excludes AiResource) #### Scenario: Disable the page -- **GIVEN** the deployer sets `page:boost/ai-catalog: false` in `app.extensions` +- **GIVEN** the deployer sets `page:ai-catalog/ai-catalog: false` in `app.extensions` - **WHEN** a user views the RHDH sidebar - **THEN** the "AI Catalog" nav item is not present - **AND** navigating to `/ai-catalog` shows a 404 or redirects diff --git a/workspaces/boost/openspec/specs/ai-catalog-entity-extensions/spec.md b/workspaces/boost/openspec/specs/ai-catalog-entity-extensions/spec.md index 76c4569c513..7f83d1bde48 100644 --- a/workspaces/boost/openspec/specs/ai-catalog-entity-extensions/spec.md +++ b/workspaces/boost/openspec/specs/ai-catalog-entity-extensions/spec.md @@ -2,7 +2,7 @@ > **Status: Implemented** — Current RHDH 2.1 release source of truth. > -> **Scope:** `plugins/boost` entity-page cards for AI catalog assets. Catalog +> **Scope:** `plugins/ai-catalog` entity-page cards for AI catalog assets. Catalog > entity visibility remains a Catalog/RHDH concern; this spec covers frontend > presentation only. @@ -31,7 +31,7 @@ It MUST omit itself when there is no supported content. - **WHEN** an AI asset has a description, rationale, version, or supported type-specific metadata -- **THEN** `entity-card:boost/ai-asset-details` renders the available fields +- **THEN** `entity-card:ai-catalog/ai-asset-details` renders the available fields #### Scenario: Description-only asset @@ -81,7 +81,7 @@ MUST render the instruction content as Markdown. #### Scenario: Agent instructions exist - **WHEN** an agent has non-empty instructions -- **THEN** `entity-card:boost/agent-instructions` renders the instructions +- **THEN** `entity-card:ai-catalog/agent-instructions` renders the instructions using Markdown content #### Scenario: Agent instructions are absent @@ -98,7 +98,7 @@ derived from the entity. It MUST NOT call a Boost backend. - **WHEN** the entity has a supported skill command, OCI pull command, model server endpoint, MCP endpoint, Git archive, or Git source location -- **THEN** `entity-card:boost/usage` exposes the corresponding copy or link +- **THEN** `entity-card:ai-catalog/usage` exposes the corresponding copy or link action #### Scenario: Git subpath source @@ -135,4 +135,4 @@ through the host application's normal entity-page extensions. - **WHEN** a user views an AI asset with TechDocs configured - **THEN** the host application's standard TechDocs experience remains available -- **AND** the Boost plugin does not add a separate Usage tab for it +- **AND** the AI Catalog plugin does not add a separate Usage tab for it diff --git a/workspaces/boost/openspec/specs/ai-catalog-filter-customization/spec.md b/workspaces/boost/openspec/specs/ai-catalog-filter-customization/spec.md index cecefebcd9d..64ede8bc747 100644 --- a/workspaces/boost/openspec/specs/ai-catalog-filter-customization/spec.md +++ b/workspaces/boost/openspec/specs/ai-catalog-filter-customization/spec.md @@ -2,7 +2,7 @@ > **Status: Implemented** — Current RHDH 2.1 release source of truth. > -> **Scope:** The `plugins/boost` filter extension contract and built-in AI +> **Scope:** The `plugins/ai-catalog` filter extension contract and built-in AI > Catalog filters. ## Purpose @@ -32,7 +32,7 @@ A `FilterDefinition` interface MUST define the contract, and a Blueprint MUST wr - **GIVEN** a filter created via `AiCatalogFilterBlueprint.make` - **THEN** it outputs a `FilterDefinition` via a single extension data ref - **AND** the extension kind is `ai-catalog-filter` -- **AND** the extension attaches to `page:boost/ai-catalog` input `filters` +- **AND** the extension attaches to `page:ai-catalog/ai-catalog` input `filters` - **AND** the Blueprint has no `config` schema (no deployer YAML config per filter) #### Scenario: CatalogFilters renders generic Select for each filter @@ -65,7 +65,7 @@ Deployers MUST be able to disable any built-in filter using NFS extension disabl #### Scenario: Disable a single filter -- **GIVEN** the deployer sets `ai-catalog-filter:boost/owner: false` in `app.extensions` +- **GIVEN** the deployer sets `ai-catalog-filter:ai-catalog/owner: false` in `app.extensions` - **WHEN** the developer navigates to `/ai-catalog` - **THEN** the owner filter is not rendered in the sidebar - **AND** the `owner` URL param has no effect on filtering @@ -73,7 +73,7 @@ Deployers MUST be able to disable any built-in filter using NFS extension disabl #### Scenario: Disable multiple filters -- **GIVEN** the deployer disables both `ai-catalog-filter:boost/tags` and `ai-catalog-filter:boost/owner` +- **GIVEN** the deployer disables both `ai-catalog-filter:ai-catalog/tags` and `ai-catalog-filter:ai-catalog/owner` - **WHEN** the developer navigates to `/ai-catalog` - **THEN** neither filter appears in the sidebar - **AND** the category and provider filters render normally @@ -92,7 +92,7 @@ Third-party plugins MUST be able to contribute new filters by providing a `Filte #### Scenario: Third-party filter appears in sidebar -- **GIVEN** a third-party plugin registers a filter via `createFrontendModule({ pluginId: 'boost' })` using `AiCatalogFilterBlueprint.make` +- **GIVEN** a third-party plugin registers a filter via `createFrontendModule({ pluginId: 'ai-catalog' })` using `AiCatalogFilterBlueprint.make` - **AND** the filter provides a `FilterDefinition` with `urlParam: 'team'`, `getOptions`, and `matchEntity` - **WHEN** the developer navigates to `/ai-catalog` - **THEN** the custom "team" filter appears as a `