@ai-ecoverse/slicc-kernel 1.125.2 → 1.125.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/README.md +5 -1
- package/dist/kernel-worker.js +235 -110
- package/dist/kernel-worker.js.map +3 -3
- package/dist/node-process-worker.js +167 -22
- package/dist/node-process-worker.js.map +4 -4
- package/dist/node.js +238 -113
- package/dist/node.js.map +3 -3
- package/dist/process-worker.js +167 -22
- package/dist/process-worker.js.map +4 -4
- package/dist/types/kernel/net/tls-chain.d.ts +7 -1
- package/dist/types/kernel/vfs-file.d.ts +5 -0
- package/dist/types/mount/mount-fs.d.ts +1 -0
- package/dist/types/process/kernel-streams.d.ts +3 -0
- package/dist/types/process/wasi/wasi-host.d.ts +2 -0
- package/package.json +1 -1
|
@@ -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) {
|
|
@@ -4829,7 +4830,11 @@ var init_wasi_host = __esm({
|
|
|
4829
4830
|
}
|
|
4830
4831
|
if (this.synthetic(path)) return ROOT_IDS;
|
|
4831
4832
|
if (kernelDev(path)) return devSync(dev, devStat(path, follow3));
|
|
4832
|
-
return
|
|
4833
|
+
return this.orDev(
|
|
4834
|
+
path,
|
|
4835
|
+
follow3,
|
|
4836
|
+
() => follow3 ? this.o.fs.stat(path) : this.o.fs.lstat(path)
|
|
4837
|
+
);
|
|
4833
4838
|
};
|
|
4834
4839
|
return wrap({
|
|
4835
4840
|
fd_chown: (fd, uid, gid) => {
|
|
@@ -4908,7 +4913,16 @@ var init_wasi_host = __esm({
|
|
|
4908
4913
|
const node = devSync(dev, devStat(path, (flags & AT_SYMLINK_NOFOLLOW) === 0));
|
|
4909
4914
|
return void mem.view().setUint32(out, node.mode ?? DEVICE_MODE, true);
|
|
4910
4915
|
}
|
|
4911
|
-
const
|
|
4916
|
+
const follow3 = (flags & AT_SYMLINK_NOFOLLOW) === 0;
|
|
4917
|
+
let st;
|
|
4918
|
+
try {
|
|
4919
|
+
st = follow3 ? this.o.fs.stat(path) : this.o.fs.lstat(path);
|
|
4920
|
+
} catch (err) {
|
|
4921
|
+
const device2 = this.orDev(path, follow3, () => {
|
|
4922
|
+
throw err;
|
|
4923
|
+
});
|
|
4924
|
+
return void mem.view().setUint32(out, device2.mode ?? DEVICE_MODE, true);
|
|
4925
|
+
}
|
|
4912
4926
|
mem.view().setUint32(out, (st.isFifo ? S_IFIFO : 0) | modeOf2(st), true);
|
|
4913
4927
|
}
|
|
4914
4928
|
});
|
|
@@ -5618,6 +5632,21 @@ var init_wasi_host = __esm({
|
|
|
5618
5632
|
synthetic(path) {
|
|
5619
5633
|
return deviceOf(path) !== void 0 || path === SEALED_PATH && !!this.o.kernel.sys.openSealed || path === CLIPBOARD_PATH && !!this.o.kernel.sys.openClipboard;
|
|
5620
5634
|
}
|
|
5635
|
+
linkedDev(path, follow3) {
|
|
5636
|
+
if (!follow3) return void 0;
|
|
5637
|
+
const real = physicalPath(this.o.fs, path);
|
|
5638
|
+
return real !== path && kernelDev(real) ? real : void 0;
|
|
5639
|
+
}
|
|
5640
|
+
orDev(path, follow3, stat) {
|
|
5641
|
+
try {
|
|
5642
|
+
return stat();
|
|
5643
|
+
} catch (err) {
|
|
5644
|
+
const device2 = err.code === "ENOENT" && this.linkedDev(path, follow3);
|
|
5645
|
+
if (!device2) throw err;
|
|
5646
|
+
const json2 = (req) => this.o.kernel.call(req);
|
|
5647
|
+
return devSync({ json: json2 }, devStat(device2, true));
|
|
5648
|
+
}
|
|
5649
|
+
}
|
|
5621
5650
|
devChar(path, follow3) {
|
|
5622
5651
|
try {
|
|
5623
5652
|
const json2 = (req) => this.o.kernel.call(req);
|
|
@@ -5725,11 +5754,12 @@ var init_wasi_host = __esm({
|
|
|
5725
5754
|
return filestatOf(path, follow3 ? this.o.fs.stat(path) : this.o.fs.lstat(path));
|
|
5726
5755
|
} catch (err) {
|
|
5727
5756
|
if (err.code !== "ENOENT") throw err;
|
|
5728
|
-
|
|
5757
|
+
const device2 = kernelDev(path) ? path : this.linkedDev(path, follow3);
|
|
5758
|
+
if (device2 && this.devChar(device2, true)) {
|
|
5729
5759
|
return this.local({
|
|
5730
5760
|
filetype: FILETYPE.CHARACTER_DEVICE,
|
|
5731
5761
|
size: 0n,
|
|
5732
|
-
ino: pathInode(
|
|
5762
|
+
ino: pathInode(device2),
|
|
5733
5763
|
mtimeNs: 0n
|
|
5734
5764
|
});
|
|
5735
5765
|
}
|
|
@@ -6295,7 +6325,7 @@ var KERNEL_VERSION, OS_RELEASE;
|
|
|
6295
6325
|
var init_version = __esm({
|
|
6296
6326
|
"src/version.ts"() {
|
|
6297
6327
|
"use strict";
|
|
6298
|
-
KERNEL_VERSION = true ? "1.125.
|
|
6328
|
+
KERNEL_VERSION = true ? "1.125.4" : "0.0.0-dev";
|
|
6299
6329
|
OS_RELEASE = "6.0.0-slicc";
|
|
6300
6330
|
}
|
|
6301
6331
|
});
|
|
@@ -12610,7 +12640,7 @@ function datesOf(real) {
|
|
|
12610
12640
|
dates[key] = new Date(value2);
|
|
12611
12641
|
return dates;
|
|
12612
12642
|
}
|
|
12613
|
-
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;
|
|
12614
12644
|
var init_kernel_streams = __esm({
|
|
12615
12645
|
"src/process/kernel-streams.ts"() {
|
|
12616
12646
|
"use strict";
|
|
@@ -12627,6 +12657,7 @@ var init_kernel_streams = __esm({
|
|
|
12627
12657
|
SOCKET_MODE = 49663;
|
|
12628
12658
|
PTY_PATH = /^\/dev\/(?:ptmx|pts\/(\d+))$/;
|
|
12629
12659
|
TTY_PATH = /^\/dev\/tty\d+$/;
|
|
12660
|
+
PTS_MAJOR = 136;
|
|
12630
12661
|
TTY_NAME = /^tty\d+$/;
|
|
12631
12662
|
SEALED_PATH2 = "/dev/sealed";
|
|
12632
12663
|
STRERROR = {
|
|
@@ -12838,6 +12869,48 @@ var init_kernel_streams = __esm({
|
|
|
12838
12869
|
return [...names, ...missing2];
|
|
12839
12870
|
};
|
|
12840
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
|
+
}
|
|
12841
12914
|
ttyNode(name2) {
|
|
12842
12915
|
const { analyzePath, mkdev, makedev } = this.Fs;
|
|
12843
12916
|
if (!TTY_PATH.test(name2) || !analyzePath || !mkdev || !makedev) return;
|
|
@@ -12913,6 +12986,7 @@ var init_kernel_streams = __esm({
|
|
|
12913
12986
|
if (typeof this.Fs.open !== "function") return;
|
|
12914
12987
|
this.usePtyPaths();
|
|
12915
12988
|
this.useTerminalNodes();
|
|
12989
|
+
this.usePtsNodes();
|
|
12916
12990
|
this.listSealed();
|
|
12917
12991
|
const open = this.Fs.open.bind(this.Fs);
|
|
12918
12992
|
this.Fs.open = (path, flags, mode) => {
|
|
@@ -13028,15 +13102,21 @@ var init_kernel_streams = __esm({
|
|
|
13028
13102
|
if (path === CLIPBOARD_PATH2 && this.sys.openClipboard) return sealedStat(251);
|
|
13029
13103
|
const owned = this.ownedTty(path);
|
|
13030
13104
|
if (owned && isPtyPath(path)) return this.owned(path, ptyStat(path));
|
|
13031
|
-
if (!isPtyPath(path))
|
|
13032
|
-
|
|
13033
|
-
return owned && TTY_PATH.test(path) ? this.owned(path, st) : st;
|
|
13034
|
-
}
|
|
13105
|
+
if (!isPtyPath(path))
|
|
13106
|
+
return this.pathStat(path, original.call(fs, path, ...rest2), name2, owned);
|
|
13035
13107
|
this.existingPty(path);
|
|
13036
13108
|
return ptyStat(path);
|
|
13037
13109
|
};
|
|
13038
13110
|
}
|
|
13039
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
|
+
}
|
|
13040
13120
|
ownedTty(path) {
|
|
13041
13121
|
return this.options.owners === true && this.sys.ttyOwner !== void 0 && path !== "/dev/ptmx";
|
|
13042
13122
|
}
|
|
@@ -14793,6 +14873,60 @@ var init_wasi_module = __esm({
|
|
|
14793
14873
|
}
|
|
14794
14874
|
});
|
|
14795
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
|
+
|
|
14796
14930
|
// src/process/wasi/wasi-signals.ts
|
|
14797
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;
|
|
14798
14932
|
var init_wasi_signals = __esm({
|
|
@@ -16968,13 +17102,20 @@ async function runWasiProcess(init, port3) {
|
|
|
16968
17102
|
ppid: id.ppid,
|
|
16969
17103
|
parent: () => identify(transport, init).ppid,
|
|
16970
17104
|
kernel: { sys: traced(stats, "kernel", sys), call: call2 },
|
|
16971
|
-
fs:
|
|
16972
|
-
|
|
16973
|
-
|
|
16974
|
-
|
|
16975
|
-
|
|
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)
|
|
16976
17117
|
),
|
|
16977
|
-
|
|
17118
|
+
call2
|
|
16978
17119
|
),
|
|
16979
17120
|
...descriptors(init, fork, threads),
|
|
16980
17121
|
...threads ? { credGen: threads.ids } : {}
|
|
@@ -17074,13 +17215,16 @@ async function runWasiThread(init, port3) {
|
|
|
17074
17215
|
ppid: id.ppid,
|
|
17075
17216
|
parent: () => identify(transport, init).ppid,
|
|
17076
17217
|
kernel: { sys, call: call2 },
|
|
17077
|
-
fs:
|
|
17078
|
-
|
|
17079
|
-
|
|
17080
|
-
|
|
17081
|
-
|
|
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)
|
|
17082
17226
|
),
|
|
17083
|
-
|
|
17227
|
+
call2
|
|
17084
17228
|
),
|
|
17085
17229
|
shared: threads.ids
|
|
17086
17230
|
});
|
|
@@ -17146,6 +17290,7 @@ var init_wasi_runtime = __esm({
|
|
|
17146
17290
|
init_wasi_imports();
|
|
17147
17291
|
init_wasi_module();
|
|
17148
17292
|
init_wasi_procfs();
|
|
17293
|
+
init_wasi_ptsfs();
|
|
17149
17294
|
init_wasi_sigmask();
|
|
17150
17295
|
init_wasi_signals();
|
|
17151
17296
|
init_wasi_stats();
|