Skip to content

[FEATURE] apm.yml: support homepage, repository, keywords, and structured author fields #1621

@sergio-sisternes-epam

Description

@sergio-sisternes-epam

Problem

apm pack now generates plugin.json from apm.yml identity fields (#1597), but the generated manifests lack optional enrichment fields that hand-authored plugin.json files typically include:

  • homepage -- project URL
  • repository -- source code URL
  • keywords -- discoverability tags
  • author.url -- author website (currently author: is a plain string)

These fields are cosmetic (hosts do not require them), but their absence means projects migrating from hand-authored manifests lose metadata.

Evidence from microsoft/Build-CLI

The hand-authored files include fields that APM cannot currently express:

  # Fields present in hand-authored but missing from APM-generated
- "homepage": "https://github.com/microsoft/Build-CLI"
- "repository": "https://github.com/microsoft/Build-CLI"
- "keywords": ["microsoft", "build", "ignite", "events", "sessions", "learn"]
- "author": {"name": "Microsoft", "url": "https://www.microsoft.com"}
+ "author": {"name": "Microsoft"}  # url lost

Proposed solution

Extend the top-level apm.yml identity block to accept these optional fields:

name: microsoft-events
version: 1.0.5
description: Connect your project to Microsoft Build sessions.
author:
  name: Microsoft
  url: https://www.microsoft.com
license: Apache-2.0
homepage: https://github.com/microsoft/Build-CLI
repository: https://github.com/microsoft/Build-CLI
keywords: [microsoft, build, ignite, events, sessions, learn]

Backward compatibility

  • author: Microsoft (string) continues to work, mapped to {"name": "Microsoft"}
  • author: {name: Microsoft, url: ...} (object) adds the url field
  • homepage, repository, keywords are optional -- omitting them changes nothing
  • The marketplace schema already supports author as an object with {name, email, url} keys at the per-package level (_AUTHOR_OBJECT_KEYS in yml_schema.py)

Implementation scope

  1. Update synthesize_plugin_json_from_apm_yml() in deps/plugin_parser.py to pass through homepage, repository, keywords, and structured author
  2. Update build_plugin_manifest() in core/plugin_manifest.py to include these fields
  3. Add tests for the new fields
  4. Update docs: apm.yml reference, package-authoring guide

What this does NOT include

  • Per-ecosystem overrides (e.g. different author.url for Claude vs Copilot) -- deferred
  • Validation against URL schemas -- keep it permissive like the marketplace schema

Related

Metadata

Metadata

Assignees

Labels

area/package-authoringapm pack/unpack, plugin authoring, vendoring guidance, bundle format.enhancementDeprecated: use type/feature. Kept for issue history; will be removed in milestone 0.10.0.priority/lowAccepted but not time-sensitivestatus/acceptedDirection approved, safe to start work.status/triagedInitial agentic triage complete; pending maintainer ratification (silence = approval).theme/portabilityOne manifest, every target. Multi-target deploy, marketplace, packaging, install.type/featureNew capability, new flag, new primitive.

Type

No type
No fields configured for issues without a type.

Projects

Status
Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions