@ai-ecoverse/slicc-kernel 1.122.2 → 1.123.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.
@@ -1259,13 +1259,14 @@ var init_wasi_files = __esm({
1259
1259
  });
1260
1260
 
1261
1261
  // src/kernel/protocol.ts
1262
- var WASM_PROCESS_INIT, WASM_PROCESS_EXIT, WASM_PROCESS_ERROR, WASM_THREAD_SPAWN, WASM_THREAD_INIT, WASM_THREAD_EXIT, WASM_MAX_THREADS, WASM_DEFAULT_THREADS;
1262
+ var WASM_PROCESS_INIT, WASM_PROCESS_EXIT, WASM_PROCESS_ERROR, WASM_PROCESS_READY, WASM_THREAD_SPAWN, WASM_THREAD_INIT, WASM_THREAD_EXIT, WASM_MAX_THREADS, WASM_DEFAULT_THREADS;
1263
1263
  var init_protocol = __esm({
1264
1264
  "src/kernel/protocol.ts"() {
1265
1265
  "use strict";
1266
1266
  WASM_PROCESS_INIT = "wasm-process-init";
1267
1267
  WASM_PROCESS_EXIT = "wasm-process-exit";
1268
1268
  WASM_PROCESS_ERROR = "wasm-process-error";
1269
+ WASM_PROCESS_READY = "wasm-process-ready";
1269
1270
  WASM_THREAD_SPAWN = "wasm-thread-spawn";
1270
1271
  WASM_THREAD_INIT = "wasm-thread-init";
1271
1272
  WASM_THREAD_EXIT = "wasm-thread-exit";
@@ -5432,7 +5433,7 @@ var KERNEL_VERSION, OS_RELEASE;
5432
5433
  var init_version = __esm({
5433
5434
  "src/version.ts"() {
5434
5435
  "use strict";
5435
- KERNEL_VERSION = true ? "1.122.2" : "0.0.0-dev";
5436
+ KERNEL_VERSION = true ? "1.123.0" : "0.0.0-dev";
5436
5437
  OS_RELEASE = "6.0.0-slicc";
5437
5438
  }
5438
5439
  });
@@ -8336,6 +8337,7 @@ function liveRoot(Fs, bridge) {
8336
8337
  guardRenames(Fs);
8337
8338
  guardKeptNodes(Fs, plugin.handled);
8338
8339
  guardStaleNodes(Fs, plugin);
8340
+ guardVanished(Fs);
8339
8341
  guardStatfs(Fs);
8340
8342
  const memfs = root.memfs ?? root.node_ops;
8341
8343
  const live = plugin.node_ops;
@@ -8443,6 +8445,44 @@ function guardStaleNodes(Fs, plugin) {
8443
8445
  return fresh;
8444
8446
  };
8445
8447
  }
8448
+ function guardVanished(Fs) {
8449
+ const forget = Fs.hashRemoveNode?.bind(Fs);
8450
+ if (!forget || !Fs.lookupPath || Fs.sliccVanished) return;
8451
+ Fs.sliccVanished = true;
8452
+ const drop = forget;
8453
+ const lookupPath = Fs.lookupPath.bind(Fs);
8454
+ const ops = Fs;
8455
+ const cached = (path, follow2) => {
8456
+ try {
8457
+ const node = lookupPath(path, { follow: follow2 }).node;
8458
+ return node.live && node.live.openCount === 0 && !node.live.dirty ? node : void 0;
8459
+ } catch {
8460
+ return void 0;
8461
+ }
8462
+ };
8463
+ let open;
8464
+ for (const [name2, follows] of RESOLVING) {
8465
+ const op = ops[name2]?.bind(Fs);
8466
+ if (name2 === "open") open = op;
8467
+ if (op) ops[name2] = vanishing(op, follows);
8468
+ }
8469
+ function vanishing(op, follows) {
8470
+ return (...args) => {
8471
+ try {
8472
+ return op(...args);
8473
+ } catch (err) {
8474
+ const path = args[0];
8475
+ const code2 = err.errno;
8476
+ const taken = code2 === wasiErrno("EEXIST") && op === open;
8477
+ if (code2 !== wasiErrno("ENOENT") && !taken || typeof path !== "string") throw err;
8478
+ const node = cached(path, follows(args));
8479
+ if (!node) throw err;
8480
+ drop(node);
8481
+ return op(...args);
8482
+ }
8483
+ };
8484
+ }
8485
+ }
8446
8486
  function guardRenames(Fs) {
8447
8487
  const rename = Fs.rename?.bind(Fs);
8448
8488
  if (!rename || Fs.sliccRename) return;
@@ -8556,7 +8596,7 @@ function readingLinks(Fs) {
8556
8596
  }
8557
8597
  };
8558
8598
  }
8559
- var S_IFDIR, S_IFREG, S_IFLNK2, S_IFSOCK, S_IFIFO2, S_IFMT2, PERM_MASK, DEFAULT_DIR_PERM, UMASK, SEEK_CUR2, SEEK_END2, EARLY_WHOLE_FILE, O_APPEND4, O_ACCMODE, O_TRUNC, O_PATH, stale, opening;
8599
+ var S_IFDIR, S_IFREG, S_IFLNK2, S_IFSOCK, S_IFIFO2, S_IFMT2, PERM_MASK, DEFAULT_DIR_PERM, UMASK, SEEK_CUR2, SEEK_END2, EARLY_WHOLE_FILE, O_APPEND4, O_ACCMODE, O_TRUNC, O_PATH, stale, opening, O_NOFOLLOW, RESOLVING;
8560
8600
  var init_live_vfs_fs = __esm({
8561
8601
  "src/realm/live-vfs-fs.ts"() {
8562
8602
  "use strict";
@@ -8584,6 +8624,16 @@ var init_live_vfs_fs = __esm({
8584
8624
  O_PATH = 2097152;
8585
8625
  stale = (s) => !!s.orphan && !s.kept;
8586
8626
  opening = /* @__PURE__ */ new WeakMap();
8627
+ O_NOFOLLOW = 131072;
8628
+ RESOLVING = [
8629
+ ["open", (args) => (args[1] & O_NOFOLLOW) === 0],
8630
+ ["stat", (args) => !args[1]],
8631
+ ["lstat", () => false],
8632
+ ["unlink", () => false],
8633
+ ["rename", () => false],
8634
+ ["readlink", () => false],
8635
+ ["truncate", () => true]
8636
+ ];
8587
8637
  }
8588
8638
  });
8589
8639
 
@@ -9660,14 +9710,20 @@ var init_process_fds = __esm({
9660
9710
  });
9661
9711
 
9662
9712
  // src/process/procfs.ts
9713
+ function isSysFile(at) {
9714
+ return typeof at === "string" || typeof at === "function";
9715
+ }
9663
9716
  function sysEntry(parts) {
9664
9717
  let at = SYS_TREE;
9665
9718
  for (const part of parts) {
9666
- if (typeof at !== "object" || !Object.hasOwn(at, part)) return void 0;
9719
+ if (isSysFile(at) || !Object.hasOwn(at, part)) return void 0;
9667
9720
  at = at[part];
9668
9721
  }
9669
9722
  return at;
9670
9723
  }
9724
+ function sysText(file, listing) {
9725
+ return typeof file === "string" ? file : file(listing());
9726
+ }
9671
9727
  function commOf(info) {
9672
9728
  const name2 = info.argv[0] ?? "";
9673
9729
  return name2.slice(name2.lastIndexOf("/") + 1).slice(0, 15);
@@ -9917,7 +9973,7 @@ function useProcfs(Fs, sys, pid, memory = memorySource()) {
9917
9973
  dir.node_ops.lookup = (at, child) => {
9918
9974
  if (!Object.hasOwn(tree, child)) throw error();
9919
9975
  const next2 = tree[child];
9920
- return typeof next2 === "string" ? file(at, child, () => next2) : sysDir(at, child, next2);
9976
+ return isSysFile(next2) ? file(at, child, () => sysText(next2, procList)) : sysDir(at, child, next2);
9921
9977
  };
9922
9978
  dir.node_ops.readdir = () => [".", "..", ...Object.keys(tree)];
9923
9979
  return dir;
@@ -10041,8 +10097,13 @@ var init_procfs = __esm({
10041
10097
  PID_FILES = ["cmdline", "comm", "stat", "statm", "status"];
10042
10098
  SYSTEM_FILES = ["loadavg", "meminfo", "stat", "uptime", "version"];
10043
10099
  SYS_TREE = {
10044
- kernel: { osrelease: `${OS_RELEASE}
10045
- `, ostype: "Linux\n" }
10100
+ kernel: {
10101
+ osrelease: `${OS_RELEASE}
10102
+ `,
10103
+ ostype: "Linux\n",
10104
+ slicc_wasm_memories: (listing) => `${listing.wasm?.live ?? 0} ${listing.wasm?.ceiling ?? 0}
10105
+ `
10106
+ }
10046
10107
  };
10047
10108
  sigMask = (mask = 0) => (mask >>> 1).toString(16).padStart(16, "0");
10048
10109
  STATES = {
@@ -10325,7 +10386,9 @@ var init_wasi_procfs = __esm({
10325
10386
  }
10326
10387
  if (top === "sys") {
10327
10388
  const entry = sysEntry(parts.slice(1));
10328
- if (typeof entry === "string") return { kind: "file", content: () => entry };
10389
+ if (typeof entry === "string" || typeof entry === "function") {
10390
+ return { kind: "file", content: () => sysText(entry, () => this.listing()) };
10391
+ }
10329
10392
  return entry && { kind: "dir", names: () => Object.keys(entry) };
10330
10393
  }
10331
10394
  if (top === "self") {
@@ -13917,6 +13980,7 @@ async function runWasmProcess(init, port3, deps = {}) {
13917
13980
  return WebAssembly.instantiate(init.program.module, imports);
13918
13981
  }).then((instance) => {
13919
13982
  memory = wasmMemory(instance, imports);
13983
+ port3.postMessage({ type: WASM_PROCESS_READY });
13920
13984
  exports = instance.exports;
13921
13985
  publishMemory(init.sab, memory?.buffer.byteLength ?? 0);
13922
13986
  done(
@@ -14087,6 +14151,7 @@ var init_process_runtime = __esm({
14087
14151
  "src/process/process-runtime.ts"() {
14088
14152
  "use strict";
14089
14153
  init_loopback_names();
14154
+ init_protocol();
14090
14155
  init_signals();
14091
14156
  init_emscripten_vfs_hook();
14092
14157
  init_live_vfs_fs();
@@ -16475,6 +16540,7 @@ async function runWasiProcess(init, port3) {
16475
16540
  restoreExportedMemory(instance, memory, init);
16476
16541
  main.memory = memoryOf(instance, memory);
16477
16542
  publishMemory(init.sab, sizeOf2(main)());
16543
+ port3.postMessage({ type: WASM_PROCESS_READY });
16478
16544
  signals.bind(instance.exports);
16479
16545
  if (importsSigactionHook(module)) signals.useHook();
16480
16546
  if (fork?.signals) signals.restore(fork.signals);