feat: link to SKILL.md from Skills dashboard#2873
Open
tmeschter wants to merge 4 commits into
Open
Conversation
Add a 'View SKILL.md' link to each skill's detail header on the Skills dashboard page, pointing at the skill's source SKILL.md on GitHub. The frontmatter collector reports paths under the git-ignored output/skills tree, so normalize output/skills/ back to the plugin/skills/ source path when building the link. Uses the reported path (not the name) so nested skills resolve correctly. Closes microsoft#2868 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 79ae3891-7d57-47a9-842e-f5329aac95a7
Contributor
There was a problem hiding this comment.
Pull request overview
Adds a source link from the Skills dashboard detail view to each skill’s SKILL.md in the GitHub repository, using the path emitted by the frontmatter collector and normalizing output/skills/... back to plugin/skills/....
Changes:
- Extended the dashboard
Skillmodel to carry the collector-reportedpathand surfaced it viaskillsFromHealthData. - Added a
skillMdUrl()helper to safely build a GitHub blob URL (including nested skills and Windows path normalization) and rendered a “View SKILL.md” link when available. - Added minimal styling and new Vitest coverage for the URL helper and path capture.
Show a summary per file
| File | Description |
|---|---|
| dashboard/src/skills/skills.css | Adds styling for the new “View SKILL.md” source link. |
| dashboard/src/skills/App.tsx | Adds path to the Skill model, introduces skillMdUrl(), and renders the SKILL.md link in the skill detail header. |
| dashboard/src/skills/tests/skillLink.test.ts | Adds tests for URL normalization/mapping and for capturing path in skillsFromHealthData. |
Review details
- Files reviewed: 3/3 changed files
- Comments generated: 1
- Review effort level: Low
RickWinter
previously approved these changes
Jul 17, 2026
…-bassoon # Conflicts: # dashboard/src/skills/App.tsx # dashboard/src/skills/skills.css
Address PR review: memoize skillMdUrl(selectedSkill.path) so the conditional render and the anchor href share a single computed value, removing the duplicate call and the type assertion. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 79ae3891-7d57-47a9-842e-f5329aac95a7
…-bassoon # Conflicts: # dashboard/src/skills/App.tsx
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.
Closes #2868
What
Each skill on the Skills dashboard page now has a View SKILL.md link in its detail header that opens the skill's source
SKILL.mdon GitHub.How
pathfield to theSkillmodel, populated from the frontmatter collector'smetadata.path.skillMdUrl()helper that normalizes the git-ignoredoutput/skills/...path back to theplugin/skills/...source path and builds a GitHub blob URL. The repo base is a single module-level constant for easy future change.path(not the skill name), so nested skills such asmicrosoft-foundry/foundry-agent/createresolve correctly. It renders only when a valid URL is available and opens in a new tab (rel=noopener noreferrer).Tests
dashboard/src/skills/__tests__/skillLink.test.tscovering the URL helper (output/&plugin/prefixes, nested skills, backslash normalization, and missing / non-SKILL.md / out-of-tree paths returning null) plus path capture inskillsFromHealthData.vitest run src/skills— 22 tests pass.npm run buildsucceeds.Frontend-only change under
dashboard/src/skills/; no API or collector changes were needed sincepathis already in the payload.