@ai-ecoverse/slicc-kernel 1.176.0 → 1.176.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 +1 -1
- package/dist/kernel-worker.js +10 -4
- package/dist/kernel-worker.js.map +2 -2
- package/dist/node-process-worker.cjs +84 -19
- package/dist/node-process-worker.cjs.map +3 -3
- package/dist/node-process-worker.js +84 -19
- package/dist/node-process-worker.js.map +3 -3
- package/dist/node.js +10 -4
- package/dist/node.js.map +2 -2
- package/dist/process-worker.js +84 -19
- package/dist/process-worker.js.map +3 -3
- package/dist/types/realm/live-vfs-fs.d.ts +5 -0
- package/package.json +3 -3
|
@@ -2071,6 +2071,9 @@ function normalizePath(path) {
|
|
|
2071
2071
|
}
|
|
2072
2072
|
return `/${parts.join("/")}`;
|
|
2073
2073
|
}
|
|
2074
|
+
function resolvePath(base, path) {
|
|
2075
|
+
return normalizePath(path.startsWith("/") ? path : `${base}/${path}`);
|
|
2076
|
+
}
|
|
2074
2077
|
function inodeOf(path) {
|
|
2075
2078
|
let h1 = 3735928559;
|
|
2076
2079
|
let h2 = 1103547991;
|
|
@@ -7513,7 +7516,7 @@ var init_version = __esm({
|
|
|
7513
7516
|
"src/version.ts"() {
|
|
7514
7517
|
"use strict";
|
|
7515
7518
|
init_captured_globals();
|
|
7516
|
-
KERNEL_VERSION = true ? "1.176.
|
|
7519
|
+
KERNEL_VERSION = true ? "1.176.1" : "0.0.0-dev";
|
|
7517
7520
|
OS_RELEASE = "6.0.0-slicc";
|
|
7518
7521
|
}
|
|
7519
7522
|
});
|
|
@@ -9963,6 +9966,7 @@ function liveRoot(Fs, bridge) {
|
|
|
9963
9966
|
plugin.mounts.add(root.mount);
|
|
9964
9967
|
invalidateLiveVfs(Fs, plugin);
|
|
9965
9968
|
guardRenames(Fs);
|
|
9969
|
+
guardCreateParents(Fs, bridge);
|
|
9966
9970
|
guardKeptNodes(Fs, plugin.handled);
|
|
9967
9971
|
guardStaleNodes(Fs, plugin);
|
|
9968
9972
|
guardVanished(Fs);
|
|
@@ -10120,6 +10124,62 @@ function guardRenames(Fs) {
|
|
|
10120
10124
|
rename(from, to);
|
|
10121
10125
|
};
|
|
10122
10126
|
}
|
|
10127
|
+
function createParentRefreshCount() {
|
|
10128
|
+
return createParentRefresh;
|
|
10129
|
+
}
|
|
10130
|
+
function aboveOf(path) {
|
|
10131
|
+
const norm = path.replace(/\/+$/, "") || "/";
|
|
10132
|
+
if (norm === "/") return "/";
|
|
10133
|
+
const slash = norm.lastIndexOf("/");
|
|
10134
|
+
const parent = slash <= 0 ? "/" : norm.slice(0, slash);
|
|
10135
|
+
if (parent === "/") return "/";
|
|
10136
|
+
const above = parent.lastIndexOf("/");
|
|
10137
|
+
return above <= 0 ? "/" : parent.slice(0, above);
|
|
10138
|
+
}
|
|
10139
|
+
function absoluteCreatePath(Fs, path) {
|
|
10140
|
+
if (typeof path !== "string" || path.length === 0) return void 0;
|
|
10141
|
+
if (path.startsWith("/")) return normalizePath(path);
|
|
10142
|
+
const cwd = Fs.cwd?.();
|
|
10143
|
+
if (typeof cwd !== "string") return void 0;
|
|
10144
|
+
return resolvePath(cwd, path);
|
|
10145
|
+
}
|
|
10146
|
+
function refreshCreateParent(Fs, bridge, path) {
|
|
10147
|
+
const abs = absoluteCreatePath(Fs, path);
|
|
10148
|
+
if (abs === void 0) return;
|
|
10149
|
+
createParentRefresh++;
|
|
10150
|
+
try {
|
|
10151
|
+
bridge.readdir(aboveOf(abs));
|
|
10152
|
+
} catch {
|
|
10153
|
+
}
|
|
10154
|
+
}
|
|
10155
|
+
function oncePastStaleParent(Fs, bridge, path, op) {
|
|
10156
|
+
try {
|
|
10157
|
+
return op();
|
|
10158
|
+
} catch (err) {
|
|
10159
|
+
if (err.errno !== wasiErrno("ENOENT")) throw err;
|
|
10160
|
+
refreshCreateParent(Fs, bridge, path);
|
|
10161
|
+
return op();
|
|
10162
|
+
}
|
|
10163
|
+
}
|
|
10164
|
+
function guardCreateParents(Fs, bridge) {
|
|
10165
|
+
if (Fs.sliccCreateParent) return;
|
|
10166
|
+
Fs.sliccCreateParent = true;
|
|
10167
|
+
const mkdir = Fs.mkdir?.bind(Fs);
|
|
10168
|
+
if (mkdir) {
|
|
10169
|
+
Fs.mkdir = (path, mode) => oncePastStaleParent(Fs, bridge, path, () => mkdir(path, mode));
|
|
10170
|
+
}
|
|
10171
|
+
const symlink = Fs.symlink?.bind(Fs);
|
|
10172
|
+
if (symlink) {
|
|
10173
|
+
Fs.symlink = (target, path) => oncePastStaleParent(Fs, bridge, path, () => symlink(target, path));
|
|
10174
|
+
}
|
|
10175
|
+
const open = Fs.open?.bind(Fs);
|
|
10176
|
+
if (open) {
|
|
10177
|
+
Fs.open = (path, flags, mode) => {
|
|
10178
|
+
if ((flags & O_CREAT) === 0) return open(path, flags, mode);
|
|
10179
|
+
return oncePastStaleParent(Fs, bridge, path, () => open(path, flags, mode));
|
|
10180
|
+
};
|
|
10181
|
+
}
|
|
10182
|
+
}
|
|
10123
10183
|
function idOf3(value2) {
|
|
10124
10184
|
return value2 === -1 || value2 === 4294967295 ? void 0 : value2 >>> 0;
|
|
10125
10185
|
}
|
|
@@ -10224,7 +10284,7 @@ function readingLinks(Fs) {
|
|
|
10224
10284
|
}
|
|
10225
10285
|
};
|
|
10226
10286
|
}
|
|
10227
|
-
var S_IFDIR, S_IFREG, S_IFLNK2, S_IFSOCK, S_IFIFO2, S_IFMT2, PERM_MASK, DEFAULT_DIR_PERM, UMASK2, SEEK_CUR2, SEEK_END2, EARLY_WHOLE_FILE, O_APPEND4, O_ACCMODE, O_TRUNC, O_PATH, stale, opening, O_NOFOLLOW, RESOLVING;
|
|
10287
|
+
var S_IFDIR, S_IFREG, S_IFLNK2, S_IFSOCK, S_IFIFO2, S_IFMT2, PERM_MASK, DEFAULT_DIR_PERM, UMASK2, SEEK_CUR2, SEEK_END2, EARLY_WHOLE_FILE, O_APPEND4, O_ACCMODE, O_TRUNC, O_PATH, stale, opening, O_NOFOLLOW, RESOLVING, O_CREAT, createParentRefresh;
|
|
10228
10288
|
var init_live_vfs_fs = __esm({
|
|
10229
10289
|
"src/realm/live-vfs-fs.ts"() {
|
|
10230
10290
|
"use strict";
|
|
@@ -10264,6 +10324,8 @@ var init_live_vfs_fs = __esm({
|
|
|
10264
10324
|
["readlink", () => false],
|
|
10265
10325
|
["truncate", () => true]
|
|
10266
10326
|
];
|
|
10327
|
+
O_CREAT = 64;
|
|
10328
|
+
createParentRefresh = 0;
|
|
10267
10329
|
}
|
|
10268
10330
|
});
|
|
10269
10331
|
|
|
@@ -10628,7 +10690,7 @@ function kernelUmask(imports, deps) {
|
|
|
10628
10690
|
const { glue } = deps;
|
|
10629
10691
|
wrapImport(imports, "openat", glue, (openat) => (dirfd, path, flags, varargs) => {
|
|
10630
10692
|
const memory = deps.memory();
|
|
10631
|
-
if (flags &
|
|
10693
|
+
if (flags & O_CREAT2 && varargs && memory) new capturedInt32Array(memory.buffer)[varargs >> 2] &= ~umask;
|
|
10632
10694
|
return openat(dirfd, path, flags, varargs);
|
|
10633
10695
|
});
|
|
10634
10696
|
wrapImport(
|
|
@@ -11060,7 +11122,7 @@ function useMounts(Fs, env = {}, live = false) {
|
|
|
11060
11122
|
const seed = (path, text) => {
|
|
11061
11123
|
let stream;
|
|
11062
11124
|
try {
|
|
11063
|
-
stream = open(path, O_WRONLY5 |
|
|
11125
|
+
stream = open(path, O_WRONLY5 | O_CREAT2 | O_EXCL, 420);
|
|
11064
11126
|
} catch {
|
|
11065
11127
|
return;
|
|
11066
11128
|
}
|
|
@@ -11074,8 +11136,8 @@ function useMounts(Fs, env = {}, live = false) {
|
|
|
11074
11136
|
Fs.open = (path, flags, mode) => {
|
|
11075
11137
|
const instead = backing[path];
|
|
11076
11138
|
const text = defaults[path];
|
|
11077
|
-
if (text !== void 0 && (flags & (O_ACCMODE3 |
|
|
11078
|
-
if (!instead || (flags & (O_ACCMODE3 |
|
|
11139
|
+
if (text !== void 0 && (flags & (O_ACCMODE3 | O_CREAT2)) !== 0) seed(path, text);
|
|
11140
|
+
if (!instead || (flags & (O_ACCMODE3 | O_CREAT2)) !== 0) return open(path, flags, mode);
|
|
11079
11141
|
try {
|
|
11080
11142
|
return open(path, flags, mode);
|
|
11081
11143
|
} catch (e) {
|
|
@@ -11192,7 +11254,7 @@ function devCreations(imports, fs, memory, glue) {
|
|
|
11192
11254
|
imports,
|
|
11193
11255
|
"openat",
|
|
11194
11256
|
glue,
|
|
11195
|
-
(own2) => (dirfd, path, flags, varargs) => flags &
|
|
11257
|
+
(own2) => (dirfd, path, flags, varargs) => flags & O_CREAT2 && check(dirfd, path) || own2(dirfd, path, flags, varargs),
|
|
11196
11258
|
true
|
|
11197
11259
|
);
|
|
11198
11260
|
wrapImport(
|
|
@@ -11268,7 +11330,7 @@ function linuxDevices(Fs, owners = true) {
|
|
|
11268
11330
|
}
|
|
11269
11331
|
}
|
|
11270
11332
|
}
|
|
11271
|
-
var O_CLOEXEC, FD_CLOEXEC, F_DUPFD, F_GETFD, F_SETFD, F_GETFL, F_DUPFD_CLOEXEC, tracked, IMPORT_NAMES, EBADF, AT_SYMLINK_NOFOLLOW2, EMSCRIPTEN_EPERM, O_PATH2, LITERALS, UTIME_NOW, UTIME_OMIT, PROT_WRITE, MAP_PRIVATE, MAP_TYPE, O_WRONLY5, MAP_ALIGN, DIR_MODE, LINK_MODE, CHAR_DEVICE, O_TRUNC2, S_IFMT_BITS, S_IFIFO_BITS, REFUSED, OWN_ERRORS, O_ACCMODE3,
|
|
11333
|
+
var O_CLOEXEC, FD_CLOEXEC, F_DUPFD, F_GETFD, F_SETFD, F_GETFL, F_DUPFD_CLOEXEC, tracked, IMPORT_NAMES, EBADF, AT_SYMLINK_NOFOLLOW2, EMSCRIPTEN_EPERM, O_PATH2, LITERALS, UTIME_NOW, UTIME_OMIT, PROT_WRITE, MAP_PRIVATE, MAP_TYPE, O_WRONLY5, MAP_ALIGN, DIR_MODE, LINK_MODE, CHAR_DEVICE, O_TRUNC2, S_IFMT_BITS, S_IFIFO_BITS, REFUSED, OWN_ERRORS, O_ACCMODE3, O_CREAT2, O_EXCL, field, pinnedRoot, rootKind, NAME, AT_FDCWD2, AT_EACCESS2, W_ACCESS, X_ACCESS, AT_SYMLINK_FOLLOW, UTS_FIELD, CHAR_DEVICES, DEVICE_MODES;
|
|
11272
11334
|
var init_process_fds = __esm({
|
|
11273
11335
|
"src/process/process-fds.ts"() {
|
|
11274
11336
|
"use strict";
|
|
@@ -11335,7 +11397,7 @@ var init_process_fds = __esm({
|
|
|
11335
11397
|
REFUSED = new capturedSet([wasiErrno("EACCES"), wasiErrno("EPERM")]);
|
|
11336
11398
|
OWN_ERRORS = 128 | 131072;
|
|
11337
11399
|
O_ACCMODE3 = 3;
|
|
11338
|
-
|
|
11400
|
+
O_CREAT2 = 64;
|
|
11339
11401
|
O_EXCL = 128;
|
|
11340
11402
|
field = (text) => (text || "none").replace(/[\s\\]/g, (c) => `\\${c.charCodeAt(0).toString(8).padStart(3, "0")}`);
|
|
11341
11403
|
rootKind = () => capturedGlobalThis.navigator?.storage ? "opfs" : "memory";
|
|
@@ -11766,6 +11828,7 @@ var init_procfs = __esm({
|
|
|
11766
11828
|
init_captured_globals();
|
|
11767
11829
|
init_cred();
|
|
11768
11830
|
init_proc_info();
|
|
11831
|
+
init_live_vfs_fs();
|
|
11769
11832
|
init_version();
|
|
11770
11833
|
init_process_fds();
|
|
11771
11834
|
HZ = 100;
|
|
@@ -11794,6 +11857,8 @@ var init_procfs = __esm({
|
|
|
11794
11857
|
slicc_opfs_calls: (listing2) => `${listing2.opfsCalls ?? 0}
|
|
11795
11858
|
`,
|
|
11796
11859
|
slicc_opfs_ops: (listing2) => `${listing2.opfsOps ?? 0}
|
|
11860
|
+
`,
|
|
11861
|
+
slicc_create_parent_refresh: (_listing) => `${createParentRefreshCount()}
|
|
11797
11862
|
`,
|
|
11798
11863
|
slicc_meta_transactions: ({ meta }) => `${meta?.reads ?? 0} ${meta?.writes ?? 0}
|
|
11799
11864
|
`,
|
|
@@ -13317,7 +13382,7 @@ function datesOf(real) {
|
|
|
13317
13382
|
dates[key] = new capturedDate(value2);
|
|
13318
13383
|
return dates;
|
|
13319
13384
|
}
|
|
13320
|
-
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, EMBEDDER_PATH2, DEVICE_INO,
|
|
13385
|
+
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, EMBEDDER_PATH2, DEVICE_INO, O_CREAT3, O_EXCL2, O_NOCTTY, O_TRUNC3, O_DIRECTORY, KILLED_BY_SIGPIPE, ProcessExit, SyscallError, KernelStreams;
|
|
13321
13386
|
var init_kernel_streams = __esm({
|
|
13322
13387
|
"src/process/kernel-streams.ts"() {
|
|
13323
13388
|
"use strict";
|
|
@@ -13350,7 +13415,7 @@ var init_kernel_streams = __esm({
|
|
|
13350
13415
|
CLIPBOARD_PATH2 = "/dev/clipboard";
|
|
13351
13416
|
EMBEDDER_PATH2 = "/dev/embedder";
|
|
13352
13417
|
DEVICE_INO = { 250: 1, 251: 2, 252: 3 };
|
|
13353
|
-
|
|
13418
|
+
O_CREAT3 = 64;
|
|
13354
13419
|
O_EXCL2 = 128;
|
|
13355
13420
|
O_NOCTTY = 256;
|
|
13356
13421
|
O_TRUNC3 = 512;
|
|
@@ -13734,7 +13799,7 @@ var init_kernel_streams = __esm({
|
|
|
13734
13799
|
}
|
|
13735
13800
|
}
|
|
13736
13801
|
refuseExclusiveLink(path, flags) {
|
|
13737
|
-
if ((flags & (
|
|
13802
|
+
if ((flags & (O_CREAT3 | O_EXCL2)) !== (O_CREAT3 | O_EXCL2)) return;
|
|
13738
13803
|
let mode = 0;
|
|
13739
13804
|
try {
|
|
13740
13805
|
mode = this.Fs.stat?.(path, true)?.mode ?? 0;
|
|
@@ -13777,7 +13842,7 @@ var init_kernel_streams = __esm({
|
|
|
13777
13842
|
vessel(open, kfd, at, terminal) {
|
|
13778
13843
|
let stream;
|
|
13779
13844
|
try {
|
|
13780
|
-
stream = open("/dev/null", at.flags & ~(
|
|
13845
|
+
stream = open("/dev/null", at.flags & ~(O_CREAT3 | O_EXCL2 | O_TRUNC3), at.mode);
|
|
13781
13846
|
} catch (e) {
|
|
13782
13847
|
this.sys.close(kfd);
|
|
13783
13848
|
throw e;
|
|
@@ -14095,7 +14160,7 @@ function placeholder(Fs, streams2, entry) {
|
|
|
14095
14160
|
if (entry.kind === "tty") return Fs.open("/dev/tty", O_RDWR4);
|
|
14096
14161
|
if (entry.kind === "stream" || DEVICE_KINDS.has(entry.kind)) return Fs.open("/dev/null", access);
|
|
14097
14162
|
Fs.mkdirTree(PLACEHOLDER_DIR);
|
|
14098
|
-
return Fs.open(`${PLACEHOLDER_DIR}/${entry.fd}`, access |
|
|
14163
|
+
return Fs.open(`${PLACEHOLDER_DIR}/${entry.fd}`, access | O_CREAT4);
|
|
14099
14164
|
}
|
|
14100
14165
|
function asFifo(stream, streams2, identity) {
|
|
14101
14166
|
const inos = streamInos.get(streams2) ?? new capturedMap();
|
|
@@ -14137,7 +14202,7 @@ function restoreForkedStreams(Fs, streams2, table) {
|
|
|
14137
14202
|
} else {
|
|
14138
14203
|
const placed = place(
|
|
14139
14204
|
Fs,
|
|
14140
|
-
Fs.open(entry.path, entry.flags & ~(
|
|
14205
|
+
Fs.open(entry.path, entry.flags & ~(O_CREAT4 | O_EXCL3 | O_TRUNC4)),
|
|
14141
14206
|
entry.fd
|
|
14142
14207
|
);
|
|
14143
14208
|
setCloseOnExec(placed, (entry.flags & O_CLOEXEC) !== 0);
|
|
@@ -14146,7 +14211,7 @@ function restoreForkedStreams(Fs, streams2, table) {
|
|
|
14146
14211
|
}
|
|
14147
14212
|
}
|
|
14148
14213
|
}
|
|
14149
|
-
var O_RDWR4, O_ACCMODE4,
|
|
14214
|
+
var O_RDWR4, O_ACCMODE4, O_CREAT4, O_EXCL3, O_TRUNC4, PLACEHOLDER_DIR, NAMED_DEVICES, DEVICE_KINDS, ACCESS, DEVICES2, FIFO_MODE, nextStreamIno, streamInos;
|
|
14150
14215
|
var init_process_fork = __esm({
|
|
14151
14216
|
"src/process/process-fork.ts"() {
|
|
14152
14217
|
"use strict";
|
|
@@ -14154,7 +14219,7 @@ var init_process_fork = __esm({
|
|
|
14154
14219
|
init_process_fds();
|
|
14155
14220
|
O_RDWR4 = 2;
|
|
14156
14221
|
O_ACCMODE4 = 3;
|
|
14157
|
-
|
|
14222
|
+
O_CREAT4 = 64;
|
|
14158
14223
|
O_EXCL3 = 128;
|
|
14159
14224
|
O_TRUNC4 = 512;
|
|
14160
14225
|
PLACEHOLDER_DIR = "/dev/slicc-fd";
|
|
@@ -16079,7 +16144,7 @@ function signalNumber(signal) {
|
|
|
16079
16144
|
}
|
|
16080
16145
|
return SIG[name2];
|
|
16081
16146
|
}
|
|
16082
|
-
function
|
|
16147
|
+
function resolvePath2(cwd, path) {
|
|
16083
16148
|
const parts = [];
|
|
16084
16149
|
for (const part of (path.startsWith("/") ? path : `${cwd}/${path}`).split("/")) {
|
|
16085
16150
|
if (part === "" || part === ".") continue;
|
|
@@ -16411,7 +16476,7 @@ function createContext(o) {
|
|
|
16411
16476
|
const pending = new capturedSet();
|
|
16412
16477
|
const random2 = o.random ?? cryptoRandom;
|
|
16413
16478
|
let held2;
|
|
16414
|
-
const resolve2 = (path) =>
|
|
16479
|
+
const resolve2 = (path) => resolvePath2(cwdFor(o.cwd, held2, path), path);
|
|
16415
16480
|
const tryDev = (abs) => resolveDevAsync(kernel, abs);
|
|
16416
16481
|
const clean = cleanOf(o.changes);
|
|
16417
16482
|
let exiting;
|