@rk0429/agentic-relay 0.6.0 → 0.6.1

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.
Files changed (2) hide show
  1. package/dist/relay.mjs +48 -2
  2. package/package.json +1 -1
package/dist/relay.mjs CHANGED
@@ -1143,6 +1143,17 @@ var CLAUDE_NESTING_ENV_VARS = [
1143
1143
  "CLAUDE_CODE_SSE_PORT",
1144
1144
  "CLAUDE_CODE_ENTRYPOINT"
1145
1145
  ];
1146
+ var DEFAULT_CLAUDE_SDK_TIMEOUT_MS = 5 * 60 * 1e3;
1147
+ function getClaudeSdkTimeoutMs() {
1148
+ const envVal = process.env["RELAY_CLAUDE_TIMEOUT_MS"];
1149
+ if (envVal) {
1150
+ const parsed = Number(envVal);
1151
+ if (!Number.isNaN(parsed) && parsed > 0) {
1152
+ return parsed;
1153
+ }
1154
+ }
1155
+ return DEFAULT_CLAUDE_SDK_TIMEOUT_MS;
1156
+ }
1146
1157
  var ClaudeAdapter = class extends BaseAdapter {
1147
1158
  id = "claude";
1148
1159
  command = "claude";
@@ -1211,11 +1222,16 @@ var ClaudeAdapter = class extends BaseAdapter {
1211
1222
  }
1212
1223
  const env = this.buildCleanEnv(flags);
1213
1224
  const permissionMode = this.getPermissionMode();
1225
+ const timeoutMs = getClaudeSdkTimeoutMs();
1226
+ const abortController = new AbortController();
1227
+ const timer = setTimeout(() => abortController.abort(), timeoutMs);
1214
1228
  try {
1215
1229
  const { query } = await loadClaudeSDK();
1216
1230
  const options = {
1231
+ abortController,
1217
1232
  env,
1218
1233
  cwd: process.cwd(),
1234
+ mcpServers: {},
1219
1235
  ...flags.model ? { model: flags.model } : {},
1220
1236
  ...flags.maxTurns ? { maxTurns: flags.maxTurns } : {},
1221
1237
  ...flags.systemPrompt ? { systemPrompt: flags.systemPrompt } : {}
@@ -1251,11 +1267,20 @@ var ClaudeAdapter = class extends BaseAdapter {
1251
1267
  ...sessionId ? { nativeSessionId: sessionId } : {}
1252
1268
  };
1253
1269
  } catch (error) {
1270
+ if (abortController.signal.aborted) {
1271
+ return {
1272
+ exitCode: 1,
1273
+ stdout: "",
1274
+ stderr: `Claude SDK query timed out after ${timeoutMs}ms`
1275
+ };
1276
+ }
1254
1277
  return {
1255
1278
  exitCode: 1,
1256
1279
  stdout: "",
1257
1280
  stderr: error instanceof Error ? error.message : String(error)
1258
1281
  };
1282
+ } finally {
1283
+ clearTimeout(timer);
1259
1284
  }
1260
1285
  }
1261
1286
  async *executeStreaming(flags) {
@@ -1264,11 +1289,16 @@ var ClaudeAdapter = class extends BaseAdapter {
1264
1289
  }
1265
1290
  const env = this.buildCleanEnv(flags);
1266
1291
  const permissionMode = this.getPermissionMode();
1292
+ const timeoutMs = getClaudeSdkTimeoutMs();
1293
+ const abortController = new AbortController();
1294
+ const timer = setTimeout(() => abortController.abort(), timeoutMs);
1267
1295
  try {
1268
1296
  const { query } = await loadClaudeSDK();
1269
1297
  const options = {
1298
+ abortController,
1270
1299
  env,
1271
1300
  cwd: process.cwd(),
1301
+ mcpServers: {},
1272
1302
  ...flags.model ? { model: flags.model } : {},
1273
1303
  ...flags.maxTurns ? { maxTurns: flags.maxTurns } : {},
1274
1304
  ...flags.systemPrompt ? { systemPrompt: flags.systemPrompt } : {}
@@ -1328,22 +1358,29 @@ var ClaudeAdapter = class extends BaseAdapter {
1328
1358
  }
1329
1359
  }
1330
1360
  } catch (error) {
1331
- const errorMessage = error instanceof Error ? error.message : String(error);
1361
+ const errorMessage = abortController.signal.aborted ? `Claude SDK query timed out after ${timeoutMs}ms` : error instanceof Error ? error.message : String(error);
1332
1362
  yield { type: "error", message: errorMessage };
1333
1363
  yield {
1334
1364
  type: "done",
1335
1365
  result: { exitCode: 1, stdout: "", stderr: errorMessage }
1336
1366
  };
1367
+ } finally {
1368
+ clearTimeout(timer);
1337
1369
  }
1338
1370
  }
1339
1371
  async continueSession(nativeSessionId, prompt) {
1372
+ const timeoutMs = getClaudeSdkTimeoutMs();
1373
+ const abortController = new AbortController();
1374
+ const timer = setTimeout(() => abortController.abort(), timeoutMs);
1340
1375
  try {
1341
1376
  const { query } = await loadClaudeSDK();
1342
1377
  const permissionMode = this.getPermissionMode();
1343
1378
  const options = {
1379
+ abortController,
1344
1380
  resume: nativeSessionId,
1345
1381
  maxTurns: 1,
1346
- cwd: process.cwd()
1382
+ cwd: process.cwd(),
1383
+ mcpServers: {}
1347
1384
  };
1348
1385
  if (permissionMode === "bypassPermissions") {
1349
1386
  options.permissionMode = "bypassPermissions";
@@ -1367,11 +1404,20 @@ var ClaudeAdapter = class extends BaseAdapter {
1367
1404
  stderr: ""
1368
1405
  };
1369
1406
  } catch (error) {
1407
+ if (abortController.signal.aborted) {
1408
+ return {
1409
+ exitCode: 1,
1410
+ stdout: "",
1411
+ stderr: `Claude SDK query timed out after ${timeoutMs}ms`
1412
+ };
1413
+ }
1370
1414
  return {
1371
1415
  exitCode: 1,
1372
1416
  stdout: "",
1373
1417
  stderr: error instanceof Error ? error.message : String(error)
1374
1418
  };
1419
+ } finally {
1420
+ clearTimeout(timer);
1375
1421
  }
1376
1422
  }
1377
1423
  async resumeSession(sessionId, flags) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rk0429/agentic-relay",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "description": "Unified CLI proxy for Claude Code, Codex CLI, and Gemini CLI with MCP-based multi-layer sub-agent orchestration",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",