@parall/codex-agent 1.26.1 → 1.26.3

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":"dispatch.d.ts","sourceRoot":"","sources":["../src/dispatch.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,iBAAiB,EACjB,aAAa,EACb,YAAY,EACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,KAAK,4BAA4B,GAAG,IAAI,CACtC,gBAAgB,EACd,gBAAgB,GAChB,UAAU,GACV,WAAW,GACX,OAAO,GACP,iBAAiB,GACjB,SAAS,GACT,cAAc,CACjB,GAAG;IACF,cAAc,EAAE,mBAAmB,CAAC;IACpC,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAOF;;;;;;;;;;;;;GAaG;AACH,qBAAa,qBAAsB,YAAW,eAAe;IA6B/C,OAAO,CAAC,QAAQ,CAAC,IAAI;IA5BjC,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,IAAI,CAA+C;IAC3D,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+B;IAC3D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqB;IACtD,OAAO,CAAC,QAAQ,CAAS;IAEzB;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa;gBAYQ,IAAI,EAAE,4BAA4B;IAE/D,YAAY,CAAC,MAAM,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI;IAK/E,QAAQ,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,YAAY,GAAG,aAAa,CAAC,YAAY,CAAC;IAgLxG,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAMjD,WAAW,CAAC,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAuBhG,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE,eAAe;IAIrC,OAAO,CAAC,cAAc;IAKhB,IAAI;YAaI,aAAa;YAcb,OAAO;IA8DrB,OAAO,CAAC,qBAAqB;YAiCf,UAAU;IAwCxB,OAAO,CAAC,iBAAiB;CA2B1B"}
1
+ {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../src/dispatch.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,iBAAiB,EACjB,aAAa,EACb,YAAY,EACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,KAAK,4BAA4B,GAAG,IAAI,CACtC,gBAAgB,EACd,gBAAgB,GAChB,UAAU,GACV,WAAW,GACX,OAAO,GACP,iBAAiB,GACjB,SAAS,GACT,cAAc,CACjB,GAAG;IACF,cAAc,EAAE,mBAAmB,CAAC;IACpC,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAOF;;;;;;;;;;;;;GAaG;AACH,qBAAa,qBAAsB,YAAW,eAAe;IA6B/C,OAAO,CAAC,QAAQ,CAAC,IAAI;IA5BjC,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,IAAI,CAA+C;IAC3D,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+B;IAC3D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqB;IACtD,OAAO,CAAC,QAAQ,CAAS;IAEzB;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa;gBAYQ,IAAI,EAAE,4BAA4B;IAE/D,YAAY,CAAC,MAAM,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI;IAK/E,QAAQ,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,YAAY,GAAG,aAAa,CAAC,YAAY,CAAC;IAgLxG,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAMjD,WAAW,CAAC,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAuBhG,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE,eAAe;IAIrC,OAAO,CAAC,cAAc;IAKhB,IAAI;YAaI,aAAa;YAyBb,OAAO;IA8DrB,OAAO,CAAC,qBAAqB;YAiCf,UAAU;IAwCxB,OAAO,CAAC,iBAAiB;CA2B1B"}
package/dist/dispatch.js CHANGED
@@ -283,6 +283,17 @@ export class CodexAppServerAdapter {
283
283
  }
284
284
  }
285
285
  async ensureStarted(log) {
286
+ if (this.client?.isDisposed()) {
287
+ for (const activeSink of this.activeTurns.values()) {
288
+ activeSink.push({ kind: "error", message: "Codex app-server disposed; resetting adapter" });
289
+ activeSink.close();
290
+ }
291
+ this.activeTurns.clear();
292
+ this.client = null;
293
+ this.proc = null;
294
+ this.initialized = false;
295
+ this.resumedThreadIds.clear();
296
+ }
286
297
  if (this.initialized && this.client)
287
298
  return;
288
299
  if (this.startPromise)
@@ -42,8 +42,10 @@ export declare class JsonRpcStdioClient {
42
42
  setNotificationHandler(handler: NotificationHandler): void;
43
43
  sendRequest(method: string, params?: unknown): Promise<unknown>;
44
44
  sendNotification(method: string, params?: unknown): void;
45
+ isDisposed(): boolean;
45
46
  dispose(err: Error): void;
46
47
  private writeFrame;
48
+ private killUnhealthy;
47
49
  private ingest;
48
50
  private handleLine;
49
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"jsonrpc-client.d.ts","sourceRoot":"","sources":["../src/jsonrpc-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAEzE,KAAK,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAEjC,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,SAAS,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,SAAS,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC3D,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;AAW5E;;;;;;;GAOG;AACH,qBAAa,kBAAkB;IAQ3B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IARnC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,cAAc,CAAoC;IAC1D,OAAO,CAAC,QAAQ,CAAS;gBAGN,IAAI,EAAE,8BAA8B,EACpC,gBAAgB,GAAE,MAAmC;IAQxE,sBAAsB,CAAC,OAAO,EAAE,mBAAmB;IAInD,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB/D,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO;IAMjD,OAAO,CAAC,GAAG,EAAE,KAAK;IAUlB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,MAAM;IAWd,OAAO,CAAC,UAAU;CAyBnB"}
1
+ {"version":3,"file":"jsonrpc-client.d.ts","sourceRoot":"","sources":["../src/jsonrpc-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAEzE,KAAK,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAEjC,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,SAAS,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,SAAS,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC3D,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;AAW5E;;;;;;;GAOG;AACH,qBAAa,kBAAkB;IAQ3B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IARnC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,cAAc,CAAoC;IAC1D,OAAO,CAAC,QAAQ,CAAS;gBAGN,IAAI,EAAE,8BAA8B,EACpC,gBAAgB,GAAE,MAAmC;IASxE,sBAAsB,CAAC,OAAO,EAAE,mBAAmB;IAInD,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB/D,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO;IAMjD,UAAU,IAAI,OAAO;IAIrB,OAAO,CAAC,GAAG,EAAE,KAAK;IAUlB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,MAAM;IAWd,OAAO,CAAC,UAAU;CAyBnB"}
@@ -23,6 +23,7 @@ export class JsonRpcStdioClient {
23
23
  proc.stdout.on("data", (chunk) => this.ingest(chunk));
24
24
  proc.once("close", () => this.dispose(new Error("app-server subprocess closed")));
25
25
  proc.once("error", (err) => this.dispose(err));
26
+ proc.stdin.on("error", (err) => this.killUnhealthy(err));
26
27
  }
27
28
  setNotificationHandler(handler) {
28
29
  this.onNotification = handler;
@@ -40,6 +41,7 @@ export class JsonRpcStdioClient {
40
41
  return;
41
42
  this.pending.delete(id);
42
43
  reject(new Error(`JSON-RPC request "${method}" timed out after ${this.requestTimeoutMs}ms`));
44
+ this.killUnhealthy(new Error(`request "${method}" timed out; subprocess assumed hung`));
43
45
  }, this.requestTimeoutMs);
44
46
  this.pending.set(id, { resolve, reject, timer });
45
47
  });
@@ -52,6 +54,9 @@ export class JsonRpcStdioClient {
52
54
  const notification = { jsonrpc: "2.0", method, params };
53
55
  this.writeFrame(notification);
54
56
  }
57
+ isDisposed() {
58
+ return this.disposed;
59
+ }
55
60
  dispose(err) {
56
61
  if (this.disposed)
57
62
  return;
@@ -63,7 +68,18 @@ export class JsonRpcStdioClient {
63
68
  this.pending.clear();
64
69
  }
65
70
  writeFrame(message) {
66
- this.proc.stdin.write(`${JSON.stringify(message)}\n`);
71
+ try {
72
+ this.proc.stdin.write(`${JSON.stringify(message)}\n`);
73
+ }
74
+ catch (err) {
75
+ this.killUnhealthy(err instanceof Error ? err : new Error(String(err)));
76
+ }
77
+ }
78
+ killUnhealthy(err) {
79
+ this.dispose(err);
80
+ if (this.proc.exitCode === null && this.proc.signalCode === null) {
81
+ this.proc.kill("SIGTERM");
82
+ }
67
83
  }
68
84
  ingest(chunk) {
69
85
  this.buffer += chunk;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@parall/codex-agent",
3
- "version": "1.26.1",
3
+ "version": "1.26.3",
4
4
  "description": "Codex CLI bridge runtime for self-hosted Parall agents",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -26,9 +26,9 @@
26
26
  ],
27
27
  "dependencies": {
28
28
  "smol-toml": "^1.6.1",
29
- "@parall/agent-core": "1.26.1",
30
- "@parall/cli": "1.26.1",
31
- "@parall/sdk": "1.26.1"
29
+ "@parall/agent-core": "1.26.3",
30
+ "@parall/cli": "1.26.3",
31
+ "@parall/sdk": "1.26.3"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@types/node": "^22.0.0",
package/src/dispatch.ts CHANGED
@@ -321,6 +321,17 @@ export class CodexAppServerAdapter implements DispatchAdapter {
321
321
  }
322
322
 
323
323
  private async ensureStarted(log?: GatewayLogger): Promise<void> {
324
+ if (this.client?.isDisposed()) {
325
+ for (const activeSink of this.activeTurns.values()) {
326
+ activeSink.push({ kind: "error", message: "Codex app-server disposed; resetting adapter" });
327
+ activeSink.close();
328
+ }
329
+ this.activeTurns.clear();
330
+ this.client = null;
331
+ this.proc = null;
332
+ this.initialized = false;
333
+ this.resumedThreadIds.clear();
334
+ }
324
335
  if (this.initialized && this.client) return;
325
336
  if (this.startPromise) return this.startPromise;
326
337
  this.startPromise = this.doStart(log);
@@ -56,6 +56,7 @@ export class JsonRpcStdioClient {
56
56
  proc.stdout.on("data", (chunk: string) => this.ingest(chunk));
57
57
  proc.once("close", () => this.dispose(new Error("app-server subprocess closed")));
58
58
  proc.once("error", (err) => this.dispose(err));
59
+ proc.stdin.on("error", (err) => this.killUnhealthy(err));
59
60
  }
60
61
 
61
62
  setNotificationHandler(handler: NotificationHandler) {
@@ -74,6 +75,7 @@ export class JsonRpcStdioClient {
74
75
  if (!pending) return;
75
76
  this.pending.delete(id);
76
77
  reject(new Error(`JSON-RPC request "${method}" timed out after ${this.requestTimeoutMs}ms`));
78
+ this.killUnhealthy(new Error(`request "${method}" timed out; subprocess assumed hung`));
77
79
  }, this.requestTimeoutMs);
78
80
  this.pending.set(id, { resolve, reject, timer });
79
81
  });
@@ -87,6 +89,10 @@ export class JsonRpcStdioClient {
87
89
  this.writeFrame(notification);
88
90
  }
89
91
 
92
+ isDisposed(): boolean {
93
+ return this.disposed;
94
+ }
95
+
90
96
  dispose(err: Error) {
91
97
  if (this.disposed) return;
92
98
  this.disposed = true;
@@ -98,7 +104,18 @@ export class JsonRpcStdioClient {
98
104
  }
99
105
 
100
106
  private writeFrame(message: object) {
101
- this.proc.stdin.write(`${JSON.stringify(message)}\n`);
107
+ try {
108
+ this.proc.stdin.write(`${JSON.stringify(message)}\n`);
109
+ } catch (err) {
110
+ this.killUnhealthy(err instanceof Error ? err : new Error(String(err)));
111
+ }
112
+ }
113
+
114
+ private killUnhealthy(err: Error) {
115
+ this.dispose(err);
116
+ if (this.proc.exitCode === null && this.proc.signalCode === null) {
117
+ this.proc.kill("SIGTERM");
118
+ }
102
119
  }
103
120
 
104
121
  private ingest(chunk: string) {