@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.
- package/README.md +10 -0
- package/dist/kernel-worker.js +159 -13
- package/dist/kernel-worker.js.map +4 -4
- package/dist/node-process-worker.js +74 -8
- package/dist/node-process-worker.js.map +3 -3
- package/dist/node.js +159 -13
- package/dist/node.js.map +4 -4
- package/dist/process-worker.js +74 -8
- package/dist/process-worker.js.map +3 -3
- package/dist/types/kernel/host.d.ts +2 -0
- package/dist/types/kernel/proc-info.d.ts +4 -0
- package/dist/types/kernel/protocol.d.ts +1 -0
- package/dist/types/kernel/wasm-memories.d.ts +20 -0
- package/dist/types/launcher.d.ts +6 -0
- package/dist/types/process/procfs.d.ts +4 -2
- package/dist/types/realm/live-vfs-fs.d.ts +1 -0
- package/package.json +1 -1
|
@@ -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.
|
|
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 (
|
|
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
|
|
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: {
|
|
10045
|
-
|
|
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"
|
|
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);
|