@ai-ecoverse/slicc-kernel 1.158.1 → 1.159.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.
@@ -236,8 +236,8 @@ function localWait(wait2, blocks = true) {
236
236
  function localCpuNanos() {
237
237
  if (!local || !localSab) return void 0;
238
238
  const now = epochMicros();
239
- const blocked = Number(Atomics.load(local, BLOCKED)) + localIdle(localSab, now).idle;
240
- return BigInt(Math.max(0, now - localStart - blocked)) * 1000n;
239
+ const blocked2 = Number(Atomics.load(local, BLOCKED)) + localIdle(localSab, now).idle;
240
+ return BigInt(Math.max(0, now - localStart - blocked2)) * 1000n;
241
241
  }
242
242
  function localIdle(sab, now) {
243
243
  const state = Number(Atomics.load(slots(sab), IDLE));
@@ -2964,7 +2964,7 @@ var KERNEL_VERSION, OS_RELEASE;
2964
2964
  var init_version = __esm({
2965
2965
  "src/version.ts"() {
2966
2966
  "use strict";
2967
- KERNEL_VERSION = true ? "1.158.1" : "0.0.0-dev";
2967
+ KERNEL_VERSION = true ? "1.159.1" : "0.0.0-dev";
2968
2968
  OS_RELEASE = "6.0.0-slicc";
2969
2969
  }
2970
2970
  });
@@ -5503,8 +5503,8 @@ var init_process_signals = __esm({
5503
5503
  this.hooks.killed(killed);
5504
5504
  }
5505
5505
  const timers = Atomics.exchange(this.header, SAB_I_TIMERS, 0);
5506
- const blocked = Atomics.load(this.header, SAB_I_BLOCKED);
5507
- const pending = blocked === 0 ? Atomics.exchange(this.header, SAB_I_SIGNALS, 0) : Atomics.and(this.header, SAB_I_SIGNALS, blocked) & ~blocked;
5506
+ const blocked2 = Atomics.load(this.header, SAB_I_BLOCKED);
5507
+ const pending = blocked2 === 0 ? Atomics.exchange(this.header, SAB_I_SIGNALS, 0) : Atomics.and(this.header, SAB_I_SIGNALS, blocked2) & ~blocked2;
5508
5508
  if (this.depth <= 1) this.lastDelivered = pending | (timers & 1 ? sigbit(SIG.ALRM) : 0);
5509
5509
  if (pending !== 0 || timers !== 0) this.delivered++;
5510
5510
  this.raised |= pending | (timers & 1 ? sigbit(SIG.ALRM) : 0) | (timers & ~1 ? -1 : 0);
@@ -6554,8 +6554,8 @@ async function runWasmProcess(init, port2, deps = {}) {
6554
6554
  };
6555
6555
  const transport = credSyncTransport(gated, () => early(), init.cred);
6556
6556
  const sys = kernelSys(transport);
6557
- const encoder5 = new TextEncoder();
6558
- const say = (fd) => (text) => sys.write(fd, encoder5.encode(`${text}
6557
+ const encoder6 = new TextEncoder();
6558
+ const say = (fd) => (text) => sys.write(fd, encoder6.encode(`${text}
6559
6559
  `));
6560
6560
  let ready;
6561
6561
  let failed5;
@@ -9997,11 +9997,11 @@ var init_wasi_memory = __esm({
9997
9997
  return at;
9998
9998
  }
9999
9999
  putStrings(list, ptrs, buf) {
10000
- const encoder5 = new TextEncoder();
10000
+ const encoder6 = new TextEncoder();
10001
10001
  const v = this.view();
10002
10002
  let at = buf;
10003
10003
  list.forEach((s, i) => {
10004
- const b = encoder5.encode(s);
10004
+ const b = encoder6.encode(s);
10005
10005
  v.setUint32(ptrs + i * 4, at, true);
10006
10006
  this.bytes(at, b.length).set(b);
10007
10007
  v.setUint8(at + b.length, 0);
@@ -10009,12 +10009,12 @@ var init_wasi_memory = __esm({
10009
10009
  });
10010
10010
  }
10011
10011
  putSizes(list, countPtr, sizePtr) {
10012
- const encoder5 = new TextEncoder();
10012
+ const encoder6 = new TextEncoder();
10013
10013
  const v = this.view();
10014
10014
  v.setUint32(countPtr, list.length, true);
10015
10015
  v.setUint32(
10016
10016
  sizePtr,
10017
- list.reduce((n, s) => n + encoder5.encode(s).length + 1, 0),
10017
+ list.reduce((n, s) => n + encoder6.encode(s).length + 1, 0),
10018
10018
  true
10019
10019
  );
10020
10020
  }
@@ -12181,7 +12181,7 @@ var init_wasi_threads = __esm({
12181
12181
  this.beforeSpawn?.();
12182
12182
  const tid = Atomics.add(this.ids, LAST_TID, 1) + 1;
12183
12183
  const modules = this.modules?.();
12184
- const blocked = this.blocked?.();
12184
+ const blocked2 = this.blocked?.();
12185
12185
  this.port.postMessage({
12186
12186
  type: WASM_THREAD_SPAWN,
12187
12187
  thread: {
@@ -12190,7 +12190,7 @@ var init_wasi_threads = __esm({
12190
12190
  memory: this.memory,
12191
12191
  ids: this.ids.buffer,
12192
12192
  ...modules ? { modules } : {},
12193
- ...anyBlocked(blocked) ? { blocked } : {}
12193
+ ...anyBlocked(blocked2) ? { blocked: blocked2 } : {}
12194
12194
  }
12195
12195
  });
12196
12196
  return tid;
@@ -16983,6 +16983,13 @@ function resetOf(kernel, fd, closed, close) {
16983
16983
  await close();
16984
16984
  };
16985
16985
  }
16986
+ function adoptOf(kernel, connection, listening, name2) {
16987
+ return async (fd) => {
16988
+ const req = { op: "sock-getopt", fd, level: SOL_SOCKET2, name: SO_ACCEPTCONN };
16989
+ if (await kernel.json(req) !== 1) return connection(fd);
16990
+ return listening(fd, await name2(fd, false));
16991
+ };
16992
+ }
16986
16993
  function netOps(kernel, io, sync) {
16987
16994
  const name2 = async (fd, peer) => addressOf(await kernel.json({ op: "sock-name", fd, peer }));
16988
16995
  const connection = async (fd) => {
@@ -17104,11 +17111,6 @@ function netOps(kernel, io, sync) {
17104
17111
  });
17105
17112
  return [...r.ok && r.kind === "json" ? r.json : []];
17106
17113
  };
17107
- const inetAt = (options) => ({
17108
- family: "inet",
17109
- host: options.host ?? "127.0.0.1",
17110
- port: port(options.port ?? 0)
17111
- });
17112
17114
  const listenSync = (options = {}) => {
17113
17115
  const lane = sync;
17114
17116
  const addr = inetAt(options);
@@ -17128,6 +17130,7 @@ function netOps(kernel, io, sync) {
17128
17130
  return {
17129
17131
  sync: { listen: listenSync },
17130
17132
  resolve: lookup2,
17133
+ adopt: adoptOf(kernel, connection, listener, name2),
17131
17134
  listen: async (options = {}) => {
17132
17135
  const tls = options.tls ? serveRequest(options.tls) : void 0;
17133
17136
  return opened2(async (fd) => {
@@ -17150,7 +17153,7 @@ function netOps(kernel, io, sync) {
17150
17153
  }
17151
17154
  };
17152
17155
  }
17153
- var PEM, TLS_CODE, ALERT, SHUT_RD, SHUT_WR, LOOPBACK3, IPV4, NEVER, SOL_SOCKET2, SO_ERROR2, ALERTS, HANDSHAKE_TIMEOUT_MS, HANDSHAKES_MAX;
17156
+ var PEM, TLS_CODE, ALERT, SHUT_RD, SHUT_WR, LOOPBACK3, IPV4, NEVER, SOL_SOCKET2, SO_ERROR2, SO_ACCEPTCONN, ALERTS, HANDSHAKE_TIMEOUT_MS, HANDSHAKES_MAX, inetAt;
17154
17157
  var init_js_net = __esm({
17155
17158
  "src/process/js/js-net.ts"() {
17156
17159
  "use strict";
@@ -17166,6 +17169,7 @@ var init_js_net = __esm({
17166
17169
  NEVER = new AbortController().signal;
17167
17170
  SOL_SOCKET2 = 1;
17168
17171
  SO_ERROR2 = 4;
17172
+ SO_ACCEPTCONN = 30;
17169
17173
  ALERTS = {
17170
17174
  unrecognized_name: 112,
17171
17175
  no_application_protocol: 120,
@@ -17175,6 +17179,11 @@ var init_js_net = __esm({
17175
17179
  };
17176
17180
  HANDSHAKE_TIMEOUT_MS = 12e4;
17177
17181
  HANDSHAKES_MAX = 64;
17182
+ inetAt = (options) => ({
17183
+ family: "inet",
17184
+ host: options.host ?? "127.0.0.1",
17185
+ port: port(options.port ?? 0)
17186
+ });
17178
17187
  }
17179
17188
  });
17180
17189
 
@@ -17327,6 +17336,69 @@ var init_js_proc = __esm({
17327
17336
  }
17328
17337
  });
17329
17338
 
17339
+ // src/process/js/js-rights.ts
17340
+ function sendmsgRequest(fd, data, options = {}) {
17341
+ return {
17342
+ op: "sock-sendmsg",
17343
+ fd,
17344
+ body: typeof data === "string" ? encoder2.encode(data) : data,
17345
+ fds: options.fds ?? [],
17346
+ nonblock: options.nonblock === true
17347
+ };
17348
+ }
17349
+ function recvmsgRequest(fd, max = RECV_DEFAULT, options = {}) {
17350
+ return {
17351
+ op: "sock-recvmsg",
17352
+ fd,
17353
+ max,
17354
+ cloexec: options.cloexec === true,
17355
+ nonblock: options.nonblock === true
17356
+ };
17357
+ }
17358
+ function decodeReceived2(frame) {
17359
+ const view = new DataView(frame.buffer, frame.byteOffset, frame.byteLength);
17360
+ const count = view.getUint32(0, true);
17361
+ const fds = [];
17362
+ for (let i = 0; i < count; i++) fds.push(view.getUint32(8 + i * 4, true));
17363
+ return {
17364
+ bytes: frame.slice(8 + count * 4),
17365
+ fds,
17366
+ ctrunc: (view.getUint32(4, true) & 1) === 1
17367
+ };
17368
+ }
17369
+ async function blocked(kernel, watch, req) {
17370
+ if (req.nonblock) return kernel.call(req);
17371
+ const { signal, done } = watch(req.fd);
17372
+ try {
17373
+ return await kernel.blocking(req, signal);
17374
+ } finally {
17375
+ done();
17376
+ }
17377
+ }
17378
+ function rightsAsync(kernel, forget, watch) {
17379
+ return {
17380
+ socketpair: async () => await kernel.json({ op: "sock-pair", domain: "unix", type: "stream" }),
17381
+ sendmsg: async (fd, data, options) => jsonOf(await blocked(kernel, watch, sendmsgRequest(fd, data, options))),
17382
+ async recvmsg(fd, max, options) {
17383
+ const got = decodeReceived2(
17384
+ bytesOf2(await blocked(kernel, watch, recvmsgRequest(fd, max, options)))
17385
+ );
17386
+ for (const n of got.fds) forget(n);
17387
+ return got;
17388
+ }
17389
+ };
17390
+ }
17391
+ var jsonOf, bytesOf2, encoder2, RECV_DEFAULT;
17392
+ var init_js_rights = __esm({
17393
+ "src/process/js/js-rights.ts"() {
17394
+ "use strict";
17395
+ jsonOf = (r) => r.ok && r.kind === "json" ? r.json : void 0;
17396
+ bytesOf2 = (r) => r.ok && r.kind === "bytes" ? r.bytes : new Uint8Array(8);
17397
+ encoder2 = new TextEncoder();
17398
+ RECV_DEFAULT = 64 * 1024;
17399
+ }
17400
+ });
17401
+
17330
17402
  // src/process/js/js-run.ts
17331
17403
  function stdioOf(how) {
17332
17404
  if (how === void 0) return "pipe";
@@ -17364,7 +17436,7 @@ function runSync(kernel, d, o) {
17364
17436
  const named = argv0Of(o.argv0, "run");
17365
17437
  const stdout = stdioOf(o.stdout);
17366
17438
  const stderr = stderrOf(o.stderr);
17367
- const input = typeof o.input === "string" ? encoder2.encode(o.input) : o.input;
17439
+ const input = typeof o.input === "string" ? encoder3.encode(o.input) : o.input;
17368
17440
  const maxBuffer = limit(o.maxBuffer);
17369
17441
  const timeout = limit(o.timeout);
17370
17442
  const bytes = kernel.bytes({
@@ -17387,13 +17459,13 @@ function runSync(kernel, d, o) {
17387
17459
  });
17388
17460
  return decodeRun(bytes, stdout, stderr);
17389
17461
  }
17390
- var encoder2, STDIO4;
17462
+ var encoder3, STDIO4;
17391
17463
  var init_js_run = __esm({
17392
17464
  "src/process/js/js-run.ts"() {
17393
17465
  "use strict";
17394
17466
  init_js_children();
17395
17467
  init_js_kernel();
17396
- encoder2 = new TextEncoder();
17468
+ encoder3 = new TextEncoder();
17397
17469
  STDIO4 = /* @__PURE__ */ new Set(["pipe", "ignore", "inherit"]);
17398
17470
  }
17399
17471
  });
@@ -17451,7 +17523,7 @@ function syncOps(kernel, shared) {
17451
17523
  return r.ok && r.kind === "bytes" ? r.bytes : new Uint8Array(0);
17452
17524
  };
17453
17525
  const write2 = (fd, data, options) => {
17454
- const bytes = typeof data === "string" ? encoder3.encode(data) : data;
17526
+ const bytes = typeof data === "string" ? encoder4.encode(data) : data;
17455
17527
  const i = info(fd);
17456
17528
  if (writeDevice(i)) return bytes.length;
17457
17529
  const nonblock = options?.nonblock === true;
@@ -17542,6 +17614,12 @@ function syncOps(kernel, shared) {
17542
17614
  kernel.call({ op: "fd-close", fd });
17543
17615
  },
17544
17616
  socketpair: () => kernel.json({ op: "sock-pair", domain: "unix", type: "stream" }),
17617
+ sendmsg: (fd, data, options) => kernel.json(sendmsgRequest(fd, data, options)),
17618
+ recvmsg(fd, max, options) {
17619
+ const got = decodeReceived2(kernel.bytes(recvmsgRequest(fd, max, options)));
17620
+ for (const n of got.fds) infos.delete(n);
17621
+ return got;
17622
+ },
17545
17623
  pipe: () => kernel.json({ op: "fd-pipe" }),
17546
17624
  open: procOpenSync(open, kernel, { resolve, pid: shared.pid }),
17547
17625
  fs: procFsSync(syncPathOps(kernel, resolve, statOf, open, tryDevSync), kernel, {
@@ -17688,14 +17766,14 @@ function syncPathOps(kernel, resolve, statOf, open, tryDev) {
17688
17766
  ...mode !== void 0 ? { mode } : {}
17689
17767
  });
17690
17768
  try {
17691
- file.write(0, typeof data === "string" ? encoder3.encode(data) : data);
17769
+ file.write(0, typeof data === "string" ? encoder4.encode(data) : data);
17692
17770
  } finally {
17693
17771
  file.close();
17694
17772
  }
17695
17773
  }
17696
17774
  };
17697
17775
  }
17698
- var encoder3, noLane, READ_ONLY, JsSyncKernel;
17776
+ var encoder4, noLane, READ_ONLY, JsSyncKernel;
17699
17777
  var init_js_sync = __esm({
17700
17778
  "src/process/js/js-sync.ts"() {
17701
17779
  "use strict";
@@ -17707,7 +17785,8 @@ var init_js_sync = __esm({
17707
17785
  init_js_io();
17708
17786
  init_js_kernel();
17709
17787
  init_js_proc();
17710
- encoder3 = new TextEncoder();
17788
+ init_js_rights();
17789
+ encoder4 = new TextEncoder();
17711
17790
  noLane = () => ({ ok: false, errno: "ENOSYS", message: "no sync lane" });
17712
17791
  READ_ONLY = /* @__PURE__ */ new Set([...SYNC_FS_READ_ONLY, "fd-path-flush"]);
17713
17792
  JsSyncKernel = class {
@@ -18622,13 +18701,23 @@ function pendingReads(kernel, info, random) {
18622
18701
  for (const stop of reading.get(fd) ?? []) stop.abort(new JsCallError("EBADF", "read"));
18623
18702
  reading.delete(fd);
18624
18703
  };
18625
- return { read: read2, closing };
18704
+ const watch = (fd) => {
18705
+ const stop = new AbortController();
18706
+ const waits = reading.get(fd) ?? /* @__PURE__ */ new Set();
18707
+ reading.set(fd, waits.add(stop));
18708
+ const done = () => {
18709
+ waits.delete(stop);
18710
+ if (waits.size === 0 && reading.get(fd) === waits) reading.delete(fd);
18711
+ };
18712
+ return { signal: stop.signal, done };
18713
+ };
18714
+ return { read: read2, closing, watch };
18626
18715
  }
18627
18716
  function tracked2(pending, writeAll, writeSome, failed5) {
18628
18717
  return (fd, data, options) => {
18629
18718
  const status2 = failed5?.();
18630
18719
  if (status2 !== void 0) return Promise.reject(new JsExit(status2));
18631
- const bytes = typeof data === "string" ? encoder4.encode(data) : data;
18720
+ const bytes = typeof data === "string" ? encoder5.encode(data) : data;
18632
18721
  let settle;
18633
18722
  const settled2 = new Promise((resolve) => settle = resolve);
18634
18723
  pending.add(settled2);
@@ -18658,6 +18747,12 @@ function measured(measure) {
18658
18747
  }
18659
18748
  return out;
18660
18749
  }
18750
+ function realmOps(o) {
18751
+ return {
18752
+ runScript: scriptRunner(o.runScript),
18753
+ promiseState: (promise) => o.promiseState?.(promise)
18754
+ };
18755
+ }
18661
18756
  function scriptRunner(run) {
18662
18757
  return (source, options = {}) => {
18663
18758
  if (typeof source !== "string") throw new TypeError("runScript needs a source string");
@@ -18698,7 +18793,7 @@ function createContext(o) {
18698
18793
  infos.set(fd, got);
18699
18794
  return got;
18700
18795
  };
18701
- const { read: read2, closing } = pendingReads(kernel, info, random);
18796
+ const { read: read2, closing, watch } = pendingReads(kernel, info, random);
18702
18797
  const { writes, writeAll, writeSome } = writer(kernel, info, o.pid);
18703
18798
  const write2 = tracked2(pending, writeAll, writeSome, o.failed);
18704
18799
  const writable2 = (fd) => new WritableStream({
@@ -18752,7 +18847,7 @@ function createContext(o) {
18752
18847
  cred: () => syncKernel.json({ op: "proc-cred" }),
18753
18848
  umask: (mask) => syncKernel.json(umaskRequest(mask)),
18754
18849
  setcred: setcredOn(syncKernel),
18755
- runScript: scriptRunner(o.runScript)
18850
+ ...realmOps(o)
18756
18851
  };
18757
18852
  const io = { read: read2, send: writeAll, close: (fd) => ctx.close(fd) };
18758
18853
  const defaults = { env: o.env, cwd: o.cwd, signal: signalNumber };
@@ -18778,7 +18873,7 @@ function createContext(o) {
18778
18873
  closing(fd);
18779
18874
  await kernel.call({ op: "fd-close", fd });
18780
18875
  },
18781
- socketpair: async () => await kernel.json({ op: "sock-pair", domain: "unix", type: "stream" }),
18876
+ ...rightsAsync(kernel, (fd) => infos.delete(fd), watch),
18782
18877
  pipe: async () => await kernel.json({ op: "fd-pipe" }),
18783
18878
  select: (sets, options) => selectOp(kernel, sets, options?.signal),
18784
18879
  async fdStatus(fd) {
@@ -19008,14 +19103,14 @@ function pathOps(kernel, resolve, statOf, open, tryDev) {
19008
19103
  true
19009
19104
  );
19010
19105
  try {
19011
- await file.write(0, typeof data === "string" ? encoder4.encode(data) : data);
19106
+ await file.write(0, typeof data === "string" ? encoder5.encode(data) : data);
19012
19107
  } finally {
19013
19108
  await file.close();
19014
19109
  }
19015
19110
  }
19016
19111
  };
19017
19112
  }
19018
- var KERNEL_INFO, JsExit, encoder4, cryptoRandom, MEMORY_FIELDS;
19113
+ var KERNEL_INFO, JsExit, encoder5, cryptoRandom, MEMORY_FIELDS;
19019
19114
  var init_js_context = __esm({
19020
19115
  "src/process/js/js-context.ts"() {
19021
19116
  "use strict";
@@ -19033,6 +19128,7 @@ var init_js_context = __esm({
19033
19128
  init_js_kernel();
19034
19129
  init_js_net();
19035
19130
  init_js_proc();
19131
+ init_js_rights();
19036
19132
  init_js_run();
19037
19133
  init_js_sync();
19038
19134
  init_js_tty();
@@ -19048,7 +19144,7 @@ var init_js_context = __esm({
19048
19144
  this.status = status2;
19049
19145
  }
19050
19146
  };
19051
- encoder4 = new TextEncoder();
19147
+ encoder5 = new TextEncoder();
19052
19148
  cryptoRandom = (bytes) => void crypto.getRandomValues(bytes);
19053
19149
  MEMORY_FIELDS = [
19054
19150
  "heapUsed",
@@ -19234,6 +19330,7 @@ async function runJs(init, port2, deps, thread) {
19234
19330
  memory: deps.memory,
19235
19331
  asyncContext: deps.asyncContext,
19236
19332
  runScript: deps.runScript,
19333
+ promiseState: deps.promiseState,
19237
19334
  ...thread?.owned ? { owned: thread.owned } : {},
19238
19335
  held: init.held,
19239
19336
  failed: () => failedWith