feat: add local skill protocol#32
Merged
Merged
Conversation
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
skills-package-manager | 4ad30de | Commit Preview URL Branch Preview URL |
May 15 2026, 09:59 AM |
Contributor
There was a problem hiding this comment.
Pull request overview
Adds a new local: skill specifier protocol that registers existing user-owned skill directories in place — without copying, replacing, patching, or pruning them — and links them directly into configured linkTargets. Plumbs the new resolution type through the resolver/fetcher/link pipeline and updates docs and tests.
Changes:
- Introduces
localresolution type with a dedicated resolver/fetcher, prune protection, and.gitignoreunignore rules for repo-local skill directories. - Threads a per-skill
installPaththrough fetch and link queues so symlinks point at the original source forlocal:skills. - Skips
local:skills duringupdate, blocks patching them, and updates docs/CLI guidance accordingly.
Reviewed changes
Copilot reviewed 33 out of 33 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| website/docs/index.mdx | Mention local: alongside link: in feature list. |
| website/docs/getting-started.mdx | Document local: use case. |
| website/docs/architecture/manifest-and-lockfile.mdx | Manifest example + lockfile resolution-type list updated for local. |
| website/docs/architecture/how-it-works.mdx | List local: among recognized specifier kinds. |
| website/docs/architecture/cli-commands.mdx | Add local: add example; note update skips it. |
| website/docs/api/specifiers.mdx | Document local: specifier form & resolution semantics. |
| website/docs/api/commands.mdx | Note local: skills cannot be patched. |
| skills-lock.yaml | Self-skill link entry now records empty digest. |
| packages/.../test/update.test.ts | Cover local: being skipped by update. |
| packages/.../test/specifiers.test.ts | Parse/normalize/sync tests for local:. |
| packages/.../test/install.test.ts | Install behavior: no replacement, missing SKILL.md, patch error, no pruning. |
| packages/.../src/specifiers/normalizeSpecifier.ts | Recognize local: and reject path fragments. |
| packages/.../src/specifiers/normalizeLinkSource.ts | Shared normalizer for link:/local: protocols. |
| packages/.../src/resolvers/local.ts | New resolver emitting local resolution entries. |
| packages/.../src/resolvers/index.ts | Dispatch to local resolver. |
| packages/.../src/pipeline/linkQueue.ts | Pass installPath to linkSkill. |
| packages/.../src/pipeline/index.ts | Ensure gitignore rules and protect local dirs during prune. |
| packages/.../src/pipeline/fetchQueue.ts | Up-to-date check + install path handling for local:. |
| packages/.../src/install/pruneManagedSkills.ts | Skip protected (local) skill directories. |
| packages/.../src/install/localSkills.ts | Helpers for local install paths and .gitignore rules. |
| packages/.../src/install/links.ts | Accept explicit source path for symlink target. |
| packages/.../src/install/installSkills.ts | Use local helpers in fetch/link from lock paths. |
| packages/.../src/fetchers/local.ts | New fetcher that returns source dir after verifying SKILL.md. |
| packages/.../src/fetchers/index.ts | Dispatch to local fetcher. |
| packages/.../src/errors/index.ts | Include local: in specifier help. |
| packages/.../src/config/types.ts | Add local to specifier and resolution unions; new skip reason. |
| packages/.../src/config/syncSkillsLock.ts | Reject patching local: skills. |
| packages/.../src/config/compareSkillsLock.ts | Treat local: like link: for comparison normalization. |
| packages/.../src/commands/update.ts | Skip local: specifiers during update. |
| packages/.../src/commands/install.ts | Comment update. |
| packages/.../src/commands/add.ts | Recognize local: as a direct specifier. |
| packages/.../skills/skills-package-manager-cli/SKILL.md | CLI guidance mentions local:. |
| packages/.../README.md | README documents new protocol and resolution behavior. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
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.
Summary
local:skill specifiers for existing user-owned skill directories.local:skills in place without copying, replacing, patching, or pruning their source directories..gitignoreunignore rules for repo-local skills.skills-package-manager-cliguidance.Related Links
web-infra-dev/rsbuild#7565
Checklist
Testing:
pnpm buildpnpm testpnpm build:websitepnpm check(passes with existing warnings)