@ai-ecoverse/slicc-kernel 1.103.1 → 1.103.3
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 +29 -3
- package/dist/kernel-worker.js.map +3 -3
- package/dist/node-process-worker.js +123 -84
- package/dist/node-process-worker.js.map +4 -4
- package/dist/node.js +29 -3
- package/dist/node.js.map +3 -3
- package/dist/process-worker.js +45 -6
- package/dist/process-worker.js.map +3 -3
- package/dist/types/kernel/children.d.ts +1 -0
- package/dist/types/kernel/process.d.ts +1 -0
- package/dist/types/kernel/run-child.d.ts +1 -0
- package/dist/types/launcher.d.ts +1 -0
- package/dist/types/process/wasi/wasi-files.d.ts +1 -1
- package/dist/types/realm/emscripten-vfs-hook.d.ts +1 -0
- package/package.json +1 -1
|
@@ -563,6 +563,84 @@ var init_ranged = __esm({
|
|
|
563
563
|
}
|
|
564
564
|
});
|
|
565
565
|
|
|
566
|
+
// src/realm/sync-fs-wire.ts
|
|
567
|
+
function parseSyncFsUsage(json2) {
|
|
568
|
+
const u = json2;
|
|
569
|
+
if (!u || typeof u.quota !== "number" || typeof u.usage !== "number") return null;
|
|
570
|
+
return { quota: u.quota, usage: u.usage };
|
|
571
|
+
}
|
|
572
|
+
function syncError(code2, label) {
|
|
573
|
+
return Object.assign(new Error(`${code2}: ${label}`), { code: code2 });
|
|
574
|
+
}
|
|
575
|
+
function parseSyncFsStat(json2) {
|
|
576
|
+
const s = json2;
|
|
577
|
+
if (!s || typeof s.isFile !== "boolean" || typeof s.isDirectory !== "boolean" || typeof s.size !== "number") {
|
|
578
|
+
return null;
|
|
579
|
+
}
|
|
580
|
+
return {
|
|
581
|
+
isFile: s.isFile,
|
|
582
|
+
isDirectory: s.isDirectory,
|
|
583
|
+
isSymbolicLink: s.isSymbolicLink,
|
|
584
|
+
...s.isSocket === true ? { isSocket: true } : {},
|
|
585
|
+
size: s.size,
|
|
586
|
+
...typeof s.mode === "number" ? { mode: s.mode } : {},
|
|
587
|
+
...typeof s.mtimeMs === "number" ? { mtimeMs: s.mtimeMs } : {},
|
|
588
|
+
...typeof s.atimeMs === "number" ? { atimeMs: s.atimeMs } : {},
|
|
589
|
+
...typeof s.ctimeMs === "number" ? { ctimeMs: s.ctimeMs } : {},
|
|
590
|
+
...typeof s.ino === "number" ? { ino: s.ino } : {},
|
|
591
|
+
...typeof s.nlink === "number" ? { nlink: s.nlink } : {},
|
|
592
|
+
...typeof s.dev === "number" ? { dev: s.dev } : {},
|
|
593
|
+
...s.readonly === true ? { readonly: true } : {},
|
|
594
|
+
...typeof s.maxFile === "number" ? { maxFile: s.maxFile } : {},
|
|
595
|
+
...s.ranged === true ? { ranged: true } : {},
|
|
596
|
+
...s.linkable === true ? { linkable: true } : {},
|
|
597
|
+
...typeof s.version === "string" ? { version: s.version } : {},
|
|
598
|
+
...typeof s.uid === "number" ? { uid: s.uid } : {},
|
|
599
|
+
...typeof s.gid === "number" ? { gid: s.gid } : {}
|
|
600
|
+
};
|
|
601
|
+
}
|
|
602
|
+
var SYNC_FS_OPS, HOLD_READ, HOLD_WRITE, HOLD_CREATED, SYNC_FS_REQUEST_TIMEOUT_MS;
|
|
603
|
+
var init_sync_fs_wire = __esm({
|
|
604
|
+
"src/realm/sync-fs-wire.ts"() {
|
|
605
|
+
"use strict";
|
|
606
|
+
SYNC_FS_OPS = [
|
|
607
|
+
"read",
|
|
608
|
+
"write",
|
|
609
|
+
"exists",
|
|
610
|
+
"stat",
|
|
611
|
+
"lstat",
|
|
612
|
+
"readdir",
|
|
613
|
+
"readdir-stat",
|
|
614
|
+
"mkdir",
|
|
615
|
+
"rm",
|
|
616
|
+
"rename",
|
|
617
|
+
"link",
|
|
618
|
+
"unlink",
|
|
619
|
+
"rmdir",
|
|
620
|
+
"symlink",
|
|
621
|
+
"readlink",
|
|
622
|
+
"chmod",
|
|
623
|
+
"utimes",
|
|
624
|
+
"lutimes",
|
|
625
|
+
"statfs",
|
|
626
|
+
"hold",
|
|
627
|
+
"create",
|
|
628
|
+
"kept",
|
|
629
|
+
"pread",
|
|
630
|
+
"pwrite",
|
|
631
|
+
"append",
|
|
632
|
+
"truncate",
|
|
633
|
+
"chown",
|
|
634
|
+
"lchown",
|
|
635
|
+
"access"
|
|
636
|
+
];
|
|
637
|
+
HOLD_READ = 4;
|
|
638
|
+
HOLD_WRITE = 8;
|
|
639
|
+
HOLD_CREATED = 16;
|
|
640
|
+
SYNC_FS_REQUEST_TIMEOUT_MS = 25e3;
|
|
641
|
+
}
|
|
642
|
+
});
|
|
643
|
+
|
|
566
644
|
// src/process/wasi/wasi-files.ts
|
|
567
645
|
function normalize(path) {
|
|
568
646
|
const out = [];
|
|
@@ -653,15 +731,37 @@ function cachingBridge(bridge, now = () => performance.now(), shared) {
|
|
|
653
731
|
const blind = shared !== void 0 && shared.length * 4 < SHARED_IDS_BYTES;
|
|
654
732
|
const cache = new StatCache(blind ? void 0 : shared);
|
|
655
733
|
const { stats, lstats } = cache;
|
|
734
|
+
const view = bridge.changes;
|
|
735
|
+
const live = (miss, path) => miss.until > now() && (view === void 0 || miss.gen === void 0 || !view.changedSince(miss.gen, path).changed);
|
|
736
|
+
const seenAt = /* @__PURE__ */ new Map();
|
|
737
|
+
const gone = (path) => {
|
|
738
|
+
for (let at = path.lastIndexOf("/"); at > 0; at = path.lastIndexOf("/", at - 1)) {
|
|
739
|
+
const up = path.slice(0, at);
|
|
740
|
+
for (const map of [lstats, stats]) {
|
|
741
|
+
const hit = map.get(up);
|
|
742
|
+
const code2 = hit && "until" in hit ? hit.error.code : void 0;
|
|
743
|
+
if (hit && "until" in hit && code2 === "ENOENT" && live(hit, up)) return hit;
|
|
744
|
+
}
|
|
745
|
+
}
|
|
746
|
+
return void 0;
|
|
747
|
+
};
|
|
656
748
|
const cached = (map, path, get) => {
|
|
657
749
|
if (blind) return get();
|
|
658
750
|
cache.fresh();
|
|
659
751
|
let hit = map.get(path);
|
|
660
|
-
if (hit === void 0 || "until" in hit && hit
|
|
752
|
+
if (hit === void 0 || "until" in hit && !live(hit, path)) {
|
|
753
|
+
const missing2 = gone(path);
|
|
754
|
+
if (missing2) throw missing2.error;
|
|
755
|
+
const gen = view?.now();
|
|
661
756
|
try {
|
|
662
757
|
hit = get();
|
|
758
|
+
if (gen !== void 0 && map === lstats) seenAt.set(path, gen);
|
|
663
759
|
} catch (e) {
|
|
664
|
-
hit = {
|
|
760
|
+
hit = {
|
|
761
|
+
error: e,
|
|
762
|
+
until: now() + MISS_TTL_MS,
|
|
763
|
+
...gen !== void 0 ? { gen } : {}
|
|
764
|
+
};
|
|
665
765
|
}
|
|
666
766
|
cache.put(map, path, hit);
|
|
667
767
|
}
|
|
@@ -717,7 +817,15 @@ function cachingBridge(bridge, now = () => performance.now(), shared) {
|
|
|
717
817
|
}
|
|
718
818
|
return list;
|
|
719
819
|
},
|
|
720
|
-
readlink: (p) =>
|
|
820
|
+
readlink: (p) => {
|
|
821
|
+
const known = blind ? void 0 : (cache.fresh(), lstats.get(p));
|
|
822
|
+
const gen = seenAt.get(p);
|
|
823
|
+
const current = view !== void 0 && gen !== void 0 && !view.changedSince(gen, p).changed;
|
|
824
|
+
if (known && current && !("until" in known) && !known.isSymbolicLink) {
|
|
825
|
+
throw syncError("EINVAL", `'${p}' is not a symbolic link`);
|
|
826
|
+
}
|
|
827
|
+
return bridge.readlink(p);
|
|
828
|
+
},
|
|
721
829
|
stat: (p) => cached(stats, p, () => bridge.stat(p)),
|
|
722
830
|
lstat: (p) => cached(lstats, p, () => bridge.lstat(p)),
|
|
723
831
|
exists: (p) => {
|
|
@@ -784,6 +892,7 @@ var init_wasi_files = __esm({
|
|
|
784
892
|
"src/process/wasi/wasi-files.ts"() {
|
|
785
893
|
"use strict";
|
|
786
894
|
init_ranged();
|
|
895
|
+
init_sync_fs_wire();
|
|
787
896
|
WasiError = class extends Error {
|
|
788
897
|
code;
|
|
789
898
|
constructor(code2) {
|
|
@@ -1631,84 +1740,6 @@ var init_fd_table = __esm({
|
|
|
1631
1740
|
}
|
|
1632
1741
|
});
|
|
1633
1742
|
|
|
1634
|
-
// src/realm/sync-fs-wire.ts
|
|
1635
|
-
function parseSyncFsUsage(json2) {
|
|
1636
|
-
const u = json2;
|
|
1637
|
-
if (!u || typeof u.quota !== "number" || typeof u.usage !== "number") return null;
|
|
1638
|
-
return { quota: u.quota, usage: u.usage };
|
|
1639
|
-
}
|
|
1640
|
-
function syncError(code2, label) {
|
|
1641
|
-
return Object.assign(new Error(`${code2}: ${label}`), { code: code2 });
|
|
1642
|
-
}
|
|
1643
|
-
function parseSyncFsStat(json2) {
|
|
1644
|
-
const s = json2;
|
|
1645
|
-
if (!s || typeof s.isFile !== "boolean" || typeof s.isDirectory !== "boolean" || typeof s.size !== "number") {
|
|
1646
|
-
return null;
|
|
1647
|
-
}
|
|
1648
|
-
return {
|
|
1649
|
-
isFile: s.isFile,
|
|
1650
|
-
isDirectory: s.isDirectory,
|
|
1651
|
-
isSymbolicLink: s.isSymbolicLink,
|
|
1652
|
-
...s.isSocket === true ? { isSocket: true } : {},
|
|
1653
|
-
size: s.size,
|
|
1654
|
-
...typeof s.mode === "number" ? { mode: s.mode } : {},
|
|
1655
|
-
...typeof s.mtimeMs === "number" ? { mtimeMs: s.mtimeMs } : {},
|
|
1656
|
-
...typeof s.atimeMs === "number" ? { atimeMs: s.atimeMs } : {},
|
|
1657
|
-
...typeof s.ctimeMs === "number" ? { ctimeMs: s.ctimeMs } : {},
|
|
1658
|
-
...typeof s.ino === "number" ? { ino: s.ino } : {},
|
|
1659
|
-
...typeof s.nlink === "number" ? { nlink: s.nlink } : {},
|
|
1660
|
-
...typeof s.dev === "number" ? { dev: s.dev } : {},
|
|
1661
|
-
...s.readonly === true ? { readonly: true } : {},
|
|
1662
|
-
...typeof s.maxFile === "number" ? { maxFile: s.maxFile } : {},
|
|
1663
|
-
...s.ranged === true ? { ranged: true } : {},
|
|
1664
|
-
...s.linkable === true ? { linkable: true } : {},
|
|
1665
|
-
...typeof s.version === "string" ? { version: s.version } : {},
|
|
1666
|
-
...typeof s.uid === "number" ? { uid: s.uid } : {},
|
|
1667
|
-
...typeof s.gid === "number" ? { gid: s.gid } : {}
|
|
1668
|
-
};
|
|
1669
|
-
}
|
|
1670
|
-
var SYNC_FS_OPS, HOLD_READ, HOLD_WRITE, HOLD_CREATED, SYNC_FS_REQUEST_TIMEOUT_MS;
|
|
1671
|
-
var init_sync_fs_wire = __esm({
|
|
1672
|
-
"src/realm/sync-fs-wire.ts"() {
|
|
1673
|
-
"use strict";
|
|
1674
|
-
SYNC_FS_OPS = [
|
|
1675
|
-
"read",
|
|
1676
|
-
"write",
|
|
1677
|
-
"exists",
|
|
1678
|
-
"stat",
|
|
1679
|
-
"lstat",
|
|
1680
|
-
"readdir",
|
|
1681
|
-
"readdir-stat",
|
|
1682
|
-
"mkdir",
|
|
1683
|
-
"rm",
|
|
1684
|
-
"rename",
|
|
1685
|
-
"link",
|
|
1686
|
-
"unlink",
|
|
1687
|
-
"rmdir",
|
|
1688
|
-
"symlink",
|
|
1689
|
-
"readlink",
|
|
1690
|
-
"chmod",
|
|
1691
|
-
"utimes",
|
|
1692
|
-
"lutimes",
|
|
1693
|
-
"statfs",
|
|
1694
|
-
"hold",
|
|
1695
|
-
"create",
|
|
1696
|
-
"kept",
|
|
1697
|
-
"pread",
|
|
1698
|
-
"pwrite",
|
|
1699
|
-
"append",
|
|
1700
|
-
"truncate",
|
|
1701
|
-
"chown",
|
|
1702
|
-
"lchown",
|
|
1703
|
-
"access"
|
|
1704
|
-
];
|
|
1705
|
-
HOLD_READ = 4;
|
|
1706
|
-
HOLD_WRITE = 8;
|
|
1707
|
-
HOLD_CREATED = 16;
|
|
1708
|
-
SYNC_FS_REQUEST_TIMEOUT_MS = 25e3;
|
|
1709
|
-
}
|
|
1710
|
-
});
|
|
1711
|
-
|
|
1712
1743
|
// src/process/wasi/wasi-fds.ts
|
|
1713
1744
|
function stdioAlias(path) {
|
|
1714
1745
|
const m = /^\/dev\/(?:(stdin)|(stdout)|(stderr)|fd\/(\d+))$/.exec(path);
|
|
@@ -4300,7 +4331,9 @@ var init_wasix_process = __esm({
|
|
|
4300
4331
|
});
|
|
4301
4332
|
}
|
|
4302
4333
|
spawn(req, exec = false) {
|
|
4303
|
-
const
|
|
4334
|
+
const ops = req.ops ?? [];
|
|
4335
|
+
const { stdio, inherit, cwd, opened: opened2 } = this.childFds(ops);
|
|
4336
|
+
const moved = ops.some((op) => op.cmd === "chdir" || op.cmd === "fchdir");
|
|
4304
4337
|
try {
|
|
4305
4338
|
const spawn = {
|
|
4306
4339
|
op: "proc-spawn",
|
|
@@ -4308,6 +4341,7 @@ var init_wasix_process = __esm({
|
|
|
4308
4341
|
argv: req.argv.length > 0 ? req.argv : [req.name],
|
|
4309
4342
|
env: req.env ?? this.environment(),
|
|
4310
4343
|
cwd,
|
|
4344
|
+
...moved ? { chdir: true } : {},
|
|
4311
4345
|
stdio,
|
|
4312
4346
|
inherit,
|
|
4313
4347
|
...exec ? { exec } : {},
|
|
@@ -4590,6 +4624,7 @@ function processes(host, call2, inThread) {
|
|
|
4590
4624
|
argv: o.argv,
|
|
4591
4625
|
env: o.env ?? { ...host.o.env },
|
|
4592
4626
|
cwd: o.cwd ?? host.cwd,
|
|
4627
|
+
...o.cwd !== void 0 ? { chdir: true } : {},
|
|
4593
4628
|
stdio,
|
|
4594
4629
|
...inThread ? {} : { restart: true }
|
|
4595
4630
|
};
|
|
@@ -4781,7 +4816,7 @@ var KERNEL_VERSION, OS_RELEASE;
|
|
|
4781
4816
|
var init_version = __esm({
|
|
4782
4817
|
"src/version.ts"() {
|
|
4783
4818
|
"use strict";
|
|
4784
|
-
KERNEL_VERSION = true ? "1.103.
|
|
4819
|
+
KERNEL_VERSION = true ? "1.103.3" : "0.0.0-dev";
|
|
4785
4820
|
OS_RELEASE = "6.0.0-slicc";
|
|
4786
4821
|
}
|
|
4787
4822
|
});
|
|
@@ -5091,6 +5126,7 @@ function childOps(kernel, io, defaults, sync) {
|
|
|
5091
5126
|
...named,
|
|
5092
5127
|
env: { ...o.env ?? defaults.env },
|
|
5093
5128
|
cwd: o.cwd ?? defaults.cwd,
|
|
5129
|
+
...o.cwd !== void 0 ? { chdir: true } : {},
|
|
5094
5130
|
stdio,
|
|
5095
5131
|
...group,
|
|
5096
5132
|
...death
|
|
@@ -8671,6 +8707,7 @@ function kernelUname(imports, hostname, memory, glue) {
|
|
|
8671
8707
|
function kernelChdir(Fs) {
|
|
8672
8708
|
const { chdir, lookupPath, ErrnoError } = Fs;
|
|
8673
8709
|
if (!chdir || !lookupPath || !ErrnoError) return;
|
|
8710
|
+
Fs.sliccChdirAt = chdir;
|
|
8674
8711
|
Fs.chdir = (path) => {
|
|
8675
8712
|
const { node } = lookupPath.call(Fs, path, { follow: true });
|
|
8676
8713
|
const directory = Fs.isDir?.(node.mode) === true;
|
|
@@ -9748,6 +9785,7 @@ function runSync(kernel, d, o) {
|
|
|
9748
9785
|
...named,
|
|
9749
9786
|
env: { ...o.env ?? d.env },
|
|
9750
9787
|
cwd: o.cwd === void 0 ? d.cwd : d.resolve(o.cwd),
|
|
9788
|
+
...o.cwd === void 0 ? {} : { chdir: true },
|
|
9751
9789
|
...group,
|
|
9752
9790
|
stdin: stdioOf(o.stdin),
|
|
9753
9791
|
...input ? { input } : {},
|
|
@@ -11042,7 +11080,7 @@ function mountVfsIntoEmscripten(Fs, deps) {
|
|
|
11042
11080
|
linuxRmdir(Fs);
|
|
11043
11081
|
if (deps.cred) Fs.sliccCred = deps.cred;
|
|
11044
11082
|
try {
|
|
11045
|
-
Fs.chdir(deps.cwd);
|
|
11083
|
+
(Fs.sliccChdirAt ?? Fs.chdir).call(Fs, deps.cwd);
|
|
11046
11084
|
} catch (err) {
|
|
11047
11085
|
warn(`cannot chdir to ${deps.cwd}: errno ${err.errno}`);
|
|
11048
11086
|
}
|
|
@@ -12119,6 +12157,7 @@ function createProcessKernel(deps) {
|
|
|
12119
12157
|
argv,
|
|
12120
12158
|
env: env ?? deps.env,
|
|
12121
12159
|
cwd: cwd ?? Fs.cwd(),
|
|
12160
|
+
...cwd !== null ? { chdir: true } : {},
|
|
12122
12161
|
stdio,
|
|
12123
12162
|
...inherit.length > 0 ? { inherit } : {},
|
|
12124
12163
|
...exec ? { exec } : {},
|