@ai-ecoverse/slicc-kernel 1.125.5 → 1.125.8
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 +2 -2
- package/dist/kernel-worker.js +1 -1
- package/dist/kernel-worker.js.map +2 -2
- package/dist/node-process-worker.js +103 -16
- package/dist/node-process-worker.js.map +3 -3
- package/dist/node.js +1 -1
- package/dist/node.js.map +2 -2
- package/dist/process-worker.js +100 -13
- package/dist/process-worker.js.map +3 -3
- package/dist/types/process/wasi/wasi-cred.d.ts +16 -0
- package/dist/types/process/wasi/wasi-files.d.ts +1 -0
- package/dist/types/process/wasi/wasi-host.d.ts +4 -1
- package/package.json +3 -3
package/dist/process-worker.js
CHANGED
|
@@ -2655,7 +2655,7 @@ var KERNEL_VERSION, OS_RELEASE;
|
|
|
2655
2655
|
var init_version = __esm({
|
|
2656
2656
|
"src/version.ts"() {
|
|
2657
2657
|
"use strict";
|
|
2658
|
-
KERNEL_VERSION = true ? "1.125.
|
|
2658
|
+
KERNEL_VERSION = true ? "1.125.8" : "0.0.0-dev";
|
|
2659
2659
|
OS_RELEASE = "6.0.0-slicc";
|
|
2660
2660
|
}
|
|
2661
2661
|
});
|
|
@@ -4143,7 +4143,7 @@ var init_kernel_streams = __esm({
|
|
|
4143
4143
|
};
|
|
4144
4144
|
}
|
|
4145
4145
|
ptsTarget(path, st) {
|
|
4146
|
-
if ((st?.rdev ?? 0)
|
|
4146
|
+
if ((st?.rdev ?? 0) < PTS_MAJOR << 8) return void 0;
|
|
4147
4147
|
const { lookupPath } = this.Fs;
|
|
4148
4148
|
const real = lookupPath?.call(this.Fs, path, { follow: true }).path;
|
|
4149
4149
|
return real !== void 0 && isPtyPath(real) ? real : void 0;
|
|
@@ -6860,7 +6860,7 @@ function pinnedIo2(bridge, handle, rewriting) {
|
|
|
6860
6860
|
} : {}
|
|
6861
6861
|
};
|
|
6862
6862
|
}
|
|
6863
|
-
var WasiError, FileBuffer, LocalFile, MAX_LINKS, MISS_TTL_MS, CACHE_CAP, FS_GEN, CRED_GEN, RING2, RING_SIZE2, SLOT2, FD_RING, FD_RING_SIZE, SHARED_IDS_BYTES, StatCache, SEEN_CAP, SeenAt, remember;
|
|
6863
|
+
var WasiError, FileBuffer, LocalFile, MAX_LINKS, MISS_TTL_MS, CACHE_CAP, FS_GEN, CRED_GEN, UMASK2, RING2, RING_SIZE2, SLOT2, FD_RING, FD_RING_SIZE, SHARED_IDS_BYTES, StatCache, SEEN_CAP, SeenAt, remember;
|
|
6864
6864
|
var init_wasi_files = __esm({
|
|
6865
6865
|
"src/process/wasi/wasi-files.ts"() {
|
|
6866
6866
|
"use strict";
|
|
@@ -7090,6 +7090,7 @@ var init_wasi_files = __esm({
|
|
|
7090
7090
|
CACHE_CAP = 8192;
|
|
7091
7091
|
FS_GEN = 4;
|
|
7092
7092
|
CRED_GEN = 5;
|
|
7093
|
+
UMASK2 = 6;
|
|
7093
7094
|
RING2 = 8;
|
|
7094
7095
|
RING_SIZE2 = 64;
|
|
7095
7096
|
SLOT2 = 3;
|
|
@@ -8176,7 +8177,7 @@ var init_slicc_sem = __esm({
|
|
|
8176
8177
|
});
|
|
8177
8178
|
|
|
8178
8179
|
// src/process/wasi/wasi-cred.ts
|
|
8179
|
-
var CredCache;
|
|
8180
|
+
var CredCache, KNOWN, LOCKED, UNGATED, UmaskCache;
|
|
8180
8181
|
var init_wasi_cred = __esm({
|
|
8181
8182
|
"src/process/wasi/wasi-cred.ts"() {
|
|
8182
8183
|
"use strict";
|
|
@@ -8214,6 +8215,69 @@ var init_wasi_cred = __esm({
|
|
|
8214
8215
|
return cred;
|
|
8215
8216
|
}
|
|
8216
8217
|
};
|
|
8218
|
+
KNOWN = 65536;
|
|
8219
|
+
LOCKED = 131072;
|
|
8220
|
+
UNGATED = { quiet: (fn) => fn(), deliver: () => {
|
|
8221
|
+
} };
|
|
8222
|
+
UmaskCache = class {
|
|
8223
|
+
mask;
|
|
8224
|
+
call;
|
|
8225
|
+
shared;
|
|
8226
|
+
signals;
|
|
8227
|
+
constructor(call2, shared, signals = UNGATED) {
|
|
8228
|
+
this.call = call2;
|
|
8229
|
+
this.shared = shared;
|
|
8230
|
+
this.signals = signals;
|
|
8231
|
+
}
|
|
8232
|
+
get() {
|
|
8233
|
+
const { shared } = this;
|
|
8234
|
+
if (!shared) {
|
|
8235
|
+
this.mask ??= this.call();
|
|
8236
|
+
return this.mask;
|
|
8237
|
+
}
|
|
8238
|
+
for (; ; ) {
|
|
8239
|
+
const seen = Atomics.load(shared, UMASK2);
|
|
8240
|
+
if (seen & LOCKED) Atomics.wait(shared, UMASK2, seen);
|
|
8241
|
+
else if (seen & KNOWN) return seen & 511;
|
|
8242
|
+
else {
|
|
8243
|
+
const mask = this.call();
|
|
8244
|
+
if (Atomics.compareExchange(shared, UMASK2, 0, mask | KNOWN) === 0) return mask;
|
|
8245
|
+
}
|
|
8246
|
+
}
|
|
8247
|
+
}
|
|
8248
|
+
set(mask) {
|
|
8249
|
+
try {
|
|
8250
|
+
return this.signals.quiet(() => this.change(mask));
|
|
8251
|
+
} finally {
|
|
8252
|
+
this.signals.deliver();
|
|
8253
|
+
}
|
|
8254
|
+
}
|
|
8255
|
+
change(mask) {
|
|
8256
|
+
const { shared } = this;
|
|
8257
|
+
if (!shared) {
|
|
8258
|
+
const old = this.call(mask);
|
|
8259
|
+
this.mask = mask & 511;
|
|
8260
|
+
return old;
|
|
8261
|
+
}
|
|
8262
|
+
const seen = this.lock(shared);
|
|
8263
|
+
let next2 = seen;
|
|
8264
|
+
try {
|
|
8265
|
+
const old = this.call(mask);
|
|
8266
|
+
next2 = mask & 511 | KNOWN;
|
|
8267
|
+
return old;
|
|
8268
|
+
} finally {
|
|
8269
|
+
Atomics.store(shared, UMASK2, next2);
|
|
8270
|
+
Atomics.notify(shared, UMASK2);
|
|
8271
|
+
}
|
|
8272
|
+
}
|
|
8273
|
+
lock(shared) {
|
|
8274
|
+
for (; ; ) {
|
|
8275
|
+
const seen = Atomics.load(shared, UMASK2);
|
|
8276
|
+
if (seen & LOCKED) Atomics.wait(shared, UMASK2, seen);
|
|
8277
|
+
else if (Atomics.compareExchange(shared, UMASK2, seen, seen | LOCKED) === seen) return seen;
|
|
8278
|
+
}
|
|
8279
|
+
}
|
|
8280
|
+
};
|
|
8217
8281
|
}
|
|
8218
8282
|
});
|
|
8219
8283
|
|
|
@@ -10129,6 +10193,7 @@ var init_wasi_host = __esm({
|
|
|
10129
10193
|
mem = new WasiMemory();
|
|
10130
10194
|
fds;
|
|
10131
10195
|
creds;
|
|
10196
|
+
umasks;
|
|
10132
10197
|
started = performance.now();
|
|
10133
10198
|
cache;
|
|
10134
10199
|
startCwd;
|
|
@@ -10146,7 +10211,8 @@ var init_wasi_host = __esm({
|
|
|
10146
10211
|
threadEntry;
|
|
10147
10212
|
linkedModules;
|
|
10148
10213
|
interrupted;
|
|
10149
|
-
quietly =
|
|
10214
|
+
quietly = UNGATED.quiet;
|
|
10215
|
+
deliverDue = UNGATED.deliver;
|
|
10150
10216
|
listening;
|
|
10151
10217
|
o;
|
|
10152
10218
|
constructor(o) {
|
|
@@ -10172,6 +10238,13 @@ var init_wasi_host = __esm({
|
|
|
10172
10238
|
() => this.o.kernel.call({ op: "proc-cred" }),
|
|
10173
10239
|
o.credGen ?? o.shared
|
|
10174
10240
|
);
|
|
10241
|
+
this.umasks = new UmaskCache(
|
|
10242
|
+
(mask) => this.o.kernel.call(
|
|
10243
|
+
mask === void 0 ? { op: "proc-umask" } : { op: "proc-umask", mask }
|
|
10244
|
+
),
|
|
10245
|
+
o.credGen ?? o.shared,
|
|
10246
|
+
{ quiet: (fn) => this.quietly(fn), deliver: () => this.deliverDue() }
|
|
10247
|
+
);
|
|
10175
10248
|
if (o.shared) this.fds.share(o.shared, true);
|
|
10176
10249
|
else if (o.forked) this.fds.restore(o.forked.fds, o.forked.cloexec);
|
|
10177
10250
|
else this.fds.setup(o.cwd, o.inherited ?? [], o.preopenRoot === true);
|
|
@@ -10180,8 +10253,11 @@ var init_wasi_host = __esm({
|
|
|
10180
10253
|
get cwd() {
|
|
10181
10254
|
return this.fds.cwd() ?? this.startCwd;
|
|
10182
10255
|
}
|
|
10256
|
+
umask(mask) {
|
|
10257
|
+
return mask === void 0 ? this.umasks.get() : this.umasks.set(mask);
|
|
10258
|
+
}
|
|
10183
10259
|
created(path, mode) {
|
|
10184
|
-
const umask = this.
|
|
10260
|
+
const umask = this.umasks.get();
|
|
10185
10261
|
if (umask !== DEFAULT_UMASK) this.o.fs.chmod(path, mode & ~umask);
|
|
10186
10262
|
}
|
|
10187
10263
|
sliccTtyImports() {
|
|
@@ -10311,7 +10387,7 @@ var init_wasi_host = __esm({
|
|
|
10311
10387
|
const raw = mem.string(p, l);
|
|
10312
10388
|
if (raw === "") throw new WasiError("ENOENT");
|
|
10313
10389
|
const path = dirfd === AT_FDCWD2 && !raw.startsWith("/") ? fds.resolve(3, `${this.cwd}/${raw}`) : at(dirfd, p, l);
|
|
10314
|
-
const umask = this.
|
|
10390
|
+
const umask = this.umasks.get();
|
|
10315
10391
|
const want = mode & 4095 & ~umask;
|
|
10316
10392
|
mkfifo.call(this.o.fs, path, want);
|
|
10317
10393
|
const made = (this.o.fs.lstat(path).mode ?? 0) & 4095;
|
|
@@ -10319,7 +10395,7 @@ var init_wasi_host = __esm({
|
|
|
10319
10395
|
return E.SUCCESS;
|
|
10320
10396
|
},
|
|
10321
10397
|
umask: (mask, out) => {
|
|
10322
|
-
const old = this.
|
|
10398
|
+
const old = this.umasks.set(mask);
|
|
10323
10399
|
mem.view().setUint32(out, old, true);
|
|
10324
10400
|
},
|
|
10325
10401
|
fd_mode: (fd, out) => void mem.view().setUint32(out, fdMode(fd), true),
|
|
@@ -11683,7 +11759,7 @@ function importsContext({
|
|
|
11683
11759
|
cwd: () => host.cwd,
|
|
11684
11760
|
fs,
|
|
11685
11761
|
fds,
|
|
11686
|
-
syscall: call2,
|
|
11762
|
+
syscall: (req) => req.op === "proc-umask" ? host.umask(req.mask) : call2(req),
|
|
11687
11763
|
net: network(raw, call2),
|
|
11688
11764
|
...processes(host, call2, tid !== MAIN_TID),
|
|
11689
11765
|
async: {
|
|
@@ -12259,17 +12335,24 @@ var init_wasi_procfs = __esm({
|
|
|
12259
12335
|
function ptsBridge(fs, call2) {
|
|
12260
12336
|
const open = () => call2({ op: "pty-list" });
|
|
12261
12337
|
const kernel = { json: (req) => call2(req) };
|
|
12262
|
-
const entry = (p) => {
|
|
12338
|
+
const entry = (p, known = open()) => {
|
|
12263
12339
|
const n = PTS_ENTRY.exec(p)?.[1];
|
|
12264
|
-
if (n === void 0 || !
|
|
12340
|
+
if (n === void 0 || !known.includes(Number(n))) throw syncError("ENOENT", p);
|
|
12265
12341
|
return devSync(kernel, devStat(p, true));
|
|
12266
12342
|
};
|
|
12343
|
+
const listedEntry = (name2, known) => {
|
|
12344
|
+
try {
|
|
12345
|
+
return [name2, entry(`${PTS}/${name2}`, known)];
|
|
12346
|
+
} catch {
|
|
12347
|
+
return [name2, null];
|
|
12348
|
+
}
|
|
12349
|
+
};
|
|
12267
12350
|
const dir = () => devSync(kernel, devStat(PTS, true));
|
|
12268
12351
|
const statOf = (p, real) => {
|
|
12269
12352
|
if (p === PTS) return dir();
|
|
12270
12353
|
return PTS_ENTRY.test(p) ? entry(p) : real();
|
|
12271
12354
|
};
|
|
12272
|
-
const names = (
|
|
12355
|
+
const names = (known = open()) => known.map(String).sort();
|
|
12273
12356
|
const over = {
|
|
12274
12357
|
stat: (p) => statOf(p, () => fs.stat(p)),
|
|
12275
12358
|
lstat: (p) => statOf(p, () => fs.lstat(p)),
|
|
@@ -12284,7 +12367,10 @@ function ptsBridge(fs, call2) {
|
|
|
12284
12367
|
return p === "/dev" && !listed.includes("pts") ? [...listed, "pts"] : listed;
|
|
12285
12368
|
},
|
|
12286
12369
|
readdirStat: (p) => {
|
|
12287
|
-
if (p === PTS)
|
|
12370
|
+
if (p === PTS) {
|
|
12371
|
+
const known = open();
|
|
12372
|
+
return names(known).map((name2) => listedEntry(name2, known));
|
|
12373
|
+
}
|
|
12288
12374
|
const listed = fs.readdirStat(p);
|
|
12289
12375
|
if (p !== "/dev" || listed.some(([name2]) => name2 === "pts")) return listed;
|
|
12290
12376
|
return [...listed, ["pts", dir()]];
|
|
@@ -14098,6 +14184,7 @@ function wireSignals(host, gate) {
|
|
|
14098
14184
|
host.interrupted = () => gate.interrupt();
|
|
14099
14185
|
host.raisedOnEntry = () => gate.raisedOnEntry();
|
|
14100
14186
|
host.quietly = (fn) => gate.quiet(fn);
|
|
14187
|
+
host.deliverDue = () => void gate.interrupt();
|
|
14101
14188
|
host.fds.restartable = () => gate.restartable();
|
|
14102
14189
|
}
|
|
14103
14190
|
function catchUpFirst(host, sync) {
|