@agentuity/server 1.0.19 → 1.0.21
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/api/queue/websocket.d.ts +24 -0
- package/dist/api/queue/websocket.d.ts.map +1 -1
- package/dist/api/queue/websocket.js +20 -2
- package/dist/api/queue/websocket.js.map +1 -1
- package/dist/api/sandbox/getStatus.d.ts +16 -0
- package/dist/api/sandbox/getStatus.d.ts.map +1 -0
- package/dist/api/sandbox/getStatus.js +32 -0
- package/dist/api/sandbox/getStatus.js.map +1 -0
- package/dist/api/sandbox/index.d.ts +2 -0
- package/dist/api/sandbox/index.d.ts.map +1 -1
- package/dist/api/sandbox/index.js +1 -0
- package/dist/api/sandbox/index.js.map +1 -1
- package/dist/api/sandbox/run.d.ts.map +1 -1
- package/dist/api/sandbox/run.js +94 -70
- package/dist/api/sandbox/run.js.map +1 -1
- package/package.json +4 -4
- package/src/api/queue/websocket.ts +28 -2
- package/src/api/sandbox/getStatus.ts +54 -0
- package/src/api/sandbox/index.ts +2 -0
- package/src/api/sandbox/run.ts +103 -78
|
@@ -26,6 +26,22 @@
|
|
|
26
26
|
* connection.close();
|
|
27
27
|
* ```
|
|
28
28
|
*
|
|
29
|
+
* @example Resuming from a previous session
|
|
30
|
+
* ```typescript
|
|
31
|
+
* import { createQueueWebSocket } from '@agentuity/server';
|
|
32
|
+
*
|
|
33
|
+
* // Use a previously obtained clientId and lastOffset to resume
|
|
34
|
+
* const connection = createQueueWebSocket({
|
|
35
|
+
* queueName: 'order-processing',
|
|
36
|
+
* baseUrl: 'https://catalyst.agentuity.cloud',
|
|
37
|
+
* clientId: previousClientId,
|
|
38
|
+
* lastOffset: previousOffset,
|
|
39
|
+
* onMessage: (message) => {
|
|
40
|
+
* console.log('Received:', message.id, message.payload);
|
|
41
|
+
* },
|
|
42
|
+
* });
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
29
45
|
* @example Async iterator API
|
|
30
46
|
* ```typescript
|
|
31
47
|
* import { subscribeToQueue } from '@agentuity/server';
|
|
@@ -67,6 +83,10 @@ export interface QueueWebSocketOptions {
|
|
|
67
83
|
reconnectDelayMs?: number;
|
|
68
84
|
/** Maximum reconnection delay in ms (default: 30000). */
|
|
69
85
|
maxReconnectDelayMs?: number;
|
|
86
|
+
/** Optional client ID from a previous session to resume a subscription. */
|
|
87
|
+
clientId?: string;
|
|
88
|
+
/** Optional last processed offset from a previous session to resume from. */
|
|
89
|
+
lastOffset?: number;
|
|
70
90
|
}
|
|
71
91
|
/** Return type from {@link createQueueWebSocket}. */
|
|
72
92
|
export interface QueueWebSocketConnection {
|
|
@@ -89,6 +109,10 @@ export interface SubscribeToQueueOptions {
|
|
|
89
109
|
baseUrl: string;
|
|
90
110
|
/** AbortSignal to stop the subscription. */
|
|
91
111
|
signal?: AbortSignal;
|
|
112
|
+
/** Optional client ID from a previous session to resume a subscription. */
|
|
113
|
+
clientId?: string;
|
|
114
|
+
/** Optional last processed offset from a previous session to resume from. */
|
|
115
|
+
lastOffset?: number;
|
|
92
116
|
}
|
|
93
117
|
/**
|
|
94
118
|
* Create a WebSocket connection to receive real-time messages from a queue.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../../src/api/queue/websocket.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../../src/api/queue/websocket.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAS1C,yDAAyD;AACzD,MAAM,MAAM,mBAAmB,GAC5B,YAAY,GACZ,gBAAgB,GAChB,WAAW,GACX,cAAc,GACd,QAAQ,CAAC;AAEZ,2DAA2D;AAC3D,MAAM,WAAW,qBAAqB;IACrC,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,mCAAmC;IACnC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,2EAA2E;IAC3E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mEAAmE;IACnE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kFAAkF;IAClF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yDAAyD;IACzD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qDAAqD;AACrD,MAAM,WAAW,wBAAwB;IACxC,+DAA+D;IAC/D,KAAK,IAAI,IAAI,CAAC;IACd,oCAAoC;IACpC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;IACpC,sFAAsF;IACtF,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,gDAAgD;IAChD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,yDAAyD;AACzD,MAAM,WAAW,uBAAuB;IACvC,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAqCD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,wBAAwB,CA8M7F;AAMD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAuB,gBAAgB,CACtC,OAAO,EAAE,uBAAuB,GAC9B,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAiFxC"}
|
|
@@ -26,6 +26,22 @@
|
|
|
26
26
|
* connection.close();
|
|
27
27
|
* ```
|
|
28
28
|
*
|
|
29
|
+
* @example Resuming from a previous session
|
|
30
|
+
* ```typescript
|
|
31
|
+
* import { createQueueWebSocket } from '@agentuity/server';
|
|
32
|
+
*
|
|
33
|
+
* // Use a previously obtained clientId and lastOffset to resume
|
|
34
|
+
* const connection = createQueueWebSocket({
|
|
35
|
+
* queueName: 'order-processing',
|
|
36
|
+
* baseUrl: 'https://catalyst.agentuity.cloud',
|
|
37
|
+
* clientId: previousClientId,
|
|
38
|
+
* lastOffset: previousOffset,
|
|
39
|
+
* onMessage: (message) => {
|
|
40
|
+
* console.log('Received:', message.id, message.payload);
|
|
41
|
+
* },
|
|
42
|
+
* });
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
29
45
|
* @example Async iterator API
|
|
30
46
|
* ```typescript
|
|
31
47
|
* import { subscribeToQueue } from '@agentuity/server';
|
|
@@ -109,8 +125,8 @@ export function createQueueWebSocket(options) {
|
|
|
109
125
|
let intentionallyClosed = false;
|
|
110
126
|
let reconnectAttempts = 0;
|
|
111
127
|
let reconnectTimer = null;
|
|
112
|
-
let clientId;
|
|
113
|
-
let lastProcessedOffset;
|
|
128
|
+
let clientId = options.clientId;
|
|
129
|
+
let lastProcessedOffset = options.lastOffset;
|
|
114
130
|
function connect() {
|
|
115
131
|
if (intentionallyClosed)
|
|
116
132
|
return;
|
|
@@ -330,6 +346,8 @@ export async function* subscribeToQueue(options) {
|
|
|
330
346
|
queueName: options.queueName,
|
|
331
347
|
apiKey: options.apiKey,
|
|
332
348
|
baseUrl: options.baseUrl,
|
|
349
|
+
clientId: options.clientId,
|
|
350
|
+
lastOffset: options.lastOffset,
|
|
333
351
|
onMessage: push,
|
|
334
352
|
onError: (err) => finish(err),
|
|
335
353
|
onClose: () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/api/queue/websocket.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/api/queue/websocket.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type APIClient } from '../api.ts';
|
|
2
|
+
export interface SandboxGetStatusParams {
|
|
3
|
+
sandboxId: string;
|
|
4
|
+
orgId?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface SandboxStatusResult {
|
|
7
|
+
sandboxId: string;
|
|
8
|
+
status: string;
|
|
9
|
+
exitCode?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Retrieves lightweight sandbox status (status + exitCode only).
|
|
13
|
+
* Optimized for the sandbox run flow — backed by Redis for ~1ms response time.
|
|
14
|
+
*/
|
|
15
|
+
export declare function sandboxGetStatus(client: APIClient, params: SandboxGetStatusParams): Promise<SandboxStatusResult>;
|
|
16
|
+
//# sourceMappingURL=getStatus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getStatus.d.ts","sourceRoot":"","sources":["../../../src/api/sandbox/getStatus.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,WAAW,CAAC;AAW9D,MAAM,WAAW,sBAAsB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACrC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,sBAAsB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAuB9B"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { APIResponseSchema } from "../api.js";
|
|
3
|
+
import { API_VERSION, throwSandboxError } from "./util.js";
|
|
4
|
+
const SandboxStatusDataSchema = z.object({
|
|
5
|
+
sandboxId: z.string(),
|
|
6
|
+
status: z.string(),
|
|
7
|
+
exitCode: z.number().optional(),
|
|
8
|
+
});
|
|
9
|
+
const SandboxStatusResponseSchema = APIResponseSchema(SandboxStatusDataSchema);
|
|
10
|
+
/**
|
|
11
|
+
* Retrieves lightweight sandbox status (status + exitCode only).
|
|
12
|
+
* Optimized for the sandbox run flow — backed by Redis for ~1ms response time.
|
|
13
|
+
*/
|
|
14
|
+
export async function sandboxGetStatus(client, params) {
|
|
15
|
+
const { sandboxId, orgId } = params;
|
|
16
|
+
const queryParams = new URLSearchParams();
|
|
17
|
+
if (orgId) {
|
|
18
|
+
queryParams.set('orgId', orgId);
|
|
19
|
+
}
|
|
20
|
+
const queryString = queryParams.toString();
|
|
21
|
+
const url = `/sandbox/${API_VERSION}/status/${sandboxId}${queryString ? `?${queryString}` : ''}`;
|
|
22
|
+
const resp = await client.get(url, SandboxStatusResponseSchema);
|
|
23
|
+
if (resp.success) {
|
|
24
|
+
return {
|
|
25
|
+
sandboxId: resp.data.sandboxId,
|
|
26
|
+
status: resp.data.status,
|
|
27
|
+
exitCode: resp.data.exitCode,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
throwSandboxError(resp, { sandboxId });
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=getStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getStatus.js","sourceRoot":"","sources":["../../../src/api/sandbox/getStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAkB,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE3D,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAEH,MAAM,2BAA2B,GAAG,iBAAiB,CAAC,uBAAuB,CAAC,CAAC;AAa/E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACrC,MAAiB,EACjB,MAA8B;IAE9B,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IACpC,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC;IAC1C,IAAI,KAAK,EAAE,CAAC;QACX,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;IAC3C,MAAM,GAAG,GAAG,YAAY,WAAW,WAAW,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAEjG,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAC5B,GAAG,EACH,2BAA2B,CAC3B,CAAC;IAEF,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO;YACN,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;YAC9B,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;YACxB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;SAC5B,CAAC;IACH,CAAC;IAED,iBAAiB,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -18,6 +18,8 @@ export type { ArchiveFormat, DownloadArchiveParams, FileInfo, ListFilesParams, L
|
|
|
18
18
|
export { FileInfoSchema, FileToWriteSchema, ListFilesDataSchema, ListFilesResponseSchema, MkDirRequestSchema, MkDirResponseSchema, RmDirRequestSchema, RmDirResponseSchema, RmFileRequestSchema, RmFileResponseSchema, SetEnvDataSchema, SetEnvRequestSchema, SetEnvResponseSchema, sandboxDownloadArchive, sandboxListFiles, sandboxMkDir, sandboxReadFile, sandboxRmDir, sandboxRmFile, sandboxSetEnv, sandboxUploadArchive, sandboxWriteFiles, UploadArchiveResponseSchema, WriteFilesDataSchema, WriteFilesRequestSchema, WriteFilesResponseSchema, } from './files.ts';
|
|
19
19
|
export type { SandboxGetParams } from './get.ts';
|
|
20
20
|
export { SandboxAgentInfoSchema, SandboxGetResponseSchema, SandboxInfoDataSchema, SandboxProjectInfoSchema, SandboxResourcesSchema, SandboxUserInfoSchema, sandboxGet, } from './get.ts';
|
|
21
|
+
export type { SandboxGetStatusParams, SandboxStatusResult } from './getStatus.ts';
|
|
22
|
+
export { sandboxGetStatus } from './getStatus.ts';
|
|
21
23
|
export type { SandboxListParams } from './list.ts';
|
|
22
24
|
export { ListSandboxesDataSchema, ListSandboxesResponseSchema, SandboxInfoSchema, SandboxOrgInfoSchema, SandboxRuntimeInfoSchema, SandboxSnapshotInfoSchema, SandboxSnapshotOrgInfoSchema, SandboxSnapshotUserInfoSchema, sandboxList, } from './list.ts';
|
|
23
25
|
export type { ResolvedSandboxInfo } from './resolve.ts';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/sandbox/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/sandbox/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ export { ExecuteDataSchema, ExecuteRequestSchema, ExecuteResponseSchema, sandbox
|
|
|
8
8
|
export { ExecutionGetResponseSchema, ExecutionInfoSchema, ExecutionListDataSchema, ExecutionListResponseSchema, executionGet, executionList, } from "./execution.js";
|
|
9
9
|
export { FileInfoSchema, FileToWriteSchema, ListFilesDataSchema, ListFilesResponseSchema, MkDirRequestSchema, MkDirResponseSchema, RmDirRequestSchema, RmDirResponseSchema, RmFileRequestSchema, RmFileResponseSchema, SetEnvDataSchema, SetEnvRequestSchema, SetEnvResponseSchema, sandboxDownloadArchive, sandboxListFiles, sandboxMkDir, sandboxReadFile, sandboxRmDir, sandboxRmFile, sandboxSetEnv, sandboxUploadArchive, sandboxWriteFiles, UploadArchiveResponseSchema, WriteFilesDataSchema, WriteFilesRequestSchema, WriteFilesResponseSchema, } from "./files.js";
|
|
10
10
|
export { SandboxAgentInfoSchema, SandboxGetResponseSchema, SandboxInfoDataSchema, SandboxProjectInfoSchema, SandboxResourcesSchema, SandboxUserInfoSchema, sandboxGet, } from "./get.js";
|
|
11
|
+
export { sandboxGetStatus } from "./getStatus.js";
|
|
11
12
|
export { ListSandboxesDataSchema, ListSandboxesResponseSchema, SandboxInfoSchema, SandboxOrgInfoSchema, SandboxRuntimeInfoSchema, SandboxSnapshotInfoSchema, SandboxSnapshotOrgInfoSchema, SandboxSnapshotUserInfoSchema, sandboxList, } from "./list.js";
|
|
12
13
|
export { SandboxResolveDataSchema, SandboxResolveError, SandboxResolveResponseSchema, sandboxResolve, } from "./resolve.js";
|
|
13
14
|
export { sandboxRun } from "./run.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/sandbox/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAOjG,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EACN,uBAAuB,EACvB,0BAA0B,EAC1B,2BAA2B,EAC3B,aAAa,GACb,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAErE,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/D,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAElE,OAAO,EACN,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,GACd,MAAM,cAAc,CAAC;AAOtB,OAAO,EACN,0BAA0B,EAC1B,mBAAmB,EACnB,uBAAuB,EACvB,2BAA2B,EAC3B,YAAY,EACZ,aAAa,GACb,MAAM,gBAAgB,CAAC;AAiBxB,OAAO,EACN,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EACjB,2BAA2B,EAC3B,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,GACxB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACN,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,UAAU,GACV,MAAM,UAAU,CAAC;AAElB,OAAO,EACN,uBAAuB,EACvB,2BAA2B,EAC3B,iBAAiB,EACjB,oBAAoB,EACpB,wBAAwB,EACxB,yBAAyB,EACzB,4BAA4B,EAC5B,6BAA6B,EAC7B,WAAW,GACX,MAAM,WAAW,CAAC;AAEnB,OAAO,EACN,wBAAwB,EACxB,mBAAmB,EACnB,4BAA4B,EAC5B,cAAc,GACd,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,OAAO,EACN,sBAAsB,EACtB,0BAA0B,EAC1B,iBAAiB,EACjB,yBAAyB,EACzB,WAAW,GACX,MAAM,cAAc,CAAC;AAsBtB,OAAO,EACN,0BAA0B,EAC1B,kCAAkC,EAClC,+BAA+B,EAC/B,4BAA4B,EAC5B,4BAA4B,EAC5B,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,yBAAyB,EACzB,0BAA0B,EAC1B,6BAA6B,EAC7B,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,4BAA4B,EAC5B,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,WAAW,EACX,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACX,cAAc,GACd,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAExF,OAAO,EACN,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,GACb,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/sandbox/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAOjG,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EACN,uBAAuB,EACvB,0BAA0B,EAC1B,2BAA2B,EAC3B,aAAa,GACb,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAErE,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/D,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAElE,OAAO,EACN,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,GACd,MAAM,cAAc,CAAC;AAOtB,OAAO,EACN,0BAA0B,EAC1B,mBAAmB,EACnB,uBAAuB,EACvB,2BAA2B,EAC3B,YAAY,EACZ,aAAa,GACb,MAAM,gBAAgB,CAAC;AAiBxB,OAAO,EACN,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EACjB,2BAA2B,EAC3B,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,GACxB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACN,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,UAAU,GACV,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,EACN,uBAAuB,EACvB,2BAA2B,EAC3B,iBAAiB,EACjB,oBAAoB,EACpB,wBAAwB,EACxB,yBAAyB,EACzB,4BAA4B,EAC5B,6BAA6B,EAC7B,WAAW,GACX,MAAM,WAAW,CAAC;AAEnB,OAAO,EACN,wBAAwB,EACxB,mBAAmB,EACnB,4BAA4B,EAC5B,cAAc,GACd,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,OAAO,EACN,sBAAsB,EACtB,0BAA0B,EAC1B,iBAAiB,EACjB,yBAAyB,EACzB,WAAW,GACX,MAAM,cAAc,CAAC;AAsBtB,OAAO,EACN,0BAA0B,EAC1B,kCAAkC,EAClC,+BAA+B,EAC/B,4BAA4B,EAC5B,4BAA4B,EAC5B,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,yBAAyB,EACzB,0BAA0B,EAC1B,6BAA6B,EAC7B,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,4BAA4B,EAC5B,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,WAAW,EACX,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACX,cAAc,GACd,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAExF,OAAO,EACN,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,GACb,MAAM,WAAW,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/api/sandbox/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAwB,MAAM,WAAW,CAAC;AAK5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/api/sandbox/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAwB,MAAM,WAAW,CAAC;AAK5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AA+B3E,MAAM,WAAW,gBAAgB;IAChC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAC/B,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,gBAAgB,GACtB,OAAO,CAAC,gBAAgB,CAAC,CA0M3B"}
|
package/dist/api/sandbox/run.js
CHANGED
|
@@ -2,9 +2,10 @@ import { PassThrough } from 'node:stream';
|
|
|
2
2
|
import { PaymentRequiredError } from "../api.js";
|
|
3
3
|
import { sandboxCreate } from "./create.js";
|
|
4
4
|
import { sandboxDestroy } from "./destroy.js";
|
|
5
|
-
import {
|
|
6
|
-
import { ExecutionCancelledError,
|
|
5
|
+
import { sandboxGetStatus } from "./getStatus.js";
|
|
6
|
+
import { ExecutionCancelledError, writeAndDrain } from "./util.js";
|
|
7
7
|
import { getServiceUrls } from "../../config.js";
|
|
8
|
+
const timingLogsEnabled = false;
|
|
8
9
|
/**
|
|
9
10
|
* Creates a Writable stream that captures all chunks to a buffer array
|
|
10
11
|
* and optionally tees (forwards) them to one or more user-provided streams.
|
|
@@ -22,13 +23,11 @@ function createTeeWritable(chunks, ...userStreams) {
|
|
|
22
23
|
// Pipe to all provided user streams with proper backpressure handling
|
|
23
24
|
for (const userStream of userStreams) {
|
|
24
25
|
if (userStream) {
|
|
25
|
-
tee.pipe(userStream);
|
|
26
|
+
tee.pipe(userStream, { end: false });
|
|
26
27
|
}
|
|
27
28
|
}
|
|
28
29
|
return tee;
|
|
29
30
|
}
|
|
30
|
-
const POLL_INTERVAL_MS = 500;
|
|
31
|
-
const MAX_POLL_ATTEMPTS = 7200;
|
|
32
31
|
/**
|
|
33
32
|
* Creates a sandbox, executes a command, and waits for completion.
|
|
34
33
|
*
|
|
@@ -43,6 +42,8 @@ const MAX_POLL_ATTEMPTS = 7200;
|
|
|
43
42
|
export async function sandboxRun(client, params) {
|
|
44
43
|
const { options, orgId, region, apiKey, signal, stdin, stdout, stderr, logger } = params;
|
|
45
44
|
const started = Date.now();
|
|
45
|
+
if (timingLogsEnabled)
|
|
46
|
+
console.error(`[TIMING] +0ms: sandbox run started`);
|
|
46
47
|
let stdinStreamId;
|
|
47
48
|
let stdinStreamUrl;
|
|
48
49
|
// If stdin is provided and has data, create a stream for it
|
|
@@ -71,6 +72,8 @@ export async function sandboxRun(client, params) {
|
|
|
71
72
|
const stdoutStreamUrl = createResponse.stdoutStreamUrl;
|
|
72
73
|
const stderrStreamUrl = createResponse.stderrStreamUrl;
|
|
73
74
|
logger?.debug('sandbox created: %s, stdoutUrl: %s, stderrUrl: %s', sandboxId, stdoutStreamUrl ?? 'none', stderrStreamUrl ?? 'none');
|
|
75
|
+
if (timingLogsEnabled)
|
|
76
|
+
console.error(`[TIMING] +${Date.now() - started}ms: sandbox created (${sandboxId})`);
|
|
74
77
|
const abortController = new AbortController();
|
|
75
78
|
const streamPromises = [];
|
|
76
79
|
// Create capture buffers for stdout/stderr
|
|
@@ -85,12 +88,11 @@ export async function sandboxRun(client, params) {
|
|
|
85
88
|
// Check if stdout and stderr are the same stream (combined output)
|
|
86
89
|
const isCombinedOutput = stdoutStreamUrl && stderrStreamUrl && stdoutStreamUrl === stderrStreamUrl;
|
|
87
90
|
if (isCombinedOutput) {
|
|
88
|
-
// Stream combined output
|
|
91
|
+
// Stream combined output to stdout only to avoid duplicates
|
|
89
92
|
if (stdoutStreamUrl) {
|
|
90
93
|
logger?.debug('using combined output stream (stdout === stderr)');
|
|
91
|
-
|
|
92
|
-
const
|
|
93
|
-
const combinedPromise = streamUrlToWritable(stdoutStreamUrl, teeStream, abortController.signal, logger);
|
|
94
|
+
const teeStream = createTeeWritable(stdoutChunks, stdout);
|
|
95
|
+
const combinedPromise = streamUrlToWritable(stdoutStreamUrl, teeStream, abortController.signal, logger, started);
|
|
94
96
|
streamPromises.push(combinedPromise);
|
|
95
97
|
}
|
|
96
98
|
}
|
|
@@ -98,82 +100,94 @@ export async function sandboxRun(client, params) {
|
|
|
98
100
|
// Start stdout streaming with capture
|
|
99
101
|
if (stdoutStreamUrl) {
|
|
100
102
|
const teeStream = createTeeWritable(stdoutChunks, stdout);
|
|
101
|
-
const stdoutPromise = streamUrlToWritable(stdoutStreamUrl, teeStream, abortController.signal, logger);
|
|
103
|
+
const stdoutPromise = streamUrlToWritable(stdoutStreamUrl, teeStream, abortController.signal, logger, started);
|
|
102
104
|
streamPromises.push(stdoutPromise);
|
|
103
105
|
}
|
|
104
106
|
// Start stderr streaming with capture
|
|
105
107
|
if (stderrStreamUrl) {
|
|
106
108
|
const teeStream = createTeeWritable(stderrChunks, stderr);
|
|
107
|
-
const stderrPromise = streamUrlToWritable(stderrStreamUrl, teeStream, abortController.signal, logger);
|
|
109
|
+
const stderrPromise = streamUrlToWritable(stderrStreamUrl, teeStream, abortController.signal, logger, started);
|
|
108
110
|
streamPromises.push(stderrPromise);
|
|
109
111
|
}
|
|
110
112
|
}
|
|
111
|
-
//
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
113
|
+
// Wait for streams to complete — Pulse closes streams on sandbox termination (EOF).
|
|
114
|
+
// This is our primary completion signal; no polling needed.
|
|
115
|
+
logger?.debug('waiting for streams to complete...');
|
|
116
|
+
if (streamPromises.length > 0) {
|
|
117
|
+
if (signal) {
|
|
118
|
+
// Race streams against abort signal, cleaning up the listener
|
|
119
|
+
// in all cases so an orphaned reject cannot fire after settlement.
|
|
120
|
+
let onAbort;
|
|
121
|
+
try {
|
|
122
|
+
await Promise.race([
|
|
123
|
+
Promise.allSettled(streamPromises),
|
|
124
|
+
new Promise((_, reject) => {
|
|
125
|
+
onAbort = () => {
|
|
126
|
+
abortController.abort();
|
|
127
|
+
reject(new ExecutionCancelledError({
|
|
128
|
+
message: 'Sandbox execution cancelled',
|
|
129
|
+
sandboxId,
|
|
130
|
+
}));
|
|
131
|
+
};
|
|
132
|
+
if (signal.aborted) {
|
|
133
|
+
onAbort();
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
137
|
+
}
|
|
138
|
+
}),
|
|
139
|
+
]);
|
|
131
140
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
141
|
+
finally {
|
|
142
|
+
if (onAbort && signal) {
|
|
143
|
+
signal.removeEventListener('abort', onAbort);
|
|
144
|
+
}
|
|
136
145
|
}
|
|
137
146
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
continue;
|
|
147
|
+
else {
|
|
148
|
+
await Promise.allSettled(streamPromises);
|
|
141
149
|
}
|
|
142
150
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
151
|
+
else {
|
|
152
|
+
// No streams available (shouldn't happen for oneshot, but handle defensively).
|
|
153
|
+
// Fall back to a single wait then check.
|
|
154
|
+
logger?.debug('no streams to wait on, checking sandbox status directly');
|
|
155
|
+
}
|
|
156
|
+
if (timingLogsEnabled)
|
|
157
|
+
console.error(`[TIMING] +${Date.now() - started}ms: all streams done, fetching exit code`);
|
|
158
|
+
logger?.debug('streams completed, fetching final status');
|
|
159
|
+
// Stream EOF means the sandbox is done — hadron only closes streams after the
|
|
160
|
+
// container exits. Fetch status once for the exit code; if lifecycle events
|
|
161
|
+
// haven't propagated to Catalyst yet, default to exit code 0.
|
|
162
|
+
let exitCode = 0;
|
|
163
|
+
try {
|
|
164
|
+
const sandboxStatus = await sandboxGetStatus(client, { sandboxId, orgId });
|
|
165
|
+
if (sandboxStatus.exitCode != null) {
|
|
166
|
+
exitCode = sandboxStatus.exitCode;
|
|
167
|
+
}
|
|
168
|
+
else if (sandboxStatus.status === 'failed') {
|
|
169
|
+
exitCode = 1;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
// Sandbox may already be destroyed (fire-and-forget teardown).
|
|
174
|
+
// Stream EOF already confirmed execution completed.
|
|
175
|
+
logger?.debug('sandboxGetStatus failed after stream EOF, using default exit code 0');
|
|
176
|
+
}
|
|
177
|
+
if (timingLogsEnabled)
|
|
178
|
+
console.error(`[TIMING] +${Date.now() - started}ms: sandboxGet complete (exit: ${exitCode})`);
|
|
149
179
|
// Build captured output strings
|
|
150
180
|
const capturedStdout = Buffer.concat(stdoutChunks).toString('utf-8');
|
|
151
|
-
// For combined output, stderr is the same as stdout; otherwise use stderrChunks
|
|
152
181
|
const capturedStderr = isCombinedOutput
|
|
153
182
|
? capturedStdout
|
|
154
183
|
: Buffer.concat(stderrChunks).toString('utf-8');
|
|
155
|
-
|
|
156
|
-
return {
|
|
157
|
-
sandboxId,
|
|
158
|
-
exitCode: finalExitCode ?? 0,
|
|
159
|
-
durationMs: Date.now() - started,
|
|
160
|
-
stdout: capturedStdout,
|
|
161
|
-
stderr: capturedStderr,
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
|
-
if (finalStatus === 'failed') {
|
|
165
|
-
return {
|
|
166
|
-
sandboxId,
|
|
167
|
-
exitCode: finalExitCode ?? 1,
|
|
168
|
-
durationMs: Date.now() - started,
|
|
169
|
-
stdout: capturedStdout,
|
|
170
|
-
stderr: capturedStderr,
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
throw new ExecutionTimeoutError({
|
|
174
|
-
message: 'Sandbox execution polling timed out',
|
|
184
|
+
return {
|
|
175
185
|
sandboxId,
|
|
176
|
-
|
|
186
|
+
exitCode,
|
|
187
|
+
durationMs: Date.now() - started,
|
|
188
|
+
stdout: capturedStdout,
|
|
189
|
+
stderr: capturedStderr,
|
|
190
|
+
};
|
|
177
191
|
}
|
|
178
192
|
catch (error) {
|
|
179
193
|
abortController.abort();
|
|
@@ -281,28 +295,41 @@ async function streamStdinToUrl(stdin, url, apiKey, signal, logger) {
|
|
|
281
295
|
}
|
|
282
296
|
}
|
|
283
297
|
}
|
|
284
|
-
async function streamUrlToWritable(url, writable, signal, logger) {
|
|
298
|
+
async function streamUrlToWritable(url, writable, signal, logger, started) {
|
|
285
299
|
try {
|
|
286
300
|
logger?.debug('fetching stream: %s', url);
|
|
287
301
|
const response = await fetch(url, { signal });
|
|
288
302
|
logger?.debug('stream response status: %d', response.status);
|
|
303
|
+
if (timingLogsEnabled && started)
|
|
304
|
+
console.error(`[TIMING] +${Date.now() - started}ms: stream response received (status: ${response.status})`);
|
|
289
305
|
if (!response.ok || !response.body) {
|
|
290
306
|
logger?.debug('stream response not ok or no body');
|
|
291
307
|
return;
|
|
292
308
|
}
|
|
293
309
|
const reader = response.body.getReader();
|
|
310
|
+
let firstChunk = true;
|
|
294
311
|
// Read until EOF - Pulse will block until data is available
|
|
295
312
|
while (true) {
|
|
296
313
|
const { done, value } = await reader.read();
|
|
297
314
|
if (done) {
|
|
298
315
|
logger?.debug('stream EOF');
|
|
316
|
+
if (timingLogsEnabled && started)
|
|
317
|
+
console.error(`[TIMING] +${Date.now() - started}ms: stream EOF`);
|
|
299
318
|
break;
|
|
300
319
|
}
|
|
301
320
|
if (value) {
|
|
321
|
+
if (firstChunk && started) {
|
|
322
|
+
if (timingLogsEnabled)
|
|
323
|
+
console.error(`[TIMING] +${Date.now() - started}ms: first chunk (${value.length} bytes)`);
|
|
324
|
+
firstChunk = false;
|
|
325
|
+
}
|
|
302
326
|
logger?.debug('stream chunk: %d bytes', value.length);
|
|
303
327
|
await writeAndDrain(writable, value);
|
|
304
328
|
}
|
|
305
329
|
}
|
|
330
|
+
// Signal end-of-stream to the tee/pipe chain so downstream
|
|
331
|
+
// consumers (e.g. process.stdout pipe) know no more data is coming.
|
|
332
|
+
writable.end();
|
|
306
333
|
}
|
|
307
334
|
catch (err) {
|
|
308
335
|
if (err instanceof Error && err.name === 'AbortError') {
|
|
@@ -312,7 +339,4 @@ async function streamUrlToWritable(url, writable, signal, logger) {
|
|
|
312
339
|
logger?.debug('stream error: %s', err);
|
|
313
340
|
}
|
|
314
341
|
}
|
|
315
|
-
function sleep(ms) {
|
|
316
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
317
|
-
}
|
|
318
342
|
//# sourceMappingURL=run.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/api/sandbox/run.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAa,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1F,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;;;;GAOG;AACH,SAAS,iBAAiB,CAAC,MAAgB,EAAE,GAAG,WAAqC;IACpF,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;IAE9B,sCAAsC;IACtC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;QAChC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,sEAAsE;IACtE,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACtC,IAAI,UAAU,EAAE,CAAC;YAChB,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtB,CAAC;IACF,CAAC;IAED,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAc/B;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC/B,MAAiB,EACjB,MAAwB;IAExB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IACzF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE3B,IAAI,aAAiC,CAAC;IACtC,IAAI,cAAkC,CAAC;IAEvC,4DAA4D;IAC5D,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;QAC/B,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC5E,aAAa,GAAG,YAAY,CAAC,EAAE,CAAC;QAChC,cAAc,GAAG,YAAY,CAAC,GAAG,CAAC;QAClC,MAAM,EAAE,KAAK,CAAC,0BAA0B,EAAE,aAAa,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE;QAClD,OAAO,EAAE;YACR,GAAG,OAAO;YACV,OAAO,EAAE;gBACR,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI;gBAC1B,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK;gBAC5B,IAAI,EAAE,SAAS;aACf;YACD,MAAM,EAAE;gBACP,GAAG,OAAO,CAAC,MAAM;gBACjB,KAAK,EAAE,aAAa;aACpB;SACD;QACD,KAAK;KACL,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC;IAC3C,MAAM,eAAe,GAAG,cAAc,CAAC,eAAe,CAAC;IACvD,MAAM,eAAe,GAAG,cAAc,CAAC,eAAe,CAAC;IAEvD,MAAM,EAAE,KAAK,CACZ,mDAAmD,EACnD,SAAS,EACT,eAAe,IAAI,MAAM,EACzB,eAAe,IAAI,MAAM,CACzB,CAAC;IAEF,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAC9C,MAAM,cAAc,GAAoB,EAAE,CAAC;IAE3C,2CAA2C;IAC3C,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,IAAI,CAAC;QACJ,0DAA0D;QAC1D,IAAI,KAAK,IAAI,cAAc,IAAI,MAAM,EAAE,CAAC;YACvC,MAAM,YAAY,GAAG,gBAAgB,CACpC,KAAK,EACL,cAAc,EACd,MAAM,EACN,eAAe,CAAC,MAAM,EACtB,MAAM,CACN,CAAC;YACF,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACnC,CAAC;QAED,mEAAmE;QACnE,MAAM,gBAAgB,GACrB,eAAe,IAAI,eAAe,IAAI,eAAe,KAAK,eAAe,CAAC;QAE3E,IAAI,gBAAgB,EAAE,CAAC;YACtB,yFAAyF;YACzF,IAAI,eAAe,EAAE,CAAC;gBACrB,MAAM,EAAE,KAAK,CAAC,kDAAkD,CAAC,CAAC;gBAClE,4EAA4E;gBAC5E,MAAM,SAAS,GAAG,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;gBAClE,MAAM,eAAe,GAAG,mBAAmB,CAC1C,eAAe,EACf,SAAS,EACT,eAAe,CAAC,MAAM,EACtB,MAAM,CACN,CAAC;gBACF,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACtC,CAAC;QACF,CAAC;aAAM,CAAC;YACP,sCAAsC;YACtC,IAAI,eAAe,EAAE,CAAC;gBACrB,MAAM,SAAS,GAAG,iBAAiB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;gBAC1D,MAAM,aAAa,GAAG,mBAAmB,CACxC,eAAe,EACf,SAAS,EACT,eAAe,CAAC,MAAM,EACtB,MAAM,CACN,CAAC;gBACF,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACpC,CAAC;YAED,sCAAsC;YACtC,IAAI,eAAe,EAAE,CAAC;gBACrB,MAAM,SAAS,GAAG,iBAAiB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;gBAC1D,MAAM,aAAa,GAAG,mBAAmB,CACxC,eAAe,EACf,SAAS,EACT,eAAe,CAAC,MAAM,EACtB,MAAM,CACN,CAAC;gBACF,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACpC,CAAC;QACF,CAAC;QAED,yDAAyD;QACzD,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,WAAW,GAAmC,IAAI,CAAC;QACvD,IAAI,aAAiC,CAAC;QAEtC,OAAO,QAAQ,GAAG,iBAAiB,EAAE,CAAC;YACrC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACrB,eAAe,CAAC,KAAK,EAAE,CAAC;gBACxB,MAAM,IAAI,uBAAuB,CAAC;oBACjC,OAAO,EAAE,6BAA6B;oBACtC,SAAS;iBACT,CAAC,CAAC;YACJ,CAAC;YAED,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC9B,QAAQ,EAAE,CAAC;YAEX,IAAI,CAAC;gBACJ,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;gBAEnE,IAAI,WAAW,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;oBACzC,WAAW,GAAG,YAAY,CAAC;oBAC3B,aAAa,GAAG,WAAW,CAAC,QAAQ,CAAC;oBACrC,MAAM;gBACP,CAAC;gBAED,IAAI,WAAW,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBACrC,WAAW,GAAG,QAAQ,CAAC;oBACvB,aAAa,GAAG,WAAW,CAAC,QAAQ,CAAC;oBACrC,MAAM;gBACP,CAAC;YACF,CAAC;YAAC,MAAM,CAAC;gBACR,kCAAkC;gBAClC,SAAS;YACV,CAAC;QACF,CAAC;QAED,mEAAmE;QACnE,0EAA0E;QAC1E,2DAA2D;QAC3D,MAAM,EAAE,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACpD,MAAM,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QACzC,MAAM,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAEnC,gCAAgC;QAChC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACrE,gFAAgF;QAChF,MAAM,cAAc,GAAG,gBAAgB;YACtC,CAAC,CAAC,cAAc;YAChB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAEjD,IAAI,WAAW,KAAK,YAAY,EAAE,CAAC;YAClC,OAAO;gBACN,SAAS;gBACT,QAAQ,EAAE,aAAa,IAAI,CAAC;gBAC5B,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO;gBAChC,MAAM,EAAE,cAAc;gBACtB,MAAM,EAAE,cAAc;aACtB,CAAC;QACH,CAAC;QAED,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO;gBACN,SAAS;gBACT,QAAQ,EAAE,aAAa,IAAI,CAAC;gBAC5B,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO;gBAChC,MAAM,EAAE,cAAc;gBACtB,MAAM,EAAE,cAAc;aACtB,CAAC;QACH,CAAC;QAED,MAAM,IAAI,qBAAqB,CAAC;YAC/B,OAAO,EAAE,qCAAqC;YAC9C,SAAS;SACT,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,eAAe,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC;YACJ,MAAM,cAAc,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACR,wBAAwB;QACzB,CAAC;QACD,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC/B,MAAc,EACd,MAAc,EACd,KAAc,EACd,MAAe;IAEf,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;IAElC,4DAA4D;IAC5D,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC;IAC1C,IAAI,KAAK,EAAE,CAAC;QACX,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;IAC3C,MAAM,GAAG,GAAG,GAAG,aAAa,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACtE,MAAM,EAAE,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC;IAEhD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QACjC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACR,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,MAAM,EAAE;SACjC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACpB,IAAI,EAAE,iBAAiB,IAAI,CAAC,GAAG,EAAE,EAAE;SACnC,CAAC;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAClB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC7B,MAAM,IAAI,oBAAoB,CAAC;gBAC9B,GAAG,EAAE,GAAG;aACR,CAAC,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,kCAAkC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmB,CAAC;IACvD,MAAM,EAAE,KAAK,CAAC,0BAA0B,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAEnD,mFAAmF;IACnF,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,UAAU,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,OAAO;QACN,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,GAAG,EAAE,GAAG,aAAa,IAAI,IAAI,CAAC,EAAE,GAAG,cAAc,EAAE;KACnD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC9B,KAAe,EACf,GAAW,EACX,MAAc,EACd,MAAmB,EACnB,MAAe;IAEf,IAAI,CAAC;QACJ,MAAM,EAAE,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;QAE7C,kEAAkE;QAClE,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,MAAM,SAAS,GAAG,IAAI,cAAc,CAAC;YACpC,KAAK,CAAC,UAAU;gBACf,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;oBAClC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBAC1C,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC3B,CAAC;gBACF,CAAC,CAAC,CAAC;gBACH,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;oBACpB,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACvB,gBAAgB,GAAG,IAAI,CAAC;wBACxB,UAAU,CAAC,KAAK,EAAE,CAAC;oBACpB,CAAC;gBACF,CAAC,CAAC,CAAC;gBACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;oBACzB,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACvB,gBAAgB,GAAG,IAAI,CAAC;wBACxB,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACvB,CAAC;gBACF,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;oBACrC,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACvB,gBAAgB,GAAG,IAAI,CAAC;wBACxB,UAAU,CAAC,KAAK,EAAE,CAAC;oBACpB,CAAC;gBACF,CAAC,CAAC,CAAC;YACJ,CAAC;SACD,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YACjC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACR,aAAa,EAAE,UAAU,MAAM,EAAE;aACjC;YACD,IAAI,EAAE,SAAS;YACf,MAAM;YACN,MAAM,EAAE,MAAM;SACC,CAAC,CAAC;QAElB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,EAAE,KAAK,CAAC,6BAA6B,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACP,MAAM,EAAE,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACzC,CAAC;IACF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACvD,MAAM,EAAE,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACP,MAAM,EAAE,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;QAC9C,CAAC;IACF,CAAC;AACF,CAAC;AAED,KAAK,UAAU,mBAAmB,CACjC,GAAW,EACX,QAAkB,EAClB,MAAmB,EACnB,MAAe;IAEf,IAAI,CAAC;QACJ,MAAM,EAAE,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9C,MAAM,EAAE,KAAK,CAAC,4BAA4B,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAE7D,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,EAAE,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACnD,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,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;gBAC5B,MAAM;YACP,CAAC;YAED,IAAI,KAAK,EAAE,CAAC;gBACX,MAAM,EAAE,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBACtD,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,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAChC,OAAO;QACR,CAAC;QACD,MAAM,EAAE,KAAK,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;AACF,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"}
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/api/sandbox/run.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentuity/server",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.21",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"author": "Agentuity employees and contributors",
|
|
6
6
|
"type": "module",
|
|
@@ -25,12 +25,12 @@
|
|
|
25
25
|
"prepublishOnly": "bun run clean && bun run build"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@agentuity/core": "1.0.
|
|
29
|
-
"@agentuity/schema": "1.0.
|
|
28
|
+
"@agentuity/core": "1.0.21",
|
|
29
|
+
"@agentuity/schema": "1.0.21",
|
|
30
30
|
"zod": "^4.3.5"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
|
-
"@agentuity/test-utils": "1.0.
|
|
33
|
+
"@agentuity/test-utils": "1.0.21",
|
|
34
34
|
"@types/bun": "latest",
|
|
35
35
|
"@types/node": "^22.0.0",
|
|
36
36
|
"bun-types": "latest",
|
|
@@ -26,6 +26,22 @@
|
|
|
26
26
|
* connection.close();
|
|
27
27
|
* ```
|
|
28
28
|
*
|
|
29
|
+
* @example Resuming from a previous session
|
|
30
|
+
* ```typescript
|
|
31
|
+
* import { createQueueWebSocket } from '@agentuity/server';
|
|
32
|
+
*
|
|
33
|
+
* // Use a previously obtained clientId and lastOffset to resume
|
|
34
|
+
* const connection = createQueueWebSocket({
|
|
35
|
+
* queueName: 'order-processing',
|
|
36
|
+
* baseUrl: 'https://catalyst.agentuity.cloud',
|
|
37
|
+
* clientId: previousClientId,
|
|
38
|
+
* lastOffset: previousOffset,
|
|
39
|
+
* onMessage: (message) => {
|
|
40
|
+
* console.log('Received:', message.id, message.payload);
|
|
41
|
+
* },
|
|
42
|
+
* });
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
29
45
|
* @example Async iterator API
|
|
30
46
|
* ```typescript
|
|
31
47
|
* import { subscribeToQueue } from '@agentuity/server';
|
|
@@ -82,6 +98,10 @@ export interface QueueWebSocketOptions {
|
|
|
82
98
|
reconnectDelayMs?: number;
|
|
83
99
|
/** Maximum reconnection delay in ms (default: 30000). */
|
|
84
100
|
maxReconnectDelayMs?: number;
|
|
101
|
+
/** Optional client ID from a previous session to resume a subscription. */
|
|
102
|
+
clientId?: string;
|
|
103
|
+
/** Optional last processed offset from a previous session to resume from. */
|
|
104
|
+
lastOffset?: number;
|
|
85
105
|
}
|
|
86
106
|
|
|
87
107
|
/** Return type from {@link createQueueWebSocket}. */
|
|
@@ -106,6 +126,10 @@ export interface SubscribeToQueueOptions {
|
|
|
106
126
|
baseUrl: string;
|
|
107
127
|
/** AbortSignal to stop the subscription. */
|
|
108
128
|
signal?: AbortSignal;
|
|
129
|
+
/** Optional client ID from a previous session to resume a subscription. */
|
|
130
|
+
clientId?: string;
|
|
131
|
+
/** Optional last processed offset from a previous session to resume from. */
|
|
132
|
+
lastOffset?: number;
|
|
109
133
|
}
|
|
110
134
|
|
|
111
135
|
// ============================================================================
|
|
@@ -192,8 +216,8 @@ export function createQueueWebSocket(options: QueueWebSocketOptions): QueueWebSo
|
|
|
192
216
|
let intentionallyClosed = false;
|
|
193
217
|
let reconnectAttempts = 0;
|
|
194
218
|
let reconnectTimer: ReturnType<typeof setTimeout> | null = null;
|
|
195
|
-
let clientId: string | undefined;
|
|
196
|
-
let lastProcessedOffset: number | undefined;
|
|
219
|
+
let clientId: string | undefined = options.clientId;
|
|
220
|
+
let lastProcessedOffset: number | undefined = options.lastOffset;
|
|
197
221
|
|
|
198
222
|
function connect() {
|
|
199
223
|
if (intentionallyClosed) return;
|
|
@@ -440,6 +464,8 @@ export async function* subscribeToQueue(
|
|
|
440
464
|
queueName: options.queueName,
|
|
441
465
|
apiKey: options.apiKey,
|
|
442
466
|
baseUrl: options.baseUrl,
|
|
467
|
+
clientId: options.clientId,
|
|
468
|
+
lastOffset: options.lastOffset,
|
|
443
469
|
onMessage: push,
|
|
444
470
|
onError: (err) => finish(err),
|
|
445
471
|
onClose: () => {
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { type APIClient, APIResponseSchema } from '../api.ts';
|
|
3
|
+
import { API_VERSION, throwSandboxError } from './util.ts';
|
|
4
|
+
|
|
5
|
+
const SandboxStatusDataSchema = z.object({
|
|
6
|
+
sandboxId: z.string(),
|
|
7
|
+
status: z.string(),
|
|
8
|
+
exitCode: z.number().optional(),
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
const SandboxStatusResponseSchema = APIResponseSchema(SandboxStatusDataSchema);
|
|
12
|
+
|
|
13
|
+
export interface SandboxGetStatusParams {
|
|
14
|
+
sandboxId: string;
|
|
15
|
+
orgId?: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface SandboxStatusResult {
|
|
19
|
+
sandboxId: string;
|
|
20
|
+
status: string;
|
|
21
|
+
exitCode?: number;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Retrieves lightweight sandbox status (status + exitCode only).
|
|
26
|
+
* Optimized for the sandbox run flow — backed by Redis for ~1ms response time.
|
|
27
|
+
*/
|
|
28
|
+
export async function sandboxGetStatus(
|
|
29
|
+
client: APIClient,
|
|
30
|
+
params: SandboxGetStatusParams
|
|
31
|
+
): Promise<SandboxStatusResult> {
|
|
32
|
+
const { sandboxId, orgId } = params;
|
|
33
|
+
const queryParams = new URLSearchParams();
|
|
34
|
+
if (orgId) {
|
|
35
|
+
queryParams.set('orgId', orgId);
|
|
36
|
+
}
|
|
37
|
+
const queryString = queryParams.toString();
|
|
38
|
+
const url = `/sandbox/${API_VERSION}/status/${sandboxId}${queryString ? `?${queryString}` : ''}`;
|
|
39
|
+
|
|
40
|
+
const resp = await client.get<z.infer<typeof SandboxStatusResponseSchema>>(
|
|
41
|
+
url,
|
|
42
|
+
SandboxStatusResponseSchema
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
if (resp.success) {
|
|
46
|
+
return {
|
|
47
|
+
sandboxId: resp.data.sandboxId,
|
|
48
|
+
status: resp.data.status,
|
|
49
|
+
exitCode: resp.data.exitCode,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
throwSandboxError(resp, { sandboxId });
|
|
54
|
+
}
|
package/src/api/sandbox/index.ts
CHANGED
|
@@ -95,6 +95,8 @@ export {
|
|
|
95
95
|
SandboxUserInfoSchema,
|
|
96
96
|
sandboxGet,
|
|
97
97
|
} from './get.ts';
|
|
98
|
+
export type { SandboxGetStatusParams, SandboxStatusResult } from './getStatus.ts';
|
|
99
|
+
export { sandboxGetStatus } from './getStatus.ts';
|
|
98
100
|
export type { SandboxListParams } from './list.ts';
|
|
99
101
|
export {
|
|
100
102
|
ListSandboxesDataSchema,
|
package/src/api/sandbox/run.ts
CHANGED
|
@@ -4,11 +4,13 @@ import { PassThrough } from 'node:stream';
|
|
|
4
4
|
import { APIClient, PaymentRequiredError } from '../api.ts';
|
|
5
5
|
import { sandboxCreate } from './create.ts';
|
|
6
6
|
import { sandboxDestroy } from './destroy.ts';
|
|
7
|
-
import {
|
|
8
|
-
import { ExecutionCancelledError,
|
|
7
|
+
import { sandboxGetStatus } from './getStatus.ts';
|
|
8
|
+
import { ExecutionCancelledError, writeAndDrain } from './util.ts';
|
|
9
9
|
import type { SandboxRunOptions, SandboxRunResult } from '@agentuity/core';
|
|
10
10
|
import { getServiceUrls } from '../../config.ts';
|
|
11
11
|
|
|
12
|
+
const timingLogsEnabled = false;
|
|
13
|
+
|
|
12
14
|
/**
|
|
13
15
|
* Creates a Writable stream that captures all chunks to a buffer array
|
|
14
16
|
* and optionally tees (forwards) them to one or more user-provided streams.
|
|
@@ -28,16 +30,13 @@ function createTeeWritable(chunks: Buffer[], ...userStreams: (Writable | undefin
|
|
|
28
30
|
// Pipe to all provided user streams with proper backpressure handling
|
|
29
31
|
for (const userStream of userStreams) {
|
|
30
32
|
if (userStream) {
|
|
31
|
-
tee.pipe(userStream);
|
|
33
|
+
tee.pipe(userStream, { end: false });
|
|
32
34
|
}
|
|
33
35
|
}
|
|
34
36
|
|
|
35
37
|
return tee;
|
|
36
38
|
}
|
|
37
39
|
|
|
38
|
-
const POLL_INTERVAL_MS = 500;
|
|
39
|
-
const MAX_POLL_ATTEMPTS = 7200;
|
|
40
|
-
|
|
41
40
|
export interface SandboxRunParams {
|
|
42
41
|
options: SandboxRunOptions;
|
|
43
42
|
orgId?: string;
|
|
@@ -67,6 +66,7 @@ export async function sandboxRun(
|
|
|
67
66
|
): Promise<SandboxRunResult> {
|
|
68
67
|
const { options, orgId, region, apiKey, signal, stdin, stdout, stderr, logger } = params;
|
|
69
68
|
const started = Date.now();
|
|
69
|
+
if (timingLogsEnabled) console.error(`[TIMING] +0ms: sandbox run started`);
|
|
70
70
|
|
|
71
71
|
let stdinStreamId: string | undefined;
|
|
72
72
|
let stdinStreamUrl: string | undefined;
|
|
@@ -105,6 +105,8 @@ export async function sandboxRun(
|
|
|
105
105
|
stdoutStreamUrl ?? 'none',
|
|
106
106
|
stderrStreamUrl ?? 'none'
|
|
107
107
|
);
|
|
108
|
+
if (timingLogsEnabled)
|
|
109
|
+
console.error(`[TIMING] +${Date.now() - started}ms: sandbox created (${sandboxId})`);
|
|
108
110
|
|
|
109
111
|
const abortController = new AbortController();
|
|
110
112
|
const streamPromises: Promise<void>[] = [];
|
|
@@ -131,16 +133,16 @@ export async function sandboxRun(
|
|
|
131
133
|
stdoutStreamUrl && stderrStreamUrl && stdoutStreamUrl === stderrStreamUrl;
|
|
132
134
|
|
|
133
135
|
if (isCombinedOutput) {
|
|
134
|
-
// Stream combined output
|
|
136
|
+
// Stream combined output to stdout only to avoid duplicates
|
|
135
137
|
if (stdoutStreamUrl) {
|
|
136
138
|
logger?.debug('using combined output stream (stdout === stderr)');
|
|
137
|
-
|
|
138
|
-
const teeStream = createTeeWritable(stdoutChunks, stdout, stderr);
|
|
139
|
+
const teeStream = createTeeWritable(stdoutChunks, stdout);
|
|
139
140
|
const combinedPromise = streamUrlToWritable(
|
|
140
141
|
stdoutStreamUrl,
|
|
141
142
|
teeStream,
|
|
142
143
|
abortController.signal,
|
|
143
|
-
logger
|
|
144
|
+
logger,
|
|
145
|
+
started
|
|
144
146
|
);
|
|
145
147
|
streamPromises.push(combinedPromise);
|
|
146
148
|
}
|
|
@@ -152,7 +154,8 @@ export async function sandboxRun(
|
|
|
152
154
|
stdoutStreamUrl,
|
|
153
155
|
teeStream,
|
|
154
156
|
abortController.signal,
|
|
155
|
-
logger
|
|
157
|
+
logger,
|
|
158
|
+
started
|
|
156
159
|
);
|
|
157
160
|
streamPromises.push(stdoutPromise);
|
|
158
161
|
}
|
|
@@ -164,87 +167,95 @@ export async function sandboxRun(
|
|
|
164
167
|
stderrStreamUrl,
|
|
165
168
|
teeStream,
|
|
166
169
|
abortController.signal,
|
|
167
|
-
logger
|
|
170
|
+
logger,
|
|
171
|
+
started
|
|
168
172
|
);
|
|
169
173
|
streamPromises.push(stderrPromise);
|
|
170
174
|
}
|
|
171
175
|
}
|
|
172
176
|
|
|
173
|
-
//
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
let finalExitCode: number | undefined;
|
|
177
|
-
|
|
178
|
-
while (attempts < MAX_POLL_ATTEMPTS) {
|
|
179
|
-
if (signal?.aborted) {
|
|
180
|
-
abortController.abort();
|
|
181
|
-
throw new ExecutionCancelledError({
|
|
182
|
-
message: 'Sandbox execution cancelled',
|
|
183
|
-
sandboxId,
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
await sleep(POLL_INTERVAL_MS);
|
|
188
|
-
attempts++;
|
|
189
|
-
|
|
190
|
-
try {
|
|
191
|
-
const sandboxInfo = await sandboxGet(client, { sandboxId, orgId });
|
|
177
|
+
// Wait for streams to complete — Pulse closes streams on sandbox termination (EOF).
|
|
178
|
+
// This is our primary completion signal; no polling needed.
|
|
179
|
+
logger?.debug('waiting for streams to complete...');
|
|
192
180
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
181
|
+
if (streamPromises.length > 0) {
|
|
182
|
+
if (signal) {
|
|
183
|
+
// Race streams against abort signal, cleaning up the listener
|
|
184
|
+
// in all cases so an orphaned reject cannot fire after settlement.
|
|
185
|
+
let onAbort: (() => void) | undefined;
|
|
186
|
+
try {
|
|
187
|
+
await Promise.race([
|
|
188
|
+
Promise.allSettled(streamPromises),
|
|
189
|
+
new Promise<never>((_, reject) => {
|
|
190
|
+
onAbort = () => {
|
|
191
|
+
abortController.abort();
|
|
192
|
+
reject(
|
|
193
|
+
new ExecutionCancelledError({
|
|
194
|
+
message: 'Sandbox execution cancelled',
|
|
195
|
+
sandboxId,
|
|
196
|
+
})
|
|
197
|
+
);
|
|
198
|
+
};
|
|
199
|
+
if (signal.aborted) {
|
|
200
|
+
onAbort();
|
|
201
|
+
} else {
|
|
202
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
203
|
+
}
|
|
204
|
+
}),
|
|
205
|
+
]);
|
|
206
|
+
} finally {
|
|
207
|
+
if (onAbort && signal) {
|
|
208
|
+
signal.removeEventListener('abort', onAbort);
|
|
209
|
+
}
|
|
197
210
|
}
|
|
211
|
+
} else {
|
|
212
|
+
await Promise.allSettled(streamPromises);
|
|
213
|
+
}
|
|
214
|
+
} else {
|
|
215
|
+
// No streams available (shouldn't happen for oneshot, but handle defensively).
|
|
216
|
+
// Fall back to a single wait then check.
|
|
217
|
+
logger?.debug('no streams to wait on, checking sandbox status directly');
|
|
218
|
+
}
|
|
198
219
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
220
|
+
if (timingLogsEnabled)
|
|
221
|
+
console.error(`[TIMING] +${Date.now() - started}ms: all streams done, fetching exit code`);
|
|
222
|
+
logger?.debug('streams completed, fetching final status');
|
|
223
|
+
|
|
224
|
+
// Stream EOF means the sandbox is done — hadron only closes streams after the
|
|
225
|
+
// container exits. Fetch status once for the exit code; if lifecycle events
|
|
226
|
+
// haven't propagated to Catalyst yet, default to exit code 0.
|
|
227
|
+
let exitCode = 0;
|
|
228
|
+
try {
|
|
229
|
+
const sandboxStatus = await sandboxGetStatus(client, { sandboxId, orgId });
|
|
230
|
+
if (sandboxStatus.exitCode != null) {
|
|
231
|
+
exitCode = sandboxStatus.exitCode;
|
|
232
|
+
} else if (sandboxStatus.status === 'failed') {
|
|
233
|
+
exitCode = 1;
|
|
207
234
|
}
|
|
235
|
+
} catch {
|
|
236
|
+
// Sandbox may already be destroyed (fire-and-forget teardown).
|
|
237
|
+
// Stream EOF already confirmed execution completed.
|
|
238
|
+
logger?.debug('sandboxGetStatus failed after stream EOF, using default exit code 0');
|
|
208
239
|
}
|
|
209
240
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
await Promise.allSettled(streamPromises);
|
|
215
|
-
logger?.debug('streams completed');
|
|
241
|
+
if (timingLogsEnabled)
|
|
242
|
+
console.error(
|
|
243
|
+
`[TIMING] +${Date.now() - started}ms: sandboxGet complete (exit: ${exitCode})`
|
|
244
|
+
);
|
|
216
245
|
|
|
217
246
|
// Build captured output strings
|
|
218
247
|
const capturedStdout = Buffer.concat(stdoutChunks).toString('utf-8');
|
|
219
|
-
// For combined output, stderr is the same as stdout; otherwise use stderrChunks
|
|
220
248
|
const capturedStderr = isCombinedOutput
|
|
221
249
|
? capturedStdout
|
|
222
250
|
: Buffer.concat(stderrChunks).toString('utf-8');
|
|
223
251
|
|
|
224
|
-
|
|
225
|
-
return {
|
|
226
|
-
sandboxId,
|
|
227
|
-
exitCode: finalExitCode ?? 0,
|
|
228
|
-
durationMs: Date.now() - started,
|
|
229
|
-
stdout: capturedStdout,
|
|
230
|
-
stderr: capturedStderr,
|
|
231
|
-
};
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
if (finalStatus === 'failed') {
|
|
235
|
-
return {
|
|
236
|
-
sandboxId,
|
|
237
|
-
exitCode: finalExitCode ?? 1,
|
|
238
|
-
durationMs: Date.now() - started,
|
|
239
|
-
stdout: capturedStdout,
|
|
240
|
-
stderr: capturedStderr,
|
|
241
|
-
};
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
throw new ExecutionTimeoutError({
|
|
245
|
-
message: 'Sandbox execution polling timed out',
|
|
252
|
+
return {
|
|
246
253
|
sandboxId,
|
|
247
|
-
|
|
254
|
+
exitCode,
|
|
255
|
+
durationMs: Date.now() - started,
|
|
256
|
+
stdout: capturedStdout,
|
|
257
|
+
stderr: capturedStderr,
|
|
258
|
+
};
|
|
248
259
|
} catch (error) {
|
|
249
260
|
abortController.abort();
|
|
250
261
|
try {
|
|
@@ -373,12 +384,17 @@ async function streamUrlToWritable(
|
|
|
373
384
|
url: string,
|
|
374
385
|
writable: Writable,
|
|
375
386
|
signal: AbortSignal,
|
|
376
|
-
logger?: Logger
|
|
387
|
+
logger?: Logger,
|
|
388
|
+
started?: number
|
|
377
389
|
): Promise<void> {
|
|
378
390
|
try {
|
|
379
391
|
logger?.debug('fetching stream: %s', url);
|
|
380
392
|
const response = await fetch(url, { signal });
|
|
381
393
|
logger?.debug('stream response status: %d', response.status);
|
|
394
|
+
if (timingLogsEnabled && started)
|
|
395
|
+
console.error(
|
|
396
|
+
`[TIMING] +${Date.now() - started}ms: stream response received (status: ${response.status})`
|
|
397
|
+
);
|
|
382
398
|
|
|
383
399
|
if (!response.ok || !response.body) {
|
|
384
400
|
logger?.debug('stream response not ok or no body');
|
|
@@ -386,20 +402,33 @@ async function streamUrlToWritable(
|
|
|
386
402
|
}
|
|
387
403
|
|
|
388
404
|
const reader = response.body.getReader();
|
|
405
|
+
let firstChunk = true;
|
|
389
406
|
|
|
390
407
|
// Read until EOF - Pulse will block until data is available
|
|
391
408
|
while (true) {
|
|
392
409
|
const { done, value } = await reader.read();
|
|
393
410
|
if (done) {
|
|
394
411
|
logger?.debug('stream EOF');
|
|
412
|
+
if (timingLogsEnabled && started)
|
|
413
|
+
console.error(`[TIMING] +${Date.now() - started}ms: stream EOF`);
|
|
395
414
|
break;
|
|
396
415
|
}
|
|
397
416
|
|
|
398
417
|
if (value) {
|
|
418
|
+
if (firstChunk && started) {
|
|
419
|
+
if (timingLogsEnabled)
|
|
420
|
+
console.error(
|
|
421
|
+
`[TIMING] +${Date.now() - started}ms: first chunk (${value.length} bytes)`
|
|
422
|
+
);
|
|
423
|
+
firstChunk = false;
|
|
424
|
+
}
|
|
399
425
|
logger?.debug('stream chunk: %d bytes', value.length);
|
|
400
426
|
await writeAndDrain(writable, value);
|
|
401
427
|
}
|
|
402
428
|
}
|
|
429
|
+
// Signal end-of-stream to the tee/pipe chain so downstream
|
|
430
|
+
// consumers (e.g. process.stdout pipe) know no more data is coming.
|
|
431
|
+
writable.end();
|
|
403
432
|
} catch (err) {
|
|
404
433
|
if (err instanceof Error && err.name === 'AbortError') {
|
|
405
434
|
logger?.debug('stream aborted');
|
|
@@ -408,7 +437,3 @@ async function streamUrlToWritable(
|
|
|
408
437
|
logger?.debug('stream error: %s', err);
|
|
409
438
|
}
|
|
410
439
|
}
|
|
411
|
-
|
|
412
|
-
function sleep(ms: number): Promise<void> {
|
|
413
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
414
|
-
}
|