@ai-ecoverse/slicc-kernel 1.129.0 → 1.130.0

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/node.js CHANGED
@@ -3913,8 +3913,8 @@ var Integrity = class {
3913
3913
  }
3914
3914
  }
3915
3915
  async expected(path) {
3916
- const answer = await this.lookup(path);
3917
- return typeof answer === "string" ? answer.toLowerCase() : void 0;
3916
+ const answer2 = await this.lookup(path);
3917
+ return typeof answer2 === "string" ? answer2.toLowerCase() : void 0;
3918
3918
  }
3919
3919
  say(event) {
3920
3920
  try {
@@ -4247,12 +4247,12 @@ var RemoteWatch = class {
4247
4247
  }
4248
4248
  greeted(peer) {
4249
4249
  this.arrived(peer);
4250
- const answer = () => {
4250
+ const answer2 = () => {
4251
4251
  this.channel.postMessage({ here: this.tab, to: peer });
4252
4252
  if (this.mine.length > 0) void this.announce(this.mine);
4253
4253
  };
4254
- if (this.quiet) void this.quiet().then(answer, answer);
4255
- else answer();
4254
+ if (this.quiet) void this.quiet().then(answer2, answer2);
4255
+ else answer2();
4256
4256
  }
4257
4257
  announced({ tab, paths, seq: seq2 }) {
4258
4258
  const from = tab;
@@ -7392,7 +7392,7 @@ function satisfies(version, range2) {
7392
7392
  }
7393
7393
 
7394
7394
  // src/version.ts
7395
- var KERNEL_VERSION = true ? "1.129.0" : "0.0.0-dev";
7395
+ var KERNEL_VERSION = true ? "1.130.0" : "0.0.0-dev";
7396
7396
  var OS_RELEASE = "6.0.0-slicc";
7397
7397
  function procVersion() {
7398
7398
  return `Linux version ${OS_RELEASE} (slicc-kernel ${KERNEL_VERSION}) #1 SMP PREEMPT_DYNAMIC
@@ -16301,11 +16301,11 @@ function carriesUdp(uplink) {
16301
16301
  return uplink.traits.udp === true && typeof uplink.udp === "function";
16302
16302
  }
16303
16303
  function answerOf(result) {
16304
- const answer = Array.isArray(result) ? { addresses: result } : result;
16305
- const addresses = Array.isArray(answer?.addresses) ? answer.addresses.filter((a) => typeof a === "string") : [];
16304
+ const answer2 = Array.isArray(result) ? { addresses: result } : result;
16305
+ const addresses = Array.isArray(answer2?.addresses) ? answer2.addresses.filter((a) => typeof a === "string") : [];
16306
16306
  return {
16307
16307
  addresses,
16308
- ...typeof answer?.ttl === "number" && answer.ttl >= 0 ? { ttl: answer.ttl } : {}
16308
+ ...typeof answer2?.ttl === "number" && answer2.ttl >= 0 ? { ttl: answer2.ttl } : {}
16309
16309
  };
16310
16310
  }
16311
16311
  var NEVER = new Routes(true);
@@ -16383,9 +16383,9 @@ var Resolver = class {
16383
16383
  async lookup(name2, family, id2, abandoned) {
16384
16384
  const uplink = this.uplink;
16385
16385
  const timeout = AbortSignal.any([AbortSignal.timeout(this.timeoutMs), abandoned]);
16386
- let answer;
16386
+ let answer2;
16387
16387
  try {
16388
- answer = answerOf(
16388
+ answer2 = answerOf(
16389
16389
  await Promise.race([
16390
16390
  uplink.resolve(name2, family, timeout),
16391
16391
  new Promise(
@@ -16396,8 +16396,8 @@ var Resolver = class {
16396
16396
  } catch {
16397
16397
  return [];
16398
16398
  }
16399
- const addresses = answer.addresses.filter((a) => this.usable(name2, a, family));
16400
- if (addresses.length > 0) this.remember(id2, addresses, answer.ttl);
16399
+ const addresses = answer2.addresses.filter((a) => this.usable(name2, a, family));
16400
+ if (addresses.length > 0) this.remember(id2, addresses, answer2.ttl);
16401
16401
  return addresses;
16402
16402
  }
16403
16403
  usable(name2, address, family) {
@@ -21053,8 +21053,8 @@ var WasmProcess = class {
21053
21053
  spares(sig) {
21054
21054
  const { caught, ignored } = this.signalMasks();
21055
21055
  const bit = isSignal(sig) ? sigbit(sig) : 0;
21056
- const answer = (ignored & bit) !== 0 ? "ignore" : (caught & bit) !== 0 ? "spare" : "terminate";
21057
- return { ok: true, kind: "json", json: answer };
21056
+ const answer2 = (ignored & bit) !== 0 ? "ignore" : (caught & bit) !== 0 ? "spare" : "terminate";
21057
+ return { ok: true, kind: "json", json: answer2 };
21058
21058
  }
21059
21059
  async killSelf(sig, target, probe2) {
21060
21060
  if (!this.options.exitSignal) throw new KernelError("ENOSYS");
@@ -22171,10 +22171,10 @@ var WasmProcess = class {
22171
22171
  cwd: typeof req.cwd === "string" && req.cwd.startsWith("/") ? req.cwd : "/",
22172
22172
  ...typeof req.term === "string" ? { term: req.term } : {}
22173
22173
  };
22174
- const answer = await sudo(call, this.blockingSignal(cancelled));
22175
- if (!("grant" in answer)) return answer;
22174
+ const answer2 = await sudo(call, this.blockingSignal(cancelled));
22175
+ if (!("grant" in answer2)) return answer2;
22176
22176
  if (this.dying) throw new KernelError("EINTR");
22177
- const { file, argv, env, cwd, cred, caller } = answer.grant;
22177
+ const { file, argv, env, cwd, cred, caller } = answer2.grant;
22178
22178
  const stdio = [{ fd: 0 }, { fd: 1 }, { fd: 2 }];
22179
22179
  return {
22180
22180
  pid: await this.children.spawn({ file, argv, env, cwd, pgid: 0 }, stdio, [], {
@@ -22334,6 +22334,153 @@ var WASM_THREAD_SPAWN = "wasm-thread-spawn";
22334
22334
  var WASM_THREAD_INIT = "wasm-thread-init";
22335
22335
  var WASM_THREAD_EXIT = "wasm-thread-exit";
22336
22336
  var WASM_MAX_THREADS = 256;
22337
+ var JS_THREAD_SPAWN = "js-thread-spawn";
22338
+ var JS_THREAD_INIT = "js-thread-init";
22339
+ var JS_THREAD_EXIT = "js-thread-exit";
22340
+ var JS_MAX_THREADS = 256;
22341
+ var JS_DEFAULT_THREADS = 16;
22342
+ var JS_THREAD_NO_MEMORY = 256;
22343
+ var JS_THREAD_CRASHED = 257;
22344
+
22345
+ // src/kernel/js-threads.ts
22346
+ var JS_OOM = /out of memory|Array buffer allocation failed|Cannot allocate Wasm memory|could not allocate memory|ERR_WORKER_OUT_OF_MEMORY/i;
22347
+ var ENDING = { ok: false, errno: "EINTR", message: "the thread is ending" };
22348
+ var MAIN_ONLY = { ok: true, kind: "void" };
22349
+ function track(ops, req, result) {
22350
+ if (req.op === "async-submit" && result.ok && result.kind === "json") {
22351
+ if (typeof result.json === "number") ops.set(result.json, req.token);
22352
+ } else if (req.op === "async-cancel" || req.op === "async-take" && (result.ok || result.errno !== "EAGAIN")) {
22353
+ ops.delete(req.id);
22354
+ }
22355
+ }
22356
+ function cores() {
22357
+ const n = globalThis.navigator?.hardwareConcurrency;
22358
+ return typeof n === "number" && Number.isInteger(n) && n > 0 ? n : 0;
22359
+ }
22360
+ function jsThreadCap(env) {
22361
+ const asked = Number.parseInt(env.SLICC_JS_THREADS ?? "", 10);
22362
+ if (asked >= 1) return Math.min(asked, JS_MAX_THREADS);
22363
+ return Math.min(JS_MAX_THREADS, Math.max(JS_DEFAULT_THREADS, 2 * cores()));
22364
+ }
22365
+ function codeOf4(code) {
22366
+ if (code === JS_THREAD_NO_MEMORY || code === JS_THREAD_CRASHED) return code;
22367
+ return typeof code === "number" && Number.isInteger(code) ? code & 255 : JS_THREAD_CRASHED;
22368
+ }
22369
+ function answer(control, message3) {
22370
+ control.postMessage(message3);
22371
+ }
22372
+ var JsThreads = class {
22373
+ deps;
22374
+ live = /* @__PURE__ */ new Map();
22375
+ headers = /* @__PURE__ */ new Map();
22376
+ frozen = false;
22377
+ last = 0;
22378
+ closed = false;
22379
+ constructor(deps) {
22380
+ this.deps = deps;
22381
+ }
22382
+ get size() {
22383
+ return this.live.size;
22384
+ }
22385
+ spawn(msg) {
22386
+ const { control, port } = msg;
22387
+ if (this.closed || this.live.size >= this.deps.cap) {
22388
+ answer(
22389
+ control,
22390
+ this.closed ? { errno: "ESRCH", message: "the process is ending" } : { errno: "EAGAIN", message: `more than ${this.deps.cap} threads` }
22391
+ );
22392
+ control.close();
22393
+ port.close();
22394
+ return;
22395
+ }
22396
+ const tid = ++this.last;
22397
+ const sab = new SharedArrayBuffer(SAB_HEADER_BYTES + SAB_DEFAULT_WINDOW_BYTES);
22398
+ const header4 = new Int32Array(sab, 0, SAB_HEADER_I32);
22399
+ if (this.frozen) Atomics.store(header4, SAB_I_STOP, 1);
22400
+ const worker = this.deps.createWorker();
22401
+ const clock = this.deps.clocks.thread(tid + 1, sab);
22402
+ let ended = false;
22403
+ const end = (code) => {
22404
+ if (ended) return;
22405
+ ended = true;
22406
+ this.live.delete(tid);
22407
+ this.headers.delete(tid);
22408
+ this.deps.wakes.delete(header4);
22409
+ for (const [id2, token] of ops) {
22410
+ void this.deps.dispatch({ op: "async-cancel", id: id2, token });
22411
+ }
22412
+ ops.clear();
22413
+ worker.removeEventListener("message", onMessage);
22414
+ worker.removeEventListener("error", onError);
22415
+ control.removeEventListener("message", onControl);
22416
+ responder.dispose();
22417
+ lane.dispose();
22418
+ this.deps.clocks.threadEnded(tid + 1);
22419
+ worker.terminate();
22420
+ answer(control, { exited: code });
22421
+ control.close();
22422
+ };
22423
+ const ops = /* @__PURE__ */ new Map();
22424
+ const dispatch2 = async (req, block) => {
22425
+ if (isWasmSyscall(req) && req.op === "proc-exit") {
22426
+ queueMicrotask(() => end(req.status & 255));
22427
+ return ENDING;
22428
+ }
22429
+ if (isWasmSyscall(req) && req.op === "sig-mask") return MAIN_ONLY;
22430
+ const result = await this.deps.dispatch(req, block);
22431
+ if (!ended) track(ops, req, result);
22432
+ return result;
22433
+ };
22434
+ const responder = this.deps.attach(worker, sab, this.deps.clocks.timed(clock, dispatch2));
22435
+ const lane = this.deps.openLane(dispatch2);
22436
+ const onMessage = (event) => {
22437
+ const data = event.data;
22438
+ if (data?.type === JS_THREAD_EXIT) end(codeOf4(data.code));
22439
+ else if (data?.type === JS_THREAD_SPAWN) this.spawn(event.data);
22440
+ else if (data?.type === WASM_PROCESS_ERROR) this.crashed(String(data.message), end);
22441
+ };
22442
+ const onError = (event) => {
22443
+ event.preventDefault();
22444
+ this.crashed(String(event.message ?? "worker error"), end);
22445
+ };
22446
+ const onControl = (event) => {
22447
+ if (event.data?.terminate === true) end(1);
22448
+ };
22449
+ worker.addEventListener("message", onMessage);
22450
+ worker.addEventListener("error", onError);
22451
+ control.addEventListener("message", onControl);
22452
+ control.start();
22453
+ this.live.set(tid, end);
22454
+ this.headers.set(tid, header4);
22455
+ this.deps.wakes.add(header4);
22456
+ const init = {
22457
+ ...this.deps.init(sab, lane.lane),
22458
+ type: JS_THREAD_INIT,
22459
+ thread: { tid, port, data: msg.data }
22460
+ };
22461
+ try {
22462
+ worker.postMessage(init, [lane.lane.port, port, ...msg.transfer ?? []]);
22463
+ } catch {
22464
+ end(JS_THREAD_CRASHED);
22465
+ return;
22466
+ }
22467
+ answer(control, { tid });
22468
+ }
22469
+ crashed(message3, end) {
22470
+ end(JS_OOM.test(message3) ? JS_THREAD_NO_MEMORY : JS_THREAD_CRASHED);
22471
+ }
22472
+ stopped(stopped) {
22473
+ this.frozen = stopped;
22474
+ for (const header4 of this.headers.values()) {
22475
+ Atomics.store(header4, SAB_I_STOP, stopped ? 1 : 0);
22476
+ Atomics.notify(header4, SAB_I_STOP);
22477
+ }
22478
+ }
22479
+ close() {
22480
+ this.closed = true;
22481
+ for (const end of [...this.live.values()]) end(1);
22482
+ }
22483
+ };
22337
22484
 
22338
22485
  // src/kernel/host.ts
22339
22486
  var CRASHED = 70;
@@ -22436,6 +22583,7 @@ function threadSignalsOf(sab) {
22436
22583
  function threadCancel(thread) {
22437
22584
  return unblocked(thread.header) !== 0 ? AbortSignal.abort() : thread.interrupt.signal;
22438
22585
  }
22586
+ var asyncFanout = /* @__PURE__ */ new WeakMap();
22439
22587
  function notifiers(header4) {
22440
22588
  return {
22441
22589
  onPending(sig) {
@@ -22443,8 +22591,10 @@ function notifiers(header4) {
22443
22591
  Atomics.notify(header4, SAB_I_SIGNALS);
22444
22592
  },
22445
22593
  onAsync() {
22446
- Atomics.add(header4, SAB_I_ASYNC, 1);
22447
- Atomics.notify(header4, SAB_I_ASYNC);
22594
+ for (const at of [header4, ...asyncFanout.get(header4) ?? []]) {
22595
+ Atomics.add(at, SAB_I_ASYNC, 1);
22596
+ Atomics.notify(at, SAB_I_ASYNC);
22597
+ }
22448
22598
  }
22449
22599
  };
22450
22600
  }
@@ -22675,6 +22825,7 @@ function spawnWasmProcess(opts) {
22675
22825
  dispatch: clocks.timed(void 0, dispatch2)
22676
22826
  });
22677
22827
  const lane = opts.program.abi === "js" ? openLane(token, dispatch2) : void 0;
22828
+ const jsThreads = jsThreadsOf(opts, process2, token, dispatch2, clocks, header4);
22678
22829
  const { promise: exited, resolve: settle } = Promise.withResolvers();
22679
22830
  let done4 = false;
22680
22831
  let endedBy;
@@ -22688,6 +22839,7 @@ function spawnWasmProcess(opts) {
22688
22839
  worker.removeEventListener("message", onMessage);
22689
22840
  worker.removeEventListener("error", onError);
22690
22841
  for (const tid of [...threads.keys()]) endThread(tid);
22842
+ jsThreads?.close();
22691
22843
  responder.dispose();
22692
22844
  lane?.dispose();
22693
22845
  revokeSyncFsToken(token);
@@ -22711,6 +22863,8 @@ function spawnWasmProcess(opts) {
22711
22863
  finish(...dying.status(data.code));
22712
22864
  } else if (data?.type === WASM_THREAD_SPAWN && data.thread) {
22713
22865
  spawnThread(data.thread);
22866
+ } else if (data?.type === JS_THREAD_SPAWN && jsThreads) {
22867
+ jsThreads.spawn(data);
22714
22868
  }
22715
22869
  };
22716
22870
  const onMessage = (event) => handle(event.data);
@@ -22784,13 +22938,35 @@ function spawnWasmProcess(opts) {
22784
22938
  termsig: () => endedBy,
22785
22939
  onState: (listener) => process2.onState(listener),
22786
22940
  memory: () => Atomics.load(header4, SAB_I_MEMORY) * 65536,
22941
+ ...processViews(process2, opts, header4),
22942
+ writesBack: () => opts.program.abi === "wasi" && !done4,
22943
+ ...clockViews(clocks)
22944
+ };
22945
+ }
22946
+ function jsThreadsOf(opts, process2, token, dispatch2, clocks, header4) {
22947
+ if (opts.program.abi !== "js") return void 0;
22948
+ const wakes = /* @__PURE__ */ new Set();
22949
+ asyncFanout.set(header4, wakes);
22950
+ const threads = new JsThreads({
22951
+ wakes,
22952
+ cap: jsThreadCap(opts.env),
22953
+ createWorker: opts.createWorker,
22954
+ init: (sab, lane) => processInit(opts, sab, process2.umask, copyCred(process2.cred), lane),
22955
+ openLane: (laneDispatch) => openLane(token, laneDispatch),
22956
+ attach: (worker, sab, threadDispatch) => attachSyncSabResponder(worker, sab, token, { dispatch: threadDispatch }),
22957
+ dispatch: dispatch2,
22958
+ clocks
22959
+ });
22960
+ process2.onState((state) => threads.stopped(state === "stopped"));
22961
+ return threads;
22962
+ }
22963
+ function processViews(process2, opts, header4) {
22964
+ return {
22787
22965
  ignoredSignals: (fork) => process2.inheritable(fork),
22788
22966
  blockedSignals: () => opts.program.abi === "wasi" ? loadBlocked(header4) : [0, 0],
22789
22967
  signalMasks: () => process2.signalMasks(),
22790
22968
  umask: () => process2.umask,
22791
- cred: () => copyCred(process2.cred),
22792
- writesBack: () => opts.program.abi === "wasi" && !done4,
22793
- ...clockViews(clocks)
22969
+ cred: () => copyCred(process2.cred)
22794
22970
  };
22795
22971
  }
22796
22972
  function clockViews(clocks) {
@@ -24108,8 +24284,8 @@ var FSA_CAPABILITIES = {
24108
24284
  ranges: true,
24109
24285
  sessions: true
24110
24286
  };
24111
- var codeOf4 = (err) => err?.code;
24112
- var denied = (err) => codeOf4(err) === "EACCES" || err?.name === "NotAllowedError";
24287
+ var codeOf5 = (err) => err?.code;
24288
+ var denied = (err) => codeOf5(err) === "EACCES" || err?.name === "NotAllowedError";
24113
24289
  function attrOf(st) {
24114
24290
  return {
24115
24291
  kind: st.isDirectory ? "directory" : st.isSymbolicLink ? "symlink" : "file",
@@ -24131,7 +24307,7 @@ function kernelFsHandlers(fs) {
24131
24307
  try {
24132
24308
  return await fs.stat(path);
24133
24309
  } catch (err) {
24134
- if (codeOf4(err) === "ENOENT") return void 0;
24310
+ if (codeOf5(err) === "ENOENT") return void 0;
24135
24311
  throw err;
24136
24312
  }
24137
24313
  }
@@ -24324,7 +24500,7 @@ function parseFstab(text) {
24324
24500
  });
24325
24501
  return lines2;
24326
24502
  }
24327
- function codeOf5(err) {
24503
+ function codeOf6(err) {
24328
24504
  const code = err?.code;
24329
24505
  return typeof code === "string" ? code : "EIO";
24330
24506
  }
@@ -24362,18 +24538,18 @@ async function mountLine({ line, spec, invalid }, mount, signal, retries, discar
24362
24538
  break;
24363
24539
  } catch (err) {
24364
24540
  failed3 = err;
24365
- if (FINAL.has(codeOf5(err)) || attempt === retries.length) break;
24541
+ if (FINAL.has(codeOf6(err)) || attempt === retries.length) break;
24366
24542
  await wait(retries[attempt], signal);
24367
24543
  }
24368
24544
  }
24369
- const code = codeOf5(failed3);
24545
+ const code = codeOf6(failed3);
24370
24546
  return { line, target: spec.target, code, error: String(failed3?.message ?? code) };
24371
24547
  }
24372
24548
 
24373
24549
  // src/mount/hostfs.ts
24374
24550
  var HOSTFS_IO = 16 * 1024 * 1024;
24375
- var codeOf6 = (err) => err?.code;
24376
- var unreachable = (err) => codeOf6(err) === "ENOTCONN";
24551
+ var codeOf7 = (err) => err?.code;
24552
+ var unreachable = (err) => codeOf7(err) === "ENOTCONN";
24377
24553
  function rel(path) {
24378
24554
  return path.replace(/^\/+/, "");
24379
24555
  }
@@ -24550,7 +24726,7 @@ function hostfsHandlers(current, againMs = RESTORE_AGAIN_MS) {
24550
24726
  try {
24551
24727
  return { opened: await opening2(), restore: void 0 };
24552
24728
  } catch (err) {
24553
- if (!flags2.write || codeOf6(err) !== "EACCES") throw err;
24729
+ if (!flags2.write || codeOf7(err) !== "EACCES") throw err;
24554
24730
  const was = await client.call("stat", { path: rel(path) });
24555
24731
  const mode = was.mode ?? 0;
24556
24732
  if (mode & 128) throw err;
@@ -24975,7 +25151,7 @@ var PortTransport = class {
24975
25151
  }
24976
25152
  };
24977
25153
  var errorOf = (err) => ({
24978
- code: typeof codeOf6(err) === "string" ? codeOf6(err) : "EIO",
25154
+ code: typeof codeOf7(err) === "string" ? codeOf7(err) : "EIO",
24979
25155
  message: err?.message ?? String(err)
24980
25156
  });
24981
25157
  function serveHostfsPort(port, transport) {
@@ -24989,14 +25165,14 @@ function serveHostfsPort(port, transport) {
24989
25165
  };
24990
25166
  const send2 = (reply, transfer = []) => port.postMessage(reply, transfer);
24991
25167
  const pending = /* @__PURE__ */ new Set();
24992
- const track = (work) => {
25168
+ const track2 = (work) => {
24993
25169
  pending.add(work);
24994
25170
  const done4 = () => pending.delete(work);
24995
25171
  work.then(done4, done4);
24996
25172
  return work;
24997
25173
  };
24998
- const answer = async (name2, body) => {
24999
- const result = await track(transport.call(name2, body));
25174
+ const answer2 = async (name2, body) => {
25175
+ const result = await track2(transport.call(name2, body));
25000
25176
  const opened2 = result?.fh;
25001
25177
  if (name2 === "open" && typeof opened2 === "number") handles.add(opened2);
25002
25178
  if (name2 === "release") handles.delete(body?.fh);
@@ -25010,7 +25186,7 @@ function serveHostfsPort(port, transport) {
25010
25186
  if (op === "ping") return send2({ id: id2, pong: true });
25011
25187
  if (op === "bye") return stop();
25012
25188
  if (op === "cleanup")
25013
- return void Promise.allSettled([...pending]).then(() => answer(data.name, data.body)).catch(() => {
25189
+ return void Promise.allSettled([...pending]).then(() => answer2(data.name, data.body)).catch(() => {
25014
25190
  });
25015
25191
  if (op === "unwatch") return watches.get(id2)?.abort();
25016
25192
  if (op === "watch") {
@@ -25032,7 +25208,7 @@ function serveHostfsPort(port, transport) {
25032
25208
  }
25033
25209
  try {
25034
25210
  if (op === "read") {
25035
- const read = await track(
25211
+ const read = await track2(
25036
25212
  transport.read(
25037
25213
  data.fh,
25038
25214
  data.offset,
@@ -25044,13 +25220,13 @@ function serveHostfsPort(port, transport) {
25044
25220
  return send2({ id: id2, bytes }, [bytes.buffer]);
25045
25221
  }
25046
25222
  if (op === "write") {
25047
- await track(
25223
+ await track2(
25048
25224
  transport.write(data.fh, data.offset, data.bytes)
25049
25225
  );
25050
25226
  return send2({ id: id2 });
25051
25227
  }
25052
25228
  if (op !== "call") throw fsError2("EINVAL", `unknown hostfs port op ${op}`);
25053
- send2({ id: id2, result: await answer(data.name, data.body) });
25229
+ send2({ id: id2, result: await answer2(data.name, data.body) });
25054
25230
  } catch (err) {
25055
25231
  send2({ id: id2, error: errorOf(err) });
25056
25232
  }
@@ -25842,14 +26018,14 @@ var Sudo = class {
25842
26018
  if (this.pending.has(cred.ruid)) return failed2("EBUSY", "sudo: another request is pending");
25843
26019
  this.pending.add(cred.ruid);
25844
26020
  try {
25845
- const answer = await this.ask(caller, self, target, parsed2.command, path, cwd, signal);
25846
- if (typeof answer !== "string") return answer;
26021
+ const answer2 = await this.ask(caller, self, target, parsed2.command, path, cwd, signal);
26022
+ if (typeof answer2 !== "string") return answer2;
25847
26023
  if (await this.canonical(call.cwd) !== cwd || !await this.reachable(cred, cwd)) {
25848
26024
  return failed2("EACCES", `sudo: ${call.cwd} changed while the request waited`);
25849
26025
  }
25850
26026
  const changed = await this.untrusted(path, cwd, word);
25851
26027
  if (changed) return changed;
25852
- if (answer === "always" && !await this.remember(self, target, cwd, argv)) {
26028
+ if (answer2 === "always" && !await this.remember(self, target, cwd, argv)) {
25853
26029
  return failed2("EIO", "sudo: the rule could not be recorded");
25854
26030
  }
25855
26031
  return grant();
@@ -25904,11 +26080,11 @@ ${lines2}
25904
26080
  );
25905
26081
  try {
25906
26082
  const answered = Promise.resolve().then(() => approve(req, { signal: control.signal })).catch(() => "deny");
25907
- const answer = await Promise.race([answered, aborted2]);
25908
- if (answer === "aborted" || control.signal.aborted) {
26083
+ const answer2 = await Promise.race([answered, aborted2]);
26084
+ if (answer2 === "aborted" || control.signal.aborted) {
25909
26085
  return control.signal.reason === "expired" ? failed2("ETIMEDOUT", "sudo: the request expired") : failed2("EINTR", "sudo: the request was withdrawn");
25910
26086
  }
25911
- return answer === "once" || answer === "always" ? answer : failed2("EACCES", "sudo: approval denied");
26087
+ return answer2 === "once" || answer2 === "always" ? answer2 : failed2("EACCES", "sudo: approval denied");
25912
26088
  } finally {
25913
26089
  clearTimeout(timer);
25914
26090
  requester.removeEventListener("abort", withdraw);
@@ -26819,7 +26995,7 @@ var Launcher = class {
26819
26995
  try {
26820
26996
  return await this.planOne(req, ctx);
26821
26997
  } catch (err) {
26822
- const code = codeOf7(err);
26998
+ const code = codeOf8(err);
26823
26999
  const searched = bare && req.search !== false && (code === "ENOENT" || code === "ENOEXEC");
26824
27000
  if (!searched || await this.commandAt(req.file, ctx.scope)) throw err;
26825
27001
  const found = await this.onPath(req, ctx);
@@ -26836,7 +27012,7 @@ var Launcher = class {
26836
27012
  try {
26837
27013
  return await this.planOne({ ...req, file }, ctx);
26838
27014
  } catch (err) {
26839
- const code = codeOf7(err);
27015
+ const code = codeOf8(err);
26840
27016
  if (code === "EACCES") denied2 = true;
26841
27017
  else if (code !== "ENOENT" && code !== "ENOTDIR") throw err;
26842
27018
  }
@@ -26846,7 +27022,7 @@ var Launcher = class {
26846
27022
  }
26847
27023
  async planOne(req, { ppid, cred, scope }) {
26848
27024
  const refused3 = (err) => {
26849
- throw codeOf7(err) === "EACCES" ? new SpawnError("EACCES") : err;
27025
+ throw codeOf8(err) === "EACCES" ? new SpawnError("EACCES") : err;
26850
27026
  };
26851
27027
  const file = await this.execFile(req.file, req.cwd, this.execGuard(cred, ppid)).catch(refused3);
26852
27028
  const planned = await this.plan(file, req.argv, req.cwd, scope, req.argv0);
@@ -28356,7 +28532,7 @@ var Launcher = class {
28356
28532
  function cronLocks() {
28357
28533
  return globalThis.navigator?.locks;
28358
28534
  }
28359
- function codeOf7(err) {
28535
+ function codeOf8(err) {
28360
28536
  return err?.code;
28361
28537
  }
28362
28538
 
@@ -28769,7 +28945,7 @@ import { connect as tls } from "node:tls";
28769
28945
  var PROBE_MS = 3e3;
28770
28946
  var PASSED = /* @__PURE__ */ new Set(["ECONNREFUSED", "EHOSTUNREACH", "ENETUNREACH", "ETIMEDOUT", "ECONNRESET"]);
28771
28947
  var NO_NAME = /* @__PURE__ */ new Set(["ENOTFOUND", "EAI_AGAIN", "EAI_NONAME", "EAI_FAIL", "ENODATA"]);
28772
- function codeOf8(e) {
28948
+ function codeOf9(e) {
28773
28949
  const code = e?.code;
28774
28950
  return typeof code === "string" ? code : void 0;
28775
28951
  }
@@ -28798,7 +28974,7 @@ function probe(secure2, host, port, ms, signal) {
28798
28974
  signal?.addEventListener("abort", stop, { once: true });
28799
28975
  socket.once(secure2 ? "secureConnect" : "connect", () => done4("EPROTO"));
28800
28976
  socket.once("error", (e) => {
28801
- const code = codeOf8(e) ?? "";
28977
+ const code = codeOf9(e) ?? "";
28802
28978
  done4(PASSED.has(code) ? code : "EPROTO");
28803
28979
  });
28804
28980
  });
@@ -28813,7 +28989,7 @@ async function diagnose(url, ms = PROBE_MS, signal) {
28813
28989
  await abortable(lookup3(host), signal);
28814
28990
  } catch (e) {
28815
28991
  if (signal?.aborted) throw signal.reason;
28816
- return NO_NAME.has(codeOf8(e) ?? "") ? "EAI_NONAME" : void 0;
28992
+ return NO_NAME.has(codeOf9(e) ?? "") ? "EAI_NONAME" : void 0;
28817
28993
  }
28818
28994
  const code = await probe(secure2, host, port, ms, signal);
28819
28995
  signal?.throwIfAborted();
@@ -28832,7 +29008,7 @@ function diagnosing(transport, check = byDefault) {
28832
29008
  try {
28833
29009
  return await open(request);
28834
29010
  } catch (e) {
28835
- if (request.signal.aborted || !(e instanceof Error) || codeOf8(e)) throw e;
29011
+ if (request.signal.aborted || !(e instanceof Error) || codeOf9(e)) throw e;
28836
29012
  const code = await abortable(
28837
29013
  check(request.url, request.signal).catch(() => void 0),
28838
29014
  request.signal