@agent-deck/cli 1.10.3 → 1.10.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"npm-prefix-install.d.ts","sourceRoot":"","sources":["../../src/managed/npm-prefix-install.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,YAAY,oBAAoB,CAAC;AAE9C,MAAM,MAAM,QAAQ,GAAG,CACrB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,KACtB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAiB/C,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,QAAQ,CAAA;CAAO,GACpC,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAwBnE"}
1
+ {"version":3,"file":"npm-prefix-install.d.ts","sourceRoot":"","sources":["../../src/managed/npm-prefix-install.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,YAAY,oBAAoB,CAAC;AAE9C,MAAM,MAAM,QAAQ,GAAG,CACrB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,KACtB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAiC/C,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,QAAQ,CAAA;CAAO,GACpC,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA+CnE"}
@@ -7,7 +7,10 @@ exports.PACKAGE_NAME = void 0;
7
7
  exports.installCliVersionToPrefix = installCliVersionToPrefix;
8
8
  const node_child_process_1 = require("node:child_process");
9
9
  const node_fs_1 = __importDefault(require("node:fs"));
10
+ const node_path_1 = __importDefault(require("node:path"));
10
11
  const paths_1 = require("./paths");
12
+ const verify_install_1 = require("./verify-install");
13
+ const STALE_PARTIAL_MS = 60 * 60 * 1000;
11
14
  exports.PACKAGE_NAME = '@agent-deck/cli';
12
15
  const defaultNpmSpawn = (args, options) => new Promise((resolve) => {
13
16
  const child = (0, node_child_process_1.spawn)('npm', args, {
@@ -22,25 +25,63 @@ const defaultNpmSpawn = (args, options) => new Promise((resolve) => {
22
25
  child.on('error', (err) => resolve({ code: 1, stderr: err.message }));
23
26
  child.on('exit', (code) => resolve({ code: code ?? 1, stderr }));
24
27
  });
28
+ function removeStalePartials() {
29
+ for (const entry of node_fs_1.default.readdirSync((0, paths_1.versionsDir)(), { withFileTypes: true })) {
30
+ if (!entry.isDirectory() || !entry.name.startsWith('.partial-')) {
31
+ continue;
32
+ }
33
+ const full = node_path_1.default.join((0, paths_1.versionsDir)(), entry.name);
34
+ try {
35
+ if (Date.now() - node_fs_1.default.statSync(full).mtimeMs > STALE_PARTIAL_MS) {
36
+ node_fs_1.default.rmSync(full, { recursive: true, force: true });
37
+ }
38
+ }
39
+ catch {
40
+ // raced with another process cleaning up
41
+ }
42
+ }
43
+ }
25
44
  async function installCliVersionToPrefix(version, options = {}) {
26
45
  const npmSpawn = options.npmSpawn ?? defaultNpmSpawn;
27
46
  const partial = (0, paths_1.partialVersionDir)(version);
28
47
  const finalDir = (0, paths_1.versionDir)(version);
29
48
  node_fs_1.default.mkdirSync((0, paths_1.versionsDir)(), { recursive: true });
30
- node_fs_1.default.rmSync(partial, { recursive: true, force: true });
49
+ removeStalePartials();
31
50
  node_fs_1.default.mkdirSync(partial, { recursive: true });
51
+ const fail = (error) => {
52
+ node_fs_1.default.rmSync(partial, { recursive: true, force: true });
53
+ return { ok: false, error };
54
+ };
32
55
  const result = await npmSpawn(['install', '--prefix', partial, `${exports.PACKAGE_NAME}@${version}`], {});
33
56
  if (result.code !== 0) {
34
- node_fs_1.default.rmSync(partial, { recursive: true, force: true });
35
- return { ok: false, error: result.stderr.trim() || `npm install failed (exit ${result.code})` };
57
+ return fail(result.stderr.trim() || `npm install failed (exit ${result.code})`);
36
58
  }
37
59
  const entry = (0, paths_1.cliEntryInVersionDir)(partial);
38
60
  if (!node_fs_1.default.existsSync(entry)) {
39
- node_fs_1.default.rmSync(partial, { recursive: true, force: true });
40
- return { ok: false, error: `Install succeeded but missing CLI entry: ${entry}` };
61
+ return fail(`Install succeeded but missing CLI entry: ${entry}`);
62
+ }
63
+ const verified = (0, verify_install_1.verifyInstalledVersion)(partial);
64
+ if (!verified.ok) {
65
+ return fail(`Install verification failed (${verified.file}): ${verified.error}`);
66
+ }
67
+ // Another process may have finished the same version first; keep its copy if it is intact.
68
+ if (node_fs_1.default.existsSync(finalDir)) {
69
+ if ((0, verify_install_1.verifyInstalledVersion)(finalDir).ok) {
70
+ node_fs_1.default.rmSync(partial, { recursive: true, force: true });
71
+ return { ok: true, dir: finalDir };
72
+ }
73
+ node_fs_1.default.rmSync(finalDir, { recursive: true, force: true });
74
+ }
75
+ try {
76
+ node_fs_1.default.renameSync(partial, finalDir);
77
+ }
78
+ catch (err) {
79
+ if (node_fs_1.default.existsSync(finalDir) && (0, verify_install_1.verifyInstalledVersion)(finalDir).ok) {
80
+ node_fs_1.default.rmSync(partial, { recursive: true, force: true });
81
+ return { ok: true, dir: finalDir };
82
+ }
83
+ return fail(err instanceof Error ? err.message : String(err));
41
84
  }
42
- node_fs_1.default.rmSync(finalDir, { recursive: true, force: true });
43
- node_fs_1.default.renameSync(partial, finalDir);
44
85
  return { ok: true, dir: finalDir };
45
86
  }
46
87
  //# sourceMappingURL=npm-prefix-install.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"npm-prefix-install.js","sourceRoot":"","sources":["../../src/managed/npm-prefix-install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"npm-prefix-install.js","sourceRoot":"","sources":["../../src/managed/npm-prefix-install.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  export declare function agentDeckHome(): string;
2
2
  export declare function versionsDir(): string;
3
3
  export declare function versionDir(version: string): string;
4
- export declare function partialVersionDir(version: string): string;
4
+ /** Unique per install attempt so concurrent CLI processes never extract into the same directory. */
5
+ export declare function partialVersionDir(version: string, token?: string): string;
5
6
  export declare function currentLinkPath(): string;
6
7
  export declare function updateStatePath(): string;
7
8
  /** Override with AGENT_DECK_LOCAL_BIN for tests. */
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/managed/paths.ts"],"names":[],"mappings":"AAIA,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,oDAAoD;AACpD,wBAAgB,WAAW,IAAI,MAAM,CAMpC;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,wBAAwB,IAAI,MAAM,GAAG,IAAI,CAUxD"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/managed/paths.ts"],"names":[],"mappings":"AAKA,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,oGAAoG;AACpG,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAqD,GAAG,MAAM,CAErH;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,oDAAoD;AACpD,wBAAgB,WAAW,IAAI,MAAM,CAMpC;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,wBAAwB,IAAI,MAAM,GAAG,IAAI,CAUxD"}
@@ -13,6 +13,7 @@ exports.localBinDir = localBinDir;
13
13
  exports.localBinLauncherPath = localBinLauncherPath;
14
14
  exports.cliEntryInVersionDir = cliEntryInVersionDir;
15
15
  exports.resolveCurrentVersionDir = resolveCurrentVersionDir;
16
+ const node_crypto_1 = require("node:crypto");
16
17
  const node_fs_1 = __importDefault(require("node:fs"));
17
18
  const node_os_1 = __importDefault(require("node:os"));
18
19
  const node_path_1 = __importDefault(require("node:path"));
@@ -25,8 +26,9 @@ function versionsDir() {
25
26
  function versionDir(version) {
26
27
  return node_path_1.default.join(versionsDir(), version);
27
28
  }
28
- function partialVersionDir(version) {
29
- return node_path_1.default.join(versionsDir(), `.partial-${version}`);
29
+ /** Unique per install attempt so concurrent CLI processes never extract into the same directory. */
30
+ function partialVersionDir(version, token = `${process.pid}-${(0, node_crypto_1.randomBytes)(4).toString('hex')}`) {
31
+ return node_path_1.default.join(versionsDir(), `.partial-${version}-${token}`);
30
32
  }
31
33
  function currentLinkPath() {
32
34
  return node_path_1.default.join(agentDeckHome(), 'current');
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/managed/paths.ts"],"names":[],"mappings":";;;;;AAIA,sCAEC;AAED,kCAEC;AAED,gCAEC;AAED,8CAEC;AAED,0CAEC;AAED,0CAEC;AAGD,kCAMC;AAED,oDAEC;AAED,oDAEC;AAED,4DAUC;AAvDD,sDAAyB;AACzB,sDAAyB;AACzB,0DAA6B;AAE7B,SAAgB,aAAa;IAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;AACvF,CAAC;AAED,SAAgB,WAAW;IACzB,OAAO,mBAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,UAAU,CAAC,CAAC;AAChD,CAAC;AAED,SAAgB,UAAU,CAAC,OAAe;IACxC,OAAO,mBAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED,SAAgB,iBAAiB,CAAC,OAAe;IAC/C,OAAO,mBAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,YAAY,OAAO,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,SAAgB,eAAe;IAC7B,OAAO,mBAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,SAAS,CAAC,CAAC;AAC/C,CAAC;AAED,SAAgB,eAAe;IAC7B,OAAO,mBAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,mBAAmB,CAAC,CAAC;AACzD,CAAC;AAED,oDAAoD;AACpD,SAAgB,WAAW;IACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC;IAC1D,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAClD,CAAC;AAED,SAAgB,oBAAoB;IAClC,OAAO,mBAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,YAAY,CAAC,CAAC;AAChD,CAAC;AAED,SAAgB,oBAAoB,CAAC,GAAW;IAC9C,OAAO,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAChF,CAAC;AAED,SAAgB,wBAAwB;IACtC,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,IAAI,CAAC;QACH,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,iBAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/managed/paths.ts"],"names":[],"mappings":";;;;;AAKA,sCAEC;AAED,kCAEC;AAED,gCAEC;AAGD,8CAEC;AAED,0CAEC;AAED,0CAEC;AAGD,kCAMC;AAED,oDAEC;AAED,oDAEC;AAED,4DAUC;AAzDD,6CAA0C;AAC1C,sDAAyB;AACzB,sDAAyB;AACzB,0DAA6B;AAE7B,SAAgB,aAAa;IAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;AACvF,CAAC;AAED,SAAgB,WAAW;IACzB,OAAO,mBAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,UAAU,CAAC,CAAC;AAChD,CAAC;AAED,SAAgB,UAAU,CAAC,OAAe;IACxC,OAAO,mBAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED,oGAAoG;AACpG,SAAgB,iBAAiB,CAAC,OAAe,EAAE,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAA,yBAAW,EAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;IAC3G,OAAO,mBAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,YAAY,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,SAAgB,eAAe;IAC7B,OAAO,mBAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,SAAS,CAAC,CAAC;AAC/C,CAAC;AAED,SAAgB,eAAe;IAC7B,OAAO,mBAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,mBAAmB,CAAC,CAAC;AACzD,CAAC;AAED,oDAAoD;AACpD,SAAgB,WAAW;IACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC;IAC1D,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAClD,CAAC;AAED,SAAgB,oBAAoB;IAClC,OAAO,mBAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,YAAY,CAAC,CAAC;AAChD,CAAC;AAED,SAAgB,oBAAoB,CAAC,GAAW;IAC9C,OAAO,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAChF,CAAC;AAED,SAAgB,wBAAwB;IACtC,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,IAAI,CAAC;QACH,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,iBAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"updater.d.ts","sourceRoot":"","sources":["../../src/managed/updater.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAQjE,wBAAgB,qBAAqB,IAAI,OAAO,CAG/C;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAajE;AAED,wBAAgB,yBAAyB,IAAI,MAAM,GAAG,IAAI,CAMzD;AAED,wBAAgB,2BAA2B,IAAI;IAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CA0B1E;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,OAAO,yBAAyB,CAAA;CAAO,GAClE,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3C,cAAc,CAAC,EAAE,OAAO,yBAAyB,CAAC;CAC9C,GACL,IAAI,CAkCN;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAC/C,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3C,cAAc,CAAC,EAAE,OAAO,yBAAyB,CAAC;CACnD,GAAG;IAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAO/B"}
1
+ {"version":3,"file":"updater.d.ts","sourceRoot":"","sources":["../../src/managed/updater.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AASjE,wBAAgB,qBAAqB,IAAI,OAAO,CAG/C;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAajE;AAED,wBAAgB,yBAAyB,IAAI,MAAM,GAAG,IAAI,CAMzD;AAED,wBAAgB,2BAA2B,IAAI;IAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAqC1E;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,OAAO,yBAAyB,CAAA;CAAO,GAClE,OAAO,CAAC,IAAI,CAAC,CA+Bf;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3C,cAAc,CAAC,EAAE,OAAO,yBAAyB,CAAC;CAC9C,GACL,IAAI,CAkCN;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAC/C,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3C,cAAc,CAAC,EAAE,OAAO,yBAAyB,CAAC;CACnD,GAAG;IAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAO/B"}
@@ -18,6 +18,7 @@ const npm_prefix_install_1 = require("./npm-prefix-install");
18
18
  const paths_1 = require("./paths");
19
19
  const semver_1 = require("./semver");
20
20
  const update_state_1 = require("./update-state");
21
+ const verify_install_1 = require("./verify-install");
21
22
  const CACHE_TTL_MS = 24 * 60 * 60 * 1000;
22
23
  const REGISTRY_URL = 'https://registry.npmjs.org/@agent-deck/cli/latest';
23
24
  function isAutoupdaterDisabled() {
@@ -62,6 +63,16 @@ function maybeActivatePendingVersion() {
62
63
  if (!node_fs_1.default.existsSync((0, paths_1.cliEntryInVersionDir)(dir))) {
63
64
  return { activated: null };
64
65
  }
66
+ // Never point `current` at a version that cannot load; drop it so the next check re-downloads.
67
+ if (!(0, verify_install_1.verifyInstalledVersion)(dir).ok) {
68
+ node_fs_1.default.rmSync(dir, { recursive: true, force: true });
69
+ (0, update_state_1.writeUpdateState)({
70
+ checkedAt: state?.checkedAt ?? new Date().toISOString(),
71
+ latest: state?.latest ?? pending,
72
+ pendingVersion: null,
73
+ });
74
+ return { activated: null };
75
+ }
65
76
  (0, activate_1.activateVersion)(pending);
66
77
  (0, update_state_1.writeUpdateState)({
67
78
  checkedAt: state?.checkedAt ?? new Date().toISOString(),
@@ -75,6 +86,9 @@ async function ensurePendingDownload(latest, options = {}) {
75
86
  return;
76
87
  }
77
88
  const dir = (0, paths_1.versionDir)(latest);
89
+ if (node_fs_1.default.existsSync((0, paths_1.cliEntryInVersionDir)(dir)) && !(0, verify_install_1.verifyInstalledVersion)(dir).ok) {
90
+ node_fs_1.default.rmSync(dir, { recursive: true, force: true });
91
+ }
78
92
  if (node_fs_1.default.existsSync((0, paths_1.cliEntryInVersionDir)(dir))) {
79
93
  const prev = (0, update_state_1.readUpdateState)();
80
94
  (0, update_state_1.writeUpdateState)({
@@ -1 +1 @@
1
- {"version":3,"file":"updater.js","sourceRoot":"","sources":["../../src/managed/updater.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"updater.js","sourceRoot":"","sources":["../../src/managed/updater.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export type VerifyResult = {
2
+ ok: true;
3
+ } | {
4
+ ok: false;
5
+ file: string;
6
+ error: string;
7
+ };
8
+ /**
9
+ * Syntax-checks every built `@agent-deck/*` file in an installed version dir.
10
+ * A truncated file (interrupted or interleaved npm extraction) otherwise crashes the CLI at load
11
+ * time, after the `current` link already points at it.
12
+ */
13
+ export declare function verifyInstalledVersion(versionDirPath: string): VerifyResult;
14
+ //# sourceMappingURL=verify-install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-install.d.ts","sourceRoot":"","sources":["../../src/managed/verify-install.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAerF;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,YAAY,CAwB3E"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.verifyInstalledVersion = verifyInstalledVersion;
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const node_vm_1 = __importDefault(require("node:vm"));
10
+ const CJS_WRAPPER_PARAMS = ['exports', 'require', 'module', '__filename', '__dirname'];
11
+ function* walkJsFiles(dir) {
12
+ for (const entry of node_fs_1.default.readdirSync(dir, { withFileTypes: true })) {
13
+ const full = node_path_1.default.join(dir, entry.name);
14
+ if (entry.isDirectory()) {
15
+ yield* walkJsFiles(full);
16
+ }
17
+ else if (entry.isFile() && entry.name.endsWith('.js')) {
18
+ yield full;
19
+ }
20
+ }
21
+ }
22
+ /**
23
+ * Syntax-checks every built `@agent-deck/*` file in an installed version dir.
24
+ * A truncated file (interrupted or interleaved npm extraction) otherwise crashes the CLI at load
25
+ * time, after the `current` link already points at it.
26
+ */
27
+ function verifyInstalledVersion(versionDirPath) {
28
+ const scope = node_path_1.default.join(versionDirPath, 'node_modules', '@agent-deck');
29
+ let packages;
30
+ try {
31
+ packages = node_fs_1.default.readdirSync(scope, { withFileTypes: true });
32
+ }
33
+ catch (err) {
34
+ return { ok: false, file: scope, error: err instanceof Error ? err.message : String(err) };
35
+ }
36
+ for (const pkg of packages) {
37
+ const distDir = node_path_1.default.join(scope, pkg.name, 'dist');
38
+ if (!node_fs_1.default.existsSync(distDir)) {
39
+ continue;
40
+ }
41
+ for (const file of walkJsFiles(distDir)) {
42
+ try {
43
+ const source = node_fs_1.default.readFileSync(file, 'utf8').replace(/^#!.*/, '');
44
+ node_vm_1.default.compileFunction(source, CJS_WRAPPER_PARAMS, { filename: file });
45
+ }
46
+ catch (err) {
47
+ return { ok: false, file, error: err instanceof Error ? err.message : String(err) };
48
+ }
49
+ }
50
+ }
51
+ return { ok: true };
52
+ }
53
+ //# sourceMappingURL=verify-install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-install.js","sourceRoot":"","sources":["../../src/managed/verify-install.ts"],"names":[],"mappings":";;;;;AAwBA,wDAwBC;AAhDD,sDAAyB;AACzB,0DAA6B;AAC7B,sDAAyB;AAIzB,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;AAEvF,QAAQ,CAAC,CAAC,WAAW,CAAC,GAAW;IAC/B,KAAK,MAAM,KAAK,IAAI,iBAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,GAAG,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,CAAC;QACb,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,sBAAsB,CAAC,cAAsB;IAC3D,MAAM,KAAK,GAAG,mBAAI,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;IACvE,IAAI,QAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,QAAQ,GAAG,iBAAE,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IAC7F,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,mBAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,SAAS;QACX,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,iBAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAClE,iBAAE,CAAC,eAAe,CAAC,MAAM,EAAE,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACrE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACtF,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-deck/cli",
3
- "version": "1.10.3",
3
+ "version": "1.10.4",
4
4
  "description": "Local MCP proxy — decks of tools, keys, and self-improving playbooks",
5
5
  "license": "MIT",
6
6
  "bin": {
@@ -40,8 +40,8 @@
40
40
  "prepublishOnly": "node ../../scripts/pre-publish-check.mjs && npm run build"
41
41
  },
42
42
  "dependencies": {
43
- "@agent-deck/backend": "^1.10.3",
44
- "@agent-deck/shared": "^1.10.3"
43
+ "@agent-deck/backend": "^1.10.4",
44
+ "@agent-deck/shared": "^1.10.4"
45
45
  },
46
46
  "devDependencies": {
47
47
  "@types/node": "^20.11.5",