@ai-ecoverse/slicc-kernel 1.125.11 → 1.126.0
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 +12 -3
- package/dist/index.js.map +2 -2
- package/dist/kernel-worker.js +161 -21
- package/dist/kernel-worker.js.map +4 -4
- package/dist/node-process-worker.js +90 -25
- package/dist/node-process-worker.js.map +3 -3
- package/dist/node.js +161 -21
- package/dist/node.js.map +4 -4
- package/dist/process-worker.js +90 -25
- package/dist/process-worker.js.map +3 -3
- package/dist/types/fs/opfs.d.ts +1 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/kernel/net/tls-client.d.ts +4 -0
- package/dist/types/kernel/net/tls-uplink.d.ts +2 -1
- package/dist/types/kernel/sealed-session.d.ts +44 -0
- package/dist/types/kernel/sealed.d.ts +3 -0
- package/dist/types/kernel/vfs-file.d.ts +1 -0
- package/dist/types/process/js/js-context.d.ts +15 -3
- package/dist/types/process/js/js-io.d.ts +3 -0
- package/dist/types/process/js/js-net.d.ts +1 -0
- package/dist/types/process/js/js-sync.d.ts +5 -3
- package/dist/types/process/js/js-tty.d.ts +11 -1
- package/package.json +2 -2
|
@@ -6392,7 +6392,7 @@ var KERNEL_VERSION, OS_RELEASE;
|
|
|
6392
6392
|
var init_version = __esm({
|
|
6393
6393
|
"src/version.ts"() {
|
|
6394
6394
|
"use strict";
|
|
6395
|
-
KERNEL_VERSION = true ? "1.
|
|
6395
|
+
KERNEL_VERSION = true ? "1.126.0" : "0.0.0-dev";
|
|
6396
6396
|
OS_RELEASE = "6.0.0-slicc";
|
|
6397
6397
|
}
|
|
6398
6398
|
});
|
|
@@ -7269,7 +7269,8 @@ function sessionOf(r) {
|
|
|
7269
7269
|
}
|
|
7270
7270
|
return Object.freeze({
|
|
7271
7271
|
path: "kernel",
|
|
7272
|
-
substitutes:
|
|
7272
|
+
substitutes: r.substitutes === true,
|
|
7273
|
+
verified: r.verified === true,
|
|
7273
7274
|
protocol: r.protocol ?? "TLSv1.2",
|
|
7274
7275
|
alpnProtocol: r.alpnProtocol,
|
|
7275
7276
|
authorized: r.authorized === true,
|
|
@@ -11226,20 +11227,24 @@ function syncOps(kernel, shared) {
|
|
|
11226
11227
|
const r = kernel.blocking({ op: "fd-read", fd, max: Math.min(max, MAX_IO) });
|
|
11227
11228
|
return r.ok && r.kind === "bytes" ? r.bytes : new Uint8Array(0);
|
|
11228
11229
|
};
|
|
11229
|
-
const write2 = (fd, data) => {
|
|
11230
|
+
const write2 = (fd, data, options) => {
|
|
11230
11231
|
const bytes = typeof data === "string" ? encoder3.encode(data) : data;
|
|
11231
11232
|
const i = info(fd);
|
|
11232
|
-
if (writeDevice(i)) return;
|
|
11233
|
+
if (writeDevice(i)) return bytes.length;
|
|
11234
|
+
const nonblock = options?.nonblock === true;
|
|
11233
11235
|
let at = 0;
|
|
11234
11236
|
while (at < bytes.length) {
|
|
11235
11237
|
const body = bytes.subarray(at, at + MAX_IO);
|
|
11236
11238
|
try {
|
|
11237
|
-
|
|
11239
|
+
const req = { op: "fd-write", fd, body, ...nonblock ? { nonblock } : {} };
|
|
11240
|
+
at += written(kernel.blocking(req), body.length);
|
|
11238
11241
|
} catch (err) {
|
|
11239
11242
|
if (brokenPipe(err, i)) kernel.call({ op: "proc-kill", pid: shared.pid, sig: SIG.PIPE });
|
|
11240
11243
|
throw err;
|
|
11241
11244
|
}
|
|
11245
|
+
if (nonblock) break;
|
|
11242
11246
|
}
|
|
11247
|
+
return at;
|
|
11243
11248
|
};
|
|
11244
11249
|
const statOf = (op, path) => {
|
|
11245
11250
|
const abs = resolve(path);
|
|
@@ -11530,7 +11535,7 @@ function rawOf(termios) {
|
|
|
11530
11535
|
raw.c_cc[VTIME] = 0;
|
|
11531
11536
|
return raw;
|
|
11532
11537
|
}
|
|
11533
|
-
function ttyOps(kernel) {
|
|
11538
|
+
function ttyOps(kernel, syncKernel) {
|
|
11534
11539
|
const saved = /* @__PURE__ */ new Map();
|
|
11535
11540
|
const terminalOf = async (fd) => (await kernel.json({ op: "fd-info", fd })).terminal ?? `fd ${fd}`;
|
|
11536
11541
|
const getAttr = async (fd) => await kernel.json({ op: "tty-get", fd });
|
|
@@ -11582,8 +11587,27 @@ function ttyOps(kernel) {
|
|
|
11582
11587
|
await back.catch(() => void 0);
|
|
11583
11588
|
}
|
|
11584
11589
|
};
|
|
11590
|
+
const syncGet = (fd) => syncKernel.json({ op: "tty-get", fd });
|
|
11591
|
+
const syncSet = (fd, termios) => void syncKernel.json({ op: "tty-set", fd, termios: copy(termios) });
|
|
11592
|
+
const syncTty = {
|
|
11593
|
+
getAttr: syncGet,
|
|
11594
|
+
setAttr: syncSet,
|
|
11595
|
+
setRaw(fd, raw) {
|
|
11596
|
+
const info = syncKernel.json({ op: "fd-info", fd });
|
|
11597
|
+
const terminal = info.terminal ?? `fd ${fd}`;
|
|
11598
|
+
if (!raw) {
|
|
11599
|
+
const original = saved.get(terminal);
|
|
11600
|
+
saved.delete(terminal);
|
|
11601
|
+
if (original) syncSet(fd, original.termios);
|
|
11602
|
+
return;
|
|
11603
|
+
}
|
|
11604
|
+
const current = syncGet(fd);
|
|
11605
|
+
if (!saved.has(terminal)) saved.set(terminal, { fd, termios: current });
|
|
11606
|
+
syncSet(fd, rawOf(current));
|
|
11607
|
+
}
|
|
11608
|
+
};
|
|
11585
11609
|
const modes = () => [...saved].reverse().map(([terminal, { fd, termios }]) => ({ terminal, fd, termios }));
|
|
11586
|
-
return { tty, restore, modes };
|
|
11610
|
+
return { tty, syncTty, restore, modes };
|
|
11587
11611
|
}
|
|
11588
11612
|
var BRKINT, INPCK, ISTRIP, ICRNL, IXON, ONLCR, CS8, ISIG, ICANON, ECHO, IEXTEN, VTIME, VMIN;
|
|
11589
11613
|
var init_js_tty = __esm({
|
|
@@ -11809,6 +11833,26 @@ var init_js_websocket = __esm({
|
|
|
11809
11833
|
});
|
|
11810
11834
|
|
|
11811
11835
|
// src/process/js/js-context.ts
|
|
11836
|
+
function fdList(list) {
|
|
11837
|
+
const fds = [...list ?? []];
|
|
11838
|
+
if (!fds.every((fd) => Number.isInteger(fd) && fd >= 0))
|
|
11839
|
+
throw new JsCallError("EINVAL", "select", "ERR_INVALID_ARG_VALUE: fds must be integers >= 0");
|
|
11840
|
+
return fds;
|
|
11841
|
+
}
|
|
11842
|
+
async function selectOp(kernel, sets, signal) {
|
|
11843
|
+
signal?.throwIfAborted();
|
|
11844
|
+
const read2 = fdList(sets.read);
|
|
11845
|
+
const write2 = fdList(sets.write);
|
|
11846
|
+
const timeoutMs2 = sets.timeoutMs ?? -1;
|
|
11847
|
+
if (!Number.isFinite(timeoutMs2))
|
|
11848
|
+
throw new JsCallError("EINVAL", "select", "ERR_INVALID_ARG_VALUE: timeoutMs");
|
|
11849
|
+
const r = await kernel.blocking(
|
|
11850
|
+
{ op: "fd-select", read: read2, write: write2, timeoutMs: Math.max(-1, Math.floor(timeoutMs2)) },
|
|
11851
|
+
signal
|
|
11852
|
+
);
|
|
11853
|
+
const got = r.ok && r.kind === "json" ? r.json : {};
|
|
11854
|
+
return { read: got.read ?? [], write: got.write ?? [] };
|
|
11855
|
+
}
|
|
11812
11856
|
function listen(listeners, listener) {
|
|
11813
11857
|
const own = (error, promise) => listener(error, promise);
|
|
11814
11858
|
listeners.add(own);
|
|
@@ -11898,7 +11942,17 @@ function writer(kernel, info, pid) {
|
|
|
11898
11942
|
writes.delete(w);
|
|
11899
11943
|
}
|
|
11900
11944
|
};
|
|
11901
|
-
|
|
11945
|
+
const writeSome = async (fd, data) => {
|
|
11946
|
+
const i = await info(fd);
|
|
11947
|
+
if (writeDevice(i)) return data.length;
|
|
11948
|
+
const body = data.subarray(0, MAX_IO);
|
|
11949
|
+
const r = await kernel.raw({ op: "fd-write", fd, body, nonblock: true });
|
|
11950
|
+
if (r.ok) return written(r, body.length);
|
|
11951
|
+
if (brokenPipe(callError(r, "fd-write"), i))
|
|
11952
|
+
await kernel.call({ op: "proc-kill", pid, sig: SIG.PIPE });
|
|
11953
|
+
throw callError(r, "fd-write");
|
|
11954
|
+
};
|
|
11955
|
+
return { writes, writeAll, writeSome };
|
|
11902
11956
|
}
|
|
11903
11957
|
function readable2(read2) {
|
|
11904
11958
|
return new ReadableStream(
|
|
@@ -12046,6 +12100,24 @@ function pendingReads(kernel, info, random) {
|
|
|
12046
12100
|
};
|
|
12047
12101
|
return { read: read2, closing };
|
|
12048
12102
|
}
|
|
12103
|
+
function tracked2(pending, writeAll, writeSome) {
|
|
12104
|
+
return (fd, data, options) => {
|
|
12105
|
+
const bytes = typeof data === "string" ? encoder4.encode(data) : data;
|
|
12106
|
+
let settle;
|
|
12107
|
+
const settled2 = new Promise((resolve) => settle = resolve);
|
|
12108
|
+
pending.add(settled2);
|
|
12109
|
+
return (async () => {
|
|
12110
|
+
try {
|
|
12111
|
+
if (options?.nonblock === true) return await writeSome(fd, bytes);
|
|
12112
|
+
await writeAll(fd, bytes);
|
|
12113
|
+
return bytes.length;
|
|
12114
|
+
} finally {
|
|
12115
|
+
pending.delete(settled2);
|
|
12116
|
+
settle();
|
|
12117
|
+
}
|
|
12118
|
+
})();
|
|
12119
|
+
};
|
|
12120
|
+
}
|
|
12049
12121
|
function createContext(o) {
|
|
12050
12122
|
const { kernel } = o;
|
|
12051
12123
|
const infos = /* @__PURE__ */ new Map();
|
|
@@ -12072,22 +12144,13 @@ function createContext(o) {
|
|
|
12072
12144
|
return got;
|
|
12073
12145
|
};
|
|
12074
12146
|
const { read: read2, closing } = pendingReads(kernel, info, random);
|
|
12075
|
-
const { writes, writeAll } = writer(kernel, info, o.pid);
|
|
12076
|
-
const write2 = (
|
|
12077
|
-
|
|
12078
|
-
|
|
12079
|
-
|
|
12080
|
-
|
|
12081
|
-
|
|
12082
|
-
try {
|
|
12083
|
-
await writeAll(fd, bytes);
|
|
12084
|
-
} finally {
|
|
12085
|
-
pending.delete(settled2);
|
|
12086
|
-
settle();
|
|
12087
|
-
}
|
|
12088
|
-
})();
|
|
12089
|
-
};
|
|
12090
|
-
const writable2 = (fd) => new WritableStream({ write: (chunk) => write2(fd, chunk) });
|
|
12147
|
+
const { writes, writeAll, writeSome } = writer(kernel, info, o.pid);
|
|
12148
|
+
const write2 = tracked2(pending, writeAll, writeSome);
|
|
12149
|
+
const writable2 = (fd) => new WritableStream({
|
|
12150
|
+
write: async (chunk) => {
|
|
12151
|
+
await write2(fd, chunk);
|
|
12152
|
+
}
|
|
12153
|
+
});
|
|
12091
12154
|
const statOf = async (op, path) => {
|
|
12092
12155
|
const abs = resolve(path);
|
|
12093
12156
|
if (inDev(abs)) return devAsync(kernel, devStat(abs, op === "stat"));
|
|
@@ -12113,10 +12176,11 @@ function createContext(o) {
|
|
|
12113
12176
|
const lane = o.lane ?? laneOf(void 0);
|
|
12114
12177
|
if (o.lane && o.lane !== noLane) kernel.syncLane = o.lane;
|
|
12115
12178
|
const syncKernel = new JsSyncKernel(lane, kernel, unwind);
|
|
12116
|
-
const terminal = ttyOps(kernel);
|
|
12179
|
+
const terminal = ttyOps(kernel, syncKernel);
|
|
12117
12180
|
const shared = { pid: o.pid, resolve, random, infos, handles, closing };
|
|
12118
12181
|
const sync = {
|
|
12119
12182
|
kernel: KERNEL_INFO,
|
|
12183
|
+
tty: terminal.syncTty,
|
|
12120
12184
|
...watchingSyncOps(kernel, syncKernel, shared),
|
|
12121
12185
|
run: (options) => runSync(syncKernel, { env: o.env, cwd: o.cwd, resolve, signal: signalNumber }, options),
|
|
12122
12186
|
spawn: (options) => spawnSync(options),
|
|
@@ -12161,6 +12225,7 @@ function createContext(o) {
|
|
|
12161
12225
|
},
|
|
12162
12226
|
socketpair: async () => await kernel.json({ op: "sock-pair", domain: "unix", type: "stream" }),
|
|
12163
12227
|
pipe: async () => await kernel.json({ op: "fd-pipe" }),
|
|
12228
|
+
select: (sets, options) => selectOp(kernel, sets, options?.signal),
|
|
12164
12229
|
async fdStatus(fd) {
|
|
12165
12230
|
const type = typeOf(await info(fd));
|
|
12166
12231
|
return { type, tty: type === "tty", seekable: type === "file" };
|