Skip to content

feat: marketplace maintainer UX (#722)#790

Draft
sergio-sisternes-epam wants to merge 4 commits intomainfrom
feat/722-marketplace-maintainer-ux
Draft

feat: marketplace maintainer UX (#722)#790
sergio-sisternes-epam wants to merge 4 commits intomainfrom
feat/722-marketplace-maintainer-ux

Conversation

@sergio-sisternes-epam
Copy link
Copy Markdown
Collaborator

Description

First pass of the maintainer-side marketplace tooling tracked in #722. Builds on the foundations landing in #677 (semver engine, MarketplaceValidator skeleton, security advisories, publish skeleton).

Design context and the full UX proposal are captured in the discussion thread on the tracking issue: #722 (comment).

Hard rule driving this work

marketplace.json is Anthropic's standard, unaltered. APM emits the artifact byte-for-byte against Anthropic's schema; APM-only build inputs live in marketplace.yml and are stripped at compile time. A golden-file test enforces round-trip compatibility with Claude Code.

High-level scope

  • apm marketplace init — scaffold marketplace.yml
  • apm marketplace build — compile marketplace.yml -> Anthropic-compliant marketplace.json (concurrent ref resolution, diff output, dry-run)
  • apm marketplace check — validation + freshness for CI (--strict, per-rule toggles)
  • apm marketplace outdated — maintainer-side discovery of stale ranges
  • apm marketplace publish — transactional add/update of a package entry (PR-first, --resume/--abort recovery)
  • apm marketplace doctor — preflight probe for git / gh / tokens / ls-remote

Detailed plan, UX previews, and the 45-item UX-risk absorption map live in the session plan and will be distilled into a design doc / changelog entry during delivery.

Fixes #722

Type of change

  • Bug fix
  • New feature
  • Documentation
  • Maintenance / refactor

Testing

  • Tested locally
  • All existing tests pass
  • Added tests for new functionality (if applicable)

Draft — work in progress. Please hold review until marked ready.

Sergio Sisternes and others added 2 commits April 20, 2026 18:02
Empty commit to open the draft PR. Implementation follows.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…or, publish (#722)

Introduces a full marketplace-maintainer command surface designed around
an authored marketplace.yml that compiles to an Anthropic-compliant
marketplace.json (byte-for-byte), plus a publisher that updates
downstream consumers via PR.

New commands:
- apm marketplace init       scaffold marketplace.yml
- apm marketplace build      compile yml -> marketplace.json
- apm marketplace outdated   show packages with newer upstream refs
- apm marketplace check      validate refs, tag_pattern, schema
- apm marketplace doctor     diagnose repo/tooling issues
- apm marketplace publish    push updates to consumer apm.yml via PR

Library modules (src/apm_cli/marketplace/):
- yml_schema, builder, tag_pattern, ref_resolver, semver
- init_template, publisher, pr_integration, git_stderr

Design invariant: marketplace.json matches Anthropic's standard exactly.
APM-only fields (build:, per-entry version ranges, ref:, subdir:,
tag_pattern:, includePrerelease:) live only in marketplace.yml and are
stripped during compile. metadata: is verbatim pass-through; packages:
is renamed to plugins: per Anthropic's schema.

Consumer updates follow the existing apm.yml dependencies.apm string
format (plugin@marketplace[#ref]). Raw git refs only - semver ranges
are not accepted in the consumer syntax.

Docs: new guide at docs/src/content/docs/guides/marketplace-authoring.md,
CLI reference entries, and skill updates for commands + package-authoring.

Tests: 4824 unit+integration tests passing (68 new integration tests,
7 live e2e tests default-skipped behind APM_E2E_MARKETPLACE).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Comment thread tests/unit/marketplace/test_pr_integration.py Dismissed
sergio-sisternes-epam pushed a commit to sergio-sisternes-epam/apm that referenced this pull request Apr 20, 2026
Wrap the state-file path in rich.text.Text(..., no_wrap=True) so it
renders on a single line and does not break the publish-state.json
substring that CI tests rely on when the terminal width is 80 cols.

(microsoft#790)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…terminals

Rich was breaking `publish-state.json` across lines at 80-col width, which
(a) made the path uncopyable for users and (b) caused CI test assertions
checking for the substring to fail. Route the final state-file line through
`console.print(..., soft_wrap=True)` with a `Text(..., no_wrap=True)` so the
path is preserved verbatim regardless of terminal width.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@sergio-sisternes-epam sergio-sisternes-epam force-pushed the feat/722-marketplace-maintainer-ux branch 2 times, most recently from 6ec634c to 72d1b7b Compare April 20, 2026 19:37
Introduce `apm marketplace plugin {add,set,remove}` for programmatic
management of marketplace.yml entries. Uses ruamel.yaml for round-trip
YAML editing that preserves comments and formatting.

- `plugin add <source>` appends a validated entry with remote verification
- `plugin set <name>` updates fields on an existing entry
- `plugin remove <name>` deletes an entry with confirmation prompt

Includes 37 unit tests, documentation updates (authoring guide, skill
reference, CHANGELOG), and ruamel.yaml>=0.18.0 as a new dependency.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@sergio-sisternes-epam sergio-sisternes-epam force-pushed the feat/722-marketplace-maintainer-ux branch from 72d1b7b to 56c20fe Compare April 21, 2026 10:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEATURE] Add apm marketplace generate command to pack all plugins and produce a marketplace.json

2 participants