@ai-ecoverse/slicc-kernel 1.39.2 → 1.40.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.
@@ -2730,13 +2730,13 @@ function describeInherited(Fs, sys, streams, livePath, actions = []) {
2730
2730
  if (from) table.set(target, { stream: from.stream, cloexec: false });
2731
2731
  else table.delete(target);
2732
2732
  }
2733
- const slots = /* @__PURE__ */ new Map();
2733
+ const slots2 = /* @__PURE__ */ new Map();
2734
2734
  for (const [fd, { stream, cloexec }] of table) {
2735
- if (fd > 2 && !cloexec) slots.set(fd, stream);
2735
+ if (fd > 2 && !cloexec) slots2.set(fd, stream);
2736
2736
  }
2737
2737
  const promote = vfsPromoter(Fs, sys, streams, livePath);
2738
2738
  const out = [];
2739
- for (const [fd, stream] of slots) {
2739
+ for (const [fd, stream] of slots2) {
2740
2740
  promote(stream);
2741
2741
  const slot = inheritedSlot(fd, stream);
2742
2742
  if (slot) out.push(slot);
@@ -2928,6 +2928,7 @@ function createProcessKernel(deps) {
2928
2928
  if (!stream) return { none: true };
2929
2929
  promote?.(stream);
2930
2930
  if (stream.sliccKernelFd !== void 0) return { fd: stream.sliccKernelFd };
2931
+ if (((stream.node?.mode ?? 0) & S_IFMT) === S_IFDIR2 && stream.path) return { dir: stream.path };
2931
2932
  const device2 = deviceOfStream(stream);
2932
2933
  if (device2) return device2;
2933
2934
  return n === 0 ? { input: drain(Fs, stream) } : { capture: true };
@@ -3071,12 +3072,14 @@ function createProcessKernel(deps) {
3071
3072
  }
3072
3073
  };
3073
3074
  }
3074
- var POLLIN2, POLLOUT2, POLLERR2, POLLHUP2, POLLNVAL, SELECT_SLICE_MS, WUNTRACED, WCONTINUED;
3075
+ var S_IFMT, S_IFDIR2, POLLIN2, POLLOUT2, POLLERR2, POLLHUP2, POLLNVAL, SELECT_SLICE_MS, WUNTRACED, WCONTINUED;
3075
3076
  var init_process_children = __esm({
3076
3077
  "src/process/process-children.ts"() {
3077
3078
  "use strict";
3078
3079
  init_process_fork();
3079
3080
  init_wasi_errno();
3081
+ S_IFMT = 61440;
3082
+ S_IFDIR2 = 16384;
3080
3083
  POLLIN2 = 1;
3081
3084
  POLLOUT2 = 4;
3082
3085
  POLLERR2 = 8;
@@ -3785,7 +3788,7 @@ function kernelSys(transport) {
3785
3788
  kind(fd) {
3786
3789
  return json(call2({ op: "fd-info", fd }, `fd-info ${fd}`))?.kind;
3787
3790
  },
3788
- device(fd) {
3791
+ heldMeta(fd) {
3789
3792
  return json(call2({ op: "fd-info", fd }, `fd-info ${fd}`)).meta;
3790
3793
  },
3791
3794
  size(fd) {
@@ -3849,9 +3852,15 @@ function wireKernelFd(Fs, streams, entry) {
3849
3852
  }
3850
3853
  function openDevice(Fs, fd, meta) {
3851
3854
  const flags = meta.access === "read" ? O_RDONLY : meta.access === "write" ? O_WRONLY3 : O_RDWR3;
3855
+ return openAt(Fs, fd, `/dev/${meta.device}`, flags);
3856
+ }
3857
+ function openHeld(Fs, fd, meta) {
3858
+ return "dir" in meta ? openAt(Fs, fd, meta.dir, O_RDONLY | O_DIRECTORY) : openDevice(Fs, fd, meta);
3859
+ }
3860
+ function openAt(Fs, fd, path, flags) {
3852
3861
  let stream;
3853
3862
  try {
3854
- stream = Fs.open(`/dev/${meta.device}`, flags);
3863
+ stream = Fs.open(path, flags);
3855
3864
  } catch {
3856
3865
  return false;
3857
3866
  }
@@ -3866,8 +3875,8 @@ function wireKernelStdio(Fs, streams, sys) {
3866
3875
  const stream = Fs.getStream(fd);
3867
3876
  if (!stream) continue;
3868
3877
  const kind = sys?.kind?.(fd);
3869
- const device2 = kind === "device" ? sys?.device?.(fd) : void 0;
3870
- if (device2 && openDevice(Fs, fd, device2)) continue;
3878
+ const meta = kind === "device" || kind === "held" ? sys?.heldMeta?.(fd) : void 0;
3879
+ if (meta && openHeld(Fs, fd, meta)) continue;
3871
3880
  if (kind && PLACED.has(kind)) {
3872
3881
  const { flags } = stream;
3873
3882
  Fs.closeStream(fd);
@@ -4119,7 +4128,7 @@ function runMain(running, init) {
4119
4128
  return status2;
4120
4129
  }
4121
4130
  }
4122
- var FS_OPS, O_RDONLY, O_WRONLY3, O_RDWR3, PLACED, GLUE_TRAILER, evaluateGlue, EVAL_BLOCKED;
4131
+ var FS_OPS, O_RDONLY, O_WRONLY3, O_RDWR3, O_DIRECTORY, PLACED, GLUE_TRAILER, evaluateGlue, EVAL_BLOCKED;
4123
4132
  var init_process_runtime = __esm({
4124
4133
  "src/process/process-runtime.ts"() {
4125
4134
  "use strict";
@@ -4144,6 +4153,7 @@ var init_process_runtime = __esm({
4144
4153
  O_RDONLY = 0;
4145
4154
  O_WRONLY3 = 1;
4146
4155
  O_RDWR3 = 2;
4156
+ O_DIRECTORY = 65536;
4147
4157
  PLACED = /* @__PURE__ */ new Set(["stream", "file", "socket"]);
4148
4158
  GLUE_TRAILER = [
4149
4159
  "if (typeof ENV !== 'undefined') Object.assign(ENV, Module.sliccEnv);",
@@ -4507,10 +4517,10 @@ var init_wasi_files = __esm({
4507
4517
  readable;
4508
4518
  writable;
4509
4519
  append;
4510
- constructor(buffer, readable, writable, append) {
4520
+ constructor(buffer, readable2, writable2, append) {
4511
4521
  this.buffer = buffer;
4512
- this.readable = readable;
4513
- this.writable = writable;
4522
+ this.readable = readable2;
4523
+ this.writable = writable2;
4514
4524
  this.append = append;
4515
4525
  }
4516
4526
  get path() {
@@ -4592,9 +4602,9 @@ function entryOf(info) {
4592
4602
  function openAccess(existing, oflags, rights) {
4593
4603
  const readonly = existing?.readonly === true;
4594
4604
  const mutating = readonly ? OFLAGS.TRUNC : OFLAGS.CREAT | OFLAGS.TRUNC;
4595
- const writable = (rights & RIGHTS.FD_WRITE) !== 0n || (oflags & mutating) !== 0;
4596
- if (writable && readonly) throw new WasiError("EROFS");
4597
- return { readable: (rights & RIGHTS.FD_READ) !== 0n || !writable, writable };
4605
+ const writable2 = (rights & RIGHTS.FD_WRITE) !== 0n || (oflags & mutating) !== 0;
4606
+ if (writable2 && readonly) throw new WasiError("EROFS");
4607
+ return { readable: (rights & RIGHTS.FD_READ) !== 0n || !writable2, writable: writable2 };
4598
4608
  }
4599
4609
  function promoteRequest(fd, f, handed) {
4600
4610
  const orphan = f.buffer.isOrphan();
@@ -4640,7 +4650,7 @@ var init_wasi_fds = __esm({
4640
4650
  this.fs = fs;
4641
4651
  }
4642
4652
  setup(cwd, inherited, root = false) {
4643
- for (const fd of [0, 1, 2]) this.table.set(fd, kernelEntry2());
4653
+ for (const fd of [0, 1, 2]) this.table.set(fd, this.stdioEntry(fd));
4644
4654
  const preopens = this.preopens(cwd, root);
4645
4655
  const top = 3 + preopens.length;
4646
4656
  for (const { fd, kind, flags, device: device2 } of inherited) {
@@ -4727,6 +4737,15 @@ var init_wasi_fds = __esm({
4727
4737
  const gen = Atomics.add(this.shared, GEN, 1) + 1;
4728
4738
  if (gen - 1 === this.seen) this.seen = gen;
4729
4739
  }
4740
+ stdioEntry(fd) {
4741
+ let info;
4742
+ try {
4743
+ info = this.kernel.call({ op: "fd-info", fd });
4744
+ } catch {
4745
+ return kernelEntry2();
4746
+ }
4747
+ return info?.meta && "dir" in info.meta ? { type: "dir", path: info.meta.dir } : kernelEntry2();
4748
+ }
4730
4749
  fetch(fd) {
4731
4750
  let info;
4732
4751
  try {
@@ -5016,13 +5035,17 @@ var init_wasi_fds = __esm({
5016
5035
  if (oflags & OFLAGS.DIRECTORY && !s?.isDirectory) {
5017
5036
  throw new WasiError(s ? "ENOTDIR" : "ENOENT");
5018
5037
  }
5019
- if (s?.isDirectory) return this.install({ type: "dir", path });
5038
+ if (s?.isDirectory) {
5039
+ const asked = (oflags & OFLAGS.DIRECTORY) === 0 && (rights & RIGHTS.FD_WRITE) !== 0n;
5040
+ if (asked || (oflags & (OFLAGS.CREAT | OFLAGS.TRUNC)) !== 0) throw new WasiError("EISDIR");
5041
+ return this.install({ type: "dir", path });
5042
+ }
5020
5043
  if (!s && !(oflags & OFLAGS.CREAT)) throw new WasiError("ENOENT");
5021
5044
  if (this.shared) return this.kernelFile(path, s, oflags, rights, fdflags);
5022
5045
  return this.install({ type: "file", file: this.file(path, s, oflags, rights, fdflags) });
5023
5046
  }
5024
5047
  file(path, existing, oflags, rights, fdflags) {
5025
- const { readable, writable } = openAccess(existing, oflags, rights);
5048
+ const { readable: readable2, writable: writable2 } = openAccess(existing, oflags, rights);
5026
5049
  let buffer = this.buffers.get(path);
5027
5050
  if (buffer) {
5028
5051
  if (oflags & OFLAGS.TRUNC) buffer.truncate(0);
@@ -5037,12 +5060,12 @@ var init_wasi_fds = __esm({
5037
5060
  this.fs.hold?.(path, true, true);
5038
5061
  }
5039
5062
  buffer.opens++;
5040
- return new LocalFile(buffer, readable, writable, (fdflags & FDFLAGS.APPEND) !== 0);
5063
+ return new LocalFile(buffer, readable2, writable2, (fdflags & FDFLAGS.APPEND) !== 0);
5041
5064
  }
5042
5065
  kernelFile(path, existing, oflags, rights, fdflags) {
5043
- const { readable, writable } = openAccess(existing, oflags, rights);
5066
+ const { readable: readable2, writable: writable2 } = openAccess(existing, oflags, rights);
5044
5067
  const append = (fdflags & FDFLAGS.APPEND) !== 0;
5045
- const flags = (writable ? readable ? O_RDWR4 : O_WRONLY4 : 0) | (append ? O_APPEND : 0);
5068
+ const flags = (writable2 ? readable2 ? O_RDWR4 : O_WRONLY4 : 0) | (append ? O_APPEND : 0);
5046
5069
  const made = !existing && this.createNew(path, oflags);
5047
5070
  const truncate = made || (oflags & OFLAGS.TRUNC) !== 0;
5048
5071
  const fd = this.kernel.sys.openVfs(path, flags, 0, truncate ? { truncate } : {});
@@ -6824,8 +6847,8 @@ var init_wasix_process = __esm({
6824
6847
  ];
6825
6848
  return { stdio, inherit, cwd, opened };
6826
6849
  }
6827
- applyFdOp(op, slots, cwd) {
6828
- const { map, nulls, opened } = slots;
6850
+ applyFdOp(op, slots2, cwd) {
6851
+ const { map, nulls, opened } = slots2;
6829
6852
  const { fds } = this.host;
6830
6853
  const point = (fd, kfd) => {
6831
6854
  if (kfd === void 0) {
@@ -8188,6 +8211,17 @@ var init_async_sab = __esm({
8188
8211
  });
8189
8212
 
8190
8213
  // src/process/js/js-kernel.ts
8214
+ function untilAborted(work, signal) {
8215
+ if (!signal) return work;
8216
+ return new Promise((resolve) => {
8217
+ const done = () => {
8218
+ signal.removeEventListener("abort", done);
8219
+ resolve();
8220
+ };
8221
+ signal.addEventListener("abort", done, { once: true });
8222
+ work.then(done, done);
8223
+ });
8224
+ }
8191
8225
  var JsCallError, JsKernel;
8192
8226
  var init_js_kernel = __esm({
8193
8227
  "src/process/js/js-kernel.ts"() {
@@ -8239,20 +8273,24 @@ var init_js_kernel = __esm({
8239
8273
  const result = await this.call(req);
8240
8274
  return result.ok && result.kind === "bytes" ? result.bytes : new Uint8Array(0);
8241
8275
  }
8242
- async blocking(req) {
8276
+ async blocking(req, signal) {
8243
8277
  for (; ; ) {
8244
8278
  const id = await this.json({ op: "async-submit", req });
8245
- const result = await this.settled(id);
8279
+ const result = await this.settled(id, signal);
8246
8280
  if (result.ok) return result;
8247
8281
  if (result.errno !== "EINTR") throw new JsCallError(result.errno, req.op);
8248
8282
  }
8249
8283
  }
8250
- async settled(id) {
8284
+ async settled(id, signal) {
8251
8285
  for (; ; ) {
8252
8286
  const seen = Atomics.load(this.header, SAB_I_ASYNC);
8253
8287
  const taken = await this.raw({ op: "async-take", id });
8254
8288
  if (taken.ok || taken.errno !== "EAGAIN") return taken;
8255
- await changed(this.header, SAB_I_ASYNC, seen, this.waitAsync);
8289
+ if (signal?.aborted) {
8290
+ await this.raw({ op: "async-cancel", id });
8291
+ throw signal.reason;
8292
+ }
8293
+ await untilAborted(changed(this.header, SAB_I_ASYNC, seen, this.waitAsync), signal);
8256
8294
  }
8257
8295
  }
8258
8296
  deliver() {
@@ -8325,6 +8363,125 @@ var init_js_kernel = __esm({
8325
8363
  }
8326
8364
  });
8327
8365
 
8366
+ // src/process/js/js-children.ts
8367
+ function exitedOf(status2) {
8368
+ const signal = status2 & 127;
8369
+ return signal ? { status: 128 + signal, signal } : { status: status2 >> 8 & 255 };
8370
+ }
8371
+ function readable(io, fd) {
8372
+ const cancelled = new AbortController();
8373
+ return new ReadableStream(
8374
+ {
8375
+ async pull(controller) {
8376
+ const chunk = await io.read(fd, void 0, cancelled.signal).catch((err) => {
8377
+ if (cancelled.signal.aborted) return void 0;
8378
+ throw err;
8379
+ });
8380
+ if (chunk === void 0) return;
8381
+ if (chunk.length > 0) {
8382
+ controller.enqueue(chunk);
8383
+ return;
8384
+ }
8385
+ controller.close();
8386
+ await io.close(fd);
8387
+ },
8388
+ cancel: () => {
8389
+ cancelled.abort();
8390
+ return io.close(fd);
8391
+ }
8392
+ },
8393
+ { highWaterMark: 0 }
8394
+ );
8395
+ }
8396
+ function writable(io, fd) {
8397
+ return new WritableStream({
8398
+ write: (chunk, controller) => io.send(fd, chunk, controller.signal),
8399
+ close: () => io.close(fd),
8400
+ abort: () => io.close(fd)
8401
+ });
8402
+ }
8403
+ function childOps(kernel, io, defaults) {
8404
+ const wait = async (pid) => {
8405
+ const r = await kernel.blocking({ op: "proc-wait", pid, nohang: false });
8406
+ const [, status2] = r.ok && r.kind === "json" ? r.json : [0, 0];
8407
+ return exitedOf(status2);
8408
+ };
8409
+ const kill = async (pid, signal = SIGTERM) => {
8410
+ await kernel.call({ op: "proc-kill", pid, sig: signal === 0 ? 0 : defaults.signal(signal) });
8411
+ };
8412
+ const childOf = (pid, mine) => {
8413
+ const [stdin, stdout, stderr] = mine;
8414
+ return {
8415
+ pid,
8416
+ ...stdin !== void 0 ? { stdin: writable(io, stdin) } : {},
8417
+ ...stdout !== void 0 ? { stdout: readable(io, stdout) } : {},
8418
+ ...stderr !== void 0 ? { stderr: readable(io, stderr) } : {},
8419
+ wait: () => wait(pid),
8420
+ kill: (signal) => kill(pid, signal)
8421
+ };
8422
+ };
8423
+ const spawn = async (o) => {
8424
+ const [file] = o.argv;
8425
+ if (file === void 0) throw new JsCallError("EINVAL", "spawn");
8426
+ const mine = [];
8427
+ const theirs = [];
8428
+ try {
8429
+ const stdio = await slots(kernel, o, mine, theirs);
8430
+ const pid = await kernel.json({
8431
+ op: "proc-spawn",
8432
+ file,
8433
+ argv: [...o.argv],
8434
+ env: { ...o.env ?? defaults.env },
8435
+ cwd: o.cwd ?? defaults.cwd,
8436
+ stdio
8437
+ });
8438
+ return childOf(pid, mine);
8439
+ } catch (err) {
8440
+ await closeAll(io, mine);
8441
+ throw err;
8442
+ } finally {
8443
+ await closeAll(io, theirs);
8444
+ }
8445
+ };
8446
+ return { spawn, wait, kill };
8447
+ }
8448
+ async function closeAll(io, fds) {
8449
+ for (const fd of fds) if (fd !== void 0) await io.close(fd).catch(() => void 0);
8450
+ }
8451
+ async function preflight(kernel, hows) {
8452
+ for (const [n, how] of hows.entries()) {
8453
+ if (how === "pipe" || how === "null") continue;
8454
+ if (how !== "inherit" && typeof how !== "number") throw new JsCallError("EINVAL", "spawn");
8455
+ await kernel.json({ op: "fd-info", fd: how === "inherit" ? n : how });
8456
+ }
8457
+ }
8458
+ async function slots(kernel, o, mine, theirs) {
8459
+ const hows = STDIO2.map((name) => o[name] ?? "inherit");
8460
+ await preflight(kernel, hows);
8461
+ const stdio = [];
8462
+ for (const [n, how] of hows.entries()) {
8463
+ if (how === "inherit") stdio.push({ fd: n });
8464
+ else if (how === "null") stdio.push({ none: true });
8465
+ else if (typeof how === "number") stdio.push({ fd: how });
8466
+ else {
8467
+ const [read, write] = await kernel.json({ op: "fd-pipe" });
8468
+ mine[n] = n === 0 ? write : read;
8469
+ theirs.push(n === 0 ? read : write);
8470
+ stdio.push({ fd: n === 0 ? read : write });
8471
+ }
8472
+ }
8473
+ return stdio;
8474
+ }
8475
+ var STDIO2, SIGTERM;
8476
+ var init_js_children = __esm({
8477
+ "src/process/js/js-children.ts"() {
8478
+ "use strict";
8479
+ init_js_kernel();
8480
+ STDIO2 = ["stdin", "stdout", "stderr"];
8481
+ SIGTERM = 15;
8482
+ }
8483
+ });
8484
+
8328
8485
  // src/process/js/js-io.ts
8329
8486
  function typeOf(info) {
8330
8487
  if (info.meta && "dir" in info.meta) return "directory";
@@ -8689,22 +8846,20 @@ function createContext(o) {
8689
8846
  infos.set(fd, got);
8690
8847
  return got;
8691
8848
  };
8692
- const read = async (fd, max = CHUNK) => {
8849
+ const read = async (fd, max = CHUNK, signal) => {
8693
8850
  index(max, "read");
8694
8851
  const emulated = readDevice(await info(fd), max, random);
8695
8852
  if (emulated) return emulated;
8696
- const r = await kernel.blocking({ op: "fd-read", fd, max: Math.min(max, MAX_IO) });
8697
- return r.ok && r.kind === "bytes" ? r.bytes : new Uint8Array(0);
8853
+ return readPipe(kernel, fd, Math.min(max, MAX_IO), signal);
8698
8854
  };
8699
- const writeAll = async (fd, data) => {
8855
+ const writeAll = async (fd, data, signal) => {
8700
8856
  const i = await info(fd);
8701
8857
  if (writeDevice(i)) return;
8702
8858
  let at = 0;
8703
8859
  while (at < data.length) {
8704
8860
  const body = data.subarray(at, at + MAX_IO);
8705
8861
  try {
8706
- const r = await kernel.blocking({ op: "fd-write", fd, body });
8707
- at += written(r, body.length);
8862
+ at += signal ? await sendSome(kernel, fd, body, signal) : written(await kernel.blocking({ op: "fd-write", fd, body }), body.length);
8708
8863
  } catch (err) {
8709
8864
  if (brokenPipe(err, i)) await kernel.call({ op: "proc-kill", pid: o.pid, sig: SIG.PIPE });
8710
8865
  throw err;
@@ -8725,7 +8880,7 @@ function createContext(o) {
8725
8880
  }
8726
8881
  })();
8727
8882
  };
8728
- const writable = (fd) => new WritableStream({ write: (chunk) => write(fd, chunk) });
8883
+ const writable2 = (fd) => new WritableStream({ write: (chunk) => write(fd, chunk) });
8729
8884
  const statOf = async (op, path) => {
8730
8885
  const abs = resolve(path);
8731
8886
  await kernel.call({ op: "fd-path-flush", path: abs });
@@ -8760,6 +8915,11 @@ function createContext(o) {
8760
8915
  infos,
8761
8916
  handles
8762
8917
  });
8918
+ const children = childOps(
8919
+ kernel,
8920
+ { read, send: writeAll, close: (fd) => ctx.close(fd) },
8921
+ { env: o.env, cwd: o.cwd, signal: signalNumber }
8922
+ );
8763
8923
  const ctx = {
8764
8924
  argv: o.argv,
8765
8925
  env: o.env,
@@ -8778,8 +8938,8 @@ function createContext(o) {
8778
8938
  },
8779
8939
  { highWaterMark: 0 }
8780
8940
  ),
8781
- stdout: writable(1),
8782
- stderr: writable(2),
8941
+ stdout: writable2(1),
8942
+ stderr: writable2(2),
8783
8943
  read,
8784
8944
  write,
8785
8945
  async close(fd) {
@@ -8802,6 +8962,7 @@ function createContext(o) {
8802
8962
  reset: async (signal) => kernel.setHandler(signalNumber(signal), "default")
8803
8963
  },
8804
8964
  sync,
8965
+ ...children,
8805
8966
  exit
8806
8967
  };
8807
8968
  const drain2 = async () => {
@@ -8878,6 +9039,29 @@ function fileHandle(kernel, fd, path, append, forget) {
8878
9039
  }
8879
9040
  };
8880
9041
  }
9042
+ async function readPipe(kernel, fd, max, signal) {
9043
+ if (signal) return receiveSome(kernel, fd, max, signal);
9044
+ const r = await kernel.blocking({ op: "fd-read", fd, max });
9045
+ return r.ok && r.kind === "bytes" ? r.bytes : new Uint8Array(0);
9046
+ }
9047
+ async function receiveSome(kernel, fd, max, signal) {
9048
+ for (; ; ) {
9049
+ signal.throwIfAborted();
9050
+ const r = await kernel.raw({ op: "fd-read", fd, max, nonblock: true });
9051
+ if (r.ok) return r.kind === "bytes" ? r.bytes : new Uint8Array(0);
9052
+ if (r.errno !== "EAGAIN") throw new JsCallError(r.errno, "fd-read");
9053
+ await kernel.blocking({ op: "fd-select", read: [fd], write: [], timeoutMs: -1 }, signal);
9054
+ }
9055
+ }
9056
+ async function sendSome(kernel, fd, body, signal) {
9057
+ for (; ; ) {
9058
+ signal.throwIfAborted();
9059
+ const r = await kernel.raw({ op: "fd-write", fd, body, nonblock: true });
9060
+ if (r.ok) return written(r, body.length);
9061
+ if (r.errno !== "EAGAIN") throw new JsCallError(r.errno, "fd-write");
9062
+ await kernel.blocking({ op: "fd-select", read: [], write: [fd], timeoutMs: -1 }, signal);
9063
+ }
9064
+ }
8881
9065
  function pathOps(kernel, resolve, statOf, open) {
8882
9066
  return {
8883
9067
  stat: (path) => statOf("stat", path),
@@ -8911,6 +9095,7 @@ var init_js_context = __esm({
8911
9095
  "use strict";
8912
9096
  init_signals();
8913
9097
  init_sync_fs_wire();
9098
+ init_js_children();
8914
9099
  init_js_io();
8915
9100
  init_js_kernel();
8916
9101
  init_js_sync();