@aiden-ade/sandbox-agent 0.1.4 → 0.1.6

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/index.cjs CHANGED
@@ -30,9 +30,9 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
30
30
  mod
31
31
  ));
32
32
 
33
- // ../../node_modules/.pnpm/xmlhttprequest-ssl@2.1.2/node_modules/xmlhttprequest-ssl/lib/XMLHttpRequest.js
33
+ // ../../node_modules/xmlhttprequest-ssl/lib/XMLHttpRequest.js
34
34
  var require_XMLHttpRequest = __commonJS({
35
- "../../node_modules/.pnpm/xmlhttprequest-ssl@2.1.2/node_modules/xmlhttprequest-ssl/lib/XMLHttpRequest.js"(exports2, module2) {
35
+ "../../node_modules/xmlhttprequest-ssl/lib/XMLHttpRequest.js"(exports2, module2) {
36
36
  "use strict";
37
37
  var fs = require("fs");
38
38
  var Url = require("url");
@@ -434,9 +434,9 @@ var require_XMLHttpRequest = __commonJS({
434
434
  }
435
435
  });
436
436
 
437
- // ../../node_modules/.pnpm/ms@2.1.3/node_modules/ms/index.js
437
+ // ../../node_modules/ms/index.js
438
438
  var require_ms = __commonJS({
439
- "../../node_modules/.pnpm/ms@2.1.3/node_modules/ms/index.js"(exports2, module2) {
439
+ "../../node_modules/ms/index.js"(exports2, module2) {
440
440
  "use strict";
441
441
  var s = 1e3;
442
442
  var m = s * 60;
@@ -551,9 +551,9 @@ var require_ms = __commonJS({
551
551
  }
552
552
  });
553
553
 
554
- // ../../node_modules/.pnpm/debug@4.4.3/node_modules/debug/src/common.js
554
+ // ../../node_modules/debug/src/common.js
555
555
  var require_common = __commonJS({
556
- "../../node_modules/.pnpm/debug@4.4.3/node_modules/debug/src/common.js"(exports2, module2) {
556
+ "../../node_modules/debug/src/common.js"(exports2, module2) {
557
557
  "use strict";
558
558
  function setup(env) {
559
559
  createDebug.debug = createDebug;
@@ -729,9 +729,9 @@ var require_common = __commonJS({
729
729
  }
730
730
  });
731
731
 
732
- // ../../node_modules/.pnpm/debug@4.4.3/node_modules/debug/src/browser.js
732
+ // ../../node_modules/debug/src/browser.js
733
733
  var require_browser = __commonJS({
734
- "../../node_modules/.pnpm/debug@4.4.3/node_modules/debug/src/browser.js"(exports2, module2) {
734
+ "../../node_modules/debug/src/browser.js"(exports2, module2) {
735
735
  "use strict";
736
736
  exports2.formatArgs = formatArgs;
737
737
  exports2.save = save;
@@ -1015,9 +1015,9 @@ var require_supports_color = __commonJS({
1015
1015
  }
1016
1016
  });
1017
1017
 
1018
- // ../../node_modules/.pnpm/debug@4.4.3/node_modules/debug/src/node.js
1018
+ // ../../node_modules/debug/src/node.js
1019
1019
  var require_node = __commonJS({
1020
- "../../node_modules/.pnpm/debug@4.4.3/node_modules/debug/src/node.js"(exports2, module2) {
1020
+ "../../node_modules/debug/src/node.js"(exports2, module2) {
1021
1021
  "use strict";
1022
1022
  var tty = require("tty");
1023
1023
  var util = require("util");
@@ -1190,9 +1190,9 @@ var require_node = __commonJS({
1190
1190
  }
1191
1191
  });
1192
1192
 
1193
- // ../../node_modules/.pnpm/debug@4.4.3/node_modules/debug/src/index.js
1193
+ // ../../node_modules/debug/src/index.js
1194
1194
  var require_src = __commonJS({
1195
- "../../node_modules/.pnpm/debug@4.4.3/node_modules/debug/src/index.js"(exports2, module2) {
1195
+ "../../node_modules/debug/src/index.js"(exports2, module2) {
1196
1196
  "use strict";
1197
1197
  if (typeof process === "undefined" || process.type === "renderer" || process.browser === true || process.__nwjs) {
1198
1198
  module2.exports = require_browser();
@@ -1202,9 +1202,9 @@ var require_src = __commonJS({
1202
1202
  }
1203
1203
  });
1204
1204
 
1205
- // ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/constants.js
1205
+ // ../../node_modules/engine.io-client/node_modules/ws/lib/constants.js
1206
1206
  var require_constants = __commonJS({
1207
- "../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/constants.js"(exports2, module2) {
1207
+ "../../node_modules/engine.io-client/node_modules/ws/lib/constants.js"(exports2, module2) {
1208
1208
  "use strict";
1209
1209
  var BINARY_TYPES = ["nodebuffer", "arraybuffer", "fragments"];
1210
1210
  var hasBlob = typeof Blob !== "undefined";
@@ -1224,9 +1224,9 @@ var require_constants = __commonJS({
1224
1224
  }
1225
1225
  });
1226
1226
 
1227
- // ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/buffer-util.js
1227
+ // ../../node_modules/engine.io-client/node_modules/ws/lib/buffer-util.js
1228
1228
  var require_buffer_util = __commonJS({
1229
- "../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/buffer-util.js"(exports2, module2) {
1229
+ "../../node_modules/engine.io-client/node_modules/ws/lib/buffer-util.js"(exports2, module2) {
1230
1230
  "use strict";
1231
1231
  var { EMPTY_BUFFER } = require_constants();
1232
1232
  var FastBuffer = Buffer[Symbol.species];
@@ -1299,9 +1299,9 @@ var require_buffer_util = __commonJS({
1299
1299
  }
1300
1300
  });
1301
1301
 
1302
- // ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/limiter.js
1302
+ // ../../node_modules/engine.io-client/node_modules/ws/lib/limiter.js
1303
1303
  var require_limiter = __commonJS({
1304
- "../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/limiter.js"(exports2, module2) {
1304
+ "../../node_modules/engine.io-client/node_modules/ws/lib/limiter.js"(exports2, module2) {
1305
1305
  "use strict";
1306
1306
  var kDone = /* @__PURE__ */ Symbol("kDone");
1307
1307
  var kRun = /* @__PURE__ */ Symbol("kRun");
@@ -1349,9 +1349,9 @@ var require_limiter = __commonJS({
1349
1349
  }
1350
1350
  });
1351
1351
 
1352
- // ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/permessage-deflate.js
1352
+ // ../../node_modules/engine.io-client/node_modules/ws/lib/permessage-deflate.js
1353
1353
  var require_permessage_deflate = __commonJS({
1354
- "../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/permessage-deflate.js"(exports2, module2) {
1354
+ "../../node_modules/engine.io-client/node_modules/ws/lib/permessage-deflate.js"(exports2, module2) {
1355
1355
  "use strict";
1356
1356
  var zlib = require("zlib");
1357
1357
  var bufferUtil = require_buffer_util();
@@ -1732,9 +1732,9 @@ var require_permessage_deflate = __commonJS({
1732
1732
  }
1733
1733
  });
1734
1734
 
1735
- // ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/validation.js
1735
+ // ../../node_modules/engine.io-client/node_modules/ws/lib/validation.js
1736
1736
  var require_validation = __commonJS({
1737
- "../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/validation.js"(exports2, module2) {
1737
+ "../../node_modules/engine.io-client/node_modules/ws/lib/validation.js"(exports2, module2) {
1738
1738
  "use strict";
1739
1739
  var { isUtf8 } = require("buffer");
1740
1740
  var { hasBlob } = require_constants();
@@ -1933,9 +1933,9 @@ var require_validation = __commonJS({
1933
1933
  }
1934
1934
  });
1935
1935
 
1936
- // ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/receiver.js
1936
+ // ../../node_modules/engine.io-client/node_modules/ws/lib/receiver.js
1937
1937
  var require_receiver = __commonJS({
1938
- "../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/receiver.js"(exports2, module2) {
1938
+ "../../node_modules/engine.io-client/node_modules/ws/lib/receiver.js"(exports2, module2) {
1939
1939
  "use strict";
1940
1940
  var { Writable } = require("stream");
1941
1941
  var PerMessageDeflate = require_permessage_deflate();
@@ -2525,9 +2525,9 @@ var require_receiver = __commonJS({
2525
2525
  }
2526
2526
  });
2527
2527
 
2528
- // ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/sender.js
2528
+ // ../../node_modules/engine.io-client/node_modules/ws/lib/sender.js
2529
2529
  var require_sender = __commonJS({
2530
- "../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/sender.js"(exports2, module2) {
2530
+ "../../node_modules/engine.io-client/node_modules/ws/lib/sender.js"(exports2, module2) {
2531
2531
  "use strict";
2532
2532
  var { Duplex } = require("stream");
2533
2533
  var { randomFillSync } = require("crypto");
@@ -3013,9 +3013,9 @@ var require_sender = __commonJS({
3013
3013
  }
3014
3014
  });
3015
3015
 
3016
- // ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/event-target.js
3016
+ // ../../node_modules/engine.io-client/node_modules/ws/lib/event-target.js
3017
3017
  var require_event_target = __commonJS({
3018
- "../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/event-target.js"(exports2, module2) {
3018
+ "../../node_modules/engine.io-client/node_modules/ws/lib/event-target.js"(exports2, module2) {
3019
3019
  "use strict";
3020
3020
  var { kForOnEventAttribute, kListener } = require_constants();
3021
3021
  var kCode = /* @__PURE__ */ Symbol("kCode");
@@ -3242,9 +3242,9 @@ var require_event_target = __commonJS({
3242
3242
  }
3243
3243
  });
3244
3244
 
3245
- // ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/extension.js
3245
+ // ../../node_modules/engine.io-client/node_modules/ws/lib/extension.js
3246
3246
  var require_extension = __commonJS({
3247
- "../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/extension.js"(exports2, module2) {
3247
+ "../../node_modules/engine.io-client/node_modules/ws/lib/extension.js"(exports2, module2) {
3248
3248
  "use strict";
3249
3249
  var { tokenChars } = require_validation();
3250
3250
  function push(dest, name, elem) {
@@ -3395,9 +3395,9 @@ var require_extension = __commonJS({
3395
3395
  }
3396
3396
  });
3397
3397
 
3398
- // ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/websocket.js
3398
+ // ../../node_modules/engine.io-client/node_modules/ws/lib/websocket.js
3399
3399
  var require_websocket = __commonJS({
3400
- "../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/websocket.js"(exports2, module2) {
3400
+ "../../node_modules/engine.io-client/node_modules/ws/lib/websocket.js"(exports2, module2) {
3401
3401
  "use strict";
3402
3402
  var EventEmitter = require("events");
3403
3403
  var https = require("https");
@@ -4278,9 +4278,9 @@ var require_websocket = __commonJS({
4278
4278
  }
4279
4279
  });
4280
4280
 
4281
- // ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/stream.js
4281
+ // ../../node_modules/engine.io-client/node_modules/ws/lib/stream.js
4282
4282
  var require_stream = __commonJS({
4283
- "../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/stream.js"(exports2, module2) {
4283
+ "../../node_modules/engine.io-client/node_modules/ws/lib/stream.js"(exports2, module2) {
4284
4284
  "use strict";
4285
4285
  var WebSocket2 = require_websocket();
4286
4286
  var { Duplex } = require("stream");
@@ -4376,9 +4376,9 @@ var require_stream = __commonJS({
4376
4376
  }
4377
4377
  });
4378
4378
 
4379
- // ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/subprotocol.js
4379
+ // ../../node_modules/engine.io-client/node_modules/ws/lib/subprotocol.js
4380
4380
  var require_subprotocol = __commonJS({
4381
- "../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/subprotocol.js"(exports2, module2) {
4381
+ "../../node_modules/engine.io-client/node_modules/ws/lib/subprotocol.js"(exports2, module2) {
4382
4382
  "use strict";
4383
4383
  var { tokenChars } = require_validation();
4384
4384
  function parse3(header) {
@@ -4421,9 +4421,9 @@ var require_subprotocol = __commonJS({
4421
4421
  }
4422
4422
  });
4423
4423
 
4424
- // ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/websocket-server.js
4424
+ // ../../node_modules/engine.io-client/node_modules/ws/lib/websocket-server.js
4425
4425
  var require_websocket_server = __commonJS({
4426
- "../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/lib/websocket-server.js"(exports2, module2) {
4426
+ "../../node_modules/engine.io-client/node_modules/ws/lib/websocket-server.js"(exports2, module2) {
4427
4427
  "use strict";
4428
4428
  var EventEmitter = require("events");
4429
4429
  var http = require("http");
@@ -4898,6 +4898,14 @@ function classifyCliError(stderr, exitCode) {
4898
4898
  return "Rate limited by API. Try again shortly.";
4899
4899
  if (isLikelyProviderAuthError(stderr))
4900
4900
  return "API key invalid or expired. Check your provider settings.";
4901
+ if (lower.includes("not logged in") || lower.includes("login required") || lower.includes("please sign in") || lower.includes("please log in") || lower.includes("sign in to") || lower.includes("log in to"))
4902
+ return "Not logged in. Please authenticate with this provider first.";
4903
+ if (lower.includes("model not supported") || lower.includes("unsupported model") || lower.includes("model not found") || lower.includes("model not available") || lower.includes("model is not available") || lower.includes("invalid model") || lower.includes("unknown model") || lower.includes("no such model"))
4904
+ return "Model not supported by this provider. Check your provider's model list.";
4905
+ if (lower.includes("subscription") || lower.includes("paid plan") || lower.includes("plan required") || lower.includes("upgrade your plan") || lower.includes("only supports free") || lower.includes("not available on your") || lower.includes("requires a paid"))
4906
+ return "This model requires a paid subscription. Switch to a supported model or upgrade your plan.";
4907
+ if (lower.includes("quota exceeded") || lower.includes("quota limit") || lower.includes("daily limit") || lower.includes("monthly limit") || lower.includes("usage limit"))
4908
+ return "API quota exceeded. Wait for it to reset or check your billing.";
4901
4909
  if (lower.includes("overloaded") || lower.includes("503") || lower.includes("service unavailable"))
4902
4910
  return "API is overloaded. Will retry automatically.";
4903
4911
  if (lower.includes("context_length") || lower.includes("too long") || lower.includes("max tokens") || lower.includes("context window"))
@@ -4908,11 +4916,12 @@ function classifyCliError(stderr, exitCode) {
4908
4916
  return "Permission denied. Check file or command permissions.";
4909
4917
  if (lower.includes("out of memory") || lower.includes("enomem"))
4910
4918
  return "Out of memory. Close other applications and try again.";
4911
- return stderr.trim() || `Process exited with code ${exitCode}`;
4919
+ const raw = stderr.trim().slice(0, 200);
4920
+ return raw || `Process exited with code ${exitCode}`;
4912
4921
  }
4913
4922
  function isTransientError(errorMessage) {
4914
4923
  const lower = errorMessage.toLowerCase();
4915
- return lower.includes("rate limit") || lower.includes("overloaded") || lower.includes("503") || lower.includes("429") || lower.includes("service unavailable") || lower.includes("etimedout") || lower.includes("econnreset") || lower.includes("econnrefused");
4924
+ return lower.includes("rate limit") || lower.includes("overloaded") || lower.includes("503") || lower.includes("429") || lower.includes("service unavailable") || lower.includes("etimedout") || lower.includes("econnreset") || lower.includes("econnrefused") || lower.includes("epipe");
4916
4925
  }
4917
4926
  function buildPromptWithSystem(config, promptText) {
4918
4927
  const parts2 = [
@@ -5032,7 +5041,6 @@ function createGenericCliBackend(options) {
5032
5041
  if (options.allowContinuation) {
5033
5042
  const IDLE_MS = options.continuationIdleMs ?? 10 * 60 * 1e3;
5034
5043
  let idleTimer = null;
5035
- let heartbeatInterval = null;
5036
5044
  const resetIdleTimer = () => {
5037
5045
  if (idleTimer) clearTimeout(idleTimer);
5038
5046
  idleTimer = setTimeout(() => {
@@ -5043,22 +5051,9 @@ function createGenericCliBackend(options) {
5043
5051
  }, IDLE_MS);
5044
5052
  };
5045
5053
  state.onNewOutput = resetIdleTimer;
5046
- state.stopHeartbeat = () => {
5047
- if (heartbeatInterval) {
5048
- clearInterval(heartbeatInterval);
5049
- heartbeatInterval = null;
5050
- }
5051
- };
5052
- state.startHeartbeat = () => {
5053
- state.stopHeartbeat?.();
5054
- heartbeatInterval = setInterval(() => {
5055
- void presenter.onActivity?.("background_work");
5056
- }, 3e4);
5057
- };
5058
5054
  resetIdleTimer();
5059
5055
  exitCode = await exitPromise;
5060
5056
  if (idleTimer) clearTimeout(idleTimer);
5061
- state.stopHeartbeat?.();
5062
5057
  } else {
5063
5058
  const resultPromise = new Promise((resolve2) => {
5064
5059
  state.onResultReceived = () => resolve2("result_received");
@@ -5181,7 +5176,6 @@ function parseClaudeStructuredLine(line, context, state) {
5181
5176
  if (state.resultReceived && state.allowContinuation) {
5182
5177
  console.info("[claude_cli] Continuation turn detected \u2014 restarting presenter");
5183
5178
  state.resultReceived = false;
5184
- state.stopHeartbeat?.();
5185
5179
  void presenter.onStart(context.config);
5186
5180
  }
5187
5181
  state.onNewOutput?.();
@@ -5299,11 +5293,11 @@ function parseClaudeStructuredLine(line, context, state) {
5299
5293
  if (state.allowContinuation) {
5300
5294
  const continuationResult = {
5301
5295
  success: !state.error,
5302
- summary: state.summary || "",
5296
+ summary: state.summary || state.error || "",
5303
5297
  filesModified: [],
5304
5298
  planFilesCreated: [],
5305
5299
  iterations: Math.max(state.iterations, 1),
5306
- error: state.error,
5300
+ error: state.error ? classifyCliError(state.error, 0) : void 0,
5307
5301
  providerSessionId: state.runtimeSessionId,
5308
5302
  runtimeSessionId: state.runtimeSessionId,
5309
5303
  backendKind: context.config.backendKind,
@@ -5312,7 +5306,6 @@ function parseClaudeStructuredLine(line, context, state) {
5312
5306
  };
5313
5307
  void presenter.onComplete(continuationResult);
5314
5308
  state.onNewOutput?.();
5315
- state.startHeartbeat?.();
5316
5309
  console.info("[claude_cli] Result received in continuation mode \u2014 keeping stdin open for background work");
5317
5310
  } else {
5318
5311
  state.onResultReceived?.();
@@ -5490,13 +5483,19 @@ function parseCodexStructuredLine(line, context, state) {
5490
5483
  }
5491
5484
  case "error": {
5492
5485
  const message = extractCodexErrorMessage(parsed.message) || extractCodexErrorMessage(parsed.error) || typeof parsed.detail === "string" && parsed.detail.trim() || "";
5493
- if (message) state.error = message;
5486
+ if (message) {
5487
+ void presenter.onError(message);
5488
+ state.error = message;
5489
+ }
5494
5490
  break;
5495
5491
  }
5496
5492
  case "turn.failed": {
5497
5493
  const error = typeof parsed.error === "object" && parsed.error !== null ? parsed.error : {};
5498
5494
  const message = extractCodexErrorMessage(error.message) || extractCodexErrorMessage(error.detail) || typeof parsed.message === "string" && parsed.message.trim() || "";
5499
- if (message) state.error = message;
5495
+ if (message) {
5496
+ void presenter.onError(message);
5497
+ state.error = message;
5498
+ }
5500
5499
  break;
5501
5500
  }
5502
5501
  default:
@@ -5611,6 +5610,7 @@ function parseCursorStructuredLine(line, context, state) {
5611
5610
  if (resultText.trim().length > 0) state.summary = resultText;
5612
5611
  if ((parsed.is_error === true || subtype === "error") && !state.error) {
5613
5612
  state.error = resultText.trim() || "Cursor Agent run failed";
5613
+ void presenter.onError(state.error);
5614
5614
  }
5615
5615
  break;
5616
5616
  }
@@ -5675,8 +5675,12 @@ function parseGeminiStructuredLine(line, context, state) {
5675
5675
  const message = typeof parsed.message === "string" && parsed.message.trim() || errObj && typeof errObj.message === "string" && errObj.message.trim() || typeof parsed.error === "string" && parsed.error.trim() || typeof parsed.error_message === "string" && parsed.error_message.trim() || "";
5676
5676
  const severity = typeof parsed.severity === "string" ? parsed.severity : "error";
5677
5677
  if (message) {
5678
- void presenter.onLog(`[gemini_cli/${severity}] ${message}`);
5679
- if (severity === "error") state.error = message;
5678
+ if (severity === "error") {
5679
+ void presenter.onError(message);
5680
+ state.error = message;
5681
+ } else {
5682
+ void presenter.onLog(`[gemini_cli/${severity}] ${message}`);
5683
+ }
5680
5684
  }
5681
5685
  break;
5682
5686
  }
@@ -5794,6 +5798,8 @@ function createClaudeCliBackend(command = "claude", defaultArgs = []) {
5794
5798
  args.push("--resume", resumeId);
5795
5799
  console.info("[claude_cli] Resuming session", { resumeId });
5796
5800
  }
5801
+ args.push("--chrome");
5802
+ console.info("[claude_cli] Chrome flag added \u2014 final args:", args.join(" "));
5797
5803
  args.push(...defaultArgs);
5798
5804
  return createGenericCliBackend({
5799
5805
  kind: "claude_cli",
@@ -6060,9 +6066,14 @@ function parseOpencodeStructuredLine(line, context, state) {
6060
6066
  case "session.error":
6061
6067
  case "error": {
6062
6068
  const errObj = typeof parsed.error === "object" && parsed.error !== null ? parsed.error : null;
6063
- const message = typeof parsed.message === "string" && parsed.message.trim() || part && typeof part.message === "string" && part.message.trim() || typeof parsed.error === "string" && parsed.error.trim() || errObj && typeof errObj.message === "string" && errObj.message.trim() || part && typeof part.error === "string" && part.error.trim() || "";
6064
- if (message) {
6065
- void presenter.onLog(`[opencode/error] ${message}`);
6069
+ if (!state.error) {
6070
+ console.error("[opencode] error event (raw):", JSON.stringify(parsed).slice(0, 500));
6071
+ }
6072
+ const rawMessage = typeof parsed.message === "string" && parsed.message.trim() || part && typeof part.message === "string" && part.message.trim() || typeof parsed.error === "string" && parsed.error.trim() || errObj && typeof errObj.message === "string" && errObj.message.trim() || part && typeof part.error === "string" && part.error.trim() || // Also try data.message — some opencode versions nest the message here
6073
+ (typeof parsed.data?.message === "string" ? parsed.data.message.trim() : "") || "";
6074
+ const message = rawMessage || "OpenCode encountered an error. Check your provider and model settings.";
6075
+ if (!state.error) {
6076
+ void presenter.onError(message);
6066
6077
  state.error = message;
6067
6078
  }
6068
6079
  const pid = state.process?.pid;
@@ -6299,7 +6310,7 @@ Prefer relative paths and keep your work scoped to this project.`
6299
6310
  }
6300
6311
  let runtimeConfig = this.buildRuntimeConfig(config, safeProjectPath);
6301
6312
  const cwd = runtimeConfig.worktreePath || safeProjectPath || runtimeConfig.cwd || defaultCwd;
6302
- const env = this.buildCliEnvironment();
6313
+ const env = await this.buildCliEnvironment();
6303
6314
  const promptText = this.buildPromptText(runtimeConfig);
6304
6315
  const runtimeCommand = runtimeConfig.runtimeCommand || this.runtime.runtimeCommand;
6305
6316
  const runtimeArgs = runtimeConfig.runtimeArgs || this.runtime.runtimeArgs || [];
@@ -6477,13 +6488,18 @@ var CoreAgent = class extends BaseMachineAgent {
6477
6488
  });
6478
6489
  };
6479
6490
  }
6480
- buildCliEnvironment() {
6491
+ async buildCliEnvironment() {
6481
6492
  const loginEnv = process.env;
6482
6493
  const env = {};
6483
6494
  for (const [key, value2] of Object.entries(loginEnv)) {
6484
6495
  if (value2 !== void 0) env[key] = value2;
6485
6496
  }
6486
- env.PATH = `/home/user/.local/node/bin:${env.PATH ?? ""}`;
6497
+ const home = env.HOME ?? "/home/user";
6498
+ const extraPaths = [`${home}/.local/node/bin`, `${home}/.local/bin`];
6499
+ const basePath = env.PATH ?? "";
6500
+ const existingSegments = new Set(basePath.split(":").filter(Boolean));
6501
+ const missing = extraPaths.filter((p) => !existingSegments.has(p));
6502
+ env.PATH = missing.length > 0 ? `${missing.join(":")}:${basePath}` : basePath;
6487
6503
  return env;
6488
6504
  }
6489
6505
  buildExtraSystemPromptParts(_config) {
@@ -6597,10 +6613,10 @@ var WebPresenter = class {
6597
6613
  }
6598
6614
  };
6599
6615
 
6600
- // ../../node_modules/.pnpm/engine.io-client@6.6.4/node_modules/engine.io-client/build/esm-debug/transports/polling-xhr.node.js
6616
+ // ../../node_modules/engine.io-client/build/esm-debug/transports/polling-xhr.node.js
6601
6617
  var XMLHttpRequestModule = __toESM(require_XMLHttpRequest(), 1);
6602
6618
 
6603
- // ../../node_modules/.pnpm/engine.io-parser@5.2.3/node_modules/engine.io-parser/build/esm/commons.js
6619
+ // ../../node_modules/engine.io-parser/build/esm/commons.js
6604
6620
  var PACKET_TYPES = /* @__PURE__ */ Object.create(null);
6605
6621
  PACKET_TYPES["open"] = "0";
6606
6622
  PACKET_TYPES["close"] = "1";
@@ -6615,7 +6631,7 @@ Object.keys(PACKET_TYPES).forEach((key) => {
6615
6631
  });
6616
6632
  var ERROR_PACKET = { type: "error", data: "parser error" };
6617
6633
 
6618
- // ../../node_modules/.pnpm/engine.io-parser@5.2.3/node_modules/engine.io-parser/build/esm/encodePacket.js
6634
+ // ../../node_modules/engine.io-parser/build/esm/encodePacket.js
6619
6635
  var encodePacket = ({ type, data }, supportsBinary, callback) => {
6620
6636
  if (data instanceof ArrayBuffer || ArrayBuffer.isView(data)) {
6621
6637
  return callback(supportsBinary ? data : "b" + toBuffer(data, true).toString("base64"));
@@ -6644,7 +6660,7 @@ function encodePacketToBinary(packet, callback) {
6644
6660
  });
6645
6661
  }
6646
6662
 
6647
- // ../../node_modules/.pnpm/engine.io-parser@5.2.3/node_modules/engine.io-parser/build/esm/decodePacket.js
6663
+ // ../../node_modules/engine.io-parser/build/esm/decodePacket.js
6648
6664
  var decodePacket = (encodedPacket, binaryType) => {
6649
6665
  if (typeof encodedPacket !== "string") {
6650
6666
  return {
@@ -6690,7 +6706,7 @@ var mapBinary = (data, binaryType) => {
6690
6706
  }
6691
6707
  };
6692
6708
 
6693
- // ../../node_modules/.pnpm/engine.io-parser@5.2.3/node_modules/engine.io-parser/build/esm/index.js
6709
+ // ../../node_modules/engine.io-parser/build/esm/index.js
6694
6710
  var SEPARATOR = String.fromCharCode(30);
6695
6711
  var encodePayload = (packets, callback) => {
6696
6712
  const length = packets.length;
@@ -6832,7 +6848,7 @@ function createPacketDecoderStream(maxPayload, binaryType) {
6832
6848
  }
6833
6849
  var protocol = 4;
6834
6850
 
6835
- // ../../node_modules/.pnpm/@socket.io+component-emitter@3.1.2/node_modules/@socket.io/component-emitter/lib/esm/index.js
6851
+ // ../../node_modules/@socket.io/component-emitter/lib/esm/index.js
6836
6852
  function Emitter(obj) {
6837
6853
  if (obj) return mixin(obj);
6838
6854
  }
@@ -6904,7 +6920,7 @@ Emitter.prototype.hasListeners = function(event) {
6904
6920
  return !!this.listeners(event).length;
6905
6921
  };
6906
6922
 
6907
- // ../../node_modules/.pnpm/engine.io-client@6.6.4/node_modules/engine.io-client/build/esm-debug/globals.node.js
6923
+ // ../../node_modules/engine.io-client/build/esm-debug/globals.node.js
6908
6924
  var nextTick = process.nextTick;
6909
6925
  var globalThisShim = global;
6910
6926
  var defaultBinaryType = "nodebuffer";
@@ -6992,7 +7008,7 @@ var CookieJar = class {
6992
7008
  }
6993
7009
  };
6994
7010
 
6995
- // ../../node_modules/.pnpm/engine.io-client@6.6.4/node_modules/engine.io-client/build/esm-debug/util.js
7011
+ // ../../node_modules/engine.io-client/build/esm-debug/util.js
6996
7012
  function pick(obj, ...attr) {
6997
7013
  return attr.reduce((acc, k) => {
6998
7014
  if (obj.hasOwnProperty(k)) {
@@ -7040,7 +7056,7 @@ function randomString() {
7040
7056
  return Date.now().toString(36).substring(3) + Math.random().toString(36).substring(2, 5);
7041
7057
  }
7042
7058
 
7043
- // ../../node_modules/.pnpm/engine.io-client@6.6.4/node_modules/engine.io-client/build/esm-debug/contrib/parseqs.js
7059
+ // ../../node_modules/engine.io-client/build/esm-debug/contrib/parseqs.js
7044
7060
  function encode(obj) {
7045
7061
  let str = "";
7046
7062
  for (let i in obj) {
@@ -7062,7 +7078,7 @@ function decode(qs) {
7062
7078
  return qry;
7063
7079
  }
7064
7080
 
7065
- // ../../node_modules/.pnpm/engine.io-client@6.6.4/node_modules/engine.io-client/build/esm-debug/transport.js
7081
+ // ../../node_modules/engine.io-client/build/esm-debug/transport.js
7066
7082
  var import_debug = __toESM(require_src(), 1);
7067
7083
  var debug = (0, import_debug.default)("engine.io-client:transport");
7068
7084
  var TransportError = class extends Error {
@@ -7196,7 +7212,7 @@ var Transport = class extends Emitter {
7196
7212
  }
7197
7213
  };
7198
7214
 
7199
- // ../../node_modules/.pnpm/engine.io-client@6.6.4/node_modules/engine.io-client/build/esm-debug/transports/polling.js
7215
+ // ../../node_modules/engine.io-client/build/esm-debug/transports/polling.js
7200
7216
  var import_debug2 = __toESM(require_src(), 1);
7201
7217
  var debug2 = (0, import_debug2.default)("engine.io-client:polling");
7202
7218
  var Polling = class extends Transport {
@@ -7341,7 +7357,7 @@ var Polling = class extends Transport {
7341
7357
  }
7342
7358
  };
7343
7359
 
7344
- // ../../node_modules/.pnpm/engine.io-client@6.6.4/node_modules/engine.io-client/build/esm-debug/contrib/has-cors.js
7360
+ // ../../node_modules/engine.io-client/build/esm-debug/contrib/has-cors.js
7345
7361
  var value = false;
7346
7362
  try {
7347
7363
  value = typeof XMLHttpRequest !== "undefined" && "withCredentials" in new XMLHttpRequest();
@@ -7349,7 +7365,7 @@ try {
7349
7365
  }
7350
7366
  var hasCORS = value;
7351
7367
 
7352
- // ../../node_modules/.pnpm/engine.io-client@6.6.4/node_modules/engine.io-client/build/esm-debug/transports/polling-xhr.js
7368
+ // ../../node_modules/engine.io-client/build/esm-debug/transports/polling-xhr.js
7353
7369
  var import_debug3 = __toESM(require_src(), 1);
7354
7370
  var debug3 = (0, import_debug3.default)("engine.io-client:polling");
7355
7371
  function empty() {
@@ -7584,7 +7600,7 @@ function newRequest(opts) {
7584
7600
  }
7585
7601
  }
7586
7602
 
7587
- // ../../node_modules/.pnpm/engine.io-client@6.6.4/node_modules/engine.io-client/build/esm-debug/transports/polling-xhr.node.js
7603
+ // ../../node_modules/engine.io-client/build/esm-debug/transports/polling-xhr.node.js
7588
7604
  var XMLHttpRequest2 = XMLHttpRequestModule.default || XMLHttpRequestModule;
7589
7605
  var XHR = class extends BaseXHR {
7590
7606
  request(opts = {}) {
@@ -7594,14 +7610,14 @@ var XHR = class extends BaseXHR {
7594
7610
  }
7595
7611
  };
7596
7612
 
7597
- // ../../node_modules/.pnpm/ws@8.18.3/node_modules/ws/wrapper.mjs
7613
+ // ../../node_modules/engine.io-client/node_modules/ws/wrapper.mjs
7598
7614
  var import_stream = __toESM(require_stream(), 1);
7599
7615
  var import_receiver = __toESM(require_receiver(), 1);
7600
7616
  var import_sender = __toESM(require_sender(), 1);
7601
7617
  var import_websocket = __toESM(require_websocket(), 1);
7602
7618
  var import_websocket_server = __toESM(require_websocket_server(), 1);
7603
7619
 
7604
- // ../../node_modules/.pnpm/engine.io-client@6.6.4/node_modules/engine.io-client/build/esm-debug/transports/websocket.js
7620
+ // ../../node_modules/engine.io-client/build/esm-debug/transports/websocket.js
7605
7621
  var import_debug4 = __toESM(require_src(), 1);
7606
7622
  var debug4 = (0, import_debug4.default)("engine.io-client:websocket");
7607
7623
  var isReactNative = typeof navigator !== "undefined" && typeof navigator.product === "string" && navigator.product.toLowerCase() === "reactnative";
@@ -7690,7 +7706,7 @@ var BaseWS = class extends Transport {
7690
7706
  };
7691
7707
  var WebSocketCtor = globalThisShim.WebSocket || globalThisShim.MozWebSocket;
7692
7708
 
7693
- // ../../node_modules/.pnpm/engine.io-client@6.6.4/node_modules/engine.io-client/build/esm-debug/transports/websocket.node.js
7709
+ // ../../node_modules/engine.io-client/build/esm-debug/transports/websocket.node.js
7694
7710
  var WS = class extends BaseWS {
7695
7711
  createSocket(uri, protocols, opts) {
7696
7712
  var _a;
@@ -7721,7 +7737,7 @@ var WS = class extends BaseWS {
7721
7737
  }
7722
7738
  };
7723
7739
 
7724
- // ../../node_modules/.pnpm/engine.io-client@6.6.4/node_modules/engine.io-client/build/esm-debug/transports/webtransport.js
7740
+ // ../../node_modules/engine.io-client/build/esm-debug/transports/webtransport.js
7725
7741
  var import_debug5 = __toESM(require_src(), 1);
7726
7742
  var debug5 = (0, import_debug5.default)("engine.io-client:webtransport");
7727
7743
  var WT = class extends Transport {
@@ -7791,14 +7807,14 @@ var WT = class extends Transport {
7791
7807
  }
7792
7808
  };
7793
7809
 
7794
- // ../../node_modules/.pnpm/engine.io-client@6.6.4/node_modules/engine.io-client/build/esm-debug/transports/index.js
7810
+ // ../../node_modules/engine.io-client/build/esm-debug/transports/index.js
7795
7811
  var transports = {
7796
7812
  websocket: WS,
7797
7813
  webtransport: WT,
7798
7814
  polling: XHR
7799
7815
  };
7800
7816
 
7801
- // ../../node_modules/.pnpm/engine.io-client@6.6.4/node_modules/engine.io-client/build/esm-debug/contrib/parseuri.js
7817
+ // ../../node_modules/engine.io-client/build/esm-debug/contrib/parseuri.js
7802
7818
  var re = /^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;
7803
7819
  var parts = [
7804
7820
  "source",
@@ -7858,7 +7874,7 @@ function queryKey(uri, query) {
7858
7874
  return data;
7859
7875
  }
7860
7876
 
7861
- // ../../node_modules/.pnpm/engine.io-client@6.6.4/node_modules/engine.io-client/build/esm-debug/socket.js
7877
+ // ../../node_modules/engine.io-client/build/esm-debug/socket.js
7862
7878
  var import_debug6 = __toESM(require_src(), 1);
7863
7879
  var debug6 = (0, import_debug6.default)("engine.io-client:socket");
7864
7880
  var withEventListeners = typeof addEventListener === "function" && typeof removeEventListener === "function";
@@ -8454,10 +8470,10 @@ var Socket = class extends SocketWithUpgrade {
8454
8470
  }
8455
8471
  };
8456
8472
 
8457
- // ../../node_modules/.pnpm/engine.io-client@6.6.4/node_modules/engine.io-client/build/esm-debug/index.js
8473
+ // ../../node_modules/engine.io-client/build/esm-debug/index.js
8458
8474
  var protocol2 = Socket.protocol;
8459
8475
 
8460
- // ../../node_modules/.pnpm/socket.io-client@4.8.3/node_modules/socket.io-client/build/esm-debug/url.js
8476
+ // ../../node_modules/socket.io-client/build/esm-debug/url.js
8461
8477
  var import_debug7 = __toESM(require_src(), 1);
8462
8478
  var debug7 = (0, import_debug7.default)("socket.io-client:url");
8463
8479
  function url(uri, path = "", loc) {
@@ -8499,7 +8515,7 @@ function url(uri, path = "", loc) {
8499
8515
  return obj;
8500
8516
  }
8501
8517
 
8502
- // ../../node_modules/.pnpm/socket.io-parser@4.2.5/node_modules/socket.io-parser/build/esm-debug/index.js
8518
+ // ../../node_modules/socket.io-parser/build/esm-debug/index.js
8503
8519
  var esm_debug_exports = {};
8504
8520
  __export(esm_debug_exports, {
8505
8521
  Decoder: () => Decoder,
@@ -8509,7 +8525,7 @@ __export(esm_debug_exports, {
8509
8525
  protocol: () => protocol3
8510
8526
  });
8511
8527
 
8512
- // ../../node_modules/.pnpm/socket.io-parser@4.2.5/node_modules/socket.io-parser/build/esm-debug/is-binary.js
8528
+ // ../../node_modules/socket.io-parser/build/esm-debug/is-binary.js
8513
8529
  var withNativeArrayBuffer = typeof ArrayBuffer === "function";
8514
8530
  var isView = (obj) => {
8515
8531
  return typeof ArrayBuffer.isView === "function" ? ArrayBuffer.isView(obj) : obj.buffer instanceof ArrayBuffer;
@@ -8546,7 +8562,7 @@ function hasBinary(obj, toJSON) {
8546
8562
  return false;
8547
8563
  }
8548
8564
 
8549
- // ../../node_modules/.pnpm/socket.io-parser@4.2.5/node_modules/socket.io-parser/build/esm-debug/binary.js
8565
+ // ../../node_modules/socket.io-parser/build/esm-debug/binary.js
8550
8566
  function deconstructPacket(packet) {
8551
8567
  const buffers = [];
8552
8568
  const packetData = packet.data;
@@ -8608,7 +8624,7 @@ function _reconstructPacket(data, buffers) {
8608
8624
  return data;
8609
8625
  }
8610
8626
 
8611
- // ../../node_modules/.pnpm/socket.io-parser@4.2.5/node_modules/socket.io-parser/build/esm-debug/index.js
8627
+ // ../../node_modules/socket.io-parser/build/esm-debug/index.js
8612
8628
  var import_debug8 = __toESM(require_src(), 1);
8613
8629
  var debug8 = (0, import_debug8.default)("socket.io-parser");
8614
8630
  var RESERVED_EVENTS = [
@@ -8902,7 +8918,7 @@ function isPacketValid(packet) {
8902
8918
  return isNamespaceValid(packet.nsp) && isAckIdValid(packet.id) && isDataValid(packet.type, packet.data);
8903
8919
  }
8904
8920
 
8905
- // ../../node_modules/.pnpm/socket.io-client@4.8.3/node_modules/socket.io-client/build/esm-debug/on.js
8921
+ // ../../node_modules/socket.io-client/build/esm-debug/on.js
8906
8922
  function on(obj, ev, fn) {
8907
8923
  obj.on(ev, fn);
8908
8924
  return function subDestroy() {
@@ -8910,7 +8926,7 @@ function on(obj, ev, fn) {
8910
8926
  };
8911
8927
  }
8912
8928
 
8913
- // ../../node_modules/.pnpm/socket.io-client@4.8.3/node_modules/socket.io-client/build/esm-debug/socket.js
8929
+ // ../../node_modules/socket.io-client/build/esm-debug/socket.js
8914
8930
  var import_debug9 = __toESM(require_src(), 1);
8915
8931
  var debug9 = (0, import_debug9.default)("socket.io-client:socket");
8916
8932
  var RESERVED_EVENTS2 = Object.freeze({
@@ -9705,7 +9721,7 @@ var Socket2 = class extends Emitter {
9705
9721
  }
9706
9722
  };
9707
9723
 
9708
- // ../../node_modules/.pnpm/socket.io-client@4.8.3/node_modules/socket.io-client/build/esm-debug/contrib/backo2.js
9724
+ // ../../node_modules/socket.io-client/build/esm-debug/contrib/backo2.js
9709
9725
  function Backoff(opts) {
9710
9726
  opts = opts || {};
9711
9727
  this.ms = opts.min || 100;
@@ -9736,7 +9752,7 @@ Backoff.prototype.setJitter = function(jitter) {
9736
9752
  this.jitter = jitter;
9737
9753
  };
9738
9754
 
9739
- // ../../node_modules/.pnpm/socket.io-client@4.8.3/node_modules/socket.io-client/build/esm-debug/manager.js
9755
+ // ../../node_modules/socket.io-client/build/esm-debug/manager.js
9740
9756
  var import_debug10 = __toESM(require_src(), 1);
9741
9757
  var debug10 = (0, import_debug10.default)("socket.io-client:manager");
9742
9758
  var Manager = class extends Emitter {
@@ -10105,7 +10121,7 @@ var Manager = class extends Emitter {
10105
10121
  }
10106
10122
  };
10107
10123
 
10108
- // ../../node_modules/.pnpm/socket.io-client@4.8.3/node_modules/socket.io-client/build/esm-debug/index.js
10124
+ // ../../node_modules/socket.io-client/build/esm-debug/index.js
10109
10125
  var import_debug11 = __toESM(require_src(), 1);
10110
10126
  var debug11 = (0, import_debug11.default)("socket.io-client");
10111
10127
  var cache = {};
@@ -10226,7 +10242,7 @@ var WSClient = class {
10226
10242
  };
10227
10243
 
10228
10244
  // src/version.ts
10229
- var AGENT_VERSION = "0.1.4";
10245
+ var AGENT_VERSION = "0.1.6";
10230
10246
 
10231
10247
  // src/sandbox.ts
10232
10248
  async function runSandbox(config) {