@ai-ecoverse/slicc-kernel 1.108.2 → 1.108.4

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
@@ -6435,7 +6435,7 @@ function satisfies(version, range2) {
6435
6435
  }
6436
6436
 
6437
6437
  // src/version.ts
6438
- var KERNEL_VERSION = true ? "1.108.2" : "0.0.0-dev";
6438
+ var KERNEL_VERSION = true ? "1.108.4" : "0.0.0-dev";
6439
6439
  var OS_RELEASE = "6.0.0-slicc";
6440
6440
  function procVersion() {
6441
6441
  return `Linux version ${OS_RELEASE} (slicc-kernel ${KERNEL_VERSION}) #1 SMP PREEMPT_DYNAMIC
@@ -12338,7 +12338,9 @@ function normalize(path) {
12338
12338
  var RING2 = 8;
12339
12339
  var RING_SIZE2 = 64;
12340
12340
  var SLOT2 = 3;
12341
- var SHARED_IDS_BYTES = (RING2 + RING_SIZE2 * SLOT2) * 4;
12341
+ var FD_RING = RING2 + RING_SIZE2 * SLOT2;
12342
+ var FD_RING_SIZE = 64;
12343
+ var SHARED_IDS_BYTES = (FD_RING + FD_RING_SIZE * 2) * 4;
12342
12344
 
12343
12345
  // src/process/wasi/wasi-procfs.ts
12344
12346
  var DIR_MODE = 16749;
@@ -16778,6 +16780,16 @@ var WasmProcess = class {
16778
16780
  sendDeath(target, sig) {
16779
16781
  void Promise.resolve(this.options.kill?.(target, sig)).catch(() => void 0);
16780
16782
  }
16783
+ selfKill(req) {
16784
+ if (req.dry) return Promise.resolve(this.spares(req.sig));
16785
+ return this.killSelf(req.sig, req.target, req.probe);
16786
+ }
16787
+ spares(sig) {
16788
+ const { caught, ignored } = this.signalMasks();
16789
+ const bit = isSignal(sig) ? sigbit(sig) : 0;
16790
+ const answer = (ignored & bit) !== 0 ? "ignore" : (caught & bit) !== 0 ? "spare" : "terminate";
16791
+ return { ok: true, kind: "json", json: answer };
16792
+ }
16781
16793
  async killSelf(sig, target, probe2) {
16782
16794
  if (!this.options.exitSignal) throw new KernelError("ENOSYS");
16783
16795
  if (!isSignal(sig) || defaultAction(sig) !== "terminate") throw new KernelError("EINVAL");
@@ -17679,7 +17691,7 @@ var WasmProcess = class {
17679
17691
  this.options.exitNow(req.status & 255);
17680
17692
  return DYING;
17681
17693
  case "proc-kill-self":
17682
- return this.killSelf(req.sig, req.target, req.probe);
17694
+ return this.selfKill(req);
17683
17695
  case "proc-identity":
17684
17696
  return { ok: true, kind: "json", json: await this.options.identity?.() ?? null };
17685
17697
  case "proc-exec": {
@@ -21665,6 +21677,16 @@ var SUDO_SOURCE = [
21665
21677
  ].join("\n");
21666
21678
 
21667
21679
  // src/launcher.ts
21680
+ var MODULE_URLS = 16;
21681
+ function dataModuleUrl(source) {
21682
+ const bytes = new TextEncoder().encode(source);
21683
+ let binary = "";
21684
+ for (let at = 0; at < bytes.length; at += 32768) {
21685
+ binary += String.fromCharCode(...bytes.subarray(at, at + 32768));
21686
+ }
21687
+ return { url: `data:text/javascript;base64,${btoa(binary)}`, revoke: () => {
21688
+ } };
21689
+ }
21668
21690
  function linksOf2(req) {
21669
21691
  return req.links === void 0 ? {} : { links: req.links };
21670
21692
  }
@@ -21835,6 +21857,9 @@ var Launcher = class {
21835
21857
  unlinkOwnerOption;
21836
21858
  base;
21837
21859
  createWorker;
21860
+ moduleUrl;
21861
+ moduleUrls = /* @__PURE__ */ new Map();
21862
+ urlsInUse = /* @__PURE__ */ new Map();
21838
21863
  modulesDir;
21839
21864
  appended;
21840
21865
  reportedRoots = /* @__PURE__ */ new Set();
@@ -21954,6 +21979,7 @@ var Launcher = class {
21954
21979
  this.mounted = this.mounts.wrap(options.fs);
21955
21980
  this.base = this.rooted(this.mounted);
21956
21981
  this.createWorker = options.createWorker;
21982
+ this.moduleUrl = options.moduleUrl;
21957
21983
  this.createDriverWorker = options.createDriverWorker;
21958
21984
  this.media = options.media ?? memoryMedia();
21959
21985
  this.onMountPending = options.onMountPending;
@@ -22610,6 +22636,43 @@ var Launcher = class {
22610
22636
  return { value: new TextDecoder().decode(bytes), key: read };
22611
22637
  });
22612
22638
  }
22639
+ urlFor(source) {
22640
+ const known = this.moduleUrls.get(source);
22641
+ if (known) {
22642
+ this.moduleUrls.delete(source);
22643
+ this.moduleUrls.set(source, known);
22644
+ known.users++;
22645
+ return known.made.url;
22646
+ }
22647
+ const held = {
22648
+ made: (this.moduleUrl ?? dataModuleUrl)(source),
22649
+ users: 1,
22650
+ evicted: false
22651
+ };
22652
+ this.moduleUrls.set(source, held);
22653
+ this.urlsInUse.set(held.made.url, held);
22654
+ for (const [old, entry] of this.moduleUrls) {
22655
+ if (this.moduleUrls.size <= MODULE_URLS) break;
22656
+ this.moduleUrls.delete(old);
22657
+ entry.evicted = true;
22658
+ this.releaseUrl(entry);
22659
+ }
22660
+ return held.made.url;
22661
+ }
22662
+ heldUrl(program) {
22663
+ const held = program.abi === "js" && program.url ? this.urlsInUse.get(program.url) : void 0;
22664
+ if (!held) return () => {
22665
+ };
22666
+ return () => {
22667
+ held.users--;
22668
+ this.releaseUrl(held);
22669
+ };
22670
+ }
22671
+ releaseUrl(held) {
22672
+ if (!held.evicted || held.users > 0) return;
22673
+ if (this.urlsInUse.get(held.made.url) === held) this.urlsInUse.delete(held.made.url);
22674
+ held.made.revoke();
22675
+ }
22613
22676
  async names(path, module) {
22614
22677
  if (WebAssembly.Module.customSections(module, "name").length > 0) return void 0;
22615
22678
  const beside = `${path}.names`;
@@ -22628,7 +22691,8 @@ var Launcher = class {
22628
22691
  }
22629
22692
  const { asked } = target;
22630
22693
  if (target.abi === "js") {
22631
- return { abi: "js", glue: await this.text(target.wasm, caller, asked), path: target.wasm };
22694
+ const url = this.urlFor(await this.text(target.wasm, caller, asked));
22695
+ return { abi: "js", glue: "", url, path: target.wasm };
22632
22696
  }
22633
22697
  if (target.abi !== "wasi") {
22634
22698
  const [glue, { module: module2 }] = await Promise.all([
@@ -22670,7 +22734,15 @@ var Launcher = class {
22670
22734
  await req.fds.closeAll();
22671
22735
  throw err;
22672
22736
  }
22673
- return this.start({ ...req, cwd, program, argv0: target.argv0, args, env });
22737
+ const done4 = this.heldUrl(program);
22738
+ try {
22739
+ const handle = this.start({ ...req, cwd, program, argv0: target.argv0, args, env });
22740
+ void handle.exited.finally(done4);
22741
+ return handle;
22742
+ } catch (err) {
22743
+ done4();
22744
+ throw err;
22745
+ }
22674
22746
  }
22675
22747
  groupSession(pgid) {
22676
22748
  return this.jobs.sessionOf(pgid);