Skip to content

feat(#4259): pivot boost plugins to AiResource/agent and AiModelServerAPI - #4260

Open
fullsend-ai-coder[bot] wants to merge 1 commit into
mainfrom
agent/4259-pivot-entity-kinds
Open

feat(#4259): pivot boost plugins to AiResource/agent and AiModelServerAPI#4260
fullsend-ai-coder[bot] wants to merge 1 commit into
mainfrom
agent/4259-pivot-entity-kinds

Conversation

@fullsend-ai-coder

Copy link
Copy Markdown
Contributor

Migrate the boost workspace from legacy entity kinds (Component/ai-agent, Resource/ai-model) to the upstream-aligned kinds introduced by the ai-integrations workspace:

  • Agents: Component/ai-agent → AiResource/agent across OGX agent
    provider, Kagenti agent provider, and all frontend code
  • Models: per-model Resource/ai-model → single AiModelServerAPI entity
    with spec.serverType, spec.serverUrl, and spec.models.available[]
  • Update AI_ASSET_SPEC_TYPES mapping in isAiAsset.ts as the single
    source of truth for kind/type pairs
  • Rename categoryMeta entries: ai-agent→agent, ai-model→ai-model-server
    with updated label ('Model Servers') and icon (RiServerLine)
  • Add Available Models display to SummaryCard for AiModelServerAPI
    entities with scrollable list of spec.models.available
  • Update fixture YAML: agent uses AiResource/agent, model server entry
    is commented out (kind not yet registered in dev backend), remove
    ai-tool and vector-store fixture entries
  • Update dependsOn refs from component:default/ to airesource:default/
  • Update all 10 test files with new kind/type assertions

Closes #4259

Post-script verification

  • Branch is not main/master (agent/4259-pivot-entity-kinds)
  • Secret scan passed (gitleaks — 9ff73957b1e59ceca89032ba15af079e17c47087..HEAD)
  • Pre-commit hooks passed (authoritative run on runner)
  • Tests ran inside sandbox

…rAPI

Migrate the boost workspace from legacy entity kinds (Component/ai-agent,
Resource/ai-model) to the upstream-aligned kinds introduced by the
ai-integrations workspace:

- Agents: Component/ai-agent → AiResource/agent across OGX agent
  provider, Kagenti agent provider, and all frontend code
- Models: per-model Resource/ai-model → single AiModelServerAPI entity
  with spec.serverType, spec.serverUrl, and spec.models.available[]
- Update AI_ASSET_SPEC_TYPES mapping in isAiAsset.ts as the single
  source of truth for kind/type pairs
- Rename categoryMeta entries: ai-agent→agent, ai-model→ai-model-server
  with updated label ('Model Servers') and icon (RiServerLine)
- Add Available Models display to SummaryCard for AiModelServerAPI
  entities with scrollable list of spec.models.available
- Update fixture YAML: agent uses AiResource/agent, model server entry
  is commented out (kind not yet registered in dev backend), remove
  ai-tool and vector-store fixture entries
- Update dependsOn refs from component:default/ to airesource:default/
- Update all 10 test files with new kind/type assertions

Closes #4259
@fullsend-ai-coder
fullsend-ai-coder Bot requested a review from durandom as a code owner August 11, 2026 22:06
@fullsend-ai-coder fullsend-ai-coder Bot added the ready-for-review Agent PR ready for human review label Aug 11, 2026
@rhdh-gh-app

rhdh-gh-app Bot commented Aug 11, 2026

Copy link
Copy Markdown

Missing Changesets

The following package(s) are changed by this PR but do not have a changeset:

  • @red-hat-developer-hub/backstage-plugin-boost
  • @red-hat-developer-hub/backstage-plugin-kagenti-entity-provider
  • @red-hat-developer-hub/backstage-plugin-ogx-entity-provider

See CONTRIBUTING.md for more information about how to add changesets.

Changed Packages

Package Name Package Path Changeset Bump Current Version
@red-hat-developer-hub/backstage-plugin-boost workspaces/boost/plugins/boost none v0.4.0
@red-hat-developer-hub/backstage-plugin-kagenti-entity-provider workspaces/boost/plugins/kagenti-entity-provider none v0.1.1
@red-hat-developer-hub/backstage-plugin-ogx-entity-provider workspaces/boost/plugins/ogx-entity-provider none v0.2.0

@codecov

codecov Bot commented Aug 11, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 52.63158% with 9 lines in your changes missing coverage. Please review.
✅ Project coverage is 59.08%. Comparing base (9ff7395) to head (1512006).
⚠️ Report is 10 commits behind head on main.
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #4260      +/-   ##
==========================================
- Coverage   59.08%   59.08%   -0.01%     
==========================================
  Files        2452     2452              
  Lines       98005    98017      +12     
  Branches    27294    27290       -4     
==========================================
+ Hits        57908    57912       +4     
- Misses      38543    38551       +8     
  Partials     1554     1554              
Flag Coverage Δ *Carryforward flag
adoption-insights 84.55% <ø> (ø) Carriedforward from 9ff7395
ai-integrations 69.76% <ø> (ø) Carriedforward from 9ff7395
app-defaults 69.79% <ø> (ø) Carriedforward from 9ff7395
augment 46.67% <ø> (ø) Carriedforward from 9ff7395
boost 77.47% <52.63%> (-0.17%) ⬇️
bulk-import 72.79% <ø> (ø) Carriedforward from 9ff7395
cost-management 13.55% <ø> (ø) Carriedforward from 9ff7395
dcm 67.21% <ø> (ø) Carriedforward from 9ff7395
e2e-adoption-insights 60.00% <ø> (ø) Carriedforward from 9ff7395
e2e-intelligent-assistant 46.74% <ø> (ø) Carriedforward from 9ff7395
extensions 56.59% <ø> (ø) Carriedforward from 9ff7395
global-floating-action-button 71.18% <ø> (ø) Carriedforward from 9ff7395
global-header 66.50% <ø> (ø) Carriedforward from 9ff7395
homepage 47.59% <ø> (ø) Carriedforward from 9ff7395
install-dynamic-plugins 59.95% <ø> (ø) Carriedforward from 9ff7395
intelligent-assistant 75.42% <ø> (ø) Carriedforward from 9ff7395
konflux 91.98% <ø> (ø) Carriedforward from 9ff7395
lightspeed 69.02% <ø> (ø) Carriedforward from 9ff7395
mcp-integrations 83.40% <ø> (ø) Carriedforward from 9ff7395
orchestrator 71.31% <ø> (ø) Carriedforward from 9ff7395
quickstart 63.74% <ø> (ø) Carriedforward from 9ff7395
sandbox 79.56% <ø> (ø) Carriedforward from 9ff7395
scorecard 86.23% <ø> (ø) Carriedforward from 9ff7395
theme 88.14% <ø> (ø) Carriedforward from 9ff7395
translations 5.12% <ø> (ø) Carriedforward from 9ff7395
x2a 79.20% <ø> (ø) Carriedforward from 9ff7395

*This pull request uses carry forward flags. Click here to find out more.


Continue to review full report in Codecov by Harness.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 9ff7395...1512006. Read the comment docs.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@sonarqubecloud

Copy link
Copy Markdown

@mareklibra mareklibra left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some more considerations:

  • Missing changeset
  • Plugin code is updated; openspec/ and some specifications/ still say Component/ai-agent and Resource/ai-model. Issue AC asked for no remaining refs in the workspace.

@@ -147,7 +147,7 @@
},
},
spec: {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Upstream AiResource.v1alpha1.agent.schema.json requires instructions (and the agent validator rejects missing/empty values). Once catalog-backend-module-ai-resource-agent is loaded (the intended alignment target), these entities will be rejected.

Please set a non-empty spec.instructions (from config / description fallback / placeholder), and update Kagenti + ai-catalog-fixtures.yaml the same way. Also assert instructions in the provider tests.

}

// Build dependsOn relations for handoff targets
const dependsOn: string[] = [];

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Prefer spec.handoffs (opaque strings) over spec.dependsOn for agent handoffs.

dependsOn was fine on Component, but the agent AiResource schema/model uses handoffs and does not register dependsOn relation fields. Consider mapping handoffTargetsspec.handoffs (and optionally tools/modelspec.tools/spec.model) to match ai-integrations examples.

{modelsAvailable.length > 0 && (
<Flex direction="column" gap="2">
<Text variant="title-small">
{`Available Models (${modelsAvailable.length})`}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

missing i18n

@gabemontero

Copy link
Copy Markdown
Contributor

/fs-review

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 12, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 1:42 PM UTC · Completed 2:00 PM UTC

Commit: 1512006 · View workflow run →

@fullsend-ai-review

Copy link
Copy Markdown

Review

Findings

Medium

  • [breaking-change-entity-contract] workspaces/boost/plugins/ogx-entity-provider/src/providers/OgxModelEntityProvider.ts:158 — The OGX Model Entity Provider now emits a single AiModelServerAPI entity instead of per-model Resource/ai-model entities. This is an authorized breaking change (issue feat: pivot boost plugins to new entity kinds (AiResource/agent, AiModelServerAPI) #4259), but downstream consumers querying for kind:Resource + spec.type:ai-model will get zero results after upgrading. The boost.redhat.com/model-id annotation is also removed.
    Remediation: Ensure all RHDH deployments register the AiModelServerAPI kind module before upgrading. Document the migration path in release notes.

  • [breaking-change-entity-contract] workspaces/boost/plugins/ogx-entity-provider/src/providers/OgxAgentEntityProvider.ts:137 — OGX Agent Entity Provider now emits AiResource/agent instead of Component/ai-agent. dependsOn refs changed from component:default/ to airesource:default/. See also: Kagenti provider finding below.
    Remediation: Ensure AiResource kind is registered. Update catalog queries depending on old component:default/ references.

  • [breaking-change-entity-contract] workspaces/boost/plugins/kagenti-entity-provider/src/providers/KagentiAgentEntityProvider.ts:195 — Kagenti Agent Entity Provider now emits AiResource/agent instead of Component/ai-agent. Both providers are independently deployable RHDH dynamic plugins.
    Remediation: Coordinate release with AiResource kind module. Document migration from Component/ai-agent to AiResource/agent.

  • [new-kind-dependency] workspaces/boost/fixtures/ai-catalog-fixtures.yaml:109AiModelServerAPI fixture is commented out (kind not registered in dev backend), but OgxModelEntityProvider emits AiModelServerAPI entities unconditionally. If the kind module is not installed, the catalog will reject these entities.
    Remediation: Bundle the ai-integrations kind module as a dependency, or add a runtime check with a clear error message. Document as a required prerequisite.

  • [i18n-convention] workspaces/boost/plugins/boost/src/components/catalog/entity/SummaryCard.tsx:57 — The "Available Models (N)" heading is a hardcoded English string while every other user-facing string in the same component uses the t() translation function from useTranslation().
    Remediation: Add a translation key and use t('catalog.card.modelsAvailableTitle', { count: modelsAvailable.length }).

Low

  • [breaking-change-entity-contract] workspaces/boost/plugins/boost/src/utils/isAiAsset.ts:37AI_ASSET_SPEC_TYPES no longer recognizes Component/ai-agent or Resource/ai-model. Existing entities using old kind/type combos will disappear from the AI Catalog page. This is the consumer-side counterpart of the provider-side breaking changes above and has full test coverage.

  • [edge-case] workspaces/boost/plugins/boost/src/components/catalog/entity/SummaryCard.tsx:57modelsAvailable.map(model => <Text key={mod... uses model names as React keys. Duplicate model IDs would produce key-collision warnings. Remediation: Use key={`${model}-${index}`}` or deduplicate the list before rendering.

  • [test-inadequate] workspaces/boost/plugins/boost/src/components/catalog/entity/SummaryCard.tsx:22SummaryCard gained a new feature branch (getModelsAvailable + Available Models section) but no SummaryCard.test.tsx exists. The new rendering path and updated early-return condition are untested.

@fullsend-ai-review fullsend-ai-review Bot added the requires-manual-review Review requires human judgment label Aug 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-for-review Agent PR ready for human review requires-manual-review Review requires human judgment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: pivot boost plugins to new entity kinds (AiResource/agent, AiModelServerAPI)

2 participants