Skip to content

feat(extension): Collection-Based Plugin Distribution System #519

@katriendg

Description

@katriendg

Issue Description

Implement a collection-based plugin distribution system replacing the previously planned persona-based approach. Collections are domain-focused artifact groupings defined as YAML manifests, with automated plugin generation, schema validation, and marketplace registry support.

This issue documents the implementation delivered in PR #439 and supersedes Phases 1, 2, 3, 6, and 8 of the original persona distribution epic (#431). Phase 1b and Phase 7 goals are achieved within this work. Phases 4 and 5 retain partial relevance and are tracked separately.

Motivation

The original persona-based approach used a central JSON registry (ai-artifacts-registry.json) with role-based persona tags (developer, tpm, devops, architect, technical-writer) to filter artifacts. This was replaced by a simpler architecture where:

  • Domain-focused collections directly list their items by path and kind in YAML manifests
  • No central registry is needed — each collection is self-contained
  • Plugin generation is fully automated from manifests via Generate-Plugins.ps1
  • 10 domain collections replace 5 role-based personas, offering more composable and intuitive groupings

Key Architectural Decisions

Decision Rationale
YAML collection manifests over JSON registry Simpler authoring, no indirection layer, human-readable
Domain-focused over role-based groupings Users pick domains (ado, rpi, git) not personas; more composable
Symlink-based plugins over .vsix per collection Disk-efficient, single source of truth for artifacts
Auto-discovery for hve-core-all Removes manual maintenance burden for the full bundle
Maturity per-item in collections Eliminates need for a central maturity registry

Deliverables

1. Collection Manifest System

  • 10 collection manifests in collections/*.collection.yml with companion .collection.md descriptions
  • Schema at scripts/linting/schemas/collection-manifest.schema.json with required fields (id, name, description, items) and optional fields (tags, display, maturity per item)
  • Item kinds: agent, prompt, instruction, skill, hook

Collections:

Collection ID Name Artifact Count Maturity
ado Azure DevOps Integration Varies stable
coding-standards Coding Standards Varies stable
data-science Data Science Varies stable
git Git Operations Varies stable
github GitHub Backlog Management Varies experimental
hve-core-all HVE Core All All stable stable
project-planning Project Planning Varies stable
prompt-engineering Prompt Engineering Varies stable
rpi RPI Workflow Varies stable
security-planning Security Planning Varies stable

2. Plugin Generation Pipeline

  • scripts/plugins/Generate-Plugins.ps1 — generates Copilot CLI plugin directories from collection manifests with symlinks, plugin.json manifests, and auto-generated READMEs
  • scripts/plugins/Modules/PluginHelpers.psm1 — shared pure functions for manifest parsing and frontmatter extraction
  • Generated output under plugins/ (gitignored) with one subdirectory per collection
  • hve-core-all auto-discovers all non-deprecated artifacts

3. Collection Validation

  • scripts/plugins/Validate-Collections.ps1 — validates all collection manifests for structure, required fields, artifact path existence, kind-suffix consistency, and duplicate ID detection
  • npm run plugin:validate / npm run lint:collections-metadata for CI integration

4. Marketplace Registry

  • .github/plugin/marketplace.json — centralized registry of all generated plugins with name, version, source path, and description
  • Auto-updated during plugin generation

5. Extension Packaging Updates

  • Prepare-Extension.ps1 updated to load collection manifests, filter by maturity and collection membership, resolve transitive handoff dependencies, and generate package.json contributes
  • Package-Extension.ps1 updated for collection-aware artifact copying
  • Collection-level maturity gating: experimental collections build only for PreRelease channel, deprecated collections excluded entirely

6. Maturity Migration (from Phase 1b)

  • maturity field removed from all artifact frontmatter files and schemas
  • Maturity tracked as optional per-item field in collection manifests
  • Resolves Copilot CLI incompatibility (#360)

7. Documentation Updates (partial, from Phase 4)

  • Architecture docs updated for collection model
  • Contributing guides updated for collection authoring
  • extension/PACKAGING.md documents the full pipeline
  • Getting started docs reflect collection-based installation

Breaking Changes

  • maturity frontmatter field removed from all 61+ artifact files
  • Frontmatter schemas updated to remove maturity property
  • extension/package.json contributes section generated at build time (no longer static)
  • Extension packaging scripts have new parameters (-Collection, collection-aware filtering)
  • ai-artifacts-registry.json removed (previously proposed in Phase 1)
  • Validate-ArtifactRegistry.ps1 removed (replaced by Validate-Collections.ps1)

NPM Scripts

Script Purpose
npm run plugin:generate Generate plugins from collection manifests
npm run plugin:validate Validate all collection manifests
npm run lint:collections-metadata CI validation alias
npm run extension:prepare Prepare extension (stable channel)
npm run extension:prepare:prerelease Prepare extension (prerelease channel)
npm run extension:package Package .vsix

Superseded Issues

This implementation supersedes the following issues from the persona distribution epic:

Issue Title Disposition
#432 AI Artifacts Registry Design and Schema Superseded — registry removed, replaced by collection manifests
#438 Migrate Maturity Metadata to Registry Completed — goal achieved via collections
#433 Multi-Package Extension Build System Superseded — replaced by plugin generation
#434 Installer Agent Persona Selection Superseded — refactored to collection-based
#437 Persona-to-Artifact Mapping Superseded — collections define items directly
#467 Collection Maturity Gating Completed — carried forward
#468 PR Registry Drift Validation Superseded — replaced by collection validation

Remaining Work (Separate Issues)

Work Item Original Issue Description
Per-collection Marketplace descriptions #435 Descriptions for all 10 collections suitable for Marketplace listing
End-to-end publishing validation #436 Marketplace publishing test for collection-based plugins
Release process documentation #436 Document collection-based release workflow

Acceptance Criteria

  • 10 domain-focused collection manifests defined in collections/*.collection.yml
  • Collection manifest schema validates all manifests
  • Plugin generation produces symlink-based plugins under plugins/
  • hve-core-all auto-discovers all non-deprecated artifacts
  • Collection validation catches missing files, invalid kinds, and duplicate IDs
  • Marketplace registry lists all generated plugins
  • Extension packaging respects collection-level maturity gating
  • Maturity removed from all artifact frontmatter
  • Handoff dependencies resolved transitively from agent frontmatter
  • Architecture and contributing documentation updated for collection model
  • PACKAGING.md documents the full plugin generation and extension packaging pipeline

Related Issues

  • Epic: #431 — Persona-Based Extension Distribution
  • Copilot CLI fix: #360 — Custom maturity frontmatter breaks Copilot CLI
  • Skill distribution: #251 — Update extension packaging to distribute skills

Metadata

Metadata

Labels

enhancementNew feature or requestextensionVS Code extension packaging and publishing

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions