@salesforce/b2c-tooling-sdk 1.5.0 → 1.6.1

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.
@@ -2,46 +2,30 @@ import type { CachedArtifact, DownloadSkillsOptions, ReleaseInfo, SkillSet } fro
2
2
  /**
3
3
  * Get the cache directory for skills.
4
4
  * Uses XDG_CACHE_HOME on Linux, ~/.cache otherwise.
5
- *
6
- * @returns Absolute path to cache directory
7
5
  */
8
6
  export declare function getCacheDir(): string;
9
7
  /**
10
8
  * Fetch release information from GitHub API.
11
- *
12
- * @param version - 'latest' or specific version (e.g., 'v0.1.0')
13
- * @returns Release information
14
- * @throws Error if release not found or API request fails
15
9
  */
16
10
  export declare function getRelease(version?: string): Promise<ReleaseInfo>;
17
11
  /**
18
12
  * List available releases with skills artifacts.
19
- *
20
- * @param limit - Maximum number of releases to return (default: 10)
21
- * @returns Array of release information
22
13
  */
23
14
  export declare function listReleases(limit?: number): Promise<ReleaseInfo[]>;
24
15
  /**
25
16
  * Get cached artifact metadata if available.
26
- *
27
- * @param version - Release version
28
- * @param skillSet - Skill set to check
29
- * @returns Cached artifact info or null if not cached
30
17
  */
31
18
  export declare function getCachedArtifact(version: string, skillSet: SkillSet): CachedArtifact | null;
32
19
  /**
33
20
  * Download and extract skills artifact.
34
- * Uses direct download URLs to avoid GitHub API rate limits.
21
+ * Dispatches to the appropriate download strategy based on the skill source type.
35
22
  *
36
- * @param skillSet - Which skill set to download ('b2c' or 'b2c-cli')
23
+ * @param skillSet - Which skill set to download
37
24
  * @param options - Download options
38
25
  * @returns Path to extracted skills directory
39
- * @throws Error if download fails or artifact not available
40
26
  */
41
27
  export declare function downloadSkillsArtifact(skillSet: SkillSet, options?: DownloadSkillsOptions): Promise<string>;
42
28
  /**
43
29
  * Clear the skills cache.
44
- *
45
- * @param version - Optional specific version to clear (default: all)
46
30
  */
47
31
  export declare function clearCache(version?: string): Promise<void>;
@@ -3,46 +3,25 @@
3
3
  * SPDX-License-Identifier: Apache-2
4
4
  * For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
5
5
  */
6
+ import { execFile } from 'node:child_process';
6
7
  import * as fs from 'node:fs';
7
8
  import * as os from 'node:os';
8
9
  import * as path from 'node:path';
10
+ import { promisify } from 'node:util';
9
11
  import JSZip from 'jszip';
12
+ import { getSkillSource } from './sources.js';
10
13
  import { getLogger } from '../logging/logger.js';
11
- const GITHUB_REPO = 'SalesforceCommerceCloud/b2c-developer-tooling';
14
+ const execFileAsync = promisify(execFile);
12
15
  const GITHUB_API_BASE = 'https://api.github.com';
13
16
  const GITHUB_DOWNLOAD_BASE = 'https://github.com';
14
17
  const GITHUB_RAW_BASE = 'https://raw.githubusercontent.com';
15
18
  const LATEST_VERSION_CACHE_TTL_MS = 60 * 60 * 1000; // 1 hour
16
- /**
17
- * Asset filename patterns for skill archives.
18
- */
19
- const ASSET_NAMES = {
20
- b2c: 'b2c-skills.zip',
21
- 'b2c-cli': 'b2c-cli-skills.zip',
22
- };
23
- /**
24
- * Build a direct CDN download URL for a release asset.
25
- * Assumes a concrete tag — call `resolveLatestVersion()` first if you have 'latest'.
26
- */
27
- function buildDownloadUrl(tag, assetName) {
28
- return `${GITHUB_DOWNLOAD_BASE}/${GITHUB_REPO}/releases/download/${tag}/${assetName}`;
29
- }
30
- /**
31
- * Tag name used for skill-only releases (matches publish.yml).
32
- */
33
- function pluginsTag(version) {
34
- const bare = version.replace(/^v/, '');
35
- return `b2c-agent-plugins@${bare}`;
19
+ function buildDownloadUrl(repo, tag, assetName) {
20
+ return `${GITHUB_DOWNLOAD_BASE}/${repo}/releases/download/${tag}/${assetName}`;
36
21
  }
37
- /**
38
- * File path for the resolved-latest-version cache.
39
- */
40
22
  function getLatestVersionCachePath() {
41
23
  return path.join(getCacheDir(), '.latest-version.json');
42
24
  }
43
- /**
44
- * Read a cached "latest" version if still fresh (1-hour TTL).
45
- */
46
25
  function readLatestVersionCache() {
47
26
  try {
48
27
  const p = getLatestVersionCachePath();
@@ -68,9 +47,16 @@ function writeLatestVersionCache(version) {
68
47
  // Caching is best-effort
69
48
  }
70
49
  }
71
- /**
72
- * Detect whether a fetch response is an unauthenticated GitHub rate-limit.
73
- */
50
+ function clearLatestVersionCache() {
51
+ try {
52
+ const p = getLatestVersionCachePath();
53
+ if (fs.existsSync(p))
54
+ fs.unlinkSync(p);
55
+ }
56
+ catch {
57
+ // Best-effort
58
+ }
59
+ }
74
60
  function isRateLimited(response) {
75
61
  if (response.status !== 403 && response.status !== 429)
76
62
  return false;
@@ -78,27 +64,15 @@ function isRateLimited(response) {
78
64
  return remaining === '0' || response.status === 429;
79
65
  }
80
66
  /**
81
- * Resolve the version of the most recent skills release.
82
- *
83
- * Strategy:
84
- * 1. API primary — paginate /releases and return the first entry that has
85
- * a skills asset attached.
86
- * 2. Rate-limit fallback — fetch skills/package.json from main via
87
- * raw.githubusercontent.com. This is the version that will be tagged
88
- * b2c-agent-plugins@<version> at release time.
89
- *
90
- * Caches the resolved version for 1 hour to avoid re-resolving on consecutive
91
- * calls within the same session. Always returns a bare version string like
92
- * "1.2.3" (no 'v' prefix, no tag format).
67
+ * Resolve the version of the most recent skills release from the b2c-developer-tooling repo.
93
68
  */
94
- async function resolveLatestVersion() {
69
+ async function resolveLatestVersion(source) {
95
70
  const logger = getLogger();
96
71
  const cached = readLatestVersionCache();
97
72
  if (cached) {
98
73
  logger.debug({ version: cached }, 'Using cached latest version');
99
74
  return cached;
100
75
  }
101
- // Primary — GitHub REST API with asset filtering
102
76
  try {
103
77
  const releases = await listReleases(30);
104
78
  if (releases.length > 0) {
@@ -117,8 +91,7 @@ async function resolveLatestVersion() {
117
91
  logger.warn({ err: err.message }, 'GitHub API unavailable; falling back to main branch for version resolution');
118
92
  }
119
93
  }
120
- // Fallback read skills/package.json from main via raw.githubusercontent.com
121
- const rawUrl = `${GITHUB_RAW_BASE}/${GITHUB_REPO}/main/skills/package.json`;
94
+ const rawUrl = `${GITHUB_RAW_BASE}/${source.repo}/main/skills/package.json`;
122
95
  logger.debug({ url: rawUrl }, 'Fetching version from raw.githubusercontent.com');
123
96
  const response = await fetch(rawUrl, { headers: { 'User-Agent': 'b2c-cli' } });
124
97
  if (!response.ok) {
@@ -134,23 +107,22 @@ async function resolveLatestVersion() {
134
107
  /**
135
108
  * Get the cache directory for skills.
136
109
  * Uses XDG_CACHE_HOME on Linux, ~/.cache otherwise.
137
- *
138
- * @returns Absolute path to cache directory
139
110
  */
140
111
  export function getCacheDir() {
141
112
  const xdgCache = process.env.XDG_CACHE_HOME;
142
113
  const baseCache = xdgCache || path.join(os.homedir(), '.cache');
143
114
  return path.join(baseCache, 'b2c-cli', 'skills');
144
115
  }
145
- /**
146
- * Parse GitHub API release response into ReleaseInfo.
147
- */
148
116
  function parseRelease(release) {
149
- const b2cAsset = release.assets.find((a) => a.name === ASSET_NAMES['b2c']);
150
- const b2cCliAsset = release.assets.find((a) => a.name === ASSET_NAMES['b2c-cli']);
117
+ const b2cSource = getSkillSource('b2c');
118
+ const b2cCliSource = getSkillSource('b2c-cli');
119
+ const b2cAsset = release.assets.find((a) => a.name === b2cSource.assetName);
120
+ const b2cCliAsset = release.assets.find((a) => a.name === b2cCliSource.assetName);
121
+ const versionMatch = release.tag_name.match(/@(\d+\.\d+\.\d+.*)$/);
122
+ const version = versionMatch ? versionMatch[1] : release.tag_name.replace(/^v/, '');
151
123
  return {
152
124
  tagName: release.tag_name,
153
- version: release.tag_name.replace(/^v/, ''),
125
+ version,
154
126
  publishedAt: release.published_at,
155
127
  b2cSkillsAssetUrl: b2cAsset?.browser_download_url ?? null,
156
128
  b2cCliSkillsAssetUrl: b2cCliAsset?.browser_download_url ?? null,
@@ -158,29 +130,22 @@ function parseRelease(release) {
158
130
  }
159
131
  /**
160
132
  * Fetch release information from GitHub API.
161
- *
162
- * @param version - 'latest' or specific version (e.g., 'v0.1.0')
163
- * @returns Release information
164
- * @throws Error if release not found or API request fails
165
133
  */
166
134
  export async function getRelease(version = 'latest') {
167
135
  const logger = getLogger();
168
- // For 'latest', resolve to a concrete tag via the skills-aware resolver.
169
- // This avoids GitHub's /releases/latest endpoint, which returns whichever
170
- // release GitHub flags as latest regardless of whether it contains skills.
136
+ const source = getSkillSource('b2c');
171
137
  let tag;
172
138
  if (version === 'latest') {
173
- const resolved = await resolveLatestVersion();
174
- tag = pluginsTag(resolved);
139
+ const resolved = await resolveLatestVersion(source);
140
+ tag = source.tagPattern(resolved);
175
141
  }
176
142
  else if (/^b2c-agent-plugins@/.test(version) || version.includes('@')) {
177
- // Caller passed an explicit tag (including other packages' tags, for tests/internal use).
178
143
  tag = version;
179
144
  }
180
145
  else {
181
- tag = pluginsTag(version);
146
+ tag = source.tagPattern(version);
182
147
  }
183
- const endpoint = `${GITHUB_API_BASE}/repos/${GITHUB_REPO}/releases/tags/${encodeURIComponent(tag)}`;
148
+ const endpoint = `${GITHUB_API_BASE}/repos/${source.repo}/releases/tags/${encodeURIComponent(tag)}`;
184
149
  logger.debug({ endpoint }, 'Fetching release info');
185
150
  const response = await fetch(endpoint, {
186
151
  headers: {
@@ -189,6 +154,7 @@ export async function getRelease(version = 'latest') {
189
154
  },
190
155
  });
191
156
  if (!response.ok) {
157
+ clearLatestVersionCache();
192
158
  if (response.status === 404) {
193
159
  throw new Error(`Release not found: ${tag}`);
194
160
  }
@@ -202,13 +168,11 @@ export async function getRelease(version = 'latest') {
202
168
  }
203
169
  /**
204
170
  * List available releases with skills artifacts.
205
- *
206
- * @param limit - Maximum number of releases to return (default: 10)
207
- * @returns Array of release information
208
171
  */
209
172
  export async function listReleases(limit = 10) {
210
173
  const logger = getLogger();
211
- const endpoint = `${GITHUB_API_BASE}/repos/${GITHUB_REPO}/releases?per_page=${limit}`;
174
+ const source = getSkillSource('b2c');
175
+ const endpoint = `${GITHUB_API_BASE}/repos/${source.repo}/releases?per_page=${limit}`;
212
176
  logger.debug({ endpoint }, 'Listing releases');
213
177
  const response = await fetch(endpoint, {
214
178
  headers: {
@@ -220,15 +184,13 @@ export async function listReleases(limit = 10) {
220
184
  throw new Error(`GitHub API error: ${response.status} ${response.statusText}`);
221
185
  }
222
186
  const data = (await response.json());
223
- // Only return releases that have at least one skills artifact
224
- return data.map(parseRelease).filter((r) => r.b2cSkillsAssetUrl || r.b2cCliSkillsAssetUrl);
187
+ return data
188
+ .filter((r) => r.tag_name.startsWith('b2c-agent-plugins@'))
189
+ .map(parseRelease)
190
+ .filter((r) => r.b2cSkillsAssetUrl || r.b2cCliSkillsAssetUrl);
225
191
  }
226
192
  /**
227
193
  * Get cached artifact metadata if available.
228
- *
229
- * @param version - Release version
230
- * @param skillSet - Skill set to check
231
- * @returns Cached artifact info or null if not cached
232
194
  */
233
195
  export function getCachedArtifact(version, skillSet) {
234
196
  const cacheDir = getCacheDir();
@@ -245,58 +207,41 @@ export function getCachedArtifact(version, skillSet) {
245
207
  }
246
208
  }
247
209
  /**
248
- * Download and extract skills artifact.
249
- * Uses direct download URLs to avoid GitHub API rate limits.
250
- *
251
- * @param skillSet - Which skill set to download ('b2c' or 'b2c-cli')
252
- * @param options - Download options
253
- * @returns Path to extracted skills directory
254
- * @throws Error if download fails or artifact not available
210
+ * Download and extract a release-artifact skill set (b2c or b2c-cli).
255
211
  */
256
- export async function downloadSkillsArtifact(skillSet, options = {}) {
212
+ async function downloadReleaseArtifact(source, options = {}) {
257
213
  const logger = getLogger();
258
214
  const { version = 'latest', forceDownload = false } = options;
259
- const assetName = ASSET_NAMES[skillSet];
260
- // Resolve 'latest' to a concrete version before any download or cache lookup.
261
- // This keeps the cache keyed to real version tags and avoids GitHub's opinionated
262
- // /releases/latest endpoint, which may point at a release that has no skills zips.
263
- const resolvedVersion = version === 'latest' ? await resolveLatestVersion() : version.replace(/^v/, '');
264
- const tag = pluginsTag(resolvedVersion);
265
- // Check cache for the resolved version
215
+ const resolvedVersion = version === 'latest' ? await resolveLatestVersion(source) : version.replace(/^v/, '');
216
+ const tag = source.tagPattern(resolvedVersion);
266
217
  if (!forceDownload) {
267
- const cached = getCachedArtifact(resolvedVersion, skillSet);
218
+ const cached = getCachedArtifact(resolvedVersion, source.id);
268
219
  if (cached && fs.existsSync(cached.path)) {
269
- logger.debug({ version: resolvedVersion, skillSet, path: cached.path }, 'Using cached skills');
220
+ logger.debug({ version: resolvedVersion, skillSet: source.id, path: cached.path }, 'Using cached skills');
270
221
  return cached.path;
271
222
  }
272
223
  }
273
- // Download from the CDN — no API rate limit on this path.
274
- const downloadUrl = buildDownloadUrl(tag, assetName);
275
- logger.debug({ url: downloadUrl, skillSet }, 'Downloading skills artifact');
276
- // Download artifact - GitHub will redirect to the actual file
224
+ const downloadUrl = buildDownloadUrl(source.repo, tag, source.assetName);
225
+ logger.debug({ url: downloadUrl, skillSet: source.id }, 'Downloading skills artifact');
277
226
  const response = await fetch(downloadUrl, {
278
- headers: {
279
- 'User-Agent': 'b2c-cli',
280
- },
227
+ headers: { 'User-Agent': 'b2c-cli' },
281
228
  redirect: 'follow',
282
229
  });
283
230
  if (!response.ok) {
231
+ clearLatestVersionCache();
284
232
  if (response.status === 404) {
285
- throw new Error(`Skills artifact '${assetName}' not found for release ${tag}`);
233
+ throw new Error(`Skills artifact '${source.assetName}' not found for release ${tag}`);
286
234
  }
287
235
  throw new Error(`Failed to download skills: ${response.status} ${response.statusText}`);
288
236
  }
289
237
  const zipBuffer = Buffer.from(await response.arrayBuffer());
290
238
  logger.debug({ size: zipBuffer.length, version: resolvedVersion }, 'Downloaded skills archive');
291
- // Extract to cache directory
292
239
  const cacheDir = options.cacheDir || getCacheDir();
293
- const extractDir = path.join(cacheDir, resolvedVersion, skillSet);
294
- // Clean existing extraction if present
240
+ const extractDir = path.join(cacheDir, resolvedVersion, source.id);
295
241
  if (fs.existsSync(extractDir)) {
296
242
  await fs.promises.rm(extractDir, { recursive: true });
297
243
  }
298
244
  await fs.promises.mkdir(extractDir, { recursive: true });
299
- // Extract zip contents
300
245
  const zip = await JSZip.loadAsync(zipBuffer);
301
246
  let extractedCount = 0;
302
247
  for (const [relativePath, zipEntry] of Object.entries(zip.files)) {
@@ -306,15 +251,12 @@ export async function downloadSkillsArtifact(skillSet, options = {}) {
306
251
  }
307
252
  const targetPath = path.join(extractDir, relativePath);
308
253
  const targetDir = path.dirname(targetPath);
309
- // Ensure parent directory exists
310
254
  await fs.promises.mkdir(targetDir, { recursive: true });
311
- // Write file
312
255
  const content = await zipEntry.async('nodebuffer');
313
256
  await fs.promises.writeFile(targetPath, content);
314
257
  extractedCount++;
315
258
  }
316
259
  logger.debug({ extractDir, fileCount: extractedCount }, 'Extracted skills');
317
- // Write cache manifest
318
260
  const manifest = {
319
261
  version: resolvedVersion,
320
262
  path: extractDir,
@@ -324,9 +266,171 @@ export async function downloadSkillsArtifact(skillSet, options = {}) {
324
266
  return extractDir;
325
267
  }
326
268
  /**
327
- * Clear the skills cache.
269
+ * Resolve a git ref to a commit SHA via the GitHub API.
270
+ */
271
+ async function resolveCommitSha(repo, ref) {
272
+ const response = await fetch(`${GITHUB_API_BASE}/repos/${repo}/commits/${encodeURIComponent(ref)}`, {
273
+ headers: { 'User-Agent': 'b2c-cli', Accept: 'application/vnd.github.v3.sha' },
274
+ });
275
+ if (!response.ok) {
276
+ throw new Error(`Failed to resolve ref '${ref}' for ${repo}: ${response.status} ${response.statusText}`);
277
+ }
278
+ return (await response.text()).trim();
279
+ }
280
+ /**
281
+ * Recursively fetch directory contents from the GitHub Contents API and write to disk.
282
+ */
283
+ async function fetchContentsRecursive(repo, repoPath, ref, destDir) {
284
+ const logger = getLogger();
285
+ const endpoint = `${GITHUB_API_BASE}/repos/${repo}/contents/${encodeURIComponent(repoPath)}?ref=${encodeURIComponent(ref)}`;
286
+ const response = await fetch(endpoint, {
287
+ headers: { Accept: 'application/vnd.github.v3+json', 'User-Agent': 'b2c-cli' },
288
+ });
289
+ if (!response.ok) {
290
+ if (isRateLimited(response)) {
291
+ throw Object.assign(new Error('GitHub API rate-limited'), { rateLimited: true });
292
+ }
293
+ throw new Error(`GitHub Contents API error for ${repoPath}: ${response.status} ${response.statusText}`);
294
+ }
295
+ const entries = (await response.json());
296
+ let fileCount = 0;
297
+ await fs.promises.mkdir(destDir, { recursive: true });
298
+ for (const entry of entries) {
299
+ const targetPath = path.join(destDir, entry.name);
300
+ if (entry.type === 'dir') {
301
+ fileCount += await fetchContentsRecursive(repo, entry.path, ref, targetPath);
302
+ }
303
+ else if (entry.type === 'file' && entry.download_url) {
304
+ const fileResponse = await fetch(entry.download_url, { headers: { 'User-Agent': 'b2c-cli' } });
305
+ if (!fileResponse.ok) {
306
+ logger.warn({ path: entry.path }, 'Failed to download file, skipping');
307
+ continue;
308
+ }
309
+ const content = Buffer.from(await fileResponse.arrayBuffer());
310
+ await fs.promises.writeFile(targetPath, content);
311
+ fileCount++;
312
+ }
313
+ }
314
+ return fileCount;
315
+ }
316
+ /**
317
+ * Recursively copy a directory tree.
318
+ */
319
+ async function copyDirRecursive(src, dest) {
320
+ await fs.promises.mkdir(dest, { recursive: true });
321
+ const entries = await fs.promises.readdir(src, { withFileTypes: true });
322
+ for (const entry of entries) {
323
+ const srcPath = path.join(src, entry.name);
324
+ const destPath = path.join(dest, entry.name);
325
+ if (entry.isDirectory()) {
326
+ await copyDirRecursive(srcPath, destPath);
327
+ }
328
+ else if (entry.isFile()) {
329
+ await fs.promises.copyFile(srcPath, destPath);
330
+ }
331
+ }
332
+ }
333
+ /**
334
+ * Fallback: use sparse git checkout to fetch only the skills subtree.
335
+ */
336
+ async function fetchViaSparseCheckout(repo, ref, skillsPath, destDir) {
337
+ const logger = getLogger();
338
+ const tmpDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'b2c-skills-'));
339
+ try {
340
+ const repoUrl = `${GITHUB_DOWNLOAD_BASE}/${repo}.git`;
341
+ logger.debug({ repoUrl, skillsPath }, 'Falling back to sparse git checkout');
342
+ await execFileAsync('git', [
343
+ 'clone',
344
+ '--no-checkout',
345
+ '--depth',
346
+ '1',
347
+ '--filter=blob:none',
348
+ '--sparse',
349
+ repoUrl,
350
+ tmpDir,
351
+ ]);
352
+ await execFileAsync('git', ['-C', tmpDir, 'sparse-checkout', 'set', skillsPath]);
353
+ await execFileAsync('git', ['-C', tmpDir, 'checkout']);
354
+ const skillsSrc = path.join(tmpDir, skillsPath);
355
+ if (!fs.existsSync(skillsSrc)) {
356
+ throw new Error(`Skills path '${skillsPath}' not found in repo ${repo}`);
357
+ }
358
+ await copyDirRecursive(skillsSrc, destDir);
359
+ }
360
+ finally {
361
+ await fs.promises.rm(tmpDir, { recursive: true, force: true });
362
+ }
363
+ }
364
+ /**
365
+ * Download skills from a repo-contents source (e.g., commerce-apps).
366
+ * Primary: GitHub Contents API. Fallback: sparse git checkout.
367
+ */
368
+ async function downloadRepoContents(source, options = {}) {
369
+ const logger = getLogger();
370
+ const ref = options.version || source.ref || 'main';
371
+ const forceDownload = options.forceDownload ?? false;
372
+ const skillsPath = source.skillsPath || '.claude/skills';
373
+ const commitSha = await resolveCommitSha(source.repo, ref);
374
+ const cacheKey = `${ref}-${commitSha.slice(0, 8)}`;
375
+ if (!forceDownload) {
376
+ const cached = getCachedArtifact(cacheKey, source.id);
377
+ if (cached && fs.existsSync(cached.path)) {
378
+ logger.debug({ cacheKey, skillSet: source.id, path: cached.path }, 'Using cached skills');
379
+ return cached.path;
380
+ }
381
+ }
382
+ const cacheDir = options.cacheDir || getCacheDir();
383
+ const extractDir = path.join(cacheDir, cacheKey, source.id);
384
+ const skillsDestDir = path.join(extractDir, 'skills');
385
+ if (fs.existsSync(extractDir)) {
386
+ await fs.promises.rm(extractDir, { recursive: true });
387
+ }
388
+ await fs.promises.mkdir(skillsDestDir, { recursive: true });
389
+ try {
390
+ logger.debug({ repo: source.repo, skillsPath, ref }, 'Fetching skills via Contents API');
391
+ const fileCount = await fetchContentsRecursive(source.repo, skillsPath, ref, skillsDestDir);
392
+ logger.debug({ extractDir, fileCount }, 'Fetched skills via Contents API');
393
+ }
394
+ catch (err) {
395
+ const isRateLimit = err instanceof Error && 'rateLimited' in err;
396
+ if (isRateLimit) {
397
+ logger.warn('Contents API rate-limited; falling back to sparse git checkout');
398
+ }
399
+ else {
400
+ logger.warn({ err: err.message }, 'Contents API failed; falling back to sparse git checkout');
401
+ }
402
+ if (fs.existsSync(skillsDestDir)) {
403
+ await fs.promises.rm(skillsDestDir, { recursive: true });
404
+ }
405
+ await fs.promises.mkdir(skillsDestDir, { recursive: true });
406
+ await fetchViaSparseCheckout(source.repo, ref, skillsPath, skillsDestDir);
407
+ }
408
+ const manifest = {
409
+ version: cacheKey,
410
+ path: extractDir,
411
+ downloadedAt: new Date().toISOString(),
412
+ commitSha,
413
+ };
414
+ await fs.promises.writeFile(path.join(extractDir, 'manifest.json'), JSON.stringify(manifest, null, 2));
415
+ return extractDir;
416
+ }
417
+ /**
418
+ * Download and extract skills artifact.
419
+ * Dispatches to the appropriate download strategy based on the skill source type.
328
420
  *
329
- * @param version - Optional specific version to clear (default: all)
421
+ * @param skillSet - Which skill set to download
422
+ * @param options - Download options
423
+ * @returns Path to extracted skills directory
424
+ */
425
+ export async function downloadSkillsArtifact(skillSet, options = {}) {
426
+ const source = getSkillSource(skillSet);
427
+ if (source.type === 'release-artifact') {
428
+ return downloadReleaseArtifact(source, options);
429
+ }
430
+ return downloadRepoContents(source, options);
431
+ }
432
+ /**
433
+ * Clear the skills cache.
330
434
  */
331
435
  export async function clearCache(version) {
332
436
  const cacheDir = getCacheDir();
@@ -1 +1 @@
1
- {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/skills/github.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/skills/github.ts"],"names":[],"mappings":"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"}
@@ -35,7 +35,8 @@
35
35
  *
36
36
  * @module skills
37
37
  */
38
- export type { IdeType, SkillSet, IdePaths, IdeConfig, SkillMetadata, ReleaseInfo, DownloadSkillsOptions, InstallSkillsOptions, SkillInstallation, SkillSkipped, SkillError, InstallSkillsResult, CachedArtifact, } from './types.js';
38
+ export type { IdeType, SkillSet, SkillSourceConfig, IdePaths, IdeConfig, SkillMetadata, ReleaseInfo, DownloadSkillsOptions, InstallSkillsOptions, SkillInstallation, SkillSkipped, SkillError, InstallSkillsResult, CachedArtifact, } from './types.js';
39
+ export { SKILL_SOURCES, getSkillSource, ALL_SKILL_SETS } from './sources.js';
39
40
  export { IDE_CONFIGS, ALL_IDE_TYPES, detectInstalledIdes, getSkillInstallPath, getIdeDisplayName, getIdeDocsUrl, } from './agents.js';
40
41
  export { getCacheDir, getRelease, listReleases, getCachedArtifact, downloadSkillsArtifact, clearCache, } from './github.js';
41
42
  export { parseSkillFrontmatter, scanSkills, filterSkillsByName, findSkillsByName } from './parser.js';
@@ -3,6 +3,8 @@
3
3
  * SPDX-License-Identifier: Apache-2
4
4
  * For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
5
5
  */
6
+ // Skill source registry
7
+ export { SKILL_SOURCES, getSkillSource, ALL_SKILL_SETS } from './sources.js';
6
8
  // Agent/IDE utilities
7
9
  export { IDE_CONFIGS, ALL_IDE_TYPES, detectInstalledIdes, getSkillInstallPath, getIdeDisplayName, getIdeDocsUrl, } from './agents.js';
8
10
  // GitHub/download utilities
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/skills/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAyDH,sBAAsB;AACtB,OAAO,EACL,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,4BAA4B;AAC5B,OAAO,EACL,WAAW,EACX,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,sBAAsB,EACtB,UAAU,GACX,MAAM,aAAa,CAAC;AAErB,gBAAgB;AAChB,OAAO,EAAC,qBAAqB,EAAE,UAAU,EAAE,kBAAkB,EAAE,gBAAgB,EAAC,MAAM,aAAa,CAAC;AAEpG,eAAe;AACf,OAAO,EAAC,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAC,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/skills/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA0DH,wBAAwB;AACxB,OAAO,EAAC,aAAa,EAAE,cAAc,EAAE,cAAc,EAAC,MAAM,cAAc,CAAC;AAE3E,sBAAsB;AACtB,OAAO,EACL,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,4BAA4B;AAC5B,OAAO,EACL,WAAW,EACX,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,sBAAsB,EACtB,UAAU,GACX,MAAM,aAAa,CAAC;AAErB,gBAAgB;AAChB,OAAO,EAAC,qBAAqB,EAAE,UAAU,EAAE,kBAAkB,EAAE,gBAAgB,EAAC,MAAM,aAAa,CAAC;AAEpG,eAAe;AACf,OAAO,EAAC,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAC,MAAM,gBAAgB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import type { SkillMetadata, SkillSet } from './types.js';
2
2
  /**
3
- * Parse simple YAML-like frontmatter from SKILL.md content.
4
- * Only supports basic key: value pairs (name and description).
3
+ * Parse YAML frontmatter from SKILL.md content.
4
+ * Supports both simple key: value and YAML block scalars (e.g., description: >-).
5
5
  *
6
6
  * @param content - File content with frontmatter
7
7
  * @returns Parsed frontmatter or null if invalid