@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.
@@ -636,8 +636,8 @@ var Integrity = class {
636
636
  }
637
637
  }
638
638
  async expected(path) {
639
- const answer = await this.lookup(path);
640
- return typeof answer === "string" ? answer.toLowerCase() : void 0;
639
+ const answer2 = await this.lookup(path);
640
+ return typeof answer2 === "string" ? answer2.toLowerCase() : void 0;
641
641
  }
642
642
  say(event) {
643
643
  try {
@@ -983,12 +983,12 @@ var RemoteWatch = class {
983
983
  }
984
984
  greeted(peer) {
985
985
  this.arrived(peer);
986
- const answer = () => {
986
+ const answer2 = () => {
987
987
  this.channel.postMessage({ here: this.tab, to: peer });
988
988
  if (this.mine.length > 0) void this.announce(this.mine);
989
989
  };
990
- if (this.quiet) void this.quiet().then(answer, answer);
991
- else answer();
990
+ if (this.quiet) void this.quiet().then(answer2, answer2);
991
+ else answer2();
992
992
  }
993
993
  announced({ tab, paths, seq: seq2 }) {
994
994
  const from = tab;
@@ -7020,7 +7020,7 @@ function satisfies(version, range2) {
7020
7020
  }
7021
7021
 
7022
7022
  // src/version.ts
7023
- var KERNEL_VERSION = true ? "1.129.0" : "0.0.0-dev";
7023
+ var KERNEL_VERSION = true ? "1.130.0" : "0.0.0-dev";
7024
7024
  var OS_RELEASE = "6.0.0-slicc";
7025
7025
  function procVersion() {
7026
7026
  return `Linux version ${OS_RELEASE} (slicc-kernel ${KERNEL_VERSION}) #1 SMP PREEMPT_DYNAMIC
@@ -16336,11 +16336,11 @@ function carriesUdp(uplink) {
16336
16336
  return uplink.traits.udp === true && typeof uplink.udp === "function";
16337
16337
  }
16338
16338
  function answerOf(result) {
16339
- const answer = Array.isArray(result) ? { addresses: result } : result;
16340
- const addresses = Array.isArray(answer?.addresses) ? answer.addresses.filter((a) => typeof a === "string") : [];
16339
+ const answer2 = Array.isArray(result) ? { addresses: result } : result;
16340
+ const addresses = Array.isArray(answer2?.addresses) ? answer2.addresses.filter((a) => typeof a === "string") : [];
16341
16341
  return {
16342
16342
  addresses,
16343
- ...typeof answer?.ttl === "number" && answer.ttl >= 0 ? { ttl: answer.ttl } : {}
16343
+ ...typeof answer2?.ttl === "number" && answer2.ttl >= 0 ? { ttl: answer2.ttl } : {}
16344
16344
  };
16345
16345
  }
16346
16346
  var NEVER = new Routes(true);
@@ -16528,9 +16528,9 @@ var Resolver = class {
16528
16528
  async lookup(name2, family, id2, abandoned) {
16529
16529
  const uplink = this.uplink;
16530
16530
  const timeout = AbortSignal.any([AbortSignal.timeout(this.timeoutMs), abandoned]);
16531
- let answer;
16531
+ let answer2;
16532
16532
  try {
16533
- answer = answerOf(
16533
+ answer2 = answerOf(
16534
16534
  await Promise.race([
16535
16535
  uplink.resolve(name2, family, timeout),
16536
16536
  new Promise(
@@ -16541,8 +16541,8 @@ var Resolver = class {
16541
16541
  } catch {
16542
16542
  return [];
16543
16543
  }
16544
- const addresses = answer.addresses.filter((a) => this.usable(name2, a, family));
16545
- if (addresses.length > 0) this.remember(id2, addresses, answer.ttl);
16544
+ const addresses = answer2.addresses.filter((a) => this.usable(name2, a, family));
16545
+ if (addresses.length > 0) this.remember(id2, addresses, answer2.ttl);
16546
16546
  return addresses;
16547
16547
  }
16548
16548
  usable(name2, address, family) {
@@ -21198,8 +21198,8 @@ var WasmProcess = class {
21198
21198
  spares(sig) {
21199
21199
  const { caught, ignored } = this.signalMasks();
21200
21200
  const bit = isSignal(sig) ? sigbit(sig) : 0;
21201
- const answer = (ignored & bit) !== 0 ? "ignore" : (caught & bit) !== 0 ? "spare" : "terminate";
21202
- return { ok: true, kind: "json", json: answer };
21201
+ const answer2 = (ignored & bit) !== 0 ? "ignore" : (caught & bit) !== 0 ? "spare" : "terminate";
21202
+ return { ok: true, kind: "json", json: answer2 };
21203
21203
  }
21204
21204
  async killSelf(sig, target, probe) {
21205
21205
  if (!this.options.exitSignal) throw new KernelError("ENOSYS");
@@ -22316,10 +22316,10 @@ var WasmProcess = class {
22316
22316
  cwd: typeof req.cwd === "string" && req.cwd.startsWith("/") ? req.cwd : "/",
22317
22317
  ...typeof req.term === "string" ? { term: req.term } : {}
22318
22318
  };
22319
- const answer = await sudo(call, this.blockingSignal(cancelled));
22320
- if (!("grant" in answer)) return answer;
22319
+ const answer2 = await sudo(call, this.blockingSignal(cancelled));
22320
+ if (!("grant" in answer2)) return answer2;
22321
22321
  if (this.dying) throw new KernelError("EINTR");
22322
- const { file, argv, env, cwd, cred, caller } = answer.grant;
22322
+ const { file, argv, env, cwd, cred, caller } = answer2.grant;
22323
22323
  const stdio = [{ fd: 0 }, { fd: 1 }, { fd: 2 }];
22324
22324
  return {
22325
22325
  pid: await this.children.spawn({ file, argv, env, cwd, pgid: 0 }, stdio, [], {
@@ -22479,6 +22479,153 @@ var WASM_THREAD_SPAWN = "wasm-thread-spawn";
22479
22479
  var WASM_THREAD_INIT = "wasm-thread-init";
22480
22480
  var WASM_THREAD_EXIT = "wasm-thread-exit";
22481
22481
  var WASM_MAX_THREADS = 256;
22482
+ var JS_THREAD_SPAWN = "js-thread-spawn";
22483
+ var JS_THREAD_INIT = "js-thread-init";
22484
+ var JS_THREAD_EXIT = "js-thread-exit";
22485
+ var JS_MAX_THREADS = 256;
22486
+ var JS_DEFAULT_THREADS = 16;
22487
+ var JS_THREAD_NO_MEMORY = 256;
22488
+ var JS_THREAD_CRASHED = 257;
22489
+
22490
+ // src/kernel/js-threads.ts
22491
+ var JS_OOM = /out of memory|Array buffer allocation failed|Cannot allocate Wasm memory|could not allocate memory|ERR_WORKER_OUT_OF_MEMORY/i;
22492
+ var ENDING = { ok: false, errno: "EINTR", message: "the thread is ending" };
22493
+ var MAIN_ONLY = { ok: true, kind: "void" };
22494
+ function track(ops, req, result) {
22495
+ if (req.op === "async-submit" && result.ok && result.kind === "json") {
22496
+ if (typeof result.json === "number") ops.set(result.json, req.token);
22497
+ } else if (req.op === "async-cancel" || req.op === "async-take" && (result.ok || result.errno !== "EAGAIN")) {
22498
+ ops.delete(req.id);
22499
+ }
22500
+ }
22501
+ function cores() {
22502
+ const n = globalThis.navigator?.hardwareConcurrency;
22503
+ return typeof n === "number" && Number.isInteger(n) && n > 0 ? n : 0;
22504
+ }
22505
+ function jsThreadCap(env) {
22506
+ const asked = Number.parseInt(env.SLICC_JS_THREADS ?? "", 10);
22507
+ if (asked >= 1) return Math.min(asked, JS_MAX_THREADS);
22508
+ return Math.min(JS_MAX_THREADS, Math.max(JS_DEFAULT_THREADS, 2 * cores()));
22509
+ }
22510
+ function codeOf4(code) {
22511
+ if (code === JS_THREAD_NO_MEMORY || code === JS_THREAD_CRASHED) return code;
22512
+ return typeof code === "number" && Number.isInteger(code) ? code & 255 : JS_THREAD_CRASHED;
22513
+ }
22514
+ function answer(control, message3) {
22515
+ control.postMessage(message3);
22516
+ }
22517
+ var JsThreads = class {
22518
+ deps;
22519
+ live = /* @__PURE__ */ new Map();
22520
+ headers = /* @__PURE__ */ new Map();
22521
+ frozen = false;
22522
+ last = 0;
22523
+ closed = false;
22524
+ constructor(deps) {
22525
+ this.deps = deps;
22526
+ }
22527
+ get size() {
22528
+ return this.live.size;
22529
+ }
22530
+ spawn(msg) {
22531
+ const { control, port } = msg;
22532
+ if (this.closed || this.live.size >= this.deps.cap) {
22533
+ answer(
22534
+ control,
22535
+ this.closed ? { errno: "ESRCH", message: "the process is ending" } : { errno: "EAGAIN", message: `more than ${this.deps.cap} threads` }
22536
+ );
22537
+ control.close();
22538
+ port.close();
22539
+ return;
22540
+ }
22541
+ const tid = ++this.last;
22542
+ const sab = new SharedArrayBuffer(SAB_HEADER_BYTES + SAB_DEFAULT_WINDOW_BYTES);
22543
+ const header3 = new Int32Array(sab, 0, SAB_HEADER_I32);
22544
+ if (this.frozen) Atomics.store(header3, SAB_I_STOP, 1);
22545
+ const worker = this.deps.createWorker();
22546
+ const clock = this.deps.clocks.thread(tid + 1, sab);
22547
+ let ended = false;
22548
+ const end = (code) => {
22549
+ if (ended) return;
22550
+ ended = true;
22551
+ this.live.delete(tid);
22552
+ this.headers.delete(tid);
22553
+ this.deps.wakes.delete(header3);
22554
+ for (const [id2, token] of ops) {
22555
+ void this.deps.dispatch({ op: "async-cancel", id: id2, token });
22556
+ }
22557
+ ops.clear();
22558
+ worker.removeEventListener("message", onMessage);
22559
+ worker.removeEventListener("error", onError);
22560
+ control.removeEventListener("message", onControl);
22561
+ responder.dispose();
22562
+ lane.dispose();
22563
+ this.deps.clocks.threadEnded(tid + 1);
22564
+ worker.terminate();
22565
+ answer(control, { exited: code });
22566
+ control.close();
22567
+ };
22568
+ const ops = /* @__PURE__ */ new Map();
22569
+ const dispatch2 = async (req, block) => {
22570
+ if (isWasmSyscall(req) && req.op === "proc-exit") {
22571
+ queueMicrotask(() => end(req.status & 255));
22572
+ return ENDING;
22573
+ }
22574
+ if (isWasmSyscall(req) && req.op === "sig-mask") return MAIN_ONLY;
22575
+ const result = await this.deps.dispatch(req, block);
22576
+ if (!ended) track(ops, req, result);
22577
+ return result;
22578
+ };
22579
+ const responder = this.deps.attach(worker, sab, this.deps.clocks.timed(clock, dispatch2));
22580
+ const lane = this.deps.openLane(dispatch2);
22581
+ const onMessage = (event) => {
22582
+ const data = event.data;
22583
+ if (data?.type === JS_THREAD_EXIT) end(codeOf4(data.code));
22584
+ else if (data?.type === JS_THREAD_SPAWN) this.spawn(event.data);
22585
+ else if (data?.type === WASM_PROCESS_ERROR) this.crashed(String(data.message), end);
22586
+ };
22587
+ const onError = (event) => {
22588
+ event.preventDefault();
22589
+ this.crashed(String(event.message ?? "worker error"), end);
22590
+ };
22591
+ const onControl = (event) => {
22592
+ if (event.data?.terminate === true) end(1);
22593
+ };
22594
+ worker.addEventListener("message", onMessage);
22595
+ worker.addEventListener("error", onError);
22596
+ control.addEventListener("message", onControl);
22597
+ control.start();
22598
+ this.live.set(tid, end);
22599
+ this.headers.set(tid, header3);
22600
+ this.deps.wakes.add(header3);
22601
+ const init = {
22602
+ ...this.deps.init(sab, lane.lane),
22603
+ type: JS_THREAD_INIT,
22604
+ thread: { tid, port, data: msg.data }
22605
+ };
22606
+ try {
22607
+ worker.postMessage(init, [lane.lane.port, port, ...msg.transfer ?? []]);
22608
+ } catch {
22609
+ end(JS_THREAD_CRASHED);
22610
+ return;
22611
+ }
22612
+ answer(control, { tid });
22613
+ }
22614
+ crashed(message3, end) {
22615
+ end(JS_OOM.test(message3) ? JS_THREAD_NO_MEMORY : JS_THREAD_CRASHED);
22616
+ }
22617
+ stopped(stopped) {
22618
+ this.frozen = stopped;
22619
+ for (const header3 of this.headers.values()) {
22620
+ Atomics.store(header3, SAB_I_STOP, stopped ? 1 : 0);
22621
+ Atomics.notify(header3, SAB_I_STOP);
22622
+ }
22623
+ }
22624
+ close() {
22625
+ this.closed = true;
22626
+ for (const end of [...this.live.values()]) end(1);
22627
+ }
22628
+ };
22482
22629
 
22483
22630
  // src/kernel/host.ts
22484
22631
  var CRASHED = 70;
@@ -22581,6 +22728,7 @@ function threadSignalsOf(sab) {
22581
22728
  function threadCancel(thread) {
22582
22729
  return unblocked(thread.header) !== 0 ? AbortSignal.abort() : thread.interrupt.signal;
22583
22730
  }
22731
+ var asyncFanout = /* @__PURE__ */ new WeakMap();
22584
22732
  function notifiers(header3) {
22585
22733
  return {
22586
22734
  onPending(sig) {
@@ -22588,8 +22736,10 @@ function notifiers(header3) {
22588
22736
  Atomics.notify(header3, SAB_I_SIGNALS);
22589
22737
  },
22590
22738
  onAsync() {
22591
- Atomics.add(header3, SAB_I_ASYNC, 1);
22592
- Atomics.notify(header3, SAB_I_ASYNC);
22739
+ for (const at of [header3, ...asyncFanout.get(header3) ?? []]) {
22740
+ Atomics.add(at, SAB_I_ASYNC, 1);
22741
+ Atomics.notify(at, SAB_I_ASYNC);
22742
+ }
22593
22743
  }
22594
22744
  };
22595
22745
  }
@@ -22820,6 +22970,7 @@ function spawnWasmProcess(opts) {
22820
22970
  dispatch: clocks.timed(void 0, dispatch2)
22821
22971
  });
22822
22972
  const lane = opts.program.abi === "js" ? openLane(token, dispatch2) : void 0;
22973
+ const jsThreads = jsThreadsOf(opts, process, token, dispatch2, clocks, header3);
22823
22974
  const { promise: exited, resolve: settle3 } = Promise.withResolvers();
22824
22975
  let done5 = false;
22825
22976
  let endedBy;
@@ -22833,6 +22984,7 @@ function spawnWasmProcess(opts) {
22833
22984
  worker.removeEventListener("message", onMessage);
22834
22985
  worker.removeEventListener("error", onError);
22835
22986
  for (const tid of [...threads.keys()]) endThread(tid);
22987
+ jsThreads?.close();
22836
22988
  responder.dispose();
22837
22989
  lane?.dispose();
22838
22990
  revokeSyncFsToken(token);
@@ -22856,6 +23008,8 @@ function spawnWasmProcess(opts) {
22856
23008
  finish(...dying.status(data.code));
22857
23009
  } else if (data?.type === WASM_THREAD_SPAWN && data.thread) {
22858
23010
  spawnThread(data.thread);
23011
+ } else if (data?.type === JS_THREAD_SPAWN && jsThreads) {
23012
+ jsThreads.spawn(data);
22859
23013
  }
22860
23014
  };
22861
23015
  const onMessage = (event) => handle(event.data);
@@ -22929,13 +23083,35 @@ function spawnWasmProcess(opts) {
22929
23083
  termsig: () => endedBy,
22930
23084
  onState: (listener) => process.onState(listener),
22931
23085
  memory: () => Atomics.load(header3, SAB_I_MEMORY) * 65536,
23086
+ ...processViews(process, opts, header3),
23087
+ writesBack: () => opts.program.abi === "wasi" && !done5,
23088
+ ...clockViews(clocks)
23089
+ };
23090
+ }
23091
+ function jsThreadsOf(opts, process, token, dispatch2, clocks, header3) {
23092
+ if (opts.program.abi !== "js") return void 0;
23093
+ const wakes = /* @__PURE__ */ new Set();
23094
+ asyncFanout.set(header3, wakes);
23095
+ const threads = new JsThreads({
23096
+ wakes,
23097
+ cap: jsThreadCap(opts.env),
23098
+ createWorker: opts.createWorker,
23099
+ init: (sab, lane) => processInit(opts, sab, process.umask, copyCred(process.cred), lane),
23100
+ openLane: (laneDispatch) => openLane(token, laneDispatch),
23101
+ attach: (worker, sab, threadDispatch) => attachSyncSabResponder(worker, sab, token, { dispatch: threadDispatch }),
23102
+ dispatch: dispatch2,
23103
+ clocks
23104
+ });
23105
+ process.onState((state) => threads.stopped(state === "stopped"));
23106
+ return threads;
23107
+ }
23108
+ function processViews(process, opts, header3) {
23109
+ return {
22932
23110
  ignoredSignals: (fork) => process.inheritable(fork),
22933
23111
  blockedSignals: () => opts.program.abi === "wasi" ? loadBlocked(header3) : [0, 0],
22934
23112
  signalMasks: () => process.signalMasks(),
22935
23113
  umask: () => process.umask,
22936
- cred: () => copyCred(process.cred),
22937
- writesBack: () => opts.program.abi === "wasi" && !done5,
22938
- ...clockViews(clocks)
23114
+ cred: () => copyCred(process.cred)
22939
23115
  };
22940
23116
  }
22941
23117
  function clockViews(clocks) {
@@ -24253,8 +24429,8 @@ var FSA_CAPABILITIES = {
24253
24429
  ranges: true,
24254
24430
  sessions: true
24255
24431
  };
24256
- var codeOf4 = (err) => err?.code;
24257
- var denied = (err) => codeOf4(err) === "EACCES" || err?.name === "NotAllowedError";
24432
+ var codeOf5 = (err) => err?.code;
24433
+ var denied = (err) => codeOf5(err) === "EACCES" || err?.name === "NotAllowedError";
24258
24434
  function attrOf(st) {
24259
24435
  return {
24260
24436
  kind: st.isDirectory ? "directory" : st.isSymbolicLink ? "symlink" : "file",
@@ -24276,7 +24452,7 @@ function kernelFsHandlers(fs) {
24276
24452
  try {
24277
24453
  return await fs.stat(path);
24278
24454
  } catch (err) {
24279
- if (codeOf4(err) === "ENOENT") return void 0;
24455
+ if (codeOf5(err) === "ENOENT") return void 0;
24280
24456
  throw err;
24281
24457
  }
24282
24458
  }
@@ -24469,7 +24645,7 @@ function parseFstab(text) {
24469
24645
  });
24470
24646
  return lines2;
24471
24647
  }
24472
- function codeOf5(err) {
24648
+ function codeOf6(err) {
24473
24649
  const code = err?.code;
24474
24650
  return typeof code === "string" ? code : "EIO";
24475
24651
  }
@@ -24507,18 +24683,18 @@ async function mountLine({ line, spec, invalid }, mount, signal, retries, discar
24507
24683
  break;
24508
24684
  } catch (err) {
24509
24685
  failed3 = err;
24510
- if (FINAL.has(codeOf5(err)) || attempt === retries.length) break;
24686
+ if (FINAL.has(codeOf6(err)) || attempt === retries.length) break;
24511
24687
  await wait(retries[attempt], signal);
24512
24688
  }
24513
24689
  }
24514
- const code = codeOf5(failed3);
24690
+ const code = codeOf6(failed3);
24515
24691
  return { line, target: spec.target, code, error: String(failed3?.message ?? code) };
24516
24692
  }
24517
24693
 
24518
24694
  // src/mount/hostfs.ts
24519
24695
  var HOSTFS_IO = 16 * 1024 * 1024;
24520
- var codeOf6 = (err) => err?.code;
24521
- var unreachable = (err) => codeOf6(err) === "ENOTCONN";
24696
+ var codeOf7 = (err) => err?.code;
24697
+ var unreachable = (err) => codeOf7(err) === "ENOTCONN";
24522
24698
  function rel(path) {
24523
24699
  return path.replace(/^\/+/, "");
24524
24700
  }
@@ -24695,7 +24871,7 @@ function hostfsHandlers(current, againMs = RESTORE_AGAIN_MS) {
24695
24871
  try {
24696
24872
  return { opened: await opening2(), restore: void 0 };
24697
24873
  } catch (err) {
24698
- if (!flags2.write || codeOf6(err) !== "EACCES") throw err;
24874
+ if (!flags2.write || codeOf7(err) !== "EACCES") throw err;
24699
24875
  const was = await client.call("stat", { path: rel(path) });
24700
24876
  const mode = was.mode ?? 0;
24701
24877
  if (mode & 128) throw err;
@@ -25915,14 +26091,14 @@ var Sudo = class {
25915
26091
  if (this.pending.has(cred.ruid)) return failed2("EBUSY", "sudo: another request is pending");
25916
26092
  this.pending.add(cred.ruid);
25917
26093
  try {
25918
- const answer = await this.ask(caller, self, target, parsed2.command, path, cwd, signal);
25919
- if (typeof answer !== "string") return answer;
26094
+ const answer2 = await this.ask(caller, self, target, parsed2.command, path, cwd, signal);
26095
+ if (typeof answer2 !== "string") return answer2;
25920
26096
  if (await this.canonical(call.cwd) !== cwd || !await this.reachable(cred, cwd)) {
25921
26097
  return failed2("EACCES", `sudo: ${call.cwd} changed while the request waited`);
25922
26098
  }
25923
26099
  const changed = await this.untrusted(path, cwd, word);
25924
26100
  if (changed) return changed;
25925
- if (answer === "always" && !await this.remember(self, target, cwd, argv)) {
26101
+ if (answer2 === "always" && !await this.remember(self, target, cwd, argv)) {
25926
26102
  return failed2("EIO", "sudo: the rule could not be recorded");
25927
26103
  }
25928
26104
  return grant();
@@ -25977,11 +26153,11 @@ ${lines2}
25977
26153
  );
25978
26154
  try {
25979
26155
  const answered2 = Promise.resolve().then(() => approve(req, { signal: control.signal })).catch(() => "deny");
25980
- const answer = await Promise.race([answered2, aborted2]);
25981
- if (answer === "aborted" || control.signal.aborted) {
26156
+ const answer2 = await Promise.race([answered2, aborted2]);
26157
+ if (answer2 === "aborted" || control.signal.aborted) {
25982
26158
  return control.signal.reason === "expired" ? failed2("ETIMEDOUT", "sudo: the request expired") : failed2("EINTR", "sudo: the request was withdrawn");
25983
26159
  }
25984
- return answer === "once" || answer === "always" ? answer : failed2("EACCES", "sudo: approval denied");
26160
+ return answer2 === "once" || answer2 === "always" ? answer2 : failed2("EACCES", "sudo: approval denied");
25985
26161
  } finally {
25986
26162
  clearTimeout(timer);
25987
26163
  requester.removeEventListener("abort", withdraw);
@@ -26896,7 +27072,7 @@ var Launcher = class {
26896
27072
  try {
26897
27073
  return await this.planOne(req, ctx);
26898
27074
  } catch (err) {
26899
- const code = codeOf7(err);
27075
+ const code = codeOf8(err);
26900
27076
  const searched = bare && req.search !== false && (code === "ENOENT" || code === "ENOEXEC");
26901
27077
  if (!searched || await this.commandAt(req.file, ctx.scope)) throw err;
26902
27078
  const found = await this.onPath(req, ctx);
@@ -26913,7 +27089,7 @@ var Launcher = class {
26913
27089
  try {
26914
27090
  return await this.planOne({ ...req, file }, ctx);
26915
27091
  } catch (err) {
26916
- const code = codeOf7(err);
27092
+ const code = codeOf8(err);
26917
27093
  if (code === "EACCES") denied2 = true;
26918
27094
  else if (code !== "ENOENT" && code !== "ENOTDIR") throw err;
26919
27095
  }
@@ -26923,7 +27099,7 @@ var Launcher = class {
26923
27099
  }
26924
27100
  async planOne(req, { ppid, cred, scope }) {
26925
27101
  const refused3 = (err) => {
26926
- throw codeOf7(err) === "EACCES" ? new SpawnError("EACCES") : err;
27102
+ throw codeOf8(err) === "EACCES" ? new SpawnError("EACCES") : err;
26927
27103
  };
26928
27104
  const file = await this.execFile(req.file, req.cwd, this.execGuard(cred, ppid)).catch(refused3);
26929
27105
  const planned = await this.plan(file, req.argv, req.cwd, scope, req.argv0);
@@ -28433,7 +28609,7 @@ var Launcher = class {
28433
28609
  function cronLocks() {
28434
28610
  return globalThis.navigator?.locks;
28435
28611
  }
28436
- function codeOf7(err) {
28612
+ function codeOf8(err) {
28437
28613
  return err?.code;
28438
28614
  }
28439
28615
 
@@ -28473,14 +28649,14 @@ function clipboardAsker(port) {
28473
28649
  await ask("write", stamp, text);
28474
28650
  }
28475
28651
  };
28476
- const answer = ({ id: id2, text, error }) => {
28652
+ const answer2 = ({ id: id2, text, error }) => {
28477
28653
  const waiting = asks.get(id2);
28478
28654
  if (!waiting) return;
28479
28655
  asks.delete(id2);
28480
28656
  if (error) waiting.reject(Object.assign(new Error(error.message), { name: error.name }));
28481
28657
  else waiting.resolve(text);
28482
28658
  };
28483
- return { hook, answer };
28659
+ return { hook, answer: answer2 };
28484
28660
  }
28485
28661
 
28486
28662
  // src/integrity-relay.ts
@@ -28494,14 +28670,14 @@ function integrityAsker(port) {
28494
28670
  port.postMessage({ integrityAsk: { id: id2, path } });
28495
28671
  return waiting.promise;
28496
28672
  };
28497
- const answer = ({ id: id2, hash, error }) => {
28673
+ const answer2 = ({ id: id2, hash, error }) => {
28498
28674
  const waiting = asks.get(id2);
28499
28675
  if (!waiting) return;
28500
28676
  asks.delete(id2);
28501
28677
  if (error !== void 0) waiting.reject(new Error(error));
28502
28678
  else waiting.resolve(hash);
28503
28679
  };
28504
- return { lookup: lookup2, answer };
28680
+ return { lookup: lookup2, answer: answer2 };
28505
28681
  }
28506
28682
 
28507
28683
  // src/kernel/net/remote-transport.ts
@@ -28725,14 +28901,14 @@ function sealedAsker(port) {
28725
28901
  port.postMessage({ sealedAsk: { id: id2, req } });
28726
28902
  return waiting.promise.finally(() => signal.removeEventListener("abort", abort));
28727
28903
  };
28728
- const answer = ({ id: id2, reply, error }) => {
28904
+ const answer2 = ({ id: id2, reply, error }) => {
28729
28905
  const waiting = asks.get(id2);
28730
28906
  if (!waiting) return;
28731
28907
  asks.delete(id2);
28732
28908
  if (reply) waiting.resolve(reply);
28733
28909
  else waiting.reject(new Error(error ?? "no reply"));
28734
28910
  };
28735
- return { hook, answer };
28911
+ return { hook, answer: answer2 };
28736
28912
  }
28737
28913
 
28738
28914
  // src/serve.ts
@@ -28845,8 +29021,8 @@ function sudoApprovals(port) {
28845
29021
  );
28846
29022
  port.postMessage({ sudoAsk: req });
28847
29023
  }),
28848
- answer({ id: id2, answer }) {
28849
- waiting.get(id2)?.(answer);
29024
+ answer({ id: id2, answer: answer2 }) {
29025
+ waiting.get(id2)?.(answer2);
28850
29026
  waiting.delete(id2);
28851
29027
  }
28852
29028
  };
@@ -28940,10 +29116,10 @@ function policyAsker(port) {
28940
29116
  return {
28941
29117
  mountPolicy: (policy) => policy === void 0 ? {} : { processMounts: policy === "ask" ? askPolicy : policy },
28942
29118
  allowed(data) {
28943
- const answer = data.mountAllowed;
28944
- if (!answer) return false;
28945
- policies.get(answer.id)?.(answer.allowed);
28946
- policies.delete(answer.id);
29119
+ const answer2 = data.mountAllowed;
29120
+ if (!answer2) return false;
29121
+ policies.get(answer2.id)?.(answer2.allowed);
29122
+ policies.delete(answer2.id);
28947
29123
  return true;
28948
29124
  }
28949
29125
  };