@ai-ecoverse/slicc-kernel 1.125.3 → 1.125.5

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.
@@ -4588,6 +4588,7 @@ function filetypeOf(s) {
4588
4588
  if (s.isSymbolicLink) return FILETYPE.SYMBOLIC_LINK;
4589
4589
  if (s.isDirectory) return FILETYPE.DIRECTORY;
4590
4590
  if (s.isSocket) return FILETYPE.SOCKET_STREAM;
4591
+ if (((s.mode ?? 0) & 61440) === 8192) return FILETYPE.CHARACTER_DEVICE;
4591
4592
  return s.isFile ? FILETYPE.REGULAR_FILE : FILETYPE.UNKNOWN;
4592
4593
  }
4593
4594
  function filestatOf(path, s) {
@@ -6324,7 +6325,7 @@ var KERNEL_VERSION, OS_RELEASE;
6324
6325
  var init_version = __esm({
6325
6326
  "src/version.ts"() {
6326
6327
  "use strict";
6327
- KERNEL_VERSION = true ? "1.125.3" : "0.0.0-dev";
6328
+ KERNEL_VERSION = true ? "1.125.5" : "0.0.0-dev";
6328
6329
  OS_RELEASE = "6.0.0-slicc";
6329
6330
  }
6330
6331
  });
@@ -12639,7 +12640,7 @@ function datesOf(real) {
12639
12640
  dates[key] = new Date(value2);
12640
12641
  return dates;
12641
12642
  }
12642
- var POLLIN, POLLOUT, POLLERR, POLLHUP, POLLRDNORM, POLLWRNORM, TCSETSF, O_NONBLOCK2, SOCKET_MODE, PTY_PATH, TTY_PATH, TTY_NAME, SEALED_PATH2, STRERROR, CLIPBOARD_PATH2, O_CREAT2, O_EXCL2, O_NOCTTY, O_TRUNC3, O_DIRECTORY, KILLED_BY_SIGPIPE, ProcessExit, SyscallError, KernelStreams;
12643
+ var POLLIN, POLLOUT, POLLERR, POLLHUP, POLLRDNORM, POLLWRNORM, TCSETSF, O_NONBLOCK2, SOCKET_MODE, PTY_PATH, TTY_PATH, PTS_MAJOR, TTY_NAME, SEALED_PATH2, STRERROR, CLIPBOARD_PATH2, O_CREAT2, O_EXCL2, O_NOCTTY, O_TRUNC3, O_DIRECTORY, KILLED_BY_SIGPIPE, ProcessExit, SyscallError, KernelStreams;
12643
12644
  var init_kernel_streams = __esm({
12644
12645
  "src/process/kernel-streams.ts"() {
12645
12646
  "use strict";
@@ -12656,6 +12657,7 @@ var init_kernel_streams = __esm({
12656
12657
  SOCKET_MODE = 49663;
12657
12658
  PTY_PATH = /^\/dev\/(?:ptmx|pts\/(\d+))$/;
12658
12659
  TTY_PATH = /^\/dev\/tty\d+$/;
12660
+ PTS_MAJOR = 136;
12659
12661
  TTY_NAME = /^tty\d+$/;
12660
12662
  SEALED_PATH2 = "/dev/sealed";
12661
12663
  STRERROR = {
@@ -12867,6 +12869,48 @@ var init_kernel_streams = __esm({
12867
12869
  return [...names, ...missing2];
12868
12870
  };
12869
12871
  }
12872
+ usePtsNodes() {
12873
+ const fs = this.Fs;
12874
+ const { lookupNode, readdir, getPath, mkdir, mkdev, makedev } = fs;
12875
+ const numbers = this.sys.ptyNumbers?.bind(this.sys);
12876
+ if (!lookupNode || !readdir || !getPath || !mkdir || !mkdev || !makedev || !numbers) return;
12877
+ const make = (parent, name2) => {
12878
+ const dir = getPath.call(fs, parent);
12879
+ if (dir === "/dev" && name2 === "pts") mkdir.call(fs, "/dev/pts", 493);
12880
+ else if (dir === "/dev/pts" && numbers().includes(Number(name2)) && /^\d+$/.test(name2))
12881
+ mkdev.call(fs, `/dev/pts/${name2}`, makedev.call(fs, PTS_MAJOR, Number(name2)));
12882
+ else return false;
12883
+ return true;
12884
+ };
12885
+ fs.lookupNode = (parent, name2) => {
12886
+ try {
12887
+ return lookupNode.call(fs, parent, name2);
12888
+ } catch (e) {
12889
+ if (this.creatingTerminal) throw e;
12890
+ this.creatingTerminal = true;
12891
+ let made;
12892
+ try {
12893
+ made = make(parent, name2);
12894
+ } finally {
12895
+ this.creatingTerminal = false;
12896
+ }
12897
+ if (!made) throw e;
12898
+ return lookupNode.call(fs, parent, name2);
12899
+ }
12900
+ };
12901
+ fs.readdir = (path) => {
12902
+ const at = path.replace(/\/+$/, "");
12903
+ if (at === "/dev/pts") return [".", "..", ...numbers().map(String)];
12904
+ const names = readdir.call(fs, path);
12905
+ return at === "/dev" && !names.includes("pts") ? [...names, "pts"] : names;
12906
+ };
12907
+ }
12908
+ ptsTarget(path, st) {
12909
+ if ((st?.rdev ?? 0) >> 8 !== PTS_MAJOR) return void 0;
12910
+ const { lookupPath } = this.Fs;
12911
+ const real = lookupPath?.call(this.Fs, path, { follow: true }).path;
12912
+ return real !== void 0 && isPtyPath(real) ? real : void 0;
12913
+ }
12870
12914
  ttyNode(name2) {
12871
12915
  const { analyzePath, mkdev, makedev } = this.Fs;
12872
12916
  if (!TTY_PATH.test(name2) || !analyzePath || !mkdev || !makedev) return;
@@ -12942,6 +12986,7 @@ var init_kernel_streams = __esm({
12942
12986
  if (typeof this.Fs.open !== "function") return;
12943
12987
  this.usePtyPaths();
12944
12988
  this.useTerminalNodes();
12989
+ this.usePtsNodes();
12945
12990
  this.listSealed();
12946
12991
  const open = this.Fs.open.bind(this.Fs);
12947
12992
  this.Fs.open = (path, flags, mode) => {
@@ -13057,15 +13102,21 @@ var init_kernel_streams = __esm({
13057
13102
  if (path === CLIPBOARD_PATH2 && this.sys.openClipboard) return sealedStat(251);
13058
13103
  const owned = this.ownedTty(path);
13059
13104
  if (owned && isPtyPath(path)) return this.owned(path, ptyStat(path));
13060
- if (!isPtyPath(path)) {
13061
- const st = original.call(fs, path, ...rest2);
13062
- return owned && TTY_PATH.test(path) ? this.owned(path, st) : st;
13063
- }
13105
+ if (!isPtyPath(path))
13106
+ return this.pathStat(path, original.call(fs, path, ...rest2), name2, owned);
13064
13107
  this.existingPty(path);
13065
13108
  return ptyStat(path);
13066
13109
  };
13067
13110
  }
13068
13111
  }
13112
+ pathStat(path, st, name2, owned) {
13113
+ const pts = name2 === "stat" ? this.ptsTarget(path, st) : void 0;
13114
+ if (pts) {
13115
+ this.existingPty(pts);
13116
+ return owned ? this.owned(pts, ptyStat(pts)) : ptyStat(pts);
13117
+ }
13118
+ return owned && TTY_PATH.test(path) ? this.owned(path, st) : st;
13119
+ }
13069
13120
  ownedTty(path) {
13070
13121
  return this.options.owners === true && this.sys.ttyOwner !== void 0 && path !== "/dev/ptmx";
13071
13122
  }
@@ -14822,6 +14873,60 @@ var init_wasi_module = __esm({
14822
14873
  }
14823
14874
  });
14824
14875
 
14876
+ // src/process/wasi/wasi-ptsfs.ts
14877
+ function ptsBridge(fs, call2) {
14878
+ const open = () => call2({ op: "pty-list" });
14879
+ const kernel = { json: (req) => call2(req) };
14880
+ const entry = (p) => {
14881
+ const n = PTS_ENTRY.exec(p)?.[1];
14882
+ if (n === void 0 || !open().includes(Number(n))) throw syncError("ENOENT", p);
14883
+ return devSync(kernel, devStat(p, true));
14884
+ };
14885
+ const dir = () => devSync(kernel, devStat(PTS, true));
14886
+ const statOf = (p, real) => {
14887
+ if (p === PTS) return dir();
14888
+ return PTS_ENTRY.test(p) ? entry(p) : real();
14889
+ };
14890
+ const names = () => open().map(String).sort();
14891
+ const over = {
14892
+ stat: (p) => statOf(p, () => fs.stat(p)),
14893
+ lstat: (p) => statOf(p, () => fs.lstat(p)),
14894
+ exists: (p) => {
14895
+ if (p === PTS) return true;
14896
+ if (!PTS_ENTRY.test(p)) return fs.exists(p);
14897
+ return open().includes(Number(PTS_ENTRY.exec(p)?.[1]));
14898
+ },
14899
+ readdir: (p) => {
14900
+ if (p === PTS) return names();
14901
+ const listed = fs.readdir(p);
14902
+ return p === "/dev" && !listed.includes("pts") ? [...listed, "pts"] : listed;
14903
+ },
14904
+ readdirStat: (p) => {
14905
+ if (p === PTS) return names().map((name2) => [name2, entry(`${PTS}/${name2}`)]);
14906
+ const listed = fs.readdirStat(p);
14907
+ if (p !== "/dev" || listed.some(([name2]) => name2 === "pts")) return listed;
14908
+ return [...listed, ["pts", dir()]];
14909
+ }
14910
+ };
14911
+ return new Proxy(fs, {
14912
+ get(target, key, receiver) {
14913
+ if (Object.hasOwn(over, key)) return over[key];
14914
+ const value2 = Reflect.get(target, key, receiver);
14915
+ return typeof value2 === "function" ? value2.bind(target) : value2;
14916
+ }
14917
+ });
14918
+ }
14919
+ var PTS, PTS_ENTRY;
14920
+ var init_wasi_ptsfs = __esm({
14921
+ "src/process/wasi/wasi-ptsfs.ts"() {
14922
+ "use strict";
14923
+ init_sync_fs_wire();
14924
+ init_js_dev();
14925
+ PTS = "/dev/pts";
14926
+ PTS_ENTRY = /^\/dev\/pts\/(\d+)$/;
14927
+ }
14928
+ });
14929
+
14825
14930
  // src/process/wasi/wasi-signals.ts
14826
14931
  var DELIVERED_MASK, KERNEL_DEFAULTS, LIBC_DEFAULT_EXIT, SA_RESTART, SA_NODEFER, SA_NOCLDWAIT, DISPOSITION_IGNORE, DISPOSITION_HANDLER, withBit, WASIX_LIBC_DEFAULT_LINE, WasiSignals;
14827
14932
  var init_wasi_signals = __esm({
@@ -16997,13 +17102,20 @@ async function runWasiProcess(init, port3) {
16997
17102
  ppid: id.ppid,
16998
17103
  parent: () => identify(transport, init).ppid,
16999
17104
  kernel: { sys: traced(stats, "kernel", sys), call: call2 },
17000
- fs: procfsBridge(
17001
- cachingBridge(
17002
- traced(stats, "fs", createSyncFsSabBridge(transport, { ...ownersOf(init), direct: true })),
17003
- void 0,
17004
- threads?.ids
17105
+ fs: ptsBridge(
17106
+ procfsBridge(
17107
+ cachingBridge(
17108
+ traced(
17109
+ stats,
17110
+ "fs",
17111
+ createSyncFsSabBridge(transport, { ...ownersOf(init), direct: true })
17112
+ ),
17113
+ void 0,
17114
+ threads?.ids
17115
+ ),
17116
+ procTree(call2, id.pid)
17005
17117
  ),
17006
- procTree(call2, id.pid)
17118
+ call2
17007
17119
  ),
17008
17120
  ...descriptors(init, fork, threads),
17009
17121
  ...threads ? { credGen: threads.ids } : {}
@@ -17103,13 +17215,16 @@ async function runWasiThread(init, port3) {
17103
17215
  ppid: id.ppid,
17104
17216
  parent: () => identify(transport, init).ppid,
17105
17217
  kernel: { sys, call: call2 },
17106
- fs: procfsBridge(
17107
- cachingBridge(
17108
- createSyncFsSabBridge(transport, { ...ownersOf(init), direct: true }),
17109
- void 0,
17110
- threads.ids
17218
+ fs: ptsBridge(
17219
+ procfsBridge(
17220
+ cachingBridge(
17221
+ createSyncFsSabBridge(transport, { ...ownersOf(init), direct: true }),
17222
+ void 0,
17223
+ threads.ids
17224
+ ),
17225
+ procTree(call2, id.pid)
17111
17226
  ),
17112
- procTree(call2, id.pid)
17227
+ call2
17113
17228
  ),
17114
17229
  shared: threads.ids
17115
17230
  });
@@ -17175,6 +17290,7 @@ var init_wasi_runtime = __esm({
17175
17290
  init_wasi_imports();
17176
17291
  init_wasi_module();
17177
17292
  init_wasi_procfs();
17293
+ init_wasi_ptsfs();
17178
17294
  init_wasi_sigmask();
17179
17295
  init_wasi_signals();
17180
17296
  init_wasi_stats();