@ai-ecoverse/slicc-kernel 1.98.4 → 1.99.1
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 +44 -1
- package/dist/kernel-worker.js +275 -27
- package/dist/kernel-worker.js.map +4 -4
- package/dist/node-process-worker.js +89 -14
- package/dist/node-process-worker.js.map +4 -4
- package/dist/node.js +275 -27
- package/dist/node.js.map +4 -4
- package/dist/process-worker.js +89 -14
- package/dist/process-worker.js.map +4 -4
- package/package.json +2 -2
package/dist/process-worker.js
CHANGED
|
@@ -2364,6 +2364,15 @@ var init_live_vfs_fs = __esm({
|
|
|
2364
2364
|
});
|
|
2365
2365
|
|
|
2366
2366
|
// src/realm/emscripten-vfs-hook.ts
|
|
2367
|
+
function kernelDevDirs(bridge) {
|
|
2368
|
+
return KERNEL_DEV_DIRS.filter((dir) => {
|
|
2369
|
+
try {
|
|
2370
|
+
return bridge.stat(dir).isDirectory;
|
|
2371
|
+
} catch {
|
|
2372
|
+
return false;
|
|
2373
|
+
}
|
|
2374
|
+
});
|
|
2375
|
+
}
|
|
2367
2376
|
function topLevelDirs(bridge, warn) {
|
|
2368
2377
|
let names;
|
|
2369
2378
|
try {
|
|
@@ -2402,7 +2411,12 @@ function linuxRmdir(Fs) {
|
|
|
2402
2411
|
function mountVfsIntoEmscripten(Fs, deps) {
|
|
2403
2412
|
const { bridge, warn } = deps;
|
|
2404
2413
|
const dirs = topLevelDirs(bridge, warn);
|
|
2405
|
-
const { plugin, mounted } = mountLiveVfsDirs(
|
|
2414
|
+
const { plugin, mounted } = mountLiveVfsDirs(
|
|
2415
|
+
Fs,
|
|
2416
|
+
bridge,
|
|
2417
|
+
[...dirs ?? [], ...kernelDevDirs(bridge)],
|
|
2418
|
+
warn
|
|
2419
|
+
);
|
|
2406
2420
|
if (dirs) liveRoot(Fs, bridge);
|
|
2407
2421
|
if (bridge.owners && Fs.lookupPath) useLiveChown(Fs);
|
|
2408
2422
|
if (bridge.links && Fs.lookupPath) readingLinks(Fs);
|
|
@@ -2420,18 +2434,23 @@ function mountVfsIntoEmscripten(Fs, deps) {
|
|
|
2420
2434
|
invalidate: () => invalidateLiveVfs(Fs, plugin)
|
|
2421
2435
|
};
|
|
2422
2436
|
}
|
|
2423
|
-
var MODULE_OWNED_DIRS, SYNTHETIC_DIRS;
|
|
2437
|
+
var MODULE_OWNED_DIRS, SYNTHETIC_DIRS, KERNEL_DEV_DIRS;
|
|
2424
2438
|
var init_emscripten_vfs_hook = __esm({
|
|
2425
2439
|
"src/realm/emscripten-vfs-hook.ts"() {
|
|
2426
2440
|
"use strict";
|
|
2427
2441
|
init_live_vfs_fs();
|
|
2428
2442
|
MODULE_OWNED_DIRS = /* @__PURE__ */ new Set(["dev", "proc"]);
|
|
2429
2443
|
SYNTHETIC_DIRS = ["/usr", "/bin"];
|
|
2444
|
+
KERNEL_DEV_DIRS = ["/dev/shm"];
|
|
2430
2445
|
}
|
|
2431
2446
|
});
|
|
2432
2447
|
|
|
2433
2448
|
// src/fs/dev-removal.ts
|
|
2449
|
+
function inShm(path) {
|
|
2450
|
+
return path === SHM || path.startsWith(`${SHM}/`);
|
|
2451
|
+
}
|
|
2434
2452
|
function inDevTree(path) {
|
|
2453
|
+
if (path.startsWith(`${SHM}/`)) return false;
|
|
2435
2454
|
return path === "/dev" || path.startsWith("/dev/");
|
|
2436
2455
|
}
|
|
2437
2456
|
function devRemoval(path, cred) {
|
|
@@ -2439,9 +2458,11 @@ function devRemoval(path, cred) {
|
|
|
2439
2458
|
if (cred && cred.euid !== 0) return "EACCES";
|
|
2440
2459
|
return path === "/dev" ? "EBUSY" : "EPERM";
|
|
2441
2460
|
}
|
|
2461
|
+
var SHM;
|
|
2442
2462
|
var init_dev_removal = __esm({
|
|
2443
2463
|
"src/fs/dev-removal.ts"() {
|
|
2444
2464
|
"use strict";
|
|
2465
|
+
SHM = "/dev/shm";
|
|
2445
2466
|
}
|
|
2446
2467
|
});
|
|
2447
2468
|
|
|
@@ -2454,7 +2475,7 @@ var KERNEL_VERSION, OS_RELEASE;
|
|
|
2454
2475
|
var init_version = __esm({
|
|
2455
2476
|
"src/version.ts"() {
|
|
2456
2477
|
"use strict";
|
|
2457
|
-
KERNEL_VERSION = true ? "1.
|
|
2478
|
+
KERNEL_VERSION = true ? "1.99.1" : "0.0.0-dev";
|
|
2458
2479
|
OS_RELEASE = "6.0.0-slicc";
|
|
2459
2480
|
}
|
|
2460
2481
|
});
|
|
@@ -6644,6 +6665,57 @@ var init_wasi_files = __esm({
|
|
|
6644
6665
|
}
|
|
6645
6666
|
});
|
|
6646
6667
|
|
|
6668
|
+
// src/process/wasi/slicc-sem.ts
|
|
6669
|
+
function remainingMs(deadline, now) {
|
|
6670
|
+
if (deadline <= now) return 0;
|
|
6671
|
+
return Number((deadline - now + NS_PER_MS - 1n) / NS_PER_MS);
|
|
6672
|
+
}
|
|
6673
|
+
function semImports(host) {
|
|
6674
|
+
const { mem } = host;
|
|
6675
|
+
const call2 = (req) => host.o.kernel.call(req);
|
|
6676
|
+
const name2 = (ptr, len) => mem.string(ptr, len);
|
|
6677
|
+
return {
|
|
6678
|
+
sem_open: (np, nl, oflag, mode, value2, out) => {
|
|
6679
|
+
const handle = call2({
|
|
6680
|
+
op: "sem-open",
|
|
6681
|
+
name: name2(np, nl),
|
|
6682
|
+
create: (oflag & SEM_CREAT) !== 0,
|
|
6683
|
+
exclusive: (oflag & SEM_EXCL) !== 0,
|
|
6684
|
+
mode,
|
|
6685
|
+
value: value2
|
|
6686
|
+
});
|
|
6687
|
+
mem.view().setUint32(out, handle, true);
|
|
6688
|
+
},
|
|
6689
|
+
sem_close: (handle) => void call2({ op: "sem-close", handle }),
|
|
6690
|
+
sem_unlink: (np, nl) => void call2({ op: "sem-unlink", name: name2(np, nl) }),
|
|
6691
|
+
sem_post: (handle) => void call2({ op: "sem-post", handle }),
|
|
6692
|
+
sem_wait: (handle, how, clock, deadline) => {
|
|
6693
|
+
const kind = HOW[how];
|
|
6694
|
+
if (!kind) throw new WasiError("EINVAL");
|
|
6695
|
+
let timeoutMs2 = -1;
|
|
6696
|
+
if (kind === "timed") {
|
|
6697
|
+
if (deadline < 0n) throw new WasiError("EINVAL");
|
|
6698
|
+
if (clock !== CLOCK.REALTIME && clock !== CLOCK.MONOTONIC) throw new WasiError("EINVAL");
|
|
6699
|
+
timeoutMs2 = remainingMs(deadline, host.now(clock));
|
|
6700
|
+
}
|
|
6701
|
+
call2({ op: "sem-wait", handle, how: kind, timeoutMs: timeoutMs2 });
|
|
6702
|
+
},
|
|
6703
|
+
sem_getvalue: (handle, out) => void mem.view().setInt32(out, call2({ op: "sem-getvalue", handle }), true)
|
|
6704
|
+
};
|
|
6705
|
+
}
|
|
6706
|
+
var SEM_CREAT, SEM_EXCL, HOW, NS_PER_MS;
|
|
6707
|
+
var init_slicc_sem = __esm({
|
|
6708
|
+
"src/process/wasi/slicc-sem.ts"() {
|
|
6709
|
+
"use strict";
|
|
6710
|
+
init_wasi_abi();
|
|
6711
|
+
init_wasi_files();
|
|
6712
|
+
SEM_CREAT = 1;
|
|
6713
|
+
SEM_EXCL = 2;
|
|
6714
|
+
HOW = ["block", "try", "timed"];
|
|
6715
|
+
NS_PER_MS = 1000000n;
|
|
6716
|
+
}
|
|
6717
|
+
});
|
|
6718
|
+
|
|
6647
6719
|
// src/kernel/pipe.ts
|
|
6648
6720
|
var PIPE_CAPACITY;
|
|
6649
6721
|
var init_pipe = __esm({
|
|
@@ -8099,7 +8171,7 @@ function filestatOf(path, s) {
|
|
|
8099
8171
|
size: BigInt(s.size),
|
|
8100
8172
|
ino: s.ino !== void 0 ? BigInt(s.ino) : pathInode(path),
|
|
8101
8173
|
...s.nlink !== void 0 ? { nlink: BigInt(s.nlink) } : {},
|
|
8102
|
-
mtimeNs: BigInt(Math.round(s.mtimeMs ?? 0)) *
|
|
8174
|
+
mtimeNs: BigInt(Math.round(s.mtimeMs ?? 0)) * NS_PER_MS2
|
|
8103
8175
|
};
|
|
8104
8176
|
}
|
|
8105
8177
|
function kernelFiletype(kind) {
|
|
@@ -8149,7 +8221,7 @@ function wrap(table) {
|
|
|
8149
8221
|
}
|
|
8150
8222
|
return out;
|
|
8151
8223
|
}
|
|
8152
|
-
var WasiExit, IDS,
|
|
8224
|
+
var WasiExit, IDS, NS_PER_MS2, AT_SYMLINK_NOFOLLOW2, AT_EACCESS2, ROOT_IDS, GONE, S_IFIFO, DEFAULT_UMASK, MONOTONIC_BASE, MAX_READ, SIGPIPE_EXIT, SIG_IGN, SEALED_MODE, WasiHost;
|
|
8153
8225
|
var init_wasi_host = __esm({
|
|
8154
8226
|
"src/process/wasi/wasi-host.ts"() {
|
|
8155
8227
|
"use strict";
|
|
@@ -8157,6 +8229,7 @@ var init_wasi_host = __esm({
|
|
|
8157
8229
|
init_physical_path();
|
|
8158
8230
|
init_cpu_clock();
|
|
8159
8231
|
init_cred();
|
|
8232
|
+
init_slicc_sem();
|
|
8160
8233
|
init_wasi_abi();
|
|
8161
8234
|
init_wasi_fds();
|
|
8162
8235
|
init_wasi_files();
|
|
@@ -8172,14 +8245,14 @@ var init_wasi_host = __esm({
|
|
|
8172
8245
|
}
|
|
8173
8246
|
};
|
|
8174
8247
|
IDS = ["ruid", "euid", "suid", "rgid", "egid", "sgid"];
|
|
8175
|
-
|
|
8248
|
+
NS_PER_MS2 = 1000000n;
|
|
8176
8249
|
AT_SYMLINK_NOFOLLOW2 = 1;
|
|
8177
8250
|
AT_EACCESS2 = 2;
|
|
8178
8251
|
ROOT_IDS = Object.freeze({ uid: 0, gid: 0 });
|
|
8179
8252
|
GONE = /* @__PURE__ */ new Set(["ENOENT", "ENOTDIR"]);
|
|
8180
8253
|
S_IFIFO = 4096;
|
|
8181
8254
|
DEFAULT_UMASK = 18;
|
|
8182
|
-
MONOTONIC_BASE = BigInt(Math.round(performance.timeOrigin)) *
|
|
8255
|
+
MONOTONIC_BASE = BigInt(Math.round(performance.timeOrigin)) * NS_PER_MS2;
|
|
8183
8256
|
MAX_READ = 1024 * 1024;
|
|
8184
8257
|
SIGPIPE_EXIT = 141;
|
|
8185
8258
|
SIG_IGN = 1;
|
|
@@ -8377,6 +8450,7 @@ var init_wasi_host = __esm({
|
|
|
8377
8450
|
});
|
|
8378
8451
|
void this.o.kernel.call({ op: "proc-setcred", change });
|
|
8379
8452
|
},
|
|
8453
|
+
...semImports(this),
|
|
8380
8454
|
groups_get: (buf, cap, count) => {
|
|
8381
8455
|
const { groups } = this.o.kernel.call({ op: "proc-cred" });
|
|
8382
8456
|
if (cap !== 0 && cap < groups.length) throw new WasiError("EINVAL");
|
|
@@ -8467,7 +8541,7 @@ var init_wasi_host = __esm({
|
|
|
8467
8541
|
return this.cache;
|
|
8468
8542
|
}
|
|
8469
8543
|
now(id) {
|
|
8470
|
-
if (id === CLOCK.REALTIME) return BigInt(Date.now()) *
|
|
8544
|
+
if (id === CLOCK.REALTIME) return BigInt(Date.now()) * NS_PER_MS2;
|
|
8471
8545
|
if (id === CLOCK.MONOTONIC) {
|
|
8472
8546
|
return MONOTONIC_BASE + BigInt(Math.round(performance.now() * 1e6));
|
|
8473
8547
|
}
|
|
@@ -8976,7 +9050,7 @@ var init_wasi_host = __esm({
|
|
|
8976
9050
|
current ??= statOf(path);
|
|
8977
9051
|
return current[field2] ?? current.mtimeMs ?? now;
|
|
8978
9052
|
};
|
|
8979
|
-
const pick = (set, setNow, value2, field2) => flags & setNow ? now : flags & set ? Number(value2 /
|
|
9053
|
+
const pick = (set, setNow, value2, field2) => flags & setNow ? now : flags & set ? Number(value2 / NS_PER_MS2) : kept(field2);
|
|
8980
9054
|
(follow2 ? this.o.fs.utimes : this.o.fs.lutimes).call(
|
|
8981
9055
|
this.o.fs,
|
|
8982
9056
|
path,
|
|
@@ -10362,7 +10436,7 @@ var init_wasix_fork = __esm({
|
|
|
10362
10436
|
function timeoutMs(ns) {
|
|
10363
10437
|
const value2 = BigInt.asUintN(64, ns);
|
|
10364
10438
|
if (value2 === FOREVER) return -1;
|
|
10365
|
-
const ms = (value2 +
|
|
10439
|
+
const ms = (value2 + NS_PER_MS3 - 1n) / NS_PER_MS3;
|
|
10366
10440
|
return ms > BigInt(MAX_TIMEOUT_MS) ? -1 : Number(ms);
|
|
10367
10441
|
}
|
|
10368
10442
|
function wasixEpollImports(host) {
|
|
@@ -10423,7 +10497,7 @@ function wasixEpollImports(host) {
|
|
|
10423
10497
|
}
|
|
10424
10498
|
};
|
|
10425
10499
|
}
|
|
10426
|
-
var EVENT_SIZE, DATA_OFFSET, DATA_SIZE, MAX_EVENTS, FOREVER, MAX_TIMEOUT_MS,
|
|
10500
|
+
var EVENT_SIZE, DATA_OFFSET, DATA_SIZE, MAX_EVENTS, FOREVER, MAX_TIMEOUT_MS, NS_PER_MS3, EVENTFD_SEMAPHORE, EVENTFD_NONBLOCK, EVENTFD_MAX, OPS;
|
|
10427
10501
|
var init_wasix_epoll = __esm({
|
|
10428
10502
|
"src/process/wasi/wasix-epoll.ts"() {
|
|
10429
10503
|
"use strict";
|
|
@@ -10435,7 +10509,7 @@ var init_wasix_epoll = __esm({
|
|
|
10435
10509
|
MAX_EVENTS = 4096;
|
|
10436
10510
|
FOREVER = 0xffffffffffffffffn;
|
|
10437
10511
|
MAX_TIMEOUT_MS = 2147483647;
|
|
10438
|
-
|
|
10512
|
+
NS_PER_MS3 = 1000000n;
|
|
10439
10513
|
EVENTFD_SEMAPHORE = 1;
|
|
10440
10514
|
EVENTFD_NONBLOCK = 4;
|
|
10441
10515
|
EVENTFD_MAX = 0xfffffffffffffffen;
|
|
@@ -13076,7 +13150,7 @@ var init_js_io = __esm({
|
|
|
13076
13150
|
|
|
13077
13151
|
// src/process/js/js-dev.ts
|
|
13078
13152
|
function inDev(abs) {
|
|
13079
|
-
return abs.startsWith("/dev") && (abs.length === 4 || abs[4] === "/");
|
|
13153
|
+
return abs.startsWith("/dev") && (abs.length === 4 || abs[4] === "/") && !inShm(abs);
|
|
13080
13154
|
}
|
|
13081
13155
|
function missing(path) {
|
|
13082
13156
|
throw new JsCallError("ENOENT", path);
|
|
@@ -13217,7 +13291,7 @@ function* devReaddir(abs) {
|
|
|
13217
13291
|
if (node.kind !== "dir") throw new JsCallError("ENOTDIR", abs);
|
|
13218
13292
|
const names = yield { op: "fd-tty-names" };
|
|
13219
13293
|
const ttys = names.filter((n) => /^\/dev\/tty\d+$/.test(n)).map((n) => n.slice(5));
|
|
13220
|
-
return [...DEVICES2, "clipboard", "sealed", "tty", "fd", "pts", ...STDIO3, ...ttys].sort();
|
|
13294
|
+
return [...DEVICES2, "clipboard", "sealed", "tty", "fd", "pts", "shm", ...STDIO3, ...ttys].sort();
|
|
13221
13295
|
}
|
|
13222
13296
|
function* aliasOf(fd, abs, o) {
|
|
13223
13297
|
const info = yield* fdInfo(fd, abs);
|
|
@@ -13428,6 +13502,7 @@ var DEV_READ_MAX, DEVICES2, STDIO3, SELF_FD, S_IFMT2, DIR, LINK, CHAR, BORN, CHA
|
|
|
13428
13502
|
var init_js_dev = __esm({
|
|
13429
13503
|
"src/process/js/js-dev.ts"() {
|
|
13430
13504
|
"use strict";
|
|
13505
|
+
init_dev_removal();
|
|
13431
13506
|
init_sync_fs_wire();
|
|
13432
13507
|
init_js_io();
|
|
13433
13508
|
init_js_kernel();
|