agent-cards 0.5.58 → 0.5.59
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.
- package/dist/src/commands/update.d.ts.map +1 -1
- package/dist/src/commands/update.js +9 -3
- package/dist/src/commands/update.js.map +1 -1
- package/dist/src/lib/update.d.ts +20 -2
- package/dist/src/lib/update.d.ts.map +1 -1
- package/dist/src/lib/update.js +147 -51
- package/dist/src/lib/update.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/update.ts"],"names":[],"mappings":"AAIA,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/update.ts"],"names":[],"mappings":"AAIA,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CA6B5C"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import ora from 'ora';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
|
-
import { compareSemver, fetchLatestFromNpm, performSelfUpdate, getCliVersion } from '../lib/update.js';
|
|
3
|
+
import { compareSemver, fetchLatestFromNpm, performSelfUpdate, getCliVersion, readInstalledVersion } from '../lib/update.js';
|
|
4
4
|
export async function update() {
|
|
5
5
|
const currentVersion = getCliVersion();
|
|
6
6
|
const spinner = ora('Checking for updates…').start();
|
|
@@ -16,8 +16,14 @@ export async function update() {
|
|
|
16
16
|
spinner.text = `Updating agent-cards v${currentVersion} → v${latest}…`;
|
|
17
17
|
const { success, error } = performSelfUpdate();
|
|
18
18
|
if (success) {
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
const installed = readInstalledVersion();
|
|
20
|
+
if (installed && compareSemver(installed, latest) < 0) {
|
|
21
|
+
spinner.warn(`Installed v${latest}, but this shell still resolves v${installed} — another install is shadowing it (check \`which agent-cards\`).`);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
spinner.succeed(`Updated to v${latest}`);
|
|
25
|
+
console.log(chalk.dim(' Restart your terminal or run a new command to use the updated version.'));
|
|
26
|
+
}
|
|
21
27
|
}
|
|
22
28
|
else {
|
|
23
29
|
spinner.fail(`Update failed: ${error}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7H,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,MAAM,cAAc,GAAG,aAAa,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,GAAG,CAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC;IAErD,MAAM,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;QAC7E,OAAO;IACT,CAAC;IAED,IAAI,aAAa,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,OAAO,CAAC,OAAO,CAAC,kCAAkC,cAAc,GAAG,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IAED,OAAO,CAAC,IAAI,GAAG,yBAAyB,cAAc,OAAO,MAAM,GAAG,CAAC;IAEvE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAC/C,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,oBAAoB,EAAE,CAAC;QACzC,IAAI,SAAS,IAAI,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,cAAc,MAAM,oCAAoC,SAAS,mEAAmE,CAAC,CAAC;QACrJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,OAAO,CAAC,eAAe,MAAM,EAAE,CAAC,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC,CAAC;QACrG,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC"}
|
package/dist/src/lib/update.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ interface VersionCache {
|
|
|
3
3
|
min: string;
|
|
4
4
|
checkedAt: number;
|
|
5
5
|
}
|
|
6
|
-
type UpdateAction = 'none' | '
|
|
6
|
+
type UpdateAction = 'none' | 'auto-update' | 'force-block';
|
|
7
7
|
interface UpdateCheckResult {
|
|
8
8
|
action: UpdateAction;
|
|
9
9
|
latest: string;
|
|
@@ -17,11 +17,29 @@ export declare function cacheVersionInfo(latest: string, min: string): void;
|
|
|
17
17
|
export declare function getCachedVersionInfo(): VersionCache | null;
|
|
18
18
|
export declare function fetchLatestFromNpm(): Promise<string | null>;
|
|
19
19
|
export declare function checkForUpdate(currentVersion: string, cache: VersionCache): UpdateCheckResult;
|
|
20
|
-
|
|
20
|
+
interface InstallOwner {
|
|
21
|
+
kind: 'npm' | 'pnpm' | 'yarn' | 'bun' | 'npx' | 'unknown';
|
|
22
|
+
/** Command that updates this install in place; absent when we can't safely update it. */
|
|
23
|
+
updateCmd?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Works out which package manager owns this install by resolving the real path
|
|
27
|
+
* of the running script — updating with the wrong one leaves a second, shadowed
|
|
28
|
+
* copy on PATH. npm_config_user_agent is only set when running under a package
|
|
29
|
+
* manager, so it can't be trusted from a plain terminal. Order matters below:
|
|
30
|
+
* the pnpm/bun/yarn/npx global dirs all contain node_modules segments too.
|
|
31
|
+
*/
|
|
32
|
+
export declare function detectInstallOwner(binPath?: string): InstallOwner;
|
|
21
33
|
export declare function performSelfUpdate(): {
|
|
22
34
|
success: boolean;
|
|
23
35
|
error?: string;
|
|
24
36
|
};
|
|
37
|
+
/**
|
|
38
|
+
* Version of the agent-cards package that process.argv[1] resolves to right
|
|
39
|
+
* now. Re-reading this after a self-update tells us whether the update landed
|
|
40
|
+
* on the copy this shell actually runs, or on a different (shadowed) install.
|
|
41
|
+
*/
|
|
42
|
+
export declare function readInstalledVersion(): string | null;
|
|
25
43
|
export declare function handleUpdateCheck(currentVersion: string): Promise<void>;
|
|
26
44
|
export {};
|
|
27
45
|
//# sourceMappingURL=update.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/lib/update.ts"],"names":[],"mappings":"AAQA,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,KAAK,YAAY,GAAG,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/lib/update.ts"],"names":[],"mappings":"AAQA,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,KAAK,YAAY,GAAG,MAAM,GAAG,aAAa,GAAG,aAAa,CAAC;AAE3D,UAAU,iBAAiB;IACzB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAMD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEnD;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAID,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAU1D;AAID,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAIlE;AAED,wBAAgB,oBAAoB,IAAI,YAAY,GAAG,IAAI,CAO1D;AAcD,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAWjE;AAID,wBAAgB,cAAc,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,iBAAiB,CAe7F;AAMD,UAAU,YAAY;IACpB,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;IAC1D,yFAAyF;IACzF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,MAA8B,GAAG,YAAY,CAkBxF;AAqBD,wBAAgB,iBAAiB,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA4BxE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAepD;AAoDD,wBAAsB,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqD7E"}
|
package/dist/src/lib/update.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs';
|
|
2
|
-
import { join } from 'path';
|
|
3
|
-
import { execSync } from 'child_process';
|
|
1
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync, realpathSync } from 'fs';
|
|
2
|
+
import { join, dirname } from 'path';
|
|
3
|
+
import { execSync, spawnSync } from 'child_process';
|
|
4
4
|
import { CONFIG_DIR } from './config.js';
|
|
5
5
|
const VERSION_CACHE_FILE = join(CONFIG_DIR, 'version-check.json');
|
|
6
6
|
const CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
@@ -76,30 +76,74 @@ export function checkForUpdate(currentVersion, cache) {
|
|
|
76
76
|
if (compareSemver(currentVersion, latest) >= 0) {
|
|
77
77
|
return { action: 'none', latest, min };
|
|
78
78
|
}
|
|
79
|
-
// Outdated —
|
|
80
|
-
|
|
81
|
-
return { action: 'auto-update', latest, min };
|
|
82
|
-
}
|
|
83
|
-
return { action: 'notify', latest, min };
|
|
79
|
+
// Outdated — update in place before running the command (fly-style)
|
|
80
|
+
return { action: 'auto-update', latest, min };
|
|
84
81
|
}
|
|
85
82
|
// ── Self-update ─────────────────────────────────────────────────────
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
83
|
+
const FALLBACK_UPDATE_CMD = 'npm install -g agent-cards@latest';
|
|
84
|
+
/**
|
|
85
|
+
* Works out which package manager owns this install by resolving the real path
|
|
86
|
+
* of the running script — updating with the wrong one leaves a second, shadowed
|
|
87
|
+
* copy on PATH. npm_config_user_agent is only set when running under a package
|
|
88
|
+
* manager, so it can't be trusted from a plain terminal. Order matters below:
|
|
89
|
+
* the pnpm/bun/yarn/npx global dirs all contain node_modules segments too.
|
|
90
|
+
*/
|
|
91
|
+
export function detectInstallOwner(binPath = process.argv[1] ?? '') {
|
|
92
|
+
let real;
|
|
93
|
+
try {
|
|
94
|
+
real = realpathSync(binPath).split('\\').join('/');
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return { kind: 'unknown' };
|
|
98
|
+
}
|
|
99
|
+
if (real.includes('/_npx/'))
|
|
100
|
+
return { kind: 'npx' };
|
|
101
|
+
if (real.includes('/.bun/'))
|
|
102
|
+
return { kind: 'bun', updateCmd: 'bun add -g agent-cards@latest' };
|
|
103
|
+
const pnpmHome = (process.env.PNPM_HOME ?? '').split('\\').join('/');
|
|
104
|
+
if (real.includes('/pnpm/') || (pnpmHome && real.startsWith(pnpmHome))) {
|
|
105
|
+
return { kind: 'pnpm', updateCmd: 'pnpm add -g agent-cards@latest' };
|
|
106
|
+
}
|
|
107
|
+
if (real.includes('/yarn/global/'))
|
|
108
|
+
return { kind: 'yarn', updateCmd: 'yarn global add agent-cards@latest' };
|
|
109
|
+
if (real.includes('/Cellar/'))
|
|
110
|
+
return { kind: 'unknown' }; // Homebrew formula owns this copy
|
|
111
|
+
if (real.includes('/node_modules/'))
|
|
112
|
+
return { kind: 'npm', updateCmd: FALLBACK_UPDATE_CMD };
|
|
113
|
+
return { kind: 'unknown' }; // dev checkout or an install method we don't recognize
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* A node_modules path alone doesn't prove the npm on PATH owns this copy —
|
|
117
|
+
* with nvm switches or embedded runtimes, `npm i -g` would install a second,
|
|
118
|
+
* shadowed copy elsewhere instead of updating this one. Returns the refusal
|
|
119
|
+
* reason, or null when the install is safe to update in place.
|
|
120
|
+
*/
|
|
121
|
+
function verifyNpmOwnership() {
|
|
122
|
+
try {
|
|
123
|
+
const prefix = realpathSync(execSync('npm prefix -g', { timeout: 10_000, stdio: 'pipe' }).toString().trim()).split('\\').join('/');
|
|
124
|
+
const real = realpathSync(process.argv[1] ?? '').split('\\').join('/');
|
|
125
|
+
if (!real.startsWith(prefix + '/')) {
|
|
126
|
+
return `the npm on PATH manages ${prefix}, but this CLI runs from a different install — update it with the tool that installed it`;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch { /* can't verify — proceed; the post-install version check still catches shadows */ }
|
|
130
|
+
return null;
|
|
95
131
|
}
|
|
96
132
|
export function performSelfUpdate() {
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
133
|
+
const owner = detectInstallOwner();
|
|
134
|
+
if (owner.kind === 'npx') {
|
|
135
|
+
return { success: false, error: 'running via npx — use `npx agent-cards@latest` to get the newest version' };
|
|
136
|
+
}
|
|
137
|
+
if (!owner.updateCmd) {
|
|
138
|
+
return { success: false, error: `could not determine how this CLI was installed — reinstall with: ${FALLBACK_UPDATE_CMD}` };
|
|
139
|
+
}
|
|
140
|
+
if (owner.kind === 'npm') {
|
|
141
|
+
const ownershipError = verifyNpmOwnership();
|
|
142
|
+
if (ownershipError)
|
|
143
|
+
return { success: false, error: ownershipError };
|
|
144
|
+
}
|
|
101
145
|
try {
|
|
102
|
-
execSync(
|
|
146
|
+
execSync(owner.updateCmd, { timeout: 120_000, stdio: 'pipe' });
|
|
103
147
|
return { success: true };
|
|
104
148
|
}
|
|
105
149
|
catch (err) {
|
|
@@ -107,16 +151,86 @@ export function performSelfUpdate() {
|
|
|
107
151
|
if (stderr.includes('EACCES')) {
|
|
108
152
|
return {
|
|
109
153
|
success: false,
|
|
110
|
-
error: `Permission denied. Try: sudo ${
|
|
154
|
+
error: `Permission denied. Try: sudo ${owner.updateCmd}`,
|
|
111
155
|
};
|
|
112
156
|
}
|
|
113
157
|
return { success: false, error: stderr.slice(0, 200) };
|
|
114
158
|
}
|
|
115
159
|
}
|
|
160
|
+
/**
|
|
161
|
+
* Version of the agent-cards package that process.argv[1] resolves to right
|
|
162
|
+
* now. Re-reading this after a self-update tells us whether the update landed
|
|
163
|
+
* on the copy this shell actually runs, or on a different (shadowed) install.
|
|
164
|
+
*/
|
|
165
|
+
export function readInstalledVersion() {
|
|
166
|
+
try {
|
|
167
|
+
let dir = dirname(realpathSync(process.argv[1] ?? ''));
|
|
168
|
+
for (let i = 0; i < 5; i++) {
|
|
169
|
+
const pkgPath = join(dir, 'package.json');
|
|
170
|
+
if (existsSync(pkgPath)) {
|
|
171
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
|
|
172
|
+
if (pkg.name === 'agent-cards')
|
|
173
|
+
return pkg.version ?? null;
|
|
174
|
+
}
|
|
175
|
+
const parent = dirname(dir);
|
|
176
|
+
if (parent === dir)
|
|
177
|
+
break;
|
|
178
|
+
dir = parent;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
catch { /* fall through */ }
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
/** Re-runs the current command on the freshly installed version and exits with its code. */
|
|
185
|
+
function reexecCurrentCommand() {
|
|
186
|
+
// Let the child own Ctrl+C — the parent just waits and relays the exit code.
|
|
187
|
+
process.on('SIGINT', () => { });
|
|
188
|
+
process.on('SIGTERM', () => { });
|
|
189
|
+
const result = spawnSync(process.execPath, [process.argv[1], ...process.argv.slice(2)], {
|
|
190
|
+
stdio: 'inherit',
|
|
191
|
+
env: { ...process.env, AGENT_CARDS_REEXECED: '1' },
|
|
192
|
+
});
|
|
193
|
+
if (result.status !== null)
|
|
194
|
+
process.exit(result.status);
|
|
195
|
+
process.exit(result.signal ? 130 : result.error ? 1 : 0);
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* fly-style transparent update: announce, install in place, verify the copy
|
|
199
|
+
* this shell resolves actually changed, then re-exec the original command on
|
|
200
|
+
* the new version (never returns). Returns the failure reason otherwise.
|
|
201
|
+
*/
|
|
202
|
+
function tryAutoUpdate(currentVersion, latest) {
|
|
203
|
+
// Only announce when we can actually install — un-updatable installs
|
|
204
|
+
// (dev checkouts, npx, brew) get a one-line nudge instead of a false start.
|
|
205
|
+
const owner = detectInstallOwner();
|
|
206
|
+
if (owner.kind === 'npx') {
|
|
207
|
+
return `update available (${currentVersion} → ${latest}) — use \`npx agent-cards@latest\` to get it`;
|
|
208
|
+
}
|
|
209
|
+
if (!owner.updateCmd) {
|
|
210
|
+
return `update available (${currentVersion} → ${latest}) — this install isn't package-manager-managed; update it with the tool that installed it, or reinstall with: ${FALLBACK_UPDATE_CMD}`;
|
|
211
|
+
}
|
|
212
|
+
if (owner.kind === 'npm') {
|
|
213
|
+
const ownershipError = verifyNpmOwnership();
|
|
214
|
+
if (ownershipError) {
|
|
215
|
+
return `update available (${currentVersion} → ${latest}) — ${ownershipError}`;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
process.stderr.write(`Automatically updating ${currentVersion} -> ${latest}.\n`);
|
|
219
|
+
const { success, error } = performSelfUpdate();
|
|
220
|
+
if (!success)
|
|
221
|
+
return `auto-update failed: ${error ?? 'unknown error'}`;
|
|
222
|
+
const installed = readInstalledVersion();
|
|
223
|
+
if (installed && compareSemver(installed, currentVersion) <= 0) {
|
|
224
|
+
return `auto-update failed: updated a different copy — this shell still resolves v${currentVersion} (check \`which agent-cards\`)`;
|
|
225
|
+
}
|
|
226
|
+
reexecCurrentCommand();
|
|
227
|
+
}
|
|
116
228
|
// ── Orchestrator ────────────────────────────────────────────────────
|
|
117
229
|
export async function handleUpdateCheck(currentVersion) {
|
|
118
230
|
if (isCI())
|
|
119
231
|
return;
|
|
232
|
+
if (process.env.AGENT_CARDS_REEXECED)
|
|
233
|
+
return; // this run IS the post-update re-exec
|
|
120
234
|
let cache = getCachedVersionInfo();
|
|
121
235
|
// If cache is stale or missing, try npm registry as fallback
|
|
122
236
|
if (!cache || (Date.now() - cache.checkedAt > CACHE_TTL_MS)) {
|
|
@@ -133,44 +247,26 @@ export async function handleUpdateCheck(currentVersion) {
|
|
|
133
247
|
switch (result.action) {
|
|
134
248
|
case 'none':
|
|
135
249
|
return;
|
|
136
|
-
case 'notify': {
|
|
137
|
-
// Print after command completes — use process.on('exit') so it appears last
|
|
138
|
-
const msg = `\n Update available: ${currentVersion} → ${result.latest}. Run: agent-cards update\n`;
|
|
139
|
-
process.on('exit', () => {
|
|
140
|
-
if (process.stdout.isTTY) {
|
|
141
|
-
process.stderr.write(msg);
|
|
142
|
-
}
|
|
143
|
-
else {
|
|
144
|
-
process.stderr.write(`agent-cards: update available ${currentVersion} → ${result.latest}\n`);
|
|
145
|
-
}
|
|
146
|
-
});
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
250
|
case 'auto-update': {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
}
|
|
155
|
-
return;
|
|
251
|
+
// On success this re-execs the command on the new version and never returns.
|
|
252
|
+
const failure = tryAutoUpdate(currentVersion, result.latest);
|
|
253
|
+
process.stderr.write(`agent-cards: ${failure}\n`);
|
|
254
|
+
return; // never block normal usage on a failed update
|
|
156
255
|
}
|
|
157
256
|
case 'force-block': {
|
|
257
|
+
const failure = tryAutoUpdate(currentVersion, result.latest);
|
|
158
258
|
if (isAgentCaller()) {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
if (!success) {
|
|
162
|
-
process.stderr.write(JSON.stringify({ error: 'cli_update_required', current: currentVersion, min: result.min, detail: error }) + '\n');
|
|
163
|
-
process.exit(1);
|
|
164
|
-
}
|
|
165
|
-
return;
|
|
259
|
+
process.stderr.write(JSON.stringify({ error: 'cli_update_required', current: currentVersion, min: result.min, detail: failure }) + '\n');
|
|
260
|
+
process.exit(1);
|
|
166
261
|
}
|
|
167
262
|
// Human — block with instructions
|
|
168
|
-
const
|
|
263
|
+
const cmd = detectInstallOwner().updateCmd ?? FALLBACK_UPDATE_CMD;
|
|
169
264
|
console.error('');
|
|
170
265
|
console.error(` This CLI version (v${currentVersion}) is no longer supported.`);
|
|
171
266
|
console.error(` Minimum required: v${result.min}`);
|
|
172
267
|
console.error('');
|
|
173
|
-
console.error(`
|
|
268
|
+
console.error(` Auto-update failed: ${failure}`);
|
|
269
|
+
console.error(` Run: ${cmd}`);
|
|
174
270
|
console.error('');
|
|
175
271
|
process.exit(1);
|
|
176
272
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/lib/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/lib/update.ts"],"names":[],"mappings":"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"}
|