@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
|
@@ -1362,7 +1362,11 @@ var init_physical_path = __esm({
|
|
|
1362
1362
|
});
|
|
1363
1363
|
|
|
1364
1364
|
// src/fs/dev-removal.ts
|
|
1365
|
+
function inShm(path) {
|
|
1366
|
+
return path === SHM || path.startsWith(`${SHM}/`);
|
|
1367
|
+
}
|
|
1365
1368
|
function inDevTree(path) {
|
|
1369
|
+
if (path.startsWith(`${SHM}/`)) return false;
|
|
1366
1370
|
return path === "/dev" || path.startsWith("/dev/");
|
|
1367
1371
|
}
|
|
1368
1372
|
function devRemoval(path, cred) {
|
|
@@ -1370,9 +1374,11 @@ function devRemoval(path, cred) {
|
|
|
1370
1374
|
if (cred && cred.euid !== 0) return "EACCES";
|
|
1371
1375
|
return path === "/dev" ? "EBUSY" : "EPERM";
|
|
1372
1376
|
}
|
|
1377
|
+
var SHM;
|
|
1373
1378
|
var init_dev_removal = __esm({
|
|
1374
1379
|
"src/fs/dev-removal.ts"() {
|
|
1375
1380
|
"use strict";
|
|
1381
|
+
SHM = "/dev/shm";
|
|
1376
1382
|
}
|
|
1377
1383
|
});
|
|
1378
1384
|
|
|
@@ -1478,6 +1484,57 @@ var init_cred = __esm({
|
|
|
1478
1484
|
}
|
|
1479
1485
|
});
|
|
1480
1486
|
|
|
1487
|
+
// src/process/wasi/slicc-sem.ts
|
|
1488
|
+
function remainingMs(deadline, now) {
|
|
1489
|
+
if (deadline <= now) return 0;
|
|
1490
|
+
return Number((deadline - now + NS_PER_MS - 1n) / NS_PER_MS);
|
|
1491
|
+
}
|
|
1492
|
+
function semImports(host) {
|
|
1493
|
+
const { mem } = host;
|
|
1494
|
+
const call2 = (req) => host.o.kernel.call(req);
|
|
1495
|
+
const name2 = (ptr, len) => mem.string(ptr, len);
|
|
1496
|
+
return {
|
|
1497
|
+
sem_open: (np, nl, oflag, mode, value2, out) => {
|
|
1498
|
+
const handle = call2({
|
|
1499
|
+
op: "sem-open",
|
|
1500
|
+
name: name2(np, nl),
|
|
1501
|
+
create: (oflag & SEM_CREAT) !== 0,
|
|
1502
|
+
exclusive: (oflag & SEM_EXCL) !== 0,
|
|
1503
|
+
mode,
|
|
1504
|
+
value: value2
|
|
1505
|
+
});
|
|
1506
|
+
mem.view().setUint32(out, handle, true);
|
|
1507
|
+
},
|
|
1508
|
+
sem_close: (handle) => void call2({ op: "sem-close", handle }),
|
|
1509
|
+
sem_unlink: (np, nl) => void call2({ op: "sem-unlink", name: name2(np, nl) }),
|
|
1510
|
+
sem_post: (handle) => void call2({ op: "sem-post", handle }),
|
|
1511
|
+
sem_wait: (handle, how, clock, deadline) => {
|
|
1512
|
+
const kind = HOW[how];
|
|
1513
|
+
if (!kind) throw new WasiError("EINVAL");
|
|
1514
|
+
let timeoutMs2 = -1;
|
|
1515
|
+
if (kind === "timed") {
|
|
1516
|
+
if (deadline < 0n) throw new WasiError("EINVAL");
|
|
1517
|
+
if (clock !== CLOCK.REALTIME && clock !== CLOCK.MONOTONIC) throw new WasiError("EINVAL");
|
|
1518
|
+
timeoutMs2 = remainingMs(deadline, host.now(clock));
|
|
1519
|
+
}
|
|
1520
|
+
call2({ op: "sem-wait", handle, how: kind, timeoutMs: timeoutMs2 });
|
|
1521
|
+
},
|
|
1522
|
+
sem_getvalue: (handle, out) => void mem.view().setInt32(out, call2({ op: "sem-getvalue", handle }), true)
|
|
1523
|
+
};
|
|
1524
|
+
}
|
|
1525
|
+
var SEM_CREAT, SEM_EXCL, HOW, NS_PER_MS;
|
|
1526
|
+
var init_slicc_sem = __esm({
|
|
1527
|
+
"src/process/wasi/slicc-sem.ts"() {
|
|
1528
|
+
"use strict";
|
|
1529
|
+
init_wasi_abi();
|
|
1530
|
+
init_wasi_files();
|
|
1531
|
+
SEM_CREAT = 1;
|
|
1532
|
+
SEM_EXCL = 2;
|
|
1533
|
+
HOW = ["block", "try", "timed"];
|
|
1534
|
+
NS_PER_MS = 1000000n;
|
|
1535
|
+
}
|
|
1536
|
+
});
|
|
1537
|
+
|
|
1481
1538
|
// src/kernel/pipe.ts
|
|
1482
1539
|
var PIPE_CAPACITY;
|
|
1483
1540
|
var init_pipe = __esm({
|
|
@@ -3056,7 +3113,7 @@ function filestatOf(path, s) {
|
|
|
3056
3113
|
size: BigInt(s.size),
|
|
3057
3114
|
ino: s.ino !== void 0 ? BigInt(s.ino) : pathInode(path),
|
|
3058
3115
|
...s.nlink !== void 0 ? { nlink: BigInt(s.nlink) } : {},
|
|
3059
|
-
mtimeNs: BigInt(Math.round(s.mtimeMs ?? 0)) *
|
|
3116
|
+
mtimeNs: BigInt(Math.round(s.mtimeMs ?? 0)) * NS_PER_MS2
|
|
3060
3117
|
};
|
|
3061
3118
|
}
|
|
3062
3119
|
function kernelFiletype(kind) {
|
|
@@ -3106,7 +3163,7 @@ function wrap(table) {
|
|
|
3106
3163
|
}
|
|
3107
3164
|
return out;
|
|
3108
3165
|
}
|
|
3109
|
-
var WasiExit, IDS,
|
|
3166
|
+
var WasiExit, IDS, NS_PER_MS2, AT_SYMLINK_NOFOLLOW, AT_EACCESS, ROOT_IDS, GONE, S_IFIFO, DEFAULT_UMASK, MONOTONIC_BASE, MAX_READ, SIGPIPE_EXIT, SIG_IGN, SEALED_MODE, WasiHost;
|
|
3110
3167
|
var init_wasi_host = __esm({
|
|
3111
3168
|
"src/process/wasi/wasi-host.ts"() {
|
|
3112
3169
|
"use strict";
|
|
@@ -3114,6 +3171,7 @@ var init_wasi_host = __esm({
|
|
|
3114
3171
|
init_physical_path();
|
|
3115
3172
|
init_cpu_clock();
|
|
3116
3173
|
init_cred();
|
|
3174
|
+
init_slicc_sem();
|
|
3117
3175
|
init_wasi_abi();
|
|
3118
3176
|
init_wasi_fds();
|
|
3119
3177
|
init_wasi_files();
|
|
@@ -3129,14 +3187,14 @@ var init_wasi_host = __esm({
|
|
|
3129
3187
|
}
|
|
3130
3188
|
};
|
|
3131
3189
|
IDS = ["ruid", "euid", "suid", "rgid", "egid", "sgid"];
|
|
3132
|
-
|
|
3190
|
+
NS_PER_MS2 = 1000000n;
|
|
3133
3191
|
AT_SYMLINK_NOFOLLOW = 1;
|
|
3134
3192
|
AT_EACCESS = 2;
|
|
3135
3193
|
ROOT_IDS = Object.freeze({ uid: 0, gid: 0 });
|
|
3136
3194
|
GONE = /* @__PURE__ */ new Set(["ENOENT", "ENOTDIR"]);
|
|
3137
3195
|
S_IFIFO = 4096;
|
|
3138
3196
|
DEFAULT_UMASK = 18;
|
|
3139
|
-
MONOTONIC_BASE = BigInt(Math.round(performance.timeOrigin)) *
|
|
3197
|
+
MONOTONIC_BASE = BigInt(Math.round(performance.timeOrigin)) * NS_PER_MS2;
|
|
3140
3198
|
MAX_READ = 1024 * 1024;
|
|
3141
3199
|
SIGPIPE_EXIT = 141;
|
|
3142
3200
|
SIG_IGN = 1;
|
|
@@ -3334,6 +3392,7 @@ var init_wasi_host = __esm({
|
|
|
3334
3392
|
});
|
|
3335
3393
|
void this.o.kernel.call({ op: "proc-setcred", change });
|
|
3336
3394
|
},
|
|
3395
|
+
...semImports(this),
|
|
3337
3396
|
groups_get: (buf, cap, count) => {
|
|
3338
3397
|
const { groups } = this.o.kernel.call({ op: "proc-cred" });
|
|
3339
3398
|
if (cap !== 0 && cap < groups.length) throw new WasiError("EINVAL");
|
|
@@ -3424,7 +3483,7 @@ var init_wasi_host = __esm({
|
|
|
3424
3483
|
return this.cache;
|
|
3425
3484
|
}
|
|
3426
3485
|
now(id) {
|
|
3427
|
-
if (id === CLOCK.REALTIME) return BigInt(Date.now()) *
|
|
3486
|
+
if (id === CLOCK.REALTIME) return BigInt(Date.now()) * NS_PER_MS2;
|
|
3428
3487
|
if (id === CLOCK.MONOTONIC) {
|
|
3429
3488
|
return MONOTONIC_BASE + BigInt(Math.round(performance.now() * 1e6));
|
|
3430
3489
|
}
|
|
@@ -3933,7 +3992,7 @@ var init_wasi_host = __esm({
|
|
|
3933
3992
|
current ??= statOf(path);
|
|
3934
3993
|
return current[field2] ?? current.mtimeMs ?? now;
|
|
3935
3994
|
};
|
|
3936
|
-
const pick = (set, setNow, value2, field2) => flags & setNow ? now : flags & set ? Number(value2 /
|
|
3995
|
+
const pick = (set, setNow, value2, field2) => flags & setNow ? now : flags & set ? Number(value2 / NS_PER_MS2) : kept(field2);
|
|
3937
3996
|
(follow2 ? this.o.fs.utimes : this.o.fs.lutimes).call(
|
|
3938
3997
|
this.o.fs,
|
|
3939
3998
|
path,
|
|
@@ -4591,7 +4650,7 @@ var KERNEL_VERSION, OS_RELEASE;
|
|
|
4591
4650
|
var init_version = __esm({
|
|
4592
4651
|
"src/version.ts"() {
|
|
4593
4652
|
"use strict";
|
|
4594
|
-
KERNEL_VERSION = true ? "1.
|
|
4653
|
+
KERNEL_VERSION = true ? "1.99.1" : "0.0.0-dev";
|
|
4595
4654
|
OS_RELEASE = "6.0.0-slicc";
|
|
4596
4655
|
}
|
|
4597
4656
|
});
|
|
@@ -5114,7 +5173,7 @@ var init_js_io = __esm({
|
|
|
5114
5173
|
|
|
5115
5174
|
// src/process/js/js-dev.ts
|
|
5116
5175
|
function inDev(abs) {
|
|
5117
|
-
return abs.startsWith("/dev") && (abs.length === 4 || abs[4] === "/");
|
|
5176
|
+
return abs.startsWith("/dev") && (abs.length === 4 || abs[4] === "/") && !inShm(abs);
|
|
5118
5177
|
}
|
|
5119
5178
|
function missing(path) {
|
|
5120
5179
|
throw new JsCallError("ENOENT", path);
|
|
@@ -5255,7 +5314,7 @@ function* devReaddir(abs) {
|
|
|
5255
5314
|
if (node.kind !== "dir") throw new JsCallError("ENOTDIR", abs);
|
|
5256
5315
|
const names = yield { op: "fd-tty-names" };
|
|
5257
5316
|
const ttys = names.filter((n) => /^\/dev\/tty\d+$/.test(n)).map((n) => n.slice(5));
|
|
5258
|
-
return [...DEVICES, "clipboard", "sealed", "tty", "fd", "pts", ...STDIO3, ...ttys].sort();
|
|
5317
|
+
return [...DEVICES, "clipboard", "sealed", "tty", "fd", "pts", "shm", ...STDIO3, ...ttys].sort();
|
|
5259
5318
|
}
|
|
5260
5319
|
function* aliasOf(fd, abs, o) {
|
|
5261
5320
|
const info = yield* fdInfo(fd, abs);
|
|
@@ -5466,6 +5525,7 @@ var DEV_READ_MAX, DEVICES, STDIO3, SELF_FD, S_IFMT, DIR, LINK, CHAR, BORN, CHAR_
|
|
|
5466
5525
|
var init_js_dev = __esm({
|
|
5467
5526
|
"src/process/js/js-dev.ts"() {
|
|
5468
5527
|
"use strict";
|
|
5528
|
+
init_dev_removal();
|
|
5469
5529
|
init_sync_fs_wire();
|
|
5470
5530
|
init_js_io();
|
|
5471
5531
|
init_js_kernel();
|
|
@@ -10699,6 +10759,15 @@ var init_js_runtime = __esm({
|
|
|
10699
10759
|
});
|
|
10700
10760
|
|
|
10701
10761
|
// src/realm/emscripten-vfs-hook.ts
|
|
10762
|
+
function kernelDevDirs(bridge) {
|
|
10763
|
+
return KERNEL_DEV_DIRS.filter((dir) => {
|
|
10764
|
+
try {
|
|
10765
|
+
return bridge.stat(dir).isDirectory;
|
|
10766
|
+
} catch {
|
|
10767
|
+
return false;
|
|
10768
|
+
}
|
|
10769
|
+
});
|
|
10770
|
+
}
|
|
10702
10771
|
function topLevelDirs(bridge, warn) {
|
|
10703
10772
|
let names;
|
|
10704
10773
|
try {
|
|
@@ -10737,7 +10806,12 @@ function linuxRmdir(Fs) {
|
|
|
10737
10806
|
function mountVfsIntoEmscripten(Fs, deps) {
|
|
10738
10807
|
const { bridge, warn } = deps;
|
|
10739
10808
|
const dirs = topLevelDirs(bridge, warn);
|
|
10740
|
-
const { plugin, mounted } = mountLiveVfsDirs(
|
|
10809
|
+
const { plugin, mounted } = mountLiveVfsDirs(
|
|
10810
|
+
Fs,
|
|
10811
|
+
bridge,
|
|
10812
|
+
[...dirs ?? [], ...kernelDevDirs(bridge)],
|
|
10813
|
+
warn
|
|
10814
|
+
);
|
|
10741
10815
|
if (dirs) liveRoot(Fs, bridge);
|
|
10742
10816
|
if (bridge.owners && Fs.lookupPath) useLiveChown(Fs);
|
|
10743
10817
|
if (bridge.links && Fs.lookupPath) readingLinks(Fs);
|
|
@@ -10755,13 +10829,14 @@ function mountVfsIntoEmscripten(Fs, deps) {
|
|
|
10755
10829
|
invalidate: () => invalidateLiveVfs(Fs, plugin)
|
|
10756
10830
|
};
|
|
10757
10831
|
}
|
|
10758
|
-
var MODULE_OWNED_DIRS, SYNTHETIC_DIRS2;
|
|
10832
|
+
var MODULE_OWNED_DIRS, SYNTHETIC_DIRS2, KERNEL_DEV_DIRS;
|
|
10759
10833
|
var init_emscripten_vfs_hook = __esm({
|
|
10760
10834
|
"src/realm/emscripten-vfs-hook.ts"() {
|
|
10761
10835
|
"use strict";
|
|
10762
10836
|
init_live_vfs_fs();
|
|
10763
10837
|
MODULE_OWNED_DIRS = /* @__PURE__ */ new Set(["dev", "proc"]);
|
|
10764
10838
|
SYNTHETIC_DIRS2 = ["/usr", "/bin"];
|
|
10839
|
+
KERNEL_DEV_DIRS = ["/dev/shm"];
|
|
10765
10840
|
}
|
|
10766
10841
|
});
|
|
10767
10842
|
|
|
@@ -13414,7 +13489,7 @@ var init_wasix_fork = __esm({
|
|
|
13414
13489
|
function timeoutMs(ns) {
|
|
13415
13490
|
const value2 = BigInt.asUintN(64, ns);
|
|
13416
13491
|
if (value2 === FOREVER) return -1;
|
|
13417
|
-
const ms = (value2 +
|
|
13492
|
+
const ms = (value2 + NS_PER_MS3 - 1n) / NS_PER_MS3;
|
|
13418
13493
|
return ms > BigInt(MAX_TIMEOUT_MS) ? -1 : Number(ms);
|
|
13419
13494
|
}
|
|
13420
13495
|
function wasixEpollImports(host) {
|
|
@@ -13475,7 +13550,7 @@ function wasixEpollImports(host) {
|
|
|
13475
13550
|
}
|
|
13476
13551
|
};
|
|
13477
13552
|
}
|
|
13478
|
-
var EVENT_SIZE, DATA_OFFSET, DATA_SIZE, MAX_EVENTS, FOREVER, MAX_TIMEOUT_MS,
|
|
13553
|
+
var EVENT_SIZE, DATA_OFFSET, DATA_SIZE, MAX_EVENTS, FOREVER, MAX_TIMEOUT_MS, NS_PER_MS3, EVENTFD_SEMAPHORE, EVENTFD_NONBLOCK, EVENTFD_MAX, OPS;
|
|
13479
13554
|
var init_wasix_epoll = __esm({
|
|
13480
13555
|
"src/process/wasi/wasix-epoll.ts"() {
|
|
13481
13556
|
"use strict";
|
|
@@ -13487,7 +13562,7 @@ var init_wasix_epoll = __esm({
|
|
|
13487
13562
|
MAX_EVENTS = 4096;
|
|
13488
13563
|
FOREVER = 0xffffffffffffffffn;
|
|
13489
13564
|
MAX_TIMEOUT_MS = 2147483647;
|
|
13490
|
-
|
|
13565
|
+
NS_PER_MS3 = 1000000n;
|
|
13491
13566
|
EVENTFD_SEMAPHORE = 1;
|
|
13492
13567
|
EVENTFD_NONBLOCK = 4;
|
|
13493
13568
|
EVENTFD_MAX = 0xfffffffffffffffen;
|