Define portable plugin display names and icons - #66
Conversation
Add optional top-level `displayName` metadata for human-facing labels while preserving `name` as the portable plugin name. Keep presentation capitalization, spacing, punctuation, and branding separate from the constrained portable name. Co-authored-by: Aaron Powell <me@aaron-powell.com> Co-authored-by: Harald Kirschner <8599+digitarald@users.noreply.github.com>
Reserve root `assets/` for specification-defined portable assets and discover generic icons from fixed lowercase `icon.<format>` filenames. Establish PNG support for icon-rendering clients, equivalent-format selection, failure isolation, and safe SVG rendering without adding manifest indirection. Co-authored-by: Aaron Powell <me@aaron-powell.com> Co-authored-by: Harald Kirschner <8599+digitarald@users.noreply.github.com>
|
LGTM! Small feedback from my agent that seems worthwhile:
|
Allow clients to fall back to `name` when `displayName` is unsuitable for a presentation context, including blank values. Record why `displayName` remains type-only metadata so UI-specific constraints do not invalidate otherwise valid plugins.
That was something I had considered, but ultimately omitted because:
However, I've added a commit that clarifies clients "MAY use Would that sufficiently address your concern? |
|
Yeah I think so! We strip out emojis on ClawHub for example even though they're allowed in the +1 if |
Motivation
The portable
namefield is deliberately constrained, so it cannot preserve capitalization, spacing, punctuation, or other branding used in human-facing interfaces.The specification also provides no portable way for clients to discover a plugin icon.
Proposal
This PR adds an optional
displayNamefield toplugin.jsonand a fixedassets/icon.<format>convention for optional plugin icons. It also reservesassets/for future specification-defined portable assets.{ "$schema": "https://agent-plugins.org/schemas/1.1.0/plugin.schema.json", "name": "example-plugin", "displayName": "Example Plugin" }Clients presenting a human-readable name prefer
displayNameand fall back toname. Clients that display icons must support PNG and may support additional formats, including safely rendered SVG. Missing or unusable icons do not affect plugin or component loading.The change applies only to the 1.1.0 working draft; the published 1.0.0 specification remains unchanged.
Rationale
Fixed icon filenames avoid manifest indirection and precedence rules.
Reserving
assets/prevents collisions with future portable asset conventions.