@agentuity/cli 1.0.11 → 1.0.12

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":"index.d.ts","sourceRoot":"","sources":["../../../src/cmd/upgrade/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAa3F;;;GAGG;AACH,OAAO,EAAE,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,CAAC;AAEtD;;;GAGG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CA+B1D;AAyDD,eAAO,MAAM,OAAO,mCAuLlB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmd/upgrade/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAa3F;;;GAGG;AACH,OAAO,EAAE,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,CAAC;AAEtD;;;GAGG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CA+B1D;AA8DD,eAAO,MAAM,OAAO,mCAiMlB,CAAC"}
@@ -4,7 +4,6 @@ import { getCommand } from '../../command-prefix';
4
4
  import { z } from 'zod';
5
5
  import { ErrorCode, createError, exitWithError } from '../../errors';
6
6
  import * as tui from '../../tui';
7
- import { $ } from 'bun';
8
7
  import { tmpdir } from 'node:os';
9
8
  import { getInstallationType } from '../../utils/installation-type';
10
9
  const UpgradeOptionsSchema = z.object({
@@ -68,13 +67,12 @@ async function performBunUpgrade(version, onRetry) {
68
67
  const npmVersion = version.replace(/^v/, '');
69
68
  const { installWithRetry } = await import('./npm-availability');
70
69
  try {
70
+ const { spawnWithTimeout } = await import('./npm-availability');
71
71
  await installWithRetry(async () => {
72
72
  // Use bun to install the specific version globally
73
73
  // Run from tmpdir to avoid interference from any local package.json/node_modules
74
- const result = await $ `bun add -g @agentuity/cli@${npmVersion}`
75
- .cwd(tmpdir())
76
- .quiet()
77
- .nothrow();
74
+ // spawnWithTimeout kills the process if it exceeds 30s (INSTALL_TIMEOUT_MS)
75
+ const result = await spawnWithTimeout(['bun', 'add', '-g', `@agentuity/cli@${npmVersion}`], { cwd: tmpdir(), timeout: 30_000 });
78
76
  return { exitCode: result.exitCode, stderr: result.stderr };
79
77
  }, { onRetry });
80
78
  }
@@ -86,8 +84,9 @@ async function performBunUpgrade(version, onRetry) {
86
84
  * Verify the upgrade was successful by checking the installed version
87
85
  */
88
86
  async function verifyUpgrade(expectedVersion) {
89
- // Run agentuity version to check the installed version
90
- const result = await $ `agentuity version`.quiet().nothrow();
87
+ const { spawnWithTimeout } = await import('./npm-availability');
88
+ // Run agentuity version to check the installed version (5s timeout — local command, sub-second normally)
89
+ const result = await spawnWithTimeout(['agentuity', 'version'], { timeout: 5_000 });
91
90
  if (result.exitCode !== 0) {
92
91
  throw new Error('Failed to verify upgrade - could not run agentuity version');
93
92
  }
@@ -184,7 +183,9 @@ export const command = createCommand({
184
183
  if (!isAvailable) {
185
184
  tui.warning('The new version is not yet available on npm.');
186
185
  tui.info('This can happen right after a release. Please try again in a few minutes.');
187
- tui.info(`You can also run: ${tui.muted('bun add -g @agentuity/cli@latest')}`);
186
+ tui.newline();
187
+ tui.info('You can also upgrade manually:');
188
+ console.log(` ${tui.muted('curl -fsSL https://agentuity.sh | sh')}`);
188
189
  return {
189
190
  upgraded: false,
190
191
  from: currentVersion,
@@ -249,6 +250,11 @@ export const command = createCommand({
249
250
  error: error instanceof Error ? error.message : 'Unknown error',
250
251
  installationType,
251
252
  };
253
+ tui.newline();
254
+ tui.info('If the upgrade continues to fail, you can reinstall manually:');
255
+ tui.newline();
256
+ console.log(` ${tui.muted('curl -fsSL https://agentuity.sh | sh')}`);
257
+ tui.newline();
252
258
  exitWithError(createError(ErrorCode.INTERNAL_ERROR, 'Upgrade failed', errorDetails), logger, options.errorFormat);
253
259
  }
254
260
  },
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cmd/upgrade/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cmd/upgrade/index.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,18 @@
2
2
  * npm registry availability checking utilities.
3
3
  * Used to verify a version is available via bun's resolver before attempting upgrade.
4
4
  */
5
+ /**
6
+ * Run a command via Bun.spawn with a timeout that kills the process.
7
+ * Returns { exitCode, stdout, stderr } similar to Bun's $ shell result.
8
+ */
9
+ export declare function spawnWithTimeout(cmd: string[], options: {
10
+ cwd?: string;
11
+ timeout: number;
12
+ }): Promise<{
13
+ exitCode: number;
14
+ stdout: Buffer;
15
+ stderr: Buffer;
16
+ }>;
5
17
  /**
6
18
  * Check if a specific version of @agentuity/cli is resolvable by bun.
7
19
  * Uses `bun info` to verify bun's own resolver/CDN can see the version,
@@ -1 +1 @@
1
- {"version":3,"file":"npm-availability.d.ts","sourceRoot":"","sources":["../../../src/cmd/upgrade/npm-availability.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAkB/E;AAED;;;;;;GAMG;AACH,wBAAsB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEpF;AAED,MAAM,WAAW,iBAAiB;IACjC,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC3C,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,iBAAsB,GAC7B,OAAO,CAAC,OAAO,CAAC,CAsBlB;AAQD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,MAAM,WAAW,uBAAuB;IACvC,0FAA0F;IAC1F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oFAAoF;IACpF,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CACrC,SAAS,EAAE,MAAM,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,EAC9D,OAAO,GAAE,uBAA4B,GACnC,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAqC/C"}
1
+ {"version":3,"file":"npm-availability.d.ts","sourceRoot":"","sources":["../../../src/cmd/upgrade/npm-availability.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH;;;GAGG;AACH,wBAAsB,gBAAgB,CACrC,GAAG,EAAE,MAAM,EAAE,EACb,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxC,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAkC/D;AAoCD;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAkB/E;AAED;;;;;;GAMG;AACH,wBAAsB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEpF;AAED,MAAM,WAAW,iBAAiB;IACjC,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC3C,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,iBAAsB,GAC7B,OAAO,CAAC,OAAO,CAAC,CAsBlB;AAQD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,MAAM,WAAW,uBAAuB;IACvC,0FAA0F;IAC1F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oFAAoF;IACpF,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CACrC,SAAS,EAAE,MAAM,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,EAC9D,OAAO,GAAE,uBAA4B,GACnC,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAoD/C"}
@@ -2,9 +2,75 @@
2
2
  * npm registry availability checking utilities.
3
3
  * Used to verify a version is available via bun's resolver before attempting upgrade.
4
4
  */
5
- import { $ } from 'bun';
6
5
  import { tmpdir } from 'node:os';
7
6
  const PACKAGE_SPEC = '@agentuity/cli';
7
+ /** Default timeout for `bun info` subprocess calls (10 seconds) */
8
+ const BUN_INFO_TIMEOUT_MS = 10_000;
9
+ /** Default timeout for install (`bun add -g`) subprocess calls (30 seconds) */
10
+ const INSTALL_TIMEOUT_MS = 30_000;
11
+ /**
12
+ * Run a command via Bun.spawn with a timeout that kills the process.
13
+ * Returns { exitCode, stdout, stderr } similar to Bun's $ shell result.
14
+ */
15
+ export async function spawnWithTimeout(cmd, options) {
16
+ const proc = Bun.spawn(cmd, {
17
+ cwd: options.cwd,
18
+ stdout: 'pipe',
19
+ stderr: 'pipe',
20
+ });
21
+ let timedOut = false;
22
+ const timer = setTimeout(() => {
23
+ timedOut = true;
24
+ proc.kill();
25
+ }, options.timeout);
26
+ try {
27
+ const [exitCode, stdoutBytes, stderrBytes] = await Promise.all([
28
+ proc.exited,
29
+ new Response(proc.stdout).arrayBuffer(),
30
+ new Response(proc.stderr).arrayBuffer(),
31
+ ]);
32
+ if (timedOut) {
33
+ throw new Error(`Command timed out after ${options.timeout}ms: ${cmd.join(' ')}`);
34
+ }
35
+ return {
36
+ exitCode,
37
+ stdout: Buffer.from(stdoutBytes),
38
+ stderr: Buffer.from(stderrBytes),
39
+ };
40
+ }
41
+ finally {
42
+ clearTimeout(timer);
43
+ }
44
+ }
45
+ /**
46
+ * Sentinel error thrown exclusively by withTimeout so the retry loop can
47
+ * distinguish a genuine timeout from other failures (e.g. permission errors).
48
+ */
49
+ class TimeoutError extends Error {
50
+ constructor(description, timeoutMs) {
51
+ super(`${description} timed out after ${timeoutMs}ms`);
52
+ this.name = 'TimeoutError';
53
+ }
54
+ }
55
+ /**
56
+ * Race a promise against a timeout. Unlike spawnWithTimeout (which kills a process),
57
+ * this is a generic wrapper for any async operation (e.g. the installFn callback).
58
+ *
59
+ * Throws a {@link TimeoutError} (not a plain Error) so callers can tell
60
+ * timeouts apart from other exceptions.
61
+ */
62
+ async function withTimeout(promise, timeoutMs, description) {
63
+ let timer;
64
+ const timeoutPromise = new Promise((_, reject) => {
65
+ timer = setTimeout(() => reject(new TimeoutError(description, timeoutMs)), timeoutMs);
66
+ });
67
+ try {
68
+ return await Promise.race([promise, timeoutPromise]);
69
+ }
70
+ finally {
71
+ clearTimeout(timer);
72
+ }
73
+ }
8
74
  /**
9
75
  * Check if a specific version of @agentuity/cli is resolvable by bun.
10
76
  * Uses `bun info` to verify bun's own resolver/CDN can see the version,
@@ -17,10 +83,7 @@ const PACKAGE_SPEC = '@agentuity/cli';
17
83
  export async function isVersionAvailableOnNpm(version) {
18
84
  const normalizedVersion = version.replace(/^v/, '');
19
85
  try {
20
- const result = await $ `bun info ${PACKAGE_SPEC}@${normalizedVersion} --json`
21
- .cwd(tmpdir())
22
- .quiet()
23
- .nothrow();
86
+ const result = await spawnWithTimeout(['bun', 'info', `${PACKAGE_SPEC}@${normalizedVersion}`, '--json'], { cwd: tmpdir(), timeout: BUN_INFO_TIMEOUT_MS });
24
87
  if (result.exitCode !== 0) {
25
88
  return false;
26
89
  }
@@ -97,7 +160,23 @@ export async function installWithRetry(installFn, options = {}) {
97
160
  const { maxAttempts = 7, initialDelayMs = 5000, maxDelayMs = 30000, multiplier = 2, onRetry, } = options;
98
161
  let delay = initialDelayMs;
99
162
  for (let attempt = 1; attempt <= maxAttempts; attempt++) {
100
- const result = await installFn();
163
+ let result;
164
+ try {
165
+ result = await withTimeout(installFn(), INSTALL_TIMEOUT_MS, 'Install command');
166
+ }
167
+ catch (error) {
168
+ // Only retry on timeouts — non-timeout errors (permissions, disk, etc.) are fatal
169
+ if (!(error instanceof TimeoutError)) {
170
+ throw error;
171
+ }
172
+ if (attempt === maxAttempts) {
173
+ throw error;
174
+ }
175
+ onRetry?.(attempt, delay);
176
+ await new Promise((resolve) => setTimeout(resolve, delay));
177
+ delay = Math.min(Math.round(delay * multiplier), maxDelayMs);
178
+ continue;
179
+ }
101
180
  if (result.exitCode === 0) {
102
181
  return result;
103
182
  }
@@ -1 +1 @@
1
- {"version":3,"file":"npm-availability.js","sourceRoot":"","sources":["../../../src/cmd/upgrade/npm-availability.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"npm-availability.js","sourceRoot":"","sources":["../../../src/cmd/upgrade/npm-availability.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=npm-availability.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-availability.test.d.ts","sourceRoot":"","sources":["../../../src/cmd/upgrade/npm-availability.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,48 @@
1
+ import { test, expect, beforeAll, afterAll } from 'bun:test';
2
+ import { spawnWithTimeout } from './npm-availability';
3
+ import { tmpdir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ // bun info requires a package.json in its cwd, and isVersionAvailableOnNpm
6
+ // uses tmpdir() as cwd. Ensure a minimal package.json exists there for tests.
7
+ const tmpPackageJson = join(tmpdir(), 'package.json');
8
+ let createdPackageJson = false;
9
+ beforeAll(async () => {
10
+ const file = Bun.file(tmpPackageJson);
11
+ if (!(await file.exists())) {
12
+ await Bun.write(file, '{}');
13
+ createdPackageJson = true;
14
+ }
15
+ });
16
+ afterAll(async () => {
17
+ if (createdPackageJson) {
18
+ const { unlink } = await import('node:fs/promises');
19
+ await unlink(tmpPackageJson).catch(() => { });
20
+ }
21
+ });
22
+ test('spawnWithTimeout kills process on timeout', async () => {
23
+ // spawn a command that hangs with a short timeout (500ms)
24
+ await expect(spawnWithTimeout(['bun', '-e', 'setTimeout(()=>{},60000)'], { timeout: 500 })).rejects.toThrow(/timed out/);
25
+ });
26
+ test('spawnWithTimeout returns result when command completes in time', async () => {
27
+ const result = await spawnWithTimeout(['bun', '-e', "console.log('hello')"], {
28
+ timeout: 5_000,
29
+ });
30
+ expect(result.exitCode).toBe(0);
31
+ expect(result.stdout.toString().trim()).toBe('hello');
32
+ });
33
+ test('spawnWithTimeout returns non-zero exit code without throwing', async () => {
34
+ const result = await spawnWithTimeout(['bun', '-e', 'process.exit(1)'], { timeout: 5_000 });
35
+ expect(result.exitCode).not.toBe(0);
36
+ });
37
+ test('isVersionAvailableOnNpm returns true for a known version', async () => {
38
+ const { isVersionAvailableOnNpm } = await import('./npm-availability');
39
+ // Use a known-good old version that definitely exists
40
+ const result = await isVersionAvailableOnNpm('1.0.10');
41
+ expect(result).toBe(true);
42
+ }, 15_000); // generous test timeout but the function itself has 10s subprocess timeout
43
+ test('isVersionAvailableOnNpm returns false for non-existent version', async () => {
44
+ const { isVersionAvailableOnNpm } = await import('./npm-availability');
45
+ const result = await isVersionAvailableOnNpm('999.999.999');
46
+ expect(result).toBe(false);
47
+ }, 15_000);
48
+ //# sourceMappingURL=npm-availability.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-availability.test.js","sourceRoot":"","sources":["../../../src/cmd/upgrade/npm-availability.test.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,6 @@ import { fetchLatestVersion } from './cmd/upgrade';
3
3
  import { getVersion, getCompareUrl, getReleaseUrl, toTag } from './version';
4
4
  import * as tui from './tui';
5
5
  import { saveConfig } from './config';
6
- import { $ } from 'bun';
7
6
  import { tmpdir } from 'node:os';
8
7
  import { getExecutingAgent } from './agent-detection';
9
8
  const ONE_HOUR_MS = 60 * 60 * 1000;
@@ -136,12 +135,10 @@ async function performUpgrade(logger, targetVersion) {
136
135
  logger.info('Upgrading to version %s...', npmVersion);
137
136
  // Use bun to install the specific version globally with retry for CDN propagation delays
138
137
  // Run from tmpdir to avoid interference from any local package.json/node_modules
139
- const { installWithRetry } = await import('./cmd/upgrade/npm-availability');
138
+ const { installWithRetry, spawnWithTimeout } = await import('./cmd/upgrade/npm-availability');
140
139
  await installWithRetry(async () => {
141
- const result = await $ `bun add -g @agentuity/cli@${npmVersion}`
142
- .cwd(tmpdir())
143
- .quiet()
144
- .nothrow();
140
+ // spawnWithTimeout kills the process if it exceeds 30s
141
+ const result = await spawnWithTimeout(['bun', 'add', '-g', `@agentuity/cli@${npmVersion}`], { cwd: tmpdir(), timeout: 30_000 });
145
142
  return { exitCode: result.exitCode, stderr: result.stderr };
146
143
  }, {
147
144
  onRetry: (attempt, delayMs) => {
@@ -1 +1 @@
1
- {"version":3,"file":"version-check.js","sourceRoot":"","sources":["../src/version-check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"version-check.js","sourceRoot":"","sources":["../src/version-check.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentuity/cli",
3
- "version": "1.0.11",
3
+ "version": "1.0.12",
4
4
  "license": "Apache-2.0",
5
5
  "author": "Agentuity employees and contributors",
6
6
  "type": "module",
@@ -41,9 +41,9 @@
41
41
  "prepublishOnly": "bun run clean && bun run build"
42
42
  },
43
43
  "dependencies": {
44
- "@agentuity/auth": "1.0.11",
45
- "@agentuity/core": "1.0.11",
46
- "@agentuity/server": "1.0.11",
44
+ "@agentuity/auth": "1.0.12",
45
+ "@agentuity/core": "1.0.12",
46
+ "@agentuity/server": "1.0.12",
47
47
  "@datasert/cronjs-parser": "^1.4.0",
48
48
  "@vitejs/plugin-react": "^5.1.2",
49
49
  "acorn-loose": "^8.5.2",
@@ -60,10 +60,10 @@
60
60
  "typescript": "^5.9.0",
61
61
  "vite": "^7.2.7",
62
62
  "zod": "^4.3.5",
63
- "@agentuity/frontend": "1.0.11"
63
+ "@agentuity/frontend": "1.0.12"
64
64
  },
65
65
  "devDependencies": {
66
- "@agentuity/test-utils": "1.0.11",
66
+ "@agentuity/test-utils": "1.0.12",
67
67
  "@types/adm-zip": "^0.5.7",
68
68
  "@types/bun": "latest",
69
69
  "@types/tar-fs": "^2.0.4",
@@ -4,7 +4,6 @@ import { getCommand } from '../../command-prefix';
4
4
  import { z } from 'zod';
5
5
  import { ErrorCode, createError, exitWithError } from '../../errors';
6
6
  import * as tui from '../../tui';
7
- import { $ } from 'bun';
8
7
  import { tmpdir } from 'node:os';
9
8
  import { getInstallationType, type InstallationType } from '../../utils/installation-type';
10
9
 
@@ -84,14 +83,17 @@ async function performBunUpgrade(
84
83
  const { installWithRetry } = await import('./npm-availability');
85
84
 
86
85
  try {
86
+ const { spawnWithTimeout } = await import('./npm-availability');
87
+
87
88
  await installWithRetry(
88
89
  async () => {
89
90
  // Use bun to install the specific version globally
90
91
  // Run from tmpdir to avoid interference from any local package.json/node_modules
91
- const result = await $`bun add -g @agentuity/cli@${npmVersion}`
92
- .cwd(tmpdir())
93
- .quiet()
94
- .nothrow();
92
+ // spawnWithTimeout kills the process if it exceeds 30s (INSTALL_TIMEOUT_MS)
93
+ const result = await spawnWithTimeout(
94
+ ['bun', 'add', '-g', `@agentuity/cli@${npmVersion}`],
95
+ { cwd: tmpdir(), timeout: 30_000 }
96
+ );
95
97
  return { exitCode: result.exitCode, stderr: result.stderr };
96
98
  },
97
99
  { onRetry }
@@ -107,8 +109,10 @@ async function performBunUpgrade(
107
109
  * Verify the upgrade was successful by checking the installed version
108
110
  */
109
111
  async function verifyUpgrade(expectedVersion: string): Promise<void> {
110
- // Run agentuity version to check the installed version
111
- const result = await $`agentuity version`.quiet().nothrow();
112
+ const { spawnWithTimeout } = await import('./npm-availability');
113
+
114
+ // Run agentuity version to check the installed version (5s timeout — local command, sub-second normally)
115
+ const result = await spawnWithTimeout(['agentuity', 'version'], { timeout: 5_000 });
112
116
 
113
117
  if (result.exitCode !== 0) {
114
118
  throw new Error('Failed to verify upgrade - could not run agentuity version');
@@ -219,8 +223,12 @@ export const command = createCommand({
219
223
 
220
224
  if (!isAvailable) {
221
225
  tui.warning('The new version is not yet available on npm.');
222
- tui.info('This can happen right after a release. Please try again in a few minutes.');
223
- tui.info(`You can also run: ${tui.muted('bun add -g @agentuity/cli@latest')}`);
226
+ tui.info(
227
+ 'This can happen right after a release. Please try again in a few minutes.'
228
+ );
229
+ tui.newline();
230
+ tui.info('You can also upgrade manually:');
231
+ console.log(` ${tui.muted('curl -fsSL https://agentuity.sh | sh')}`);
224
232
  return {
225
233
  upgraded: false,
226
234
  from: currentVersion,
@@ -301,6 +309,12 @@ export const command = createCommand({
301
309
  installationType,
302
310
  };
303
311
 
312
+ tui.newline();
313
+ tui.info('If the upgrade continues to fail, you can reinstall manually:');
314
+ tui.newline();
315
+ console.log(` ${tui.muted('curl -fsSL https://agentuity.sh | sh')}`);
316
+ tui.newline();
317
+
304
318
  exitWithError(
305
319
  createError(ErrorCode.INTERNAL_ERROR, 'Upgrade failed', errorDetails),
306
320
  logger,
@@ -0,0 +1,65 @@
1
+ import { test, expect, beforeAll, afterAll } from 'bun:test';
2
+ import { spawnWithTimeout } from './npm-availability';
3
+ import { tmpdir } from 'node:os';
4
+ import { join } from 'node:path';
5
+
6
+ // bun info requires a package.json in its cwd, and isVersionAvailableOnNpm
7
+ // uses tmpdir() as cwd. Ensure a minimal package.json exists there for tests.
8
+ const tmpPackageJson = join(tmpdir(), 'package.json');
9
+ let createdPackageJson = false;
10
+
11
+ beforeAll(async () => {
12
+ const file = Bun.file(tmpPackageJson);
13
+ if (!(await file.exists())) {
14
+ await Bun.write(file, '{}');
15
+ createdPackageJson = true;
16
+ }
17
+ });
18
+
19
+ afterAll(async () => {
20
+ if (createdPackageJson) {
21
+ const { unlink } = await import('node:fs/promises');
22
+ await unlink(tmpPackageJson).catch(() => {});
23
+ }
24
+ });
25
+
26
+ test('spawnWithTimeout kills process on timeout', async () => {
27
+ // spawn a command that hangs with a short timeout (500ms)
28
+ await expect(
29
+ spawnWithTimeout(['bun', '-e', 'setTimeout(()=>{},60000)'], { timeout: 500 })
30
+ ).rejects.toThrow(/timed out/);
31
+ });
32
+
33
+ test('spawnWithTimeout returns result when command completes in time', async () => {
34
+ const result = await spawnWithTimeout(['bun', '-e', "console.log('hello')"], {
35
+ timeout: 5_000,
36
+ });
37
+ expect(result.exitCode).toBe(0);
38
+ expect(result.stdout.toString().trim()).toBe('hello');
39
+ });
40
+
41
+ test('spawnWithTimeout returns non-zero exit code without throwing', async () => {
42
+ const result = await spawnWithTimeout(['bun', '-e', 'process.exit(1)'], { timeout: 5_000 });
43
+ expect(result.exitCode).not.toBe(0);
44
+ });
45
+
46
+ test(
47
+ 'isVersionAvailableOnNpm returns true for a known version',
48
+ async () => {
49
+ const { isVersionAvailableOnNpm } = await import('./npm-availability');
50
+ // Use a known-good old version that definitely exists
51
+ const result = await isVersionAvailableOnNpm('1.0.10');
52
+ expect(result).toBe(true);
53
+ },
54
+ 15_000
55
+ ); // generous test timeout but the function itself has 10s subprocess timeout
56
+
57
+ test(
58
+ 'isVersionAvailableOnNpm returns false for non-existent version',
59
+ async () => {
60
+ const { isVersionAvailableOnNpm } = await import('./npm-availability');
61
+ const result = await isVersionAvailableOnNpm('999.999.999');
62
+ expect(result).toBe(false);
63
+ },
64
+ 15_000
65
+ );
@@ -3,11 +3,93 @@
3
3
  * Used to verify a version is available via bun's resolver before attempting upgrade.
4
4
  */
5
5
 
6
- import { $ } from 'bun';
7
6
  import { tmpdir } from 'node:os';
8
7
 
9
8
  const PACKAGE_SPEC = '@agentuity/cli';
10
9
 
10
+ /** Default timeout for `bun info` subprocess calls (10 seconds) */
11
+ const BUN_INFO_TIMEOUT_MS = 10_000;
12
+
13
+ /** Default timeout for install (`bun add -g`) subprocess calls (30 seconds) */
14
+ const INSTALL_TIMEOUT_MS = 30_000;
15
+
16
+ /**
17
+ * Run a command via Bun.spawn with a timeout that kills the process.
18
+ * Returns { exitCode, stdout, stderr } similar to Bun's $ shell result.
19
+ */
20
+ export async function spawnWithTimeout(
21
+ cmd: string[],
22
+ options: { cwd?: string; timeout: number }
23
+ ): Promise<{ exitCode: number; stdout: Buffer; stderr: Buffer }> {
24
+ const proc = Bun.spawn(cmd, {
25
+ cwd: options.cwd,
26
+ stdout: 'pipe',
27
+ stderr: 'pipe',
28
+ });
29
+
30
+ let timedOut = false;
31
+ const timer = setTimeout(() => {
32
+ timedOut = true;
33
+ proc.kill();
34
+ }, options.timeout);
35
+
36
+ try {
37
+ const [exitCode, stdoutBytes, stderrBytes] = await Promise.all([
38
+ proc.exited,
39
+ new Response(proc.stdout).arrayBuffer(),
40
+ new Response(proc.stderr).arrayBuffer(),
41
+ ]);
42
+
43
+ if (timedOut) {
44
+ throw new Error(
45
+ `Command timed out after ${options.timeout}ms: ${cmd.join(' ')}`
46
+ );
47
+ }
48
+
49
+ return {
50
+ exitCode,
51
+ stdout: Buffer.from(stdoutBytes),
52
+ stderr: Buffer.from(stderrBytes),
53
+ };
54
+ } finally {
55
+ clearTimeout(timer);
56
+ }
57
+ }
58
+
59
+ /**
60
+ * Sentinel error thrown exclusively by withTimeout so the retry loop can
61
+ * distinguish a genuine timeout from other failures (e.g. permission errors).
62
+ */
63
+ class TimeoutError extends Error {
64
+ constructor(description: string, timeoutMs: number) {
65
+ super(`${description} timed out after ${timeoutMs}ms`);
66
+ this.name = 'TimeoutError';
67
+ }
68
+ }
69
+
70
+ /**
71
+ * Race a promise against a timeout. Unlike spawnWithTimeout (which kills a process),
72
+ * this is a generic wrapper for any async operation (e.g. the installFn callback).
73
+ *
74
+ * Throws a {@link TimeoutError} (not a plain Error) so callers can tell
75
+ * timeouts apart from other exceptions.
76
+ */
77
+ async function withTimeout<T>(
78
+ promise: Promise<T>,
79
+ timeoutMs: number,
80
+ description: string
81
+ ): Promise<T> {
82
+ let timer: ReturnType<typeof setTimeout>;
83
+ const timeoutPromise = new Promise<never>((_, reject) => {
84
+ timer = setTimeout(() => reject(new TimeoutError(description, timeoutMs)), timeoutMs);
85
+ });
86
+ try {
87
+ return await Promise.race([promise, timeoutPromise]);
88
+ } finally {
89
+ clearTimeout(timer!);
90
+ }
91
+ }
92
+
11
93
  /**
12
94
  * Check if a specific version of @agentuity/cli is resolvable by bun.
13
95
  * Uses `bun info` to verify bun's own resolver/CDN can see the version,
@@ -20,10 +102,10 @@ const PACKAGE_SPEC = '@agentuity/cli';
20
102
  export async function isVersionAvailableOnNpm(version: string): Promise<boolean> {
21
103
  const normalizedVersion = version.replace(/^v/, '');
22
104
  try {
23
- const result = await $`bun info ${PACKAGE_SPEC}@${normalizedVersion} --json`
24
- .cwd(tmpdir())
25
- .quiet()
26
- .nothrow();
105
+ const result = await spawnWithTimeout(
106
+ ['bun', 'info', `${PACKAGE_SPEC}@${normalizedVersion}`, '--json'],
107
+ { cwd: tmpdir(), timeout: BUN_INFO_TIMEOUT_MS }
108
+ );
27
109
  if (result.exitCode !== 0) {
28
110
  return false;
29
111
  }
@@ -147,7 +229,22 @@ export async function installWithRetry(
147
229
  let delay = initialDelayMs;
148
230
 
149
231
  for (let attempt = 1; attempt <= maxAttempts; attempt++) {
150
- const result = await installFn();
232
+ let result: { exitCode: number; stderr: Buffer };
233
+ try {
234
+ result = await withTimeout(installFn(), INSTALL_TIMEOUT_MS, 'Install command');
235
+ } catch (error) {
236
+ // Only retry on timeouts — non-timeout errors (permissions, disk, etc.) are fatal
237
+ if (!(error instanceof TimeoutError)) {
238
+ throw error;
239
+ }
240
+ if (attempt === maxAttempts) {
241
+ throw error;
242
+ }
243
+ onRetry?.(attempt, delay);
244
+ await new Promise((resolve) => setTimeout(resolve, delay));
245
+ delay = Math.min(Math.round(delay * multiplier), maxDelayMs);
246
+ continue;
247
+ }
151
248
 
152
249
  if (result.exitCode === 0) {
153
250
  return result;
@@ -4,7 +4,6 @@ import { fetchLatestVersion } from './cmd/upgrade';
4
4
  import { getVersion, getCompareUrl, getReleaseUrl, toTag } from './version';
5
5
  import * as tui from './tui';
6
6
  import { saveConfig } from './config';
7
- import { $ } from 'bun';
8
7
  import { tmpdir } from 'node:os';
9
8
  import { getExecutingAgent } from './agent-detection';
10
9
 
@@ -174,13 +173,14 @@ async function performUpgrade(logger: Logger, targetVersion: string): Promise<vo
174
173
 
175
174
  // Use bun to install the specific version globally with retry for CDN propagation delays
176
175
  // Run from tmpdir to avoid interference from any local package.json/node_modules
177
- const { installWithRetry } = await import('./cmd/upgrade/npm-availability');
176
+ const { installWithRetry, spawnWithTimeout } = await import('./cmd/upgrade/npm-availability');
178
177
  await installWithRetry(
179
178
  async () => {
180
- const result = await $`bun add -g @agentuity/cli@${npmVersion}`
181
- .cwd(tmpdir())
182
- .quiet()
183
- .nothrow();
179
+ // spawnWithTimeout kills the process if it exceeds 30s
180
+ const result = await spawnWithTimeout(
181
+ ['bun', 'add', '-g', `@agentuity/cli@${npmVersion}`],
182
+ { cwd: tmpdir(), timeout: 30_000 }
183
+ );
184
184
  return { exitCode: result.exitCode, stderr: result.stderr };
185
185
  },
186
186
  {