vskill 1.0.18 → 1.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/README.md +8 -59
  2. package/agents.json +1 -1
  3. package/dist/bin.js +0 -0
  4. package/dist/commands/add-lockfile.d.ts +0 -6
  5. package/dist/commands/add-lockfile.js +0 -10
  6. package/dist/commands/add-lockfile.js.map +1 -1
  7. package/dist/commands/add.js +1 -16
  8. package/dist/commands/add.js.map +1 -1
  9. package/dist/commands/auth.js +31 -1
  10. package/dist/commands/auth.js.map +1 -1
  11. package/dist/discovery/github-tree.d.ts +3 -23
  12. package/dist/discovery/github-tree.js +24 -172
  13. package/dist/discovery/github-tree.js.map +1 -1
  14. package/dist/eval-server/active-root-store.d.ts +19 -0
  15. package/dist/eval-server/active-root-store.js +50 -0
  16. package/dist/eval-server/active-root-store.js.map +1 -0
  17. package/dist/eval-server/api-routes.d.ts +1 -1
  18. package/dist/eval-server/api-routes.js +43 -5
  19. package/dist/eval-server/api-routes.js.map +1 -1
  20. package/dist/eval-server/authoring-routes.d.ts +1 -1
  21. package/dist/eval-server/authoring-routes.js +9 -7
  22. package/dist/eval-server/authoring-routes.js.map +1 -1
  23. package/dist/eval-server/detect-engines-route.d.ts +1 -1
  24. package/dist/eval-server/detect-engines-route.js +3 -1
  25. package/dist/eval-server/detect-engines-route.js.map +1 -1
  26. package/dist/eval-server/eval-server.js +26 -24
  27. package/dist/eval-server/eval-server.js.map +1 -1
  28. package/dist/eval-server/git-routes.d.ts +6 -6
  29. package/dist/eval-server/git-routes.js +22 -11
  30. package/dist/eval-server/git-routes.js.map +1 -1
  31. package/dist/eval-server/improve-routes.d.ts +1 -1
  32. package/dist/eval-server/improve-routes.js +4 -1
  33. package/dist/eval-server/improve-routes.js.map +1 -1
  34. package/dist/eval-server/install-engine-routes.d.ts +1 -1
  35. package/dist/eval-server/install-engine-routes.js +1 -1
  36. package/dist/eval-server/install-engine-routes.js.map +1 -1
  37. package/dist/eval-server/install-skill-routes.d.ts +1 -1
  38. package/dist/eval-server/install-skill-routes.js +3 -1
  39. package/dist/eval-server/install-skill-routes.js.map +1 -1
  40. package/dist/eval-server/install-state-routes.d.ts +1 -1
  41. package/dist/eval-server/install-state-routes.js +3 -1
  42. package/dist/eval-server/install-state-routes.js.map +1 -1
  43. package/dist/eval-server/integration-routes.d.ts +1 -1
  44. package/dist/eval-server/integration-routes.js +6 -1
  45. package/dist/eval-server/integration-routes.js.map +1 -1
  46. package/dist/eval-server/model-compare-routes.d.ts +1 -1
  47. package/dist/eval-server/model-compare-routes.js +3 -1
  48. package/dist/eval-server/model-compare-routes.js.map +1 -1
  49. package/dist/eval-server/platform-proxy.d.ts +6 -1
  50. package/dist/eval-server/platform-proxy.js +60 -11
  51. package/dist/eval-server/platform-proxy.js.map +1 -1
  52. package/dist/eval-server/plugin-cli-routes.d.ts +1 -1
  53. package/dist/eval-server/plugin-cli-routes.js +10 -1
  54. package/dist/eval-server/plugin-cli-routes.js.map +1 -1
  55. package/dist/eval-server/remove-skill-routes.d.ts +1 -1
  56. package/dist/eval-server/remove-skill-routes.js +3 -1
  57. package/dist/eval-server/remove-skill-routes.js.map +1 -1
  58. package/dist/eval-server/skill-create-routes.d.ts +1 -1
  59. package/dist/eval-server/skill-create-routes.js +8 -1
  60. package/dist/eval-server/skill-create-routes.js.map +1 -1
  61. package/dist/eval-server/sweep-routes.d.ts +1 -1
  62. package/dist/eval-server/sweep-routes.js +5 -1
  63. package/dist/eval-server/sweep-routes.js.map +1 -1
  64. package/dist/eval-server/workspace-routes.d.ts +12 -0
  65. package/dist/eval-server/workspace-routes.js +57 -2
  66. package/dist/eval-server/workspace-routes.js.map +1 -1
  67. package/dist/eval-ui/assets/{AdvancedTab-D8zbE5fH.js → AdvancedTab-DOgbx7u0.js} +1 -1
  68. package/dist/eval-ui/assets/{CreateSkillPage-DOBhKdgr.js → CreateSkillPage-Cv93Croj.js} +5 -5
  69. package/dist/eval-ui/assets/{FindSkillsPalette-CyMmNPr-.js → FindSkillsPalette-BY9DAhHh.js} +2 -2
  70. package/dist/eval-ui/assets/{GeneralTab-DYR9NWC4.js → GeneralTab-AwK9sIkP.js} +1 -1
  71. package/dist/eval-ui/assets/{PrivacyTab-CXIqQokl.js → PrivacyTab-BtNrxpVV.js} +1 -1
  72. package/dist/eval-ui/assets/{SearchPaletteCore-Dn5gQJS_.js → SearchPaletteCore-DMVcq7UB.js} +1 -1
  73. package/dist/eval-ui/assets/{SkillDetailPanel-DTrRnyyJ.js → SkillDetailPanel-B_lbhK6q.js} +1 -1
  74. package/dist/eval-ui/assets/{UpdateDropdown-Cvr2fe0z.js → UpdateDropdown-4AbjZLpq.js} +1 -1
  75. package/dist/eval-ui/assets/{UpdatesTab-DwJIUDPX.js → UpdatesTab-DTmo-vVb.js} +1 -1
  76. package/dist/eval-ui/assets/core-DZjBCfjp.js +1 -0
  77. package/dist/eval-ui/assets/{event-CDYWU2X3.js → event-QtOCMXAv.js} +1 -1
  78. package/dist/eval-ui/assets/globals-Dpf9KmYH.css +1 -0
  79. package/dist/eval-ui/assets/{index-D7M0Jdss.js → index-CUEYzTVL.js} +1 -1
  80. package/dist/eval-ui/assets/index-DDNzcrhv.js +1 -0
  81. package/dist/eval-ui/assets/index-DhhmQddr.js +1 -0
  82. package/dist/eval-ui/assets/{lifecycle-DSleOV-l.js → lifecycle-o_IRibOa.js} +1 -1
  83. package/dist/eval-ui/assets/main-tpOyw9SC.js +87 -0
  84. package/dist/eval-ui/assets/{preferences-BKv6X7fK.js → preferences-DCdw0Kvu.js} +2 -2
  85. package/dist/eval-ui/assets/{useDesktopBridge-DxVWbYqK.js → useDesktopBridge-9oZFQsrw.js} +2 -2
  86. package/dist/eval-ui/index.html +4 -4
  87. package/dist/eval-ui/lifecycle.html +3 -3
  88. package/dist/eval-ui/preferences.html +4 -4
  89. package/dist/lib/github-fetch.d.ts +0 -1
  90. package/dist/lib/github-fetch.js +1 -11
  91. package/dist/lib/github-fetch.js.map +1 -1
  92. package/dist/lib/keychain.js +20 -3
  93. package/dist/lib/keychain.js.map +1 -1
  94. package/dist/lockfile/types.d.ts +0 -8
  95. package/dist/studio/routes/index.d.ts +1 -1
  96. package/dist/studio/routes/index.js +10 -9
  97. package/dist/studio/routes/index.js.map +1 -1
  98. package/dist/studio/routes/promote.d.ts +1 -1
  99. package/dist/studio/routes/promote.js +3 -1
  100. package/dist/studio/routes/promote.js.map +1 -1
  101. package/dist/studio/routes/revert.d.ts +1 -1
  102. package/dist/studio/routes/revert.js +3 -1
  103. package/dist/studio/routes/revert.js.map +1 -1
  104. package/dist/studio/routes/test-install.d.ts +1 -1
  105. package/dist/studio/routes/test-install.js +3 -1
  106. package/dist/studio/routes/test-install.js.map +1 -1
  107. package/dist/updater/source-fetcher.js +2 -2
  108. package/dist/updater/source-fetcher.js.map +1 -1
  109. package/package.json +2 -1
  110. package/dist/eval-ui/assets/core-DZAvsxlC.js +0 -1
  111. package/dist/eval-ui/assets/globals-C3oEdsJh.css +0 -1
  112. package/dist/eval-ui/assets/main-D2shn1dH.js +0 -87
  113. package/dist/sidecar/eval-ui-manifest.json +0 -1
  114. package/dist/sidecar/sea-config.json +0 -57
  115. package/dist/sidecar/sea-prep.blob +0 -0
  116. package/dist/sidecar/server.cjs +0 -141627
  117. package/dist/sidecar/vskill-version.txt +0 -1
  118. /package/dist/eval-ui/assets/{globals-BRZwPAPF.js → globals-hm1COkXX.js} +0 -0
package/README.md CHANGED
@@ -12,7 +12,7 @@
12
12
  <a href="https://github.com/anton-abyzov/vskill/actions/workflows/desktop-release.yml"><img src="https://img.shields.io/github/actions/workflow/status/anton-abyzov/vskill/desktop-release.yml?branch=main&label=desktop%20build&logo=githubactions" alt="desktop build" /></a>
13
13
  <img src="https://img.shields.io/badge/agents-54_platforms-0969DA" alt="54 agents" />
14
14
  <img src="https://img.shields.io/badge/plugins-9-8B5CF6" alt="9 plugins" />
15
- <img src="https://img.shields.io/badge/skills-16-10B981" alt="16 skills" />
15
+ <img src="https://img.shields.io/badge/skills-17-10B981" alt="17 skills" />
16
16
  <a href="https://verified-skill.com"><img src="https://img.shields.io/badge/registry-verified--skill.com-F59E0B" alt="registry" /></a>
17
17
  <a href="https://github.com/anton-abyzov/vskill/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="MIT" /></a>
18
18
  </p>
@@ -173,8 +173,7 @@ private catalog.
173
173
  ```bash
174
174
  npx vskill@latest auth login # interactive Device Flow — copy code, visit URL
175
175
  npx vskill@latest auth status # show the current GitHub identity
176
- npx vskill@latest auth logout # forget all stored tokens
177
- npx vskill@latest whoami # combined identity + active tenant snapshot
176
+ npx vskill@latest auth logout # forget the GitHub token
178
177
  ```
179
178
 
180
179
  How it works:
@@ -182,81 +181,31 @@ How it works:
182
181
  1. `vskill auth login` requests a device + user code from `github.com/login/device/code`.
183
182
  2. You visit `https://github.com/login/device` and enter the 8-character code (rendered as `XXXX-XXXX`).
184
183
  3. The CLI polls `github.com/login/oauth/access_token` until you authorize, then validates against `api.github.com/user`.
185
- 4. The CLI calls `POST /api/v1/auth/github/exchange-for-vsk-token` to mint a verified-skill API token (`vsk_…`) scoped to the same identity.
186
- 5. **Both** tokens are stored in your **OS keychain** (macOS Keychain / Windows DPAPI / libsecret) under distinct service names:
187
- - `com.verifiedskill.desktop` / `github-oauth-token` → `gho_…` (raw GitHub OAuth)
188
- - `com.verifiedskill.desktop` / `vskill-token` → `vsk_…` (verified-skill API token)
184
+ 4. The resulting token is stored in your **OS keychain** (macOS Keychain / Windows DPAPI / libsecret).
185
+ On systems without a keyring daemon, the token falls back to `~/.vskill/keys.env` with mode `0600` and a startup warning.
189
186
 
190
- On systems without a keyring daemon, both fall back to `~/.vskill/keys.env` with mode `0600` and a startup warning.
187
+ Where the token is used:
191
188
 
192
- If the exchange step fails (network error, 5xx), login still succeeds with just the `gho_…` token and the CLI prints `Logged in (legacy mode — some features unavailable)`. Re-run `vskill auth login` later to mint the `vsk_…` token without losing your session.
193
-
194
- Where the tokens are used:
195
-
196
- - **`vskill add <skill>`, `vskill list`, `vskill marketplace`** — every request to `verified-skill.com` carries `Authorization: Bearer <vsk_… or gho_…>` (preferring `vsk_` when present). Anonymous requests for public skills still work when no token is stored.
197
189
  - **`vskill install <github-url>`** — added as `Authorization: Bearer …` on every fetch to `api.github.com` and `raw.githubusercontent.com`. Public skills still install anonymously.
198
190
  - **`vskill studio`** — the local eval-server proxies private routes (`/api/v1/private/*`, `/api/v1/tenants/*`) to verified-skill.com with the bearer header injected at the proxy boundary. Your browser never holds the token.
199
191
 
200
192
  Configuration:
201
193
 
202
194
  - `VSKILL_GITHUB_CLIENT_ID` — the OAuth/App `client_id` used during Device Flow. Defaults are baked in for the public Skill Studio App; set this only if you are running a self-hosted variant.
203
- - `VSKILL_TENANT` — overrides the active tenant for a single invocation (CI / scripted use). See "Tenant resolution priority" below.
204
195
 
205
196
  Inspect status of all credentials in one place:
206
197
 
207
198
  ```bash
208
199
  npx vskill@latest keys list # shows AI provider keys + the github slot
209
- npx vskill@latest whoami # email, token prefix, active tenant, all tenants
210
200
  ```
211
201
 
212
- ### Tenants and `vskill orgs`
213
-
214
- When your GitHub identity belongs to multiple organizations that have the Skill Studio App installed, each org is a **tenant** in verified-skill.com. The CLI calls them "orgs" for symmetry with `gh org`, `gcloud config configurations`, and `kubectl config use-context`.
215
-
216
- ```bash
217
- npx vskill@latest orgs list # table: slug | name | role | active (* marks the active tenant)
218
- npx vskill@latest orgs use <slug> # write currentTenant to ~/.vskill/config.json
219
- npx vskill@latest orgs current # print the active tenant slug, or `(none)`
220
- ```
221
-
222
- `orgs` and `whoami` are anonymous-safe — running them without a stored token prints `Not logged in. Run \`vskill auth login\`.` and exits non-zero (orgs returns 0; whoami returns 1) without crashing.
223
-
224
- #### Tenant resolution priority
225
-
226
- When a tenant-scoped command (`vskill add`, `vskill install` for a private skill, etc.) needs to pick an active tenant, it walks this list in order — first match wins:
227
-
228
- 1. **`--tenant <slug>` flag** — per-command override (highest precedence).
229
- 2. **`VSKILL_TENANT` env var** — non-interactive / CI use.
230
- 3. **`currentTenant` in `~/.vskill/config.json`** — the persistent active tenant set by `vskill orgs use` or the Studio sidebar picker.
231
- 4. **Auto-pick when N=1** — if you belong to exactly one tenant, that one is used silently.
232
- 5. **Error** — if you belong to N>1 tenants and none of (1)–(3) is set, the CLI prints `Multiple tenants available — set one with \`vskill orgs use <slug>\`.` and exits non-zero. The CLI never silently picks one of N>1.
233
-
234
- The same `~/.vskill/config.json` is shared with Skill Studio — switching tenants in Studio's sidebar picker updates the same file the CLI reads, so the two surfaces stay in sync.
235
-
236
- #### `vskill add` resolution order (private skills)
237
-
238
- When you run `vskill add <skill>`, the resolver tries:
239
-
240
- 1. The public registry.
241
- 2. The active tenant's scoped registry (resolved via the priority above).
242
- 3. Other tenants you belong to, in parallel HEAD requests — first match wins.
243
-
244
- If a `--tenant <slug>` flag is set, only the public registry and that tenant are tried.
245
-
246
- Common error messages:
247
-
248
- - `Skill found in multiple tenants: acme, contoso. Re-run with --tenant <slug> or set an active tenant: vskill orgs use <slug>.` — ambiguity guard for N>1 with no active tenant.
249
- - `Authentication failed. Run \`vskill auth login\` to re-authenticate.` — the registry returned 401. The keychain is **not** auto-cleared (you might be on a flaky network).
250
- - `Upgrade required: <message> (<upgradeUrl>)` — the registry returned 402: skill exists in this tenant but you lack entitlement.
251
-
252
202
  ### Private skill workflow
253
203
 
254
- Once authenticated, installing a private org skill is identical to a public one — the CLI silently attaches the keychain token to every request:
204
+ Once authenticated, installing a private org skill is identical to a public one — the CLI silently attaches the keychain token to every `api.github.com` and `raw.githubusercontent.com` request:
255
205
 
256
206
  ```bash
257
- npx vskill@latest auth login # one-time setup (mints gho_ + vsk_)
258
- npx vskill@latest orgs use acme # pick a tenant if you belong to multiple
259
- npx vskill@latest add private-skill # private skill installs same as public
207
+ npx vskill@latest auth login # one-time setup
208
+ npx vskill@latest add https://github.com/<org>/<repo> # private skill installs same as public
260
209
  ```
261
210
 
262
211
  The local skill bundle on disk **never contains** your GitHub token — the token is used only at fetch time. Your project's `vskill.lock` records `source: "private"` and the org name so future updates re-authenticate correctly.
package/agents.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 1,
3
- "generatedAt": "2026-05-31T02:13:32.450Z",
3
+ "generatedAt": "2026-06-01T16:04:52.080Z",
4
4
  "agentPrefixes": [
5
5
  ".adal",
6
6
  ".agent",
package/dist/bin.js CHANGED
File without changes
@@ -17,12 +17,6 @@ export interface BuildGitHubInstallLockEntryArgs {
17
17
  * (likely-wrong) GitHub blob URL.
18
18
  */
19
19
  sourceSkillPath: string | null;
20
- /** Branch/ref used when installing from GitHub. */
21
- branch?: string | null;
22
- /** Commit SHA at install time. */
23
- commitSha?: string | null;
24
- /** Plugin namespace that owns this skill, if discovered from plugins/<name>/skills/. */
25
- pluginName?: string | null;
26
20
  /** Whether this is a user-global install (`--global`) vs project-local. */
27
21
  global: boolean;
28
22
  /** ISO timestamp; injected for deterministic tests, defaults to `now`. */
@@ -7,21 +7,11 @@ export function buildGitHubInstallLockEntry(args) {
7
7
  source: `github:${args.owner}/${args.repo}`,
8
8
  scope: args.global ? "user" : "project",
9
9
  files: ["SKILL.md"],
10
- sourceType: "github",
11
10
  sourceRepoUrl: `https://github.com/${args.owner}/${args.repo}`,
12
11
  };
13
12
  if (args.sourceSkillPath) {
14
13
  entry.sourceSkillPath = args.sourceSkillPath;
15
14
  }
16
- if (args.branch) {
17
- entry.sourceBranch = args.branch;
18
- }
19
- if (args.commitSha) {
20
- entry.sourceCommitSha = args.commitSha;
21
- }
22
- if (args.pluginName) {
23
- entry.sourcePluginName = args.pluginName;
24
- }
25
15
  return entry;
26
16
  }
27
17
  //# sourceMappingURL=add-lockfile.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"add-lockfile.js","sourceRoot":"","sources":["../../src/commands/add-lockfile.ts"],"names":[],"mappings":"AAyCA,MAAM,UAAU,2BAA2B,CACzC,IAAqC;IAErC,MAAM,KAAK,GAAmB;QAC5B,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACzD,MAAM,EAAE,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;QAC3C,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QACvC,KAAK,EAAE,CAAC,UAAU,CAAC;QACnB,UAAU,EAAE,QAAQ;QACpB,aAAa,EAAE,sBAAsB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;KAC/D,CAAC;IACF,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;IAC/C,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;IACnC,CAAC;IACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC;IACzC,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC;IAC3C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"add-lockfile.js","sourceRoot":"","sources":["../../src/commands/add-lockfile.ts"],"names":[],"mappings":"AAmCA,MAAM,UAAU,2BAA2B,CACzC,IAAqC;IAErC,MAAM,KAAK,GAAmB;QAC5B,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACzD,MAAM,EAAE,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;QAC3C,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QACvC,KAAK,EAAE,CAAC,UAAU,CAAC;QACnB,aAAa,EAAE,sBAAsB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;KAC/D,CAAC;IACF,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;IAC/C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -16,7 +16,7 @@ import { getAvailablePlugins, getPluginSource, getPluginVersion, hasPlugin, disc
16
16
  import { checkInstallSafety } from "../blocklist/blocklist.js";
17
17
  import { getSkill, searchSkills } from "../api/client.js";
18
18
  import { checkPlatformSecurity } from "../security/index.js";
19
- import { discoverSkills, getDefaultBranch, getBranchHeadSha, checkRepoExists, warnRateLimitOnce } from "../discovery/github-tree.js";
19
+ import { discoverSkills, getDefaultBranch, checkRepoExists, warnRateLimitOnce } from "../discovery/github-tree.js";
20
20
  import { githubFetch } from "../lib/github-fetch.js";
21
21
  import { parseGitHubSource } from "../utils/validation.js";
22
22
  import { parseSkillsShUrl, isCompleteParsed, isIncompleteParsed, } from "../resolvers/url-resolver.js";
@@ -46,12 +46,6 @@ function isGitHubDownloadUrl(url) {
46
46
  return false;
47
47
  }
48
48
  }
49
- function pluginNameFromSkillPath(path) {
50
- if (!path)
51
- return null;
52
- const match = path.match(/^plugins\/([^/]+)\/skills\/[^/]+\/SKILL\.md$/);
53
- return match?.[1] ?? null;
54
- }
55
49
  async function parseManifestFromContentsApi(data) {
56
50
  // Prefer download_url for raw content — validate URL before fetching (SSRF prevention)
57
51
  if (data.download_url && isGitHubDownloadUrl(data.download_url)) {
@@ -1871,8 +1865,6 @@ async function addCommandInner(source, opts) {
1871
1865
  // `sourceSkillPath` are persisted alongside the legacy `source` string.
1872
1866
  const lockDir = lockfileRoot(opts);
1873
1867
  const lock = ensureLockfile(lockDir);
1874
- const sourceBranch = await getDefaultBranch(owner, repo);
1875
- const sourceCommitSha = await getBranchHeadSha(owner, repo, sourceBranch);
1876
1868
  for (const r of results) {
1877
1869
  if (r.installed && r.sha) {
1878
1870
  lock.skills[r.skillName] = buildGitHubInstallLockEntry({
@@ -1881,9 +1873,6 @@ async function addCommandInner(source, opts) {
1881
1873
  owner,
1882
1874
  repo,
1883
1875
  sourceSkillPath: r.sourceSkillPath ?? null,
1884
- branch: sourceBranch,
1885
- commitSha: sourceCommitSha,
1886
- pluginName: pluginNameFromSkillPath(r.sourceSkillPath),
1887
1876
  global: !!opts.global,
1888
1877
  });
1889
1878
  }
@@ -2313,7 +2302,6 @@ async function installSingleSkillLegacy(owner, repo, skill, opts, skillSubpathOv
2313
2302
  return process.exit(1);
2314
2303
  }
2315
2304
  const branch = await getDefaultBranch(owner, repo);
2316
- const sourceCommitSha = await getBranchHeadSha(owner, repo, branch);
2317
2305
  const skillSubpath = skillSubpathOverride || (skill ? `skills/${skill}/SKILL.md` : "SKILL.md");
2318
2306
  const url = `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/${skillSubpath}`;
2319
2307
  // Fetch SKILL.md
@@ -2455,9 +2443,6 @@ async function installSingleSkillLegacy(owner, repo, skill, opts, skillSubpathOv
2455
2443
  owner,
2456
2444
  repo,
2457
2445
  sourceSkillPath: skillSubpath,
2458
- branch,
2459
- commitSha: sourceCommitSha,
2460
- pluginName: pluginNamespace ?? pluginNameFromSkillPath(skillSubpath),
2461
2446
  global: !!opts.global,
2462
2447
  });
2463
2448
  lock.agents = [...new Set([...(lock.agents || []), ...selectedAgents.map((a) => a.id)])];