Repository navigation
feat(plugin-page): a curated page and a featured image, instead of the whole README - #146
Merged
Merged
Conversation
…e whole README
The plugin page renders ONE document inline: the Markdown `meta.detail` in
`locale/<language>.json` names, or — when nothing declares one — the whole
`README.md`. This package declared nothing, so its page rendered 461 lines of
engineering notes above the settings card; the report was "why do I have such a
big readme here".
**`locale/{en,zh}.json` now declare `meta.detail`,** pointing at a 19-line page
in each language: the featured image, one paragraph, a four-row table of what the
card actually gives you, and three links to where the rest lives. The full
README keeps its job — the reference — and stops being the front door.
**The featured image is `docs/media/hero.svg`,** drawn in the icon's own
language (the pale family frame behind the vibrant OpenCode mark, the
DeepSeek-blue to purple gradient) with the meter's ring as the motif, because
the meter is the surface this plugin is known by. It opens both the detail page
and the README.
**Both files are shipped:** `package.json` `files` names the two documents and
the image, because the detail-image route serves package-relative paths and a
package that ships one but not the other works here and not for a user.
**`test/plugin-detail.test.ts` holds the contract**, from the host's own rules:
every locale declares a detail, the path is relative and inside the package, the
file exists AND npm ships it, the document opens with an image that exists and is
shipped, it stays under 40 lines, and it hands off to the reference pages.
Verified against the host's own resolver (`@deepseek-ai/dsh-plugin-detail`):
`en` and `ja` resolve `docs/detail.md`, `zh-CN` and `zh` resolve
`docs/detail.zh-CN.md`, both `origin=locale` rather than the README fallback,
and the image resolves and reads in every case.
The new document is also added to the language-pair gate, which needed two of its
own thresholds relaxed: a page with no commands is legitimate, and a floor tuned
to a 461-line README is not a floor a short page should have to meet.
This was referenced Nov 2, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why you had such a big README: the plugin page renders ONE document inline — the Markdown that
meta.detailinlocale/<language>.jsonnames, or, when nothing declares one, the wholeREADME.md. This package declared nothing, so its page rendered 461 lines of engineering notes above the settings card.Why there was no featured image: same reason. The image is whatever the detail document shows; a page that falls back to a text-only README has nothing to show but the icon.
What changes
locale/{en,zh}.jsondeclaremeta.detail, pointing at a 19-line page per language:The full README keeps its job — the reference — and stops being the front door.
The image
docs/media/hero.svg, drawn in the icon's own language: the pale family frame behind the vibrant OpenCode mark, the DeepSeek-blue → purple gradient, and the meter's ring as the motif — the meter is the surface this plugin is known by. It opens both the plugin page and the README.Shipping and guarding it
package.jsonfilesnames the two documents and the image — the detail-image route serves package-relative paths, so a package that ships one and not the other works here and not for a user.test/plugin-detail.test.tsholds the contract, from the host's own rules:invalid, which renders nothing rather than falling backVerified against the host's own resolver
origin=locale, notreadme— the fallback is gone in every language.vp checkscripts/check.tsThe locale files and the detail documents are read per request, so the page picks this up without a host restart — only
lib/needs one.