redhat-developer / redhat-developer/rhdh-plugins

OCI Skill Registry — Core Connector (issue 9 of 29)

Open
#4,047 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

blocked workspace/boost
Dominant language
TypeScript
Stars
48
Forks
120
Avg merge
2d 6h
Merged PRs (30d)
337

Description

Labels: ready-to-code
Depends on: Issue 1 (#4039 shared infra), Issue 8 (#TBD SDK)
RHIDP Stories: RHIDP-15296
Feature: RHDHPLAN-1507 — Epic RHIDP-15294

Implement the core OCI Skill Registry connector: OCI Distribution Spec client for tag listing, manifest fetching, and blob download; skillcard extraction from OCI image layers with YAML parsing and SDK schema validation; entity emission as kind: AIResource with spec.type: skill and all required annotations; backend module registration with createBackendModule. This is the foundational OCI connector — multi-registry config, incremental sync, and load testing are separate issues.

Tasks

From openspec/changes/oci-skill-registry/tasks.md group 1 (RHIDP-15296):

  • 1.1 Evaluate and select Node.js OCI Distribution Spec client library
  • 1.2 Implement OciRegistryClient class with methods: listTags(), getManifest(), getBlob()
  • 1.5 Write unit tests for OCI client with mocked registry responses

From openspec/changes/oci-skill-registry/tasks.md group 2 (RHIDP-15296):

  • 2.1 Implement layer blob download with streaming decompression
  • 2.2 Implement tar stream parser to extract skillcard.yaml
  • 2.3 Integrate SDK schema validator for skillcard.yaml validation
  • 2.4 Implement error handling for missing/invalid skillcard.yaml
  • 2.5–2.6 Unit tests for skillcard extraction and schema validation

From openspec/changes/oci-skill-registry/tasks.md group 3 (RHIDP-15296):

  • 3.1 Implement OciSkillRegistryProvider class extending EntityProvider interface
  • 3.2 Implement entity factory: convert skillcard.yaml to Backstage AIResource entity
  • 3.3 Populate required annotations: rhdh.io/ai-asset-category, rhdh.io/ai-asset-version, rhdh.io/ai-asset-source
  • 3.4 Implement entity ref sanitization
  • 3.5 Write unit tests for entity emission

From openspec/changes/oci-skill-registry/tasks.md group 6 (RHIDP-15296):

  • 6.1 Implement backend module with createBackendModule({ pluginId: 'catalog', moduleId: 'ai-catalog-oci-skill-registry' })
  • 6.2 Register entity provider via catalogProcessingExtensionPoint
  • 6.4 Write integration test for module registration

From openspec/changes/oci-skill-connector/tasks.md group 1 (RHIDP-15324):

  • 1.1–1.11 OCI registry client: tag listing, manifest fetching, Docker v2 fallback, digest extraction, pagination, namespace filtering, parallel manifest fetch, OCI annotations, blob download, gzip decompression, unit tests

From openspec/changes/oci-skill-connector/tasks.md group 2 (RHIDP-15325):

  • 2.1–2.15 Skillcard parsing: layer identification, YAML parsing, Zod validation, error logging, entity building as kind: AIResource, annotation population, default values, invalid skill rejection, aggregate summary, unit tests
Specifications
  • openspec/changes/oci-skill-registry/specs/oci-artifact-ingestion/spec.md
  • openspec/changes/oci-skill-connector/specs/registry-discovery/spec.md
  • openspec/changes/oci-skill-connector/specs/skillcard-parsing/spec.md

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Read the two named OpenSpec change task files and the oci-artifact-ingestion, registry-discovery, and skillcard-parsing specifications first. Use the requested mocked OCI-client, skillcard extraction, entity-emission, and module-registration tests to verify completion; done means the connector downloads and validates skillcards, emits annotated AIResource entities, and registers through the catalog backend module.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
api, backend
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.