You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Update the boost frontend plugin, OGX entity providers, and Kagenti entity provider to use the new upstream-aligned entity kinds introduced in the ai-integrations workspace (#4209, PR #4211):
Agents: Component / ai-agent → AiResource / agent
AI Model Servers: per-model Resource / ai-model → single AiModelServerAPI / ai-model-server with spec.serverUrl and spec.models.available[]
AI Models: no longer separate entities — absorbed into AiModelServerAPI's spec.models.available array
Skills, Rules, MCP Servers, Tools, and Vector Stores are unchanged.
Why
The ai-integrations workspace now provides AiResource (from upstream Backstage @backstage/plugin-catalog-backend-module-ai-model) and AiModelServerAPI (a temporary dedicated kind mirroring upstream backstage/backstage#34476). The boost workspace must consume these new kinds so its frontend catalog UI, entity providers, and fixtures all align with the new entity model.
Depends on
#4209 — the ai-integrations workspace must have the AiModelServerAPI kind and backend module available
What to change (17 files)
1. isAiAsset.ts — Single source of truth for AI asset kind/type mapping
Rename 'ai-model' key → 'ai-model-server', change label to 'Model Servers', change icon from RiBrainLine to RiServerLine, change CSS var from --boost-color-model to --boost-color-model-server
3. SummaryCard.tsx — Display available models for AiModelServerAPI entities
Call getModelsAvailable(entity) alongside existing description and rationale
Update the null-guard: if (!description && !rationale && modelsAvailable.length === 0) return null;
After the rationale section, add a conditional "Available Models (N)" section with a scrollable container (maxHeight: '300px', overflowY: 'auto') listing each model name
4. OgxAgentEntityProvider.ts — Emit AiResource/agent instead of Component/ai-agent
Major restructure. The provider currently emits one Resource entity per model. Change it to emit a single AiModelServerAPI entity per server with all models listed in spec.models.available.
Skill fixture: Update agents ref from component:default/developer-assistant → airesource:default/developer-assistant
Model fixture: Replace the Resource/ai-model entity (granite-3-code) with a commented-out AiModelServerAPI/ai-model-server entity (granite-model-server) — commented out because the AiModelServerAPI kind is not yet registered in the boost dev catalog backend. Include spec.serverType, spec.serverUrl, spec.models.available fields
Remove: the Resource/ai-tool (web-search-tool) and Resource/vector-store (docs-vector-store) fixture entries — these categories are real but the fixtures are not useful for dev testing
8. Test files — Update all test fixtures and assertions (10 files)
Every test file that creates mock entities or asserts on entity properties needs updating:
Fixture YAML uses new kinds/types, model server entry is commented out
All tests pass: yarn test --watchAll=false from each plugin directory
No references to Component/ai-agent or Resource/ai-model remain in the boost workspace (grep for these to verify)
How to run tests
cd workspaces/boost/plugins/boost && yarn test --watchAll=false
cd workspaces/boost/plugins/ogx-entity-provider && yarn test --watchAll=false
cd workspaces/boost/plugins/kagenti-entity-provider && yarn test --watchAll=false
Do NOT use backstage-cli repo test or npx backstage-cli package test — they have Babel issues with import type syntax in this workspace. Use yarn test --watchAll=false directly.
Notes
The AiModelServerAPI kind registration is handled by the ai-integrations workspace's npm packages. Until those packages are published, the AiModelServerAPI fixture entry in ai-catalog-fixtures.yaml must remain commented out (the catalog will reject it without the kind module loaded).
The app-config.yaml catalog rules already include AiResource — no config changes needed for agents. AiModelServerAPI is NOT added to catalog rules since the kind module isn't wired into the boost dev backend yet.
This is a breaking change for the OGX model entity provider — consumers expecting per-model Resource entities will get a single AiModelServerAPI entity instead.
Summary
Update the boost frontend plugin, OGX entity providers, and Kagenti entity provider to use the new upstream-aligned entity kinds introduced in the
ai-integrationsworkspace (#4209, PR #4211):Component/ai-agent→AiResource/agentResource/ai-model→ singleAiModelServerAPI/ai-model-serverwithspec.serverUrlandspec.models.available[]AiModelServerAPI'sspec.models.availablearraySkills, Rules, MCP Servers, Tools, and Vector Stores are unchanged.
Why
The
ai-integrationsworkspace now providesAiResource(from upstream Backstage@backstage/plugin-catalog-backend-module-ai-model) andAiModelServerAPI(a temporary dedicated kind mirroring upstream backstage/backstage#34476). The boost workspace must consume these new kinds so its frontend catalog UI, entity providers, and fixtures all align with the new entity model.Depends on
ai-integrationsworkspace must have theAiModelServerAPIkind and backend module availableWhat to change (17 files)
1.
isAiAsset.ts— Single source of truth for AI asset kind/type mappingFile:
workspaces/boost/plugins/boost/src/utils/isAiAsset.tsUpdate the
AI_ASSET_SPEC_TYPESrecord. This is the single source of truth used byisAiAsset()andbuildCatalogFilter().Before:
After:
Update the JSDoc table above the constant to match.
2.
categoryMeta.ts— UI metadata for entity categoriesFile:
workspaces/boost/plugins/boost/src/utils/categoryMeta.tsTwo key changes in the
categoryMetaMap:'ai-agent'key →'agent', keep label'Agents', iconRiRobotLine'ai-model'key →'ai-model-server', change label to'Model Servers', change icon fromRiBrainLinetoRiServerLine, change CSS var from--boost-color-modelto--boost-color-model-server3.
SummaryCard.tsx— Display available models for AiModelServerAPI entitiesFile:
workspaces/boost/plugins/boost/src/components/catalog/entity/SummaryCard.tsxAdd a helper function and UI section to display models from
AiModelServerAPIentities:In the
SummaryCardcomponent:getModelsAvailable(entity)alongside existingdescriptionandrationaleif (!description && !rationale && modelsAvailable.length === 0) return null;rationalesection, add a conditional "Available Models (N)" section with a scrollable container (maxHeight: '300px',overflowY: 'auto') listing each model name4.
OgxAgentEntityProvider.ts— Emit AiResource/agent instead of Component/ai-agentFile:
workspaces/boost/plugins/ogx-entity-provider/src/providers/OgxAgentEntityProvider.tskind: 'Component'→kind: 'AiResource'type: 'ai-agent'→type: 'agent'handoffTargetsloop, changedependsOnrefs fromcomponent:default/...→airesource:default/...5.
OgxModelEntityProvider.ts— Emit single AiModelServerAPI instead of per-model ResourcesFile:
workspaces/boost/plugins/ogx-entity-provider/src/providers/OgxModelEntityProvider.tsMajor restructure. The provider currently emits one
Resourceentity per model. Change it to emit a singleAiModelServerAPIentity per server with all models listed inspec.models.available.Key changes:
cachedEntities: Entity[]→cachedEntity: Entity | undefinedmodelToEntity(model)withmodelsToServerEntity(models: OgxModelEntry[]):sanitizeEntityName('ogx-model-server')kind: 'AiModelServerAPI'spec.type: 'ai-model-server'spec.serverType: 'openai-v1'spec.serverUrl: this.config.baseUrlspec.models: { discoverable: true, available: models.map(m => m.id) }spec.owner: use first model'sowned_byviamapOwner()'OGX Model Server'`OGX model server at ${this.config.baseUrl} serving ${modelNames.length} models`boost.redhat.com/model-id,boost.redhat.com/model-owned-by)run(): callthis.modelsToServerEntity(models)instead ofmodels.map(...), update log messagesapplyMutation: emitthis.cachedEntity ? [{ entity: this.cachedEntity, locationKey: PROVIDER_ID }] : []6.
KagentiAgentEntityProvider.ts— Emit AiResource/agent instead of Component/ai-agentFile:
workspaces/boost/plugins/kagenti-entity-provider/src/providers/KagentiAgentEntityProvider.tskind: 'Component'→kind: 'AiResource'type: 'ai-agent'→type: 'agent'7.
ai-catalog-fixtures.yaml— Update fixture entitiesFile:
workspaces/boost/fixtures/ai-catalog-fixtures.yamlkind: Component→kind: AiResource,type: ai-agent→type: agentagentsref fromcomponent:default/developer-assistant→airesource:default/developer-assistantResource/ai-modelentity (granite-3-code) with a commented-outAiModelServerAPI/ai-model-serverentity (granite-model-server) — commented out because theAiModelServerAPIkind is not yet registered in the boost dev catalog backend. Includespec.serverType,spec.serverUrl,spec.models.availablefieldsResource/ai-tool(web-search-tool) andResource/vector-store(docs-vector-store) fixture entries — these categories are real but the fixtures are not useful for dev testing8. Test files — Update all test fixtures and assertions (10 files)
Every test file that creates mock entities or asserts on entity properties needs updating:
plugins/boost/src/components/catalog/AiAssetCard.test.tsxComponent→AiResource,ai-agent→agent, test name updateplugins/boost/src/components/catalog/AiCatalogPage.test.tsxComponent→AiResource,ai-agent→agentplugins/boost/src/components/catalog/entity/AdoptionCard.test.tsxai-modeltoai-tool(fixture was removed), update name/source/url assertions to matchplugins/boost/src/filters/builtInFilterDefinitions.test.tsComponent→AiResource,ai-agent→agent, update filter option assertionsplugins/boost/src/hooks/useAiAssets.test.tsComponent→AiResource,ai-agent→agentplugins/boost/src/utils/entityHelpers.test.tsComponent→AiResource,ai-agent→agent; OCI tests:ai-model→ai-toolplugins/boost/src/utils/isAiAsset.test.tsit.eachtable: addAiResource/agent,AiModelServerAPI/ai-model-server, removeComponent/ai-agent,Resource/ai-modelplugins/ogx-entity-provider/src/providers/OgxAgentEntityProvider.test.tsAiResource/agent, updatedependsOnref toairesource:default/...plugins/ogx-entity-provider/src/providers/OgxModelEntityProvider.test.tsAiModelServerAPI/ai-model-server,serverType,serverUrl,models.availablearrayplugins/kagenti-entity-provider/src/providers/KagentiAgentEntityProvider.test.tsAiResource/agentAcceptance criteria
AI_ASSET_SPEC_TYPESinisAiAsset.tsmapsairesource→{skill, rule, agent},aimodelserverapi→{ai-model-server},api→{mcp-server},resource→{ai-tool, vector-store}— nocomponentorai-modelentries remaincategoryMeta.tshasagentkey (notai-agent) andai-model-serverkey (notai-model)SummaryCard.tsxdisplays "Available Models (N)" with a scrollable list whenspec.models.availableis presentkind: AiResource,spec.type: agentwithairesource:default/...refsAiModelServerAPIentity withspec.serverType,spec.serverUrl, andspec.models.available[]kind: AiResource,spec.type: agentyarn test --watchAll=falsefrom each plugin directoryComponent/ai-agentorResource/ai-modelremain in the boost workspace (grep for these to verify)How to run tests
Do NOT use
backstage-cli repo testornpx backstage-cli package test— they have Babel issues withimport typesyntax in this workspace. Useyarn test --watchAll=falsedirectly.Notes
AiModelServerAPIkind registration is handled by theai-integrationsworkspace's npm packages. Until those packages are published, theAiModelServerAPIfixture entry inai-catalog-fixtures.yamlmust remain commented out (the catalog will reject it without the kind module loaded).app-config.yamlcatalog rules already includeAiResource— no config changes needed for agents.AiModelServerAPIis NOT added to catalog rules since the kind module isn't wired into the boost dev backend yet.Resourceentities will get a singleAiModelServerAPIentity instead.