@salesforce/b2c-tooling-sdk 1.3.1 → 1.4.0

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 (41) hide show
  1. package/dist/cjs/cli/lifecycle.d.ts +1 -1
  2. package/dist/cjs/cli/lifecycle.js.map +1 -1
  3. package/dist/cjs/operations/code/deploy.d.ts +17 -1
  4. package/dist/cjs/operations/code/deploy.js +21 -2
  5. package/dist/cjs/operations/code/deploy.js.map +1 -1
  6. package/dist/cjs/operations/code/download.d.ts +66 -0
  7. package/dist/cjs/operations/code/download.js +180 -0
  8. package/dist/cjs/operations/code/download.js.map +1 -0
  9. package/dist/cjs/operations/code/index.d.ts +7 -1
  10. package/dist/cjs/operations/code/index.js +6 -0
  11. package/dist/cjs/operations/code/index.js.map +1 -1
  12. package/dist/cjs/operations/jobs/site-archive.d.ts +2 -0
  13. package/dist/cjs/operations/jobs/site-archive.js +23 -21
  14. package/dist/cjs/operations/jobs/site-archive.js.map +1 -1
  15. package/dist/cjs/skills/github.js +143 -49
  16. package/dist/cjs/skills/github.js.map +1 -1
  17. package/dist/cjs/skills/installer.d.ts +1 -0
  18. package/dist/cjs/skills/installer.js.map +1 -1
  19. package/dist/cjs/telemetry/index.d.ts +8 -0
  20. package/dist/cjs/telemetry/index.js.map +1 -1
  21. package/dist/esm/cli/lifecycle.d.ts +1 -1
  22. package/dist/esm/cli/lifecycle.js.map +1 -1
  23. package/dist/esm/operations/code/deploy.d.ts +17 -1
  24. package/dist/esm/operations/code/deploy.js +21 -2
  25. package/dist/esm/operations/code/deploy.js.map +1 -1
  26. package/dist/esm/operations/code/download.d.ts +66 -0
  27. package/dist/esm/operations/code/download.js +180 -0
  28. package/dist/esm/operations/code/download.js.map +1 -0
  29. package/dist/esm/operations/code/index.d.ts +7 -1
  30. package/dist/esm/operations/code/index.js +6 -0
  31. package/dist/esm/operations/code/index.js.map +1 -1
  32. package/dist/esm/operations/jobs/site-archive.d.ts +2 -0
  33. package/dist/esm/operations/jobs/site-archive.js +23 -21
  34. package/dist/esm/operations/jobs/site-archive.js.map +1 -1
  35. package/dist/esm/skills/github.js +143 -49
  36. package/dist/esm/skills/github.js.map +1 -1
  37. package/dist/esm/skills/installer.d.ts +1 -0
  38. package/dist/esm/skills/installer.js.map +1 -1
  39. package/dist/esm/telemetry/index.d.ts +8 -0
  40. package/dist/esm/telemetry/index.js.map +1 -1
  41. package/package.json +1 -1
@@ -0,0 +1,180 @@
1
+ /*
2
+ * Copyright (c) 2025, Salesforce, Inc.
3
+ * SPDX-License-Identifier: Apache-2
4
+ * For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
5
+ */
6
+ import path from 'node:path';
7
+ import fs from 'node:fs';
8
+ import JSZip from 'jszip';
9
+ import { getLogger } from '../../logging/logger.js';
10
+ import { getActiveCodeVersion } from './versions.js';
11
+ const ZIP_BODY = new URLSearchParams({ method: 'ZIP' }).toString();
12
+ // 10 minutes — server-side zipping and large downloads can take a long time
13
+ const LONG_OPERATION_TIMEOUT_MS = 600_000;
14
+ /**
15
+ * Downloads cartridges from an instance via WebDAV.
16
+ *
17
+ * This function:
18
+ * 1. Triggers server-side zipping of the code version
19
+ * 2. Downloads the zip archive
20
+ * 3. Cleans up the server-side zip (best-effort)
21
+ * 4. Extracts cartridges locally with optional filtering
22
+ *
23
+ * If `instance.config.codeVersion` is not set, attempts to discover the active
24
+ * code version via OCAPI. If that also fails, throws an error.
25
+ *
26
+ * @param instance - B2C instance to download from
27
+ * @param outputDirectory - Directory to extract cartridges into
28
+ * @param options - Download options (filters, mirror)
29
+ * @returns Download result with cartridge names and metadata
30
+ * @throws Error if code version cannot be determined or download fails
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * // Download all cartridges
35
+ * const result = await downloadCartridges(instance, './output');
36
+ *
37
+ * // Download specific cartridges
38
+ * const result = await downloadCartridges(instance, './output', {
39
+ * include: ['app_storefront_base'],
40
+ * });
41
+ *
42
+ * // Mirror to local project locations
43
+ * const mirror = new Map([['app_storefront_base', '/project/cartridges/app_storefront_base']]);
44
+ * const result = await downloadCartridges(instance, '.', { mirror });
45
+ * ```
46
+ */
47
+ export async function downloadCartridges(instance, outputDirectory, options = {}) {
48
+ const logger = getLogger();
49
+ let codeVersion = instance.config.codeVersion;
50
+ if (!codeVersion) {
51
+ logger.debug('No code version configured, attempting to discover active version...');
52
+ try {
53
+ const activeVersion = await getActiveCodeVersion(instance);
54
+ if (activeVersion?.id) {
55
+ codeVersion = activeVersion.id;
56
+ instance.config.codeVersion = codeVersion;
57
+ }
58
+ }
59
+ catch (error) {
60
+ logger.debug({ error }, 'Failed to discover active code version');
61
+ }
62
+ if (!codeVersion) {
63
+ throw new Error('Code version required for download. Configure --code-version or ensure OAuth credentials are available for auto-discovery.');
64
+ }
65
+ }
66
+ const webdav = instance.webdav;
67
+ const zipPath = `Cartridges/${codeVersion}.zip`;
68
+ const resolvedOutput = path.resolve(outputDirectory);
69
+ const { onProgress } = options;
70
+ // Progress helper: fires immediately (0s) then every 5s until stopped
71
+ const PROGRESS_INTERVAL_MS = 5_000;
72
+ function startProgress(phase) {
73
+ const start = Date.now();
74
+ onProgress?.({ phase, elapsedSeconds: 0 });
75
+ if (!onProgress)
76
+ return () => { };
77
+ const interval = setInterval(() => {
78
+ onProgress({ phase, elapsedSeconds: Math.round((Date.now() - start) / 1000) });
79
+ }, PROGRESS_INTERVAL_MS);
80
+ return () => clearInterval(interval);
81
+ }
82
+ // Step 1: Trigger server-side zip (can take several minutes for large code versions)
83
+ let stopProgress = startProgress('zipping');
84
+ logger.debug({ codeVersion }, 'Requesting server-side zip...');
85
+ const zipResponse = await webdav.request(`Cartridges/${codeVersion}`, {
86
+ method: 'POST',
87
+ body: ZIP_BODY,
88
+ headers: {
89
+ 'Content-Type': 'application/x-www-form-urlencoded',
90
+ },
91
+ signal: AbortSignal.timeout(LONG_OPERATION_TIMEOUT_MS),
92
+ });
93
+ stopProgress();
94
+ if (!zipResponse.ok) {
95
+ const text = await zipResponse.text();
96
+ throw new Error(`Failed to create server-side zip: ${zipResponse.status} ${zipResponse.statusText} - ${text}`);
97
+ }
98
+ logger.debug('Server-side zip created');
99
+ // Step 2: Download zip archive (can be large)
100
+ stopProgress = startProgress('downloading');
101
+ logger.debug({ zipPath }, 'Downloading zip archive...');
102
+ const downloadResponse = await webdav.request(zipPath, {
103
+ method: 'GET',
104
+ signal: AbortSignal.timeout(LONG_OPERATION_TIMEOUT_MS),
105
+ });
106
+ if (!downloadResponse.ok) {
107
+ stopProgress();
108
+ throw new Error(`Failed to download zip: ${downloadResponse.status} ${downloadResponse.statusText}`);
109
+ }
110
+ const buffer = await downloadResponse.arrayBuffer();
111
+ stopProgress();
112
+ logger.debug({ size: buffer.byteLength }, `Archive downloaded: ${buffer.byteLength} bytes`);
113
+ // Step 3: Cleanup server-side zip (best-effort)
114
+ onProgress?.({ phase: 'cleanup', elapsedSeconds: 0 });
115
+ try {
116
+ await webdav.delete(zipPath);
117
+ logger.debug('Server-side zip cleaned up');
118
+ }
119
+ catch (error) {
120
+ logger.warn({ error, zipPath }, 'Failed to clean up server-side zip (non-fatal)');
121
+ }
122
+ // Step 4: Extract locally
123
+ onProgress?.({ phase: 'extracting', elapsedSeconds: 0 });
124
+ logger.debug('Extracting archive...');
125
+ const zip = await JSZip.loadAsync(buffer);
126
+ const extractedCartridges = new Set();
127
+ const { include, exclude, mirror } = options;
128
+ const entries = Object.values(zip.files).filter((entry) => !entry.dir);
129
+ for (const entry of entries) {
130
+ const parts = entry.name.split('/');
131
+ if (parts.length < 3) {
132
+ continue;
133
+ }
134
+ // Format: {codeVersion}/{cartridgeName}/{relativePath...}
135
+ parts.shift(); // remove codeVersion
136
+ const cartridgeName = parts.shift();
137
+ const relativePath = parts.join('/');
138
+ // Apply filters
139
+ if (include?.length && !include.includes(cartridgeName)) {
140
+ continue;
141
+ }
142
+ if (exclude?.length && exclude.includes(cartridgeName)) {
143
+ continue;
144
+ }
145
+ let targetPath;
146
+ if (mirror?.has(cartridgeName)) {
147
+ targetPath = path.join(mirror.get(cartridgeName), relativePath);
148
+ }
149
+ else {
150
+ targetPath = path.join(resolvedOutput, cartridgeName, relativePath);
151
+ }
152
+ // Preserve existing file permissions
153
+ let existingMode = null;
154
+ try {
155
+ const stat = await fs.promises.stat(targetPath);
156
+ existingMode = stat.mode;
157
+ }
158
+ catch {
159
+ // File doesn't exist yet
160
+ }
161
+ // Ensure parent directory exists
162
+ await fs.promises.mkdir(path.dirname(targetPath), { recursive: true });
163
+ // Write file
164
+ const content = await entry.async('nodebuffer');
165
+ await fs.promises.writeFile(targetPath, content);
166
+ // Restore permissions if file existed
167
+ if (existingMode !== null) {
168
+ await fs.promises.chmod(targetPath, existingMode);
169
+ }
170
+ extractedCartridges.add(cartridgeName);
171
+ }
172
+ const cartridgeList = [...extractedCartridges].sort();
173
+ logger.debug({ server: instance.config.hostname, codeVersion, cartridgeCount: cartridgeList.length }, `Downloaded ${cartridgeList.length} cartridge(s) from ${instance.config.hostname}`);
174
+ return {
175
+ cartridges: cartridgeList,
176
+ codeVersion,
177
+ outputDirectory: resolvedOutput,
178
+ };
179
+ }
180
+ //# sourceMappingURL=download.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download.js","sourceRoot":"","sources":["../../../../src/operations/code/download.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,10 @@
24
24
  * - {@link deleteCartridges} - Low-level cartridge deletion
25
25
  * - {@link watchCartridges} - Watch and sync file changes
26
26
  *
27
+ * ## Download
28
+ *
29
+ * - {@link downloadCartridges} - Download cartridges from an instance
30
+ *
27
31
  * ## Usage
28
32
  *
29
33
  * ```typescript
@@ -61,6 +65,8 @@ export type { CartridgeMapping, FindCartridgesOptions } from './cartridges.js';
61
65
  export { listCodeVersions, getActiveCodeVersion, activateCodeVersion, reloadCodeVersion, deleteCodeVersion, createCodeVersion, } from './versions.js';
62
66
  export type { CodeVersion, CodeVersionResult } from './versions.js';
63
67
  export { findAndDeployCartridges, uploadCartridges, deleteCartridges } from './deploy.js';
64
- export type { DeployOptions, DeployResult } from './deploy.js';
68
+ export type { DeployOptions, DeployResult, UploadOptions, UploadProgressInfo } from './deploy.js';
69
+ export { downloadCartridges } from './download.js';
70
+ export type { DownloadOptions, DownloadProgressInfo, DownloadResult } from './download.js';
65
71
  export { watchCartridges } from './watch.js';
66
72
  export type { WatchOptions, WatchResult } from './watch.js';
@@ -29,6 +29,10 @@
29
29
  * - {@link deleteCartridges} - Low-level cartridge deletion
30
30
  * - {@link watchCartridges} - Watch and sync file changes
31
31
  *
32
+ * ## Download
33
+ *
34
+ * - {@link downloadCartridges} - Download cartridges from an instance
35
+ *
32
36
  * ## Usage
33
37
  *
34
38
  * ```typescript
@@ -67,6 +71,8 @@ export { findCartridges } from './cartridges.js';
67
71
  export { listCodeVersions, getActiveCodeVersion, activateCodeVersion, reloadCodeVersion, deleteCodeVersion, createCodeVersion, } from './versions.js';
68
72
  // Deployment
69
73
  export { findAndDeployCartridges, uploadCartridges, deleteCartridges } from './deploy.js';
74
+ // Download
75
+ export { downloadCartridges } from './download.js';
70
76
  // Watch
71
77
  export { watchCartridges } from './watch.js';
72
78
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/operations/code/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AAEH,sBAAsB;AACtB,OAAO,EAAC,cAAc,EAAC,MAAM,iBAAiB,CAAC;AAG/C,0BAA0B;AAC1B,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAGvB,aAAa;AACb,OAAO,EAAC,uBAAuB,EAAE,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,aAAa,CAAC;AAGxF,QAAQ;AACR,OAAO,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/operations/code/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AAEH,sBAAsB;AACtB,OAAO,EAAC,cAAc,EAAC,MAAM,iBAAiB,CAAC;AAG/C,0BAA0B;AAC1B,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAGvB,aAAa;AACb,OAAO,EAAC,uBAAuB,EAAE,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,aAAa,CAAC;AAGxF,WAAW;AACX,OAAO,EAAC,kBAAkB,EAAC,MAAM,eAAe,CAAC;AAGjD,QAAQ;AACR,OAAO,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC"}
@@ -6,6 +6,8 @@ import { type JobExecution, type WaitForJobOptions } from './run.js';
6
6
  export interface SiteArchiveImportOptions {
7
7
  /** Keep archive on instance after import (default: false) */
8
8
  keepArchive?: boolean;
9
+ /** Whether to wait for job completion (default: true) */
10
+ wait?: boolean;
9
11
  /** Wait options for job completion */
10
12
  waitOptions?: WaitForJobOptions;
11
13
  }
@@ -70,7 +70,7 @@ const EXPORT_JOB_ID = 'sfcc-site-archive-export';
70
70
  */
71
71
  export async function siteArchiveImport(instance, target, options = {}) {
72
72
  const logger = getLogger();
73
- const { keepArchive = false, waitOptions, archiveName } = options;
73
+ const { keepArchive = false, wait = true, waitOptions, archiveName } = options;
74
74
  let zipFilename;
75
75
  let needsUpload = true;
76
76
  let archiveContent;
@@ -154,32 +154,34 @@ export async function siteArchiveImport(instance, target, options = {}) {
154
154
  execution = data;
155
155
  }
156
156
  logger.debug({ jobId: IMPORT_JOB_ID, executionId: execution.id }, `Import job started: ${execution.id}`);
157
- // Wait for completion
158
- try {
159
- execution = await waitForJob(instance, IMPORT_JOB_ID, execution.id, waitOptions);
160
- }
161
- catch (error) {
162
- if (error instanceof JobExecutionError) {
163
- // Try to get log file
164
- try {
165
- const log = await getJobLog(instance, error.execution);
166
- logger.error({ jobId: IMPORT_JOB_ID, logFile: error.execution.log_file_path, log }, `Job log:\n${log}`);
167
- }
168
- catch {
169
- logger.error({ jobId: IMPORT_JOB_ID }, 'Could not retrieve job log');
157
+ if (wait) {
158
+ // Wait for completion
159
+ try {
160
+ execution = await waitForJob(instance, IMPORT_JOB_ID, execution.id, waitOptions);
161
+ }
162
+ catch (error) {
163
+ if (error instanceof JobExecutionError) {
164
+ // Try to get log file
165
+ try {
166
+ const log = await getJobLog(instance, error.execution);
167
+ logger.error({ jobId: IMPORT_JOB_ID, logFile: error.execution.log_file_path, log }, `Job log:\n${log}`);
168
+ }
169
+ catch {
170
+ logger.error({ jobId: IMPORT_JOB_ID }, 'Could not retrieve job log');
171
+ }
170
172
  }
173
+ throw error;
174
+ }
175
+ // Clean up archive if not keeping
176
+ if (!keepArchive && needsUpload) {
177
+ await instance.webdav.delete(uploadPath);
178
+ logger.debug({ path: uploadPath }, `Archive deleted: ${uploadPath}`);
171
179
  }
172
- throw error;
173
- }
174
- // Clean up archive if not keeping
175
- if (!keepArchive && needsUpload) {
176
- await instance.webdav.delete(uploadPath);
177
- logger.debug({ path: uploadPath }, `Archive deleted: ${uploadPath}`);
178
180
  }
179
181
  return {
180
182
  execution,
181
183
  archiveFilename: zipFilename,
182
- archiveKept: keepArchive,
184
+ archiveKept: wait ? keepArchive : true,
183
185
  };
184
186
  }
185
187
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"site-archive.js","sourceRoot":"","sources":["../../../../src/operations/jobs/site-archive.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"site-archive.js","sourceRoot":"","sources":["../../../../src/operations/jobs/site-archive.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,8 @@ import { getLogger } from '../logging/logger.js';
11
11
  const GITHUB_REPO = 'SalesforceCommerceCloud/b2c-developer-tooling';
12
12
  const GITHUB_API_BASE = 'https://api.github.com';
13
13
  const GITHUB_DOWNLOAD_BASE = 'https://github.com';
14
+ const GITHUB_RAW_BASE = 'https://raw.githubusercontent.com';
15
+ const LATEST_VERSION_CACHE_TTL_MS = 60 * 60 * 1000; // 1 hour
14
16
  /**
15
17
  * Asset filename patterns for skill archives.
16
18
  */
@@ -19,19 +21,115 @@ const ASSET_NAMES = {
19
21
  'b2c-cli': 'b2c-cli-skills.zip',
20
22
  };
21
23
  /**
22
- * Build direct download URL for a release asset.
23
- * These URLs don't require API calls and avoid rate limiting.
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}`;
36
+ }
37
+ /**
38
+ * File path for the resolved-latest-version cache.
39
+ */
40
+ function getLatestVersionCachePath() {
41
+ return path.join(getCacheDir(), '.latest-version.json');
42
+ }
43
+ /**
44
+ * Read a cached "latest" version if still fresh (1-hour TTL).
45
+ */
46
+ function readLatestVersionCache() {
47
+ try {
48
+ const p = getLatestVersionCachePath();
49
+ if (!fs.existsSync(p))
50
+ return null;
51
+ const entry = JSON.parse(fs.readFileSync(p, 'utf-8'));
52
+ const age = Date.now() - new Date(entry.resolvedAt).getTime();
53
+ if (age > LATEST_VERSION_CACHE_TTL_MS)
54
+ return null;
55
+ return entry.version;
56
+ }
57
+ catch {
58
+ return null;
59
+ }
60
+ }
61
+ function writeLatestVersionCache(version) {
62
+ try {
63
+ const p = getLatestVersionCachePath();
64
+ fs.mkdirSync(path.dirname(p), { recursive: true });
65
+ fs.writeFileSync(p, JSON.stringify({ version, resolvedAt: new Date().toISOString() }));
66
+ }
67
+ catch {
68
+ // Caching is best-effort
69
+ }
70
+ }
71
+ /**
72
+ * Detect whether a fetch response is an unauthenticated GitHub rate-limit.
73
+ */
74
+ function isRateLimited(response) {
75
+ if (response.status !== 403 && response.status !== 429)
76
+ return false;
77
+ const remaining = response.headers.get('x-ratelimit-remaining');
78
+ return remaining === '0' || response.status === 429;
79
+ }
80
+ /**
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.
24
89
  *
25
- * @param version - 'latest' or specific version tag
26
- * @param assetName - Name of the asset file
27
- * @returns Direct download URL
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).
28
93
  */
29
- function getDirectDownloadUrl(version, assetName) {
30
- if (version === 'latest') {
31
- return `${GITHUB_DOWNLOAD_BASE}/${GITHUB_REPO}/releases/latest/download/${assetName}`;
94
+ async function resolveLatestVersion() {
95
+ const logger = getLogger();
96
+ const cached = readLatestVersionCache();
97
+ if (cached) {
98
+ logger.debug({ version: cached }, 'Using cached latest version');
99
+ return cached;
32
100
  }
33
- const tag = version.startsWith('v') ? version : `v${version}`;
34
- return `${GITHUB_DOWNLOAD_BASE}/${GITHUB_REPO}/releases/download/${tag}/${assetName}`;
101
+ // Primary GitHub REST API with asset filtering
102
+ try {
103
+ const releases = await listReleases(30);
104
+ if (releases.length > 0) {
105
+ const version = releases[0].version;
106
+ writeLatestVersionCache(version);
107
+ return version;
108
+ }
109
+ logger.warn('GitHub API returned no releases with skills artifacts; falling back to main branch');
110
+ }
111
+ catch (err) {
112
+ const isRateLimit = err instanceof Error && /rate.?limit|403|429/i.test(err.message);
113
+ if (isRateLimit) {
114
+ logger.warn({ err: err.message }, 'GitHub API rate-limited; falling back to main branch for version resolution');
115
+ }
116
+ else {
117
+ logger.warn({ err: err.message }, 'GitHub API unavailable; falling back to main branch for version resolution');
118
+ }
119
+ }
120
+ // Fallback — read skills/package.json from main via raw.githubusercontent.com
121
+ const rawUrl = `${GITHUB_RAW_BASE}/${GITHUB_REPO}/main/skills/package.json`;
122
+ logger.debug({ url: rawUrl }, 'Fetching version from raw.githubusercontent.com');
123
+ const response = await fetch(rawUrl, { headers: { 'User-Agent': 'b2c-cli' } });
124
+ if (!response.ok) {
125
+ throw new Error(`Unable to resolve latest skills version: raw fetch failed with ${response.status} ${response.statusText}`);
126
+ }
127
+ const data = (await response.json());
128
+ if (!data.version) {
129
+ throw new Error('Unable to resolve latest skills version: skills/package.json has no version field');
130
+ }
131
+ writeLatestVersionCache(data.version);
132
+ return data.version;
35
133
  }
36
134
  /**
37
135
  * Get the cache directory for skills.
@@ -67,9 +165,22 @@ function parseRelease(release) {
67
165
  */
68
166
  export async function getRelease(version = 'latest') {
69
167
  const logger = getLogger();
70
- const endpoint = version === 'latest'
71
- ? `${GITHUB_API_BASE}/repos/${GITHUB_REPO}/releases/latest`
72
- : `${GITHUB_API_BASE}/repos/${GITHUB_REPO}/releases/tags/${version.startsWith('v') ? version : `v${version}`}`;
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.
171
+ let tag;
172
+ if (version === 'latest') {
173
+ const resolved = await resolveLatestVersion();
174
+ tag = pluginsTag(resolved);
175
+ }
176
+ else if (/^b2c-agent-plugins@/.test(version) || version.includes('@')) {
177
+ // Caller passed an explicit tag (including other packages' tags, for tests/internal use).
178
+ tag = version;
179
+ }
180
+ else {
181
+ tag = pluginsTag(version);
182
+ }
183
+ const endpoint = `${GITHUB_API_BASE}/repos/${GITHUB_REPO}/releases/tags/${encodeURIComponent(tag)}`;
73
184
  logger.debug({ endpoint }, 'Fetching release info');
74
185
  const response = await fetch(endpoint, {
75
186
  headers: {
@@ -79,7 +190,10 @@ export async function getRelease(version = 'latest') {
79
190
  });
80
191
  if (!response.ok) {
81
192
  if (response.status === 404) {
82
- throw new Error(`Release not found: ${version}`);
193
+ throw new Error(`Release not found: ${tag}`);
194
+ }
195
+ if (isRateLimited(response)) {
196
+ throw new Error(`GitHub API rate-limited while fetching release ${tag}`);
83
197
  }
84
198
  throw new Error(`GitHub API error: ${response.status} ${response.statusText}`);
85
199
  }
@@ -130,17 +244,6 @@ export function getCachedArtifact(version, skillSet) {
130
244
  return null;
131
245
  }
132
246
  }
133
- /**
134
- * Extract version tag from a GitHub release download URL.
135
- * URLs follow pattern: .../releases/download/{tag}/...
136
- *
137
- * @param url - The final URL after redirects
138
- * @returns Version tag or null if not found
139
- */
140
- function extractVersionFromUrl(url) {
141
- const match = url.match(/\/releases\/download\/([^/]+)\//);
142
- return match ? match[1] : null;
143
- }
144
247
  /**
145
248
  * Download and extract skills artifact.
146
249
  * Uses direct download URLs to avoid GitHub API rate limits.
@@ -154,17 +257,21 @@ export async function downloadSkillsArtifact(skillSet, options = {}) {
154
257
  const logger = getLogger();
155
258
  const { version = 'latest', forceDownload = false } = options;
156
259
  const assetName = ASSET_NAMES[skillSet];
157
- // For specific versions, check cache first (before any network calls)
158
- if (version !== 'latest' && !forceDownload) {
159
- const versionTag = version.startsWith('v') ? version : `v${version}`;
160
- const cached = getCachedArtifact(versionTag, 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
266
+ if (!forceDownload) {
267
+ const cached = getCachedArtifact(resolvedVersion, skillSet);
161
268
  if (cached && fs.existsSync(cached.path)) {
162
- logger.debug({ version: versionTag, skillSet, path: cached.path }, 'Using cached skills');
269
+ logger.debug({ version: resolvedVersion, skillSet, path: cached.path }, 'Using cached skills');
163
270
  return cached.path;
164
271
  }
165
272
  }
166
- // Build direct download URL (avoids API rate limits)
167
- const downloadUrl = getDirectDownloadUrl(version, assetName);
273
+ // Download from the CDN no API rate limit on this path.
274
+ const downloadUrl = buildDownloadUrl(tag, assetName);
168
275
  logger.debug({ url: downloadUrl, skillSet }, 'Downloading skills artifact');
169
276
  // Download artifact - GitHub will redirect to the actual file
170
277
  const response = await fetch(downloadUrl, {
@@ -175,28 +282,15 @@ export async function downloadSkillsArtifact(skillSet, options = {}) {
175
282
  });
176
283
  if (!response.ok) {
177
284
  if (response.status === 404) {
178
- throw new Error(`Skills artifact '${assetName}' not found for ${version === 'latest' ? 'latest release' : `version ${version}`}`);
285
+ throw new Error(`Skills artifact '${assetName}' not found for release ${tag}`);
179
286
  }
180
287
  throw new Error(`Failed to download skills: ${response.status} ${response.statusText}`);
181
288
  }
182
- // Extract actual version from the final URL (after redirects)
183
- const actualVersion = extractVersionFromUrl(response.url) || version;
184
- // Check cache for the resolved version (for 'latest' which we now know the real tag)
185
- // Only use cache if we actually resolved a real version — if actualVersion is still
186
- // 'latest' (e.g., redirect URL didn't contain the tag), we must re-extract since
187
- // we can't tell if the cached 'latest' is stale.
188
- if (version === 'latest' && actualVersion !== 'latest' && !forceDownload) {
189
- const cached = getCachedArtifact(actualVersion, skillSet);
190
- if (cached && fs.existsSync(cached.path)) {
191
- logger.debug({ version: actualVersion, skillSet, path: cached.path }, 'Using cached skills (resolved latest)');
192
- return cached.path;
193
- }
194
- }
195
289
  const zipBuffer = Buffer.from(await response.arrayBuffer());
196
- logger.debug({ size: zipBuffer.length, version: actualVersion }, 'Downloaded skills archive');
290
+ logger.debug({ size: zipBuffer.length, version: resolvedVersion }, 'Downloaded skills archive');
197
291
  // Extract to cache directory
198
292
  const cacheDir = options.cacheDir || getCacheDir();
199
- const extractDir = path.join(cacheDir, actualVersion, skillSet);
293
+ const extractDir = path.join(cacheDir, resolvedVersion, skillSet);
200
294
  // Clean existing extraction if present
201
295
  if (fs.existsSync(extractDir)) {
202
296
  await fs.promises.rm(extractDir, { recursive: true });
@@ -222,7 +316,7 @@ export async function downloadSkillsArtifact(skillSet, options = {}) {
222
316
  logger.debug({ extractDir, fileCount: extractedCount }, 'Extracted skills');
223
317
  // Write cache manifest
224
318
  const manifest = {
225
- version: actualVersion,
319
+ version: resolvedVersion,
226
320
  path: extractDir,
227
321
  downloadedAt: new Date().toISOString(),
228
322
  };