@agentuity/cli 0.1.33 → 0.1.34

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":"exec.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/sandbox/exec.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,cAAc,sCA8KzB,CAAC;AA4DH,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/sandbox/exec.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,cAAc,sCAmJzB,CAAC;AAwDH,eAAe,cAAc,CAAC"}
@@ -5,8 +5,8 @@ import * as tui from '../../../tui';
5
5
  import { getSandboxRegion, createSandboxClient } from './util';
6
6
  import { getCommand } from '../../../command-prefix';
7
7
  import { sandboxExecute, executionGet, writeAndDrain } from '@agentuity/server';
8
- const POLL_INTERVAL_MS = 500;
9
- const MAX_POLL_ATTEMPTS = 7200;
8
+ // Server-side long-poll wait duration (max 5 minutes supported by server)
9
+ const EXECUTION_WAIT_DURATION = '5m';
10
10
  const SandboxExecResponseSchema = z.object({
11
11
  executionId: z.string().describe('Unique execution identifier'),
12
12
  status: z.string().describe('Execution status'),
@@ -95,36 +95,14 @@ export const execSubcommand = createCommand({
95
95
  streamPromises.push(streamUrlToWritable(stderrStreamUrl, stderr, streamAbortController.signal, logger));
96
96
  }
97
97
  }
98
- let attempts = 0;
99
- let finalExecution = execution;
100
- while (attempts < MAX_POLL_ATTEMPTS) {
101
- if (abortController.signal.aborted) {
102
- throw new Error('Execution cancelled');
103
- }
104
- await sleep(POLL_INTERVAL_MS);
105
- attempts++;
106
- try {
107
- const execInfo = await executionGet(client, {
108
- executionId: execution.executionId,
109
- orgId,
110
- });
111
- if (execInfo.status === 'completed' ||
112
- execInfo.status === 'failed' ||
113
- execInfo.status === 'timeout' ||
114
- execInfo.status === 'cancelled') {
115
- finalExecution = {
116
- executionId: execInfo.executionId,
117
- status: execInfo.status,
118
- exitCode: execInfo.exitCode,
119
- durationMs: execInfo.durationMs,
120
- };
121
- break;
122
- }
123
- }
124
- catch {
125
- continue;
126
- }
127
- }
98
+ // Use server-side long-polling to wait for execution completion
99
+ // This is more efficient than client-side polling and provides immediate
100
+ // error detection if the sandbox is terminated
101
+ const finalExecution = await executionGet(client, {
102
+ executionId: execution.executionId,
103
+ orgId,
104
+ wait: EXECUTION_WAIT_DURATION,
105
+ });
128
106
  // Wait for all streams to reach EOF (Pulse blocks until true EOF)
129
107
  await Promise.all(streamPromises);
130
108
  // Ensure stdout is fully flushed before continuing
@@ -205,8 +183,5 @@ function createCaptureStream(onChunk) {
205
183
  },
206
184
  });
207
185
  }
208
- function sleep(ms) {
209
- return new Promise((resolve) => setTimeout(resolve, ms));
210
- }
211
186
  export default execSubcommand;
212
187
  //# sourceMappingURL=exec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"exec.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/sandbox/exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGhF,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC/D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACpE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IACrF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CACvE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAC;IAC3C,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,CAAC,SAAS,CAAC;IACpB,WAAW,EAAE,wCAAwC;IACrD,IAAI,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC;IAC/B,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;IACnC,QAAQ,EAAE;QACT;YACC,OAAO,EAAE,UAAU,CAAC,2CAA2C,CAAC;YAChE,WAAW,EAAE,gCAAgC;SAC7C;QACD;YACC,OAAO,EAAE,UAAU,CAAC,yDAAyD,CAAC;YAC9E,WAAW,EAAE,sBAAsB;SACnC;KACD;IACD,MAAM,EAAE;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACd,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC;SACzE,CAAC;QACF,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;YACjB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;YAC/E,UAAU,EAAE,CAAC;iBACX,OAAO,EAAE;iBACT,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,EAAE;iBACV,QAAQ,CAAC,+CAA+C,CAAC;SAC3D,CAAC;QACF,QAAQ,EAAE,yBAAyB;KACnC;IAED,KAAK,CAAC,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;QACjE,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACzF,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE3B,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAC9C,MAAM,YAAY,GAAG,GAAG,EAAE;YACzB,eAAe,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC,CAAC;QACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACnC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAEpC,MAAM,YAAY,GAAa,EAAE,CAAC;QAElC,kEAAkE;QAClE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI;YAC1B,CAAC,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1D,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QAClB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI;YAC1B,CAAC,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1D,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QAElB,IAAI,CAAC;YACJ,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE;gBAC9C,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,OAAO,EAAE;oBACR,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,MAAM,EAAE,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS;iBACnF;gBACD,KAAK;aACL,CAAC,CAAC;YAEH,MAAM,eAAe,GAAG,SAAS,CAAC,eAAe,CAAC;YAClD,MAAM,eAAe,GAAG,SAAS,CAAC,eAAe,CAAC;YAClD,MAAM,qBAAqB,GAAG,IAAI,eAAe,EAAE,CAAC;YACpD,MAAM,cAAc,GAAoB,EAAE,CAAC;YAE3C,mEAAmE;YACnE,MAAM,gBAAgB,GACrB,eAAe,IAAI,eAAe,IAAI,eAAe,KAAK,eAAe,CAAC;YAE3E,IAAI,gBAAgB,EAAE,CAAC;gBACtB,4DAA4D;gBAC5D,MAAM,CAAC,KAAK,CAAC,sDAAsD,EAAE,eAAe,CAAC,CAAC;gBACtF,cAAc,CAAC,IAAI,CAClB,mBAAmB,CAAC,eAAe,EAAE,MAAM,EAAE,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAClF,CAAC;YACH,CAAC;iBAAM,CAAC;gBACP,IAAI,eAAe,EAAE,CAAC;oBACrB,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,eAAe,CAAC,CAAC;oBACjE,cAAc,CAAC,IAAI,CAClB,mBAAmB,CAAC,eAAe,EAAE,MAAM,EAAE,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAClF,CAAC;gBACH,CAAC;gBAED,IAAI,eAAe,EAAE,CAAC;oBACrB,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,eAAe,CAAC,CAAC;oBACjE,cAAc,CAAC,IAAI,CAClB,mBAAmB,CAAC,eAAe,EAAE,MAAM,EAAE,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAClF,CAAC;gBACH,CAAC;YACF,CAAC;YAED,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,IAAI,cAAc,GAAG,SAAS,CAAC;YAE/B,OAAO,QAAQ,GAAG,iBAAiB,EAAE,CAAC;gBACrC,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBACxC,CAAC;gBAED,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBAC9B,QAAQ,EAAE,CAAC;gBAEX,IAAI,CAAC;oBACJ,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE;wBAC3C,WAAW,EAAE,SAAS,CAAC,WAAW;wBAClC,KAAK;qBACL,CAAC,CAAC;oBAEH,IACC,QAAQ,CAAC,MAAM,KAAK,WAAW;wBAC/B,QAAQ,CAAC,MAAM,KAAK,QAAQ;wBAC5B,QAAQ,CAAC,MAAM,KAAK,SAAS;wBAC7B,QAAQ,CAAC,MAAM,KAAK,WAAW,EAC9B,CAAC;wBACF,cAAc,GAAG;4BAChB,WAAW,EAAE,QAAQ,CAAC,WAAW;4BACjC,MAAM,EAAE,QAAQ,CAAC,MAAM;4BACvB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;4BAC3B,UAAU,EAAE,QAAQ,CAAC,UAAU;yBAC/B,CAAC;wBACF,MAAM;oBACP,CAAC;gBACF,CAAC;gBAAC,MAAM,CAAC;oBACR,SAAS;gBACV,CAAC;YACF,CAAC;YAED,kEAAkE;YAClE,MAAM,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAElC,mDAAmD;YACnD,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC9C,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;oBACnC,IAAI,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;wBACtC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC/C,CAAC;yBAAM,CAAC;wBACP,OAAO,EAAE,CAAC;oBACX,CAAC;gBACF,CAAC,CAAC,CAAC;YACJ,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;YACtC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAErC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACnB,IAAI,cAAc,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;oBACnC,QAAQ;gBACT,CAAC;qBAAM,IAAI,cAAc,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;oBAClD,GAAG,CAAC,KAAK,CAAC,yBAAyB,cAAc,CAAC,QAAQ,OAAO,QAAQ,IAAI,CAAC,CAAC;gBAChF,CAAC;qBAAM,CAAC;oBACP,GAAG,CAAC,IAAI,CACP,aAAa,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,cAAc,cAAc,CAAC,MAAM,EAAE,CACtF,CAAC;gBACH,CAAC;YACF,CAAC;YAED,OAAO;gBACN,WAAW,EAAE,cAAc,CAAC,WAAW;gBACvC,MAAM,EAAE,cAAc,CAAC,MAAM;gBAC7B,QAAQ,EAAE,cAAc,CAAC,QAAQ;gBACjC,UAAU,EAAE,cAAc,CAAC,UAAU;gBACrC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;aACzC,CAAC;QACH,CAAC;gBAAS,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QACtC,CAAC;IACF,CAAC;CACD,CAAC,CAAC;AAEH,KAAK,UAAU,mBAAmB,CACjC,GAAW,EACX,QAA+B,EAC/B,MAAmB,EACnB,MAAc;IAEd,IAAI,CAAC;QACJ,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAE5D,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;YAClD,OAAO;QACR,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAEzC,4DAA4D;QAC5D,OAAO,IAAI,EAAE,CAAC;YACb,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,IAAI,EAAE,CAAC;gBACV,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAC3B,MAAM;YACP,CAAC;YAED,IAAI,KAAK,EAAE,CAAC;gBACX,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBACrD,MAAM,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACtC,CAAC;QACF,CAAC;IACF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACvD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC/B,OAAO;QACR,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;AACF,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAgC;IAC5D,OAAO,IAAI,QAAQ,CAAC;QACnB,KAAK,CACJ,KAAsB,EACtB,SAAiB,EACjB,QAAwC;YAExC,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACzE,OAAO,CAAC,IAAI,CAAC,CAAC;YACd,QAAQ,EAAE,CAAC;QACZ,CAAC;KACD,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACxB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"exec.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/sandbox/exec.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"installation-type.d.ts","sourceRoot":"","sources":["../../src/utils/installation-type.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE7D;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,CA8BtD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC"}
1
+ {"version":3,"file":"installation-type.d.ts","sourceRoot":"","sources":["../../src/utils/installation-type.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAiB7D;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,CAqDtD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC"}
@@ -1,7 +1,24 @@
1
1
  /**
2
2
  * Detects how the CLI was installed and is being run
3
3
  */
4
+ import fs from 'node:fs';
4
5
  import os from 'node:os';
6
+ /**
7
+ * Resolve a path to its real path (following symlinks) and normalize to POSIX separators.
8
+ * Returns the original path if resolution fails.
9
+ */
10
+ function resolveRealPath(path) {
11
+ if (!path)
12
+ return '';
13
+ try {
14
+ // fs.realpathSync resolves symlinks (e.g., /tmp -> /private/tmp on macOS)
15
+ return fs.realpathSync(path).replace(/\\/g, '/');
16
+ }
17
+ catch {
18
+ // If the path doesn't exist or can't be resolved, return normalized original
19
+ return path.replace(/\\/g, '/');
20
+ }
21
+ }
5
22
  /**
6
23
  * Determines the installation type based on how the CLI is being executed
7
24
  *
@@ -10,29 +27,50 @@ import os from 'node:os';
10
27
  * @returns 'source' - Running from source code (development)
11
28
  */
12
29
  export function getInstallationType() {
13
- // Normalize paths to POSIX separators for cross-platform compatibility
30
+ // Bun.main already returns the resolved real path, just normalize separators
14
31
  const mainPath = Bun.main.replace(/\\/g, '/');
15
- // Bun.argv[1] contains the original invocation path (before symlink resolution)
16
- const invokedPath = (Bun.argv[1] ?? '').replace(/\\/g, '/');
17
- // Get bun's global bin directory from BUN_INSTALL or default to ~/.bun/bin
18
- // Use os.homedir() as primary fallback to avoid "undefined/.bun" paths
19
- const home = os.homedir() ?? process.env.HOME ?? process.env.USERPROFILE ?? '';
20
- const bunInstall = (process.env.BUN_INSTALL ?? (home ? `${home}/.bun` : '')).replace(/\\/g, '/');
21
- const globalBinDir = bunInstall ? `${bunInstall}/bin/` : '';
22
- // Global install: invoked from bun's global bin directory (e.g., ~/.bun/bin/agentuity)
23
- // This handles symlinks created by `bun add -g @agentuity/cli`
24
- if (globalBinDir && invokedPath.startsWith(globalBinDir)) {
25
- return 'global';
32
+ // Get home directory reliably and resolve symlinks
33
+ // On macOS, os.homedir() returns /Users/xxx which is already real
34
+ const home = resolveRealPath(os.homedir() ?? process.env.HOME ?? process.env.USERPROFILE ?? '');
35
+ // Get bun install directory from BUN_INSTALL or default to ~/.bun
36
+ // Resolve symlinks to handle cases like BUN_INSTALL=/tmp/... on macOS where /tmp -> /private/tmp
37
+ const bunInstallRaw = process.env.BUN_INSTALL ?? (home ? `${home}/.bun` : '');
38
+ const bunInstall = resolveRealPath(bunInstallRaw);
39
+ // GLOBAL DETECTION: Check if running from bun's global install location
40
+ // When installed via `bun add -g`, the CLI lives at ~/.bun/node_modules/@agentuity/cli/
41
+ // or ~/.bun/install/global/node_modules/@agentuity/cli/
42
+ if (bunInstall) {
43
+ // Check for ~/.bun/node_modules/@agentuity/cli/ (common bun global layout)
44
+ if (mainPath.startsWith(`${bunInstall}/node_modules/@agentuity/cli/`)) {
45
+ return 'global';
46
+ }
47
+ // Check for ~/.bun/install/global/node_modules/@agentuity/cli/ (alternative layout)
48
+ if (mainPath.startsWith(`${bunInstall}/install/global/`)) {
49
+ return 'global';
50
+ }
51
+ }
52
+ // GLOBAL DETECTION: Check for legacy ~/.agentuity/ installation
53
+ // The install.sh script may install to ~/.agentuity/node_modules/@agentuity/cli/
54
+ // or create a shim at ~/.agentuity/bin/agentuity
55
+ if (home) {
56
+ const agentuityDir = resolveRealPath(`${home}/.agentuity`);
57
+ if (mainPath.startsWith(`${agentuityDir}/`)) {
58
+ return 'global';
59
+ }
26
60
  }
27
- // Also check the resolved path for explicit global install locations
28
- if (mainPath.includes('/.bun/install/global/')) {
61
+ // GLOBAL DETECTION: Fallback check for any path containing /.bun/ before node_modules
62
+ // This catches edge cases where BUN_INSTALL might not match the actual path
63
+ if (mainPath.includes('/.bun/') && mainPath.includes('/node_modules/@agentuity/cli/')) {
29
64
  return 'global';
30
65
  }
31
- // Local project install: ./node_modules/@agentuity/cli/...
66
+ // LOCAL DETECTION: Running from a project's node_modules
67
+ // This is when someone runs `bunx agentuity` or has it as a project dependency
68
+ // At this point, we've ruled out global installs, so any node_modules path is local
32
69
  if (mainPath.includes('/node_modules/@agentuity/cli/')) {
33
70
  return 'local';
34
71
  }
35
- // Source/development: packages/cli/bin/cli.ts or similar
72
+ // SOURCE DETECTION: Running from source code (development)
73
+ // This is when running directly from the monorepo: packages/cli/bin/cli.ts
36
74
  return 'source';
37
75
  }
38
76
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"installation-type.js","sourceRoot":"","sources":["../../src/utils/installation-type.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AAIzB;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB;IAClC,uEAAuE;IACvE,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC9C,gFAAgF;IAChF,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE5D,2EAA2E;IAC3E,uEAAuE;IACvE,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;IAC/E,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACjG,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5D,uFAAuF;IACvF,+DAA+D;IAC/D,IAAI,YAAY,IAAI,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC1D,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,qEAAqE;IACrE,IAAI,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;QAChD,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,2DAA2D;IAC3D,IAAI,QAAQ,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE,CAAC;QACxD,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,yDAAyD;IACzD,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC9B,OAAO,mBAAmB,EAAE,KAAK,QAAQ,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC7B,OAAO,mBAAmB,EAAE,KAAK,OAAO,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC9B,OAAO,mBAAmB,EAAE,KAAK,QAAQ,CAAC;AAC3C,CAAC"}
1
+ {"version":3,"file":"installation-type.js","sourceRoot":"","sources":["../../src/utils/installation-type.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AAIzB;;;GAGG;AACH,SAAS,eAAe,CAAC,IAAY;IACpC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,IAAI,CAAC;QACJ,0EAA0E;QAC1E,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACR,6EAA6E;QAC7E,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACjC,CAAC;AACF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB;IAClC,6EAA6E;IAC7E,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE9C,mDAAmD;IACnD,kEAAkE;IAClE,MAAM,IAAI,GAAG,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IAEhG,kEAAkE;IAClE,iGAAiG;IACjG,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9E,MAAM,UAAU,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;IAElD,wEAAwE;IACxE,wFAAwF;IACxF,wDAAwD;IACxD,IAAI,UAAU,EAAE,CAAC;QAChB,2EAA2E;QAC3E,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,UAAU,+BAA+B,CAAC,EAAE,CAAC;YACvE,OAAO,QAAQ,CAAC;QACjB,CAAC;QACD,oFAAoF;QACpF,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,UAAU,kBAAkB,CAAC,EAAE,CAAC;YAC1D,OAAO,QAAQ,CAAC;QACjB,CAAC;IACF,CAAC;IAED,gEAAgE;IAChE,iFAAiF;IACjF,iDAAiD;IACjD,IAAI,IAAI,EAAE,CAAC;QACV,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,IAAI,aAAa,CAAC,CAAC;QAC3D,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,YAAY,GAAG,CAAC,EAAE,CAAC;YAC7C,OAAO,QAAQ,CAAC;QACjB,CAAC;IACF,CAAC;IAED,sFAAsF;IACtF,4EAA4E;IAC5E,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE,CAAC;QACvF,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,yDAAyD;IACzD,+EAA+E;IAC/E,oFAAoF;IACpF,IAAI,QAAQ,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE,CAAC;QACxD,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,2DAA2D;IAC3D,2EAA2E;IAC3E,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC9B,OAAO,mBAAmB,EAAE,KAAK,QAAQ,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC7B,OAAO,mBAAmB,EAAE,KAAK,OAAO,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC9B,OAAO,mBAAmB,EAAE,KAAK,QAAQ,CAAC;AAC3C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentuity/cli",
3
- "version": "0.1.33",
3
+ "version": "0.1.34",
4
4
  "license": "Apache-2.0",
5
5
  "author": "Agentuity employees and contributors",
6
6
  "type": "module",
@@ -40,9 +40,9 @@
40
40
  "prepublishOnly": "bun run clean && bun run build"
41
41
  },
42
42
  "dependencies": {
43
- "@agentuity/auth": "0.1.33",
44
- "@agentuity/core": "0.1.33",
45
- "@agentuity/server": "0.1.33",
43
+ "@agentuity/auth": "0.1.34",
44
+ "@agentuity/core": "0.1.34",
45
+ "@agentuity/server": "0.1.34",
46
46
  "@datasert/cronjs-parser": "^1.4.0",
47
47
  "@terascope/fetch-github-release": "^2.2.1",
48
48
  "@vitejs/plugin-react": "^5.1.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": "0.1.33"
63
+ "@agentuity/frontend": "0.1.34"
64
64
  },
65
65
  "devDependencies": {
66
- "@agentuity/test-utils": "0.1.33",
66
+ "@agentuity/test-utils": "0.1.34",
67
67
  "@types/adm-zip": "^0.5.7",
68
68
  "@types/bun": "latest",
69
69
  "@types/tar-fs": "^2.0.4",
@@ -7,8 +7,8 @@ import { getCommand } from '../../../command-prefix';
7
7
  import { sandboxExecute, executionGet, writeAndDrain } from '@agentuity/server';
8
8
  import type { Logger } from '@agentuity/core';
9
9
 
10
- const POLL_INTERVAL_MS = 500;
11
- const MAX_POLL_ATTEMPTS = 7200;
10
+ // Server-side long-poll wait duration (max 5 minutes supported by server)
11
+ const EXECUTION_WAIT_DURATION = '5m';
12
12
 
13
13
  const SandboxExecResponseSchema = z.object({
14
14
  executionId: z.string().describe('Unique execution identifier'),
@@ -115,41 +115,14 @@ export const execSubcommand = createCommand({
115
115
  }
116
116
  }
117
117
 
118
- let attempts = 0;
119
- let finalExecution = execution;
120
-
121
- while (attempts < MAX_POLL_ATTEMPTS) {
122
- if (abortController.signal.aborted) {
123
- throw new Error('Execution cancelled');
124
- }
125
-
126
- await sleep(POLL_INTERVAL_MS);
127
- attempts++;
128
-
129
- try {
130
- const execInfo = await executionGet(client, {
131
- executionId: execution.executionId,
132
- orgId,
133
- });
134
-
135
- if (
136
- execInfo.status === 'completed' ||
137
- execInfo.status === 'failed' ||
138
- execInfo.status === 'timeout' ||
139
- execInfo.status === 'cancelled'
140
- ) {
141
- finalExecution = {
142
- executionId: execInfo.executionId,
143
- status: execInfo.status,
144
- exitCode: execInfo.exitCode,
145
- durationMs: execInfo.durationMs,
146
- };
147
- break;
148
- }
149
- } catch {
150
- continue;
151
- }
152
- }
118
+ // Use server-side long-polling to wait for execution completion
119
+ // This is more efficient than client-side polling and provides immediate
120
+ // error detection if the sandbox is terminated
121
+ const finalExecution = await executionGet(client, {
122
+ executionId: execution.executionId,
123
+ orgId,
124
+ wait: EXECUTION_WAIT_DURATION,
125
+ });
153
126
 
154
127
  // Wait for all streams to reach EOF (Pulse blocks until true EOF)
155
128
  await Promise.all(streamPromises);
@@ -248,8 +221,4 @@ function createCaptureStream(onChunk: (chunk: string) => void): NodeJS.WritableS
248
221
  });
249
222
  }
250
223
 
251
- function sleep(ms: number): Promise<void> {
252
- return new Promise((resolve) => setTimeout(resolve, ms));
253
- }
254
-
255
224
  export default execSubcommand;
@@ -2,10 +2,26 @@
2
2
  * Detects how the CLI was installed and is being run
3
3
  */
4
4
 
5
+ import fs from 'node:fs';
5
6
  import os from 'node:os';
6
7
 
7
8
  export type InstallationType = 'global' | 'local' | 'source';
8
9
 
10
+ /**
11
+ * Resolve a path to its real path (following symlinks) and normalize to POSIX separators.
12
+ * Returns the original path if resolution fails.
13
+ */
14
+ function resolveRealPath(path: string): string {
15
+ if (!path) return '';
16
+ try {
17
+ // fs.realpathSync resolves symlinks (e.g., /tmp -> /private/tmp on macOS)
18
+ return fs.realpathSync(path).replace(/\\/g, '/');
19
+ } catch {
20
+ // If the path doesn't exist or can't be resolved, return normalized original
21
+ return path.replace(/\\/g, '/');
22
+ }
23
+ }
24
+
9
25
  /**
10
26
  * Determines the installation type based on how the CLI is being executed
11
27
  *
@@ -14,34 +30,57 @@ export type InstallationType = 'global' | 'local' | 'source';
14
30
  * @returns 'source' - Running from source code (development)
15
31
  */
16
32
  export function getInstallationType(): InstallationType {
17
- // Normalize paths to POSIX separators for cross-platform compatibility
33
+ // Bun.main already returns the resolved real path, just normalize separators
18
34
  const mainPath = Bun.main.replace(/\\/g, '/');
19
- // Bun.argv[1] contains the original invocation path (before symlink resolution)
20
- const invokedPath = (Bun.argv[1] ?? '').replace(/\\/g, '/');
21
35
 
22
- // Get bun's global bin directory from BUN_INSTALL or default to ~/.bun/bin
23
- // Use os.homedir() as primary fallback to avoid "undefined/.bun" paths
24
- const home = os.homedir() ?? process.env.HOME ?? process.env.USERPROFILE ?? '';
25
- const bunInstall = (process.env.BUN_INSTALL ?? (home ? `${home}/.bun` : '')).replace(/\\/g, '/');
26
- const globalBinDir = bunInstall ? `${bunInstall}/bin/` : '';
36
+ // Get home directory reliably and resolve symlinks
37
+ // On macOS, os.homedir() returns /Users/xxx which is already real
38
+ const home = resolveRealPath(os.homedir() ?? process.env.HOME ?? process.env.USERPROFILE ?? '');
27
39
 
28
- // Global install: invoked from bun's global bin directory (e.g., ~/.bun/bin/agentuity)
29
- // This handles symlinks created by `bun add -g @agentuity/cli`
30
- if (globalBinDir && invokedPath.startsWith(globalBinDir)) {
31
- return 'global';
40
+ // Get bun install directory from BUN_INSTALL or default to ~/.bun
41
+ // Resolve symlinks to handle cases like BUN_INSTALL=/tmp/... on macOS where /tmp -> /private/tmp
42
+ const bunInstallRaw = process.env.BUN_INSTALL ?? (home ? `${home}/.bun` : '');
43
+ const bunInstall = resolveRealPath(bunInstallRaw);
44
+
45
+ // GLOBAL DETECTION: Check if running from bun's global install location
46
+ // When installed via `bun add -g`, the CLI lives at ~/.bun/node_modules/@agentuity/cli/
47
+ // or ~/.bun/install/global/node_modules/@agentuity/cli/
48
+ if (bunInstall) {
49
+ // Check for ~/.bun/node_modules/@agentuity/cli/ (common bun global layout)
50
+ if (mainPath.startsWith(`${bunInstall}/node_modules/@agentuity/cli/`)) {
51
+ return 'global';
52
+ }
53
+ // Check for ~/.bun/install/global/node_modules/@agentuity/cli/ (alternative layout)
54
+ if (mainPath.startsWith(`${bunInstall}/install/global/`)) {
55
+ return 'global';
56
+ }
57
+ }
58
+
59
+ // GLOBAL DETECTION: Check for legacy ~/.agentuity/ installation
60
+ // The install.sh script may install to ~/.agentuity/node_modules/@agentuity/cli/
61
+ // or create a shim at ~/.agentuity/bin/agentuity
62
+ if (home) {
63
+ const agentuityDir = resolveRealPath(`${home}/.agentuity`);
64
+ if (mainPath.startsWith(`${agentuityDir}/`)) {
65
+ return 'global';
66
+ }
32
67
  }
33
68
 
34
- // Also check the resolved path for explicit global install locations
35
- if (mainPath.includes('/.bun/install/global/')) {
69
+ // GLOBAL DETECTION: Fallback check for any path containing /.bun/ before node_modules
70
+ // This catches edge cases where BUN_INSTALL might not match the actual path
71
+ if (mainPath.includes('/.bun/') && mainPath.includes('/node_modules/@agentuity/cli/')) {
36
72
  return 'global';
37
73
  }
38
74
 
39
- // Local project install: ./node_modules/@agentuity/cli/...
75
+ // LOCAL DETECTION: Running from a project's node_modules
76
+ // This is when someone runs `bunx agentuity` or has it as a project dependency
77
+ // At this point, we've ruled out global installs, so any node_modules path is local
40
78
  if (mainPath.includes('/node_modules/@agentuity/cli/')) {
41
79
  return 'local';
42
80
  }
43
81
 
44
- // Source/development: packages/cli/bin/cli.ts or similar
82
+ // SOURCE DETECTION: Running from source code (development)
83
+ // This is when running directly from the monorepo: packages/cli/bin/cli.ts
45
84
  return 'source';
46
85
  }
47
86