@ai-ecoverse/slicc-kernel 1.103.3 → 1.106.2
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 +56 -15
- package/dist/driver-worker.js +36 -1
- package/dist/driver-worker.js.map +2 -2
- package/dist/index.js +89 -5
- package/dist/index.js.map +2 -2
- package/dist/kernel-worker.js +783 -289
- package/dist/kernel-worker.js.map +4 -4
- package/dist/meta.js.map +2 -2
- package/dist/node-driver-worker.js +36 -1
- package/dist/node-driver-worker.js.map +2 -2
- package/dist/node-process-worker.js +447 -224
- package/dist/node-process-worker.js.map +4 -4
- package/dist/node.js +831 -309
- package/dist/node.js.map +4 -4
- package/dist/process-worker.js +384 -161
- package/dist/process-worker.js.map +4 -4
- package/dist/types/commands.d.ts +6 -1
- package/dist/types/fs/command-stat.d.ts +3 -0
- package/dist/types/fs/commands.d.ts +7 -1
- package/dist/types/fs/engines.d.ts +5 -0
- package/dist/types/fs/types.d.ts +1 -0
- package/dist/types/kernel/host.d.ts +1 -0
- package/dist/types/kernel/net/http-syscalls.d.ts +10 -0
- package/dist/types/kernel/net/http1.d.ts +1 -0
- package/dist/types/kernel/net/remote-transport.d.ts +18 -0
- package/dist/types/kernel/net/transport.d.ts +2 -0
- package/dist/types/kernel/process.d.ts +8 -0
- package/dist/types/launcher.d.ts +4 -0
- package/dist/types/process/process-signals.d.ts +3 -0
- package/dist/types/process/wasi/wasi-cred.d.ts +11 -0
- package/dist/types/process/wasi/wasi-files.d.ts +1 -0
- package/dist/types/process/wasi/wasi-host.d.ts +9 -0
- package/dist/types/process/wasi/wasi-sigmask.d.ts +7 -1
- package/dist/types/process/wasi/wasix-epoll.d.ts +3 -0
- package/dist/types/refused-command.d.ts +4 -0
- package/dist/types/transport.d.ts +1 -0
- package/package.json +17 -12
package/dist/index.js
CHANGED
|
@@ -1030,6 +1030,28 @@ async function* chunks(body, idleMs) {
|
|
|
1030
1030
|
await reader.cancel().catch(() => void 0);
|
|
1031
1031
|
}
|
|
1032
1032
|
}
|
|
1033
|
+
function streamOf(body) {
|
|
1034
|
+
const it = body[Symbol.asyncIterator]();
|
|
1035
|
+
return new ReadableStream(
|
|
1036
|
+
{
|
|
1037
|
+
async pull(controller) {
|
|
1038
|
+
const next = await it.next();
|
|
1039
|
+
if (next.done) controller.close();
|
|
1040
|
+
else controller.enqueue(next.value);
|
|
1041
|
+
},
|
|
1042
|
+
async cancel(reason) {
|
|
1043
|
+
await it.return?.(reason);
|
|
1044
|
+
}
|
|
1045
|
+
},
|
|
1046
|
+
{ highWaterMark: 0 }
|
|
1047
|
+
);
|
|
1048
|
+
}
|
|
1049
|
+
function requestBody(request) {
|
|
1050
|
+
if (request.bodyStream) {
|
|
1051
|
+
return { body: streamOf(request.bodyStream), duplex: "half" };
|
|
1052
|
+
}
|
|
1053
|
+
return request.body ? { body: request.body } : {};
|
|
1054
|
+
}
|
|
1033
1055
|
function fetchTransport(options = {}) {
|
|
1034
1056
|
const send2 = options.fetch ?? globalThis.fetch.bind(globalThis);
|
|
1035
1057
|
const Socket = options.webSocket === true ? globalThis.WebSocket : options.webSocket || void 0;
|
|
@@ -1041,7 +1063,8 @@ function fetchTransport(options = {}) {
|
|
|
1041
1063
|
encodedBodies: false,
|
|
1042
1064
|
maxRequestBody: options.maxRequestBody ?? MAX_REQUEST_BODY,
|
|
1043
1065
|
crossOrigin: "cors",
|
|
1044
|
-
...Socket ? { websocket: true } : {}
|
|
1066
|
+
...Socket ? { websocket: true } : {},
|
|
1067
|
+
...options.streamingBodies ? { streamingBodies: true } : {}
|
|
1045
1068
|
},
|
|
1046
1069
|
...Socket ? { websocket: (request) => openWebSocket(Socket, request, headers) } : {},
|
|
1047
1070
|
async fetch(request) {
|
|
@@ -1050,7 +1073,7 @@ function fetchTransport(options = {}) {
|
|
|
1050
1073
|
response = await send2(request.url, {
|
|
1051
1074
|
method: request.method,
|
|
1052
1075
|
headers: joinHeaders(request.headers),
|
|
1053
|
-
...request
|
|
1076
|
+
...requestBody(request),
|
|
1054
1077
|
signal: request.signal,
|
|
1055
1078
|
redirect,
|
|
1056
1079
|
credentials: "omit",
|
|
@@ -1087,6 +1110,29 @@ function fetchTransport(options = {}) {
|
|
|
1087
1110
|
}
|
|
1088
1111
|
};
|
|
1089
1112
|
}
|
|
1113
|
+
function uploadsFor(peer) {
|
|
1114
|
+
const pulls = /* @__PURE__ */ new Map();
|
|
1115
|
+
const of = (nid, signal) => ({
|
|
1116
|
+
async *[Symbol.asyncIterator]() {
|
|
1117
|
+
for (; ; ) {
|
|
1118
|
+
signal.throwIfAborted();
|
|
1119
|
+
const got = await new Promise((resolve, reject) => {
|
|
1120
|
+
const stop = () => reject(signal.reason);
|
|
1121
|
+
signal.addEventListener("abort", stop, { once: true });
|
|
1122
|
+
pulls.set(nid, (call) => {
|
|
1123
|
+
signal.removeEventListener("abort", stop);
|
|
1124
|
+
resolve(call);
|
|
1125
|
+
});
|
|
1126
|
+
peer.postMessage({ net: "body-pull", nid });
|
|
1127
|
+
}).finally(() => pulls.delete(nid));
|
|
1128
|
+
if (got.net === "body-end") return;
|
|
1129
|
+
if (got.net === "body-error") throw new Error(got.message);
|
|
1130
|
+
if (got.net === "body-chunk") yield got.bytes;
|
|
1131
|
+
}
|
|
1132
|
+
}
|
|
1133
|
+
});
|
|
1134
|
+
return { of, answer: (call) => pulls.get(call.nid)?.(call) };
|
|
1135
|
+
}
|
|
1090
1136
|
function serveTransport(peer, transport, { closeWaitMs = CLOSE_WAIT_MS } = {}) {
|
|
1091
1137
|
const open = /* @__PURE__ */ new Map();
|
|
1092
1138
|
const fail = (nid, e) => {
|
|
@@ -1100,6 +1146,7 @@ function serveTransport(peer, transport, { closeWaitMs = CLOSE_WAIT_MS } = {}) {
|
|
|
1100
1146
|
...typeof code === "string" ? { code } : {}
|
|
1101
1147
|
});
|
|
1102
1148
|
};
|
|
1149
|
+
const uploads = uploadsFor(peer);
|
|
1103
1150
|
const start = async (call) => {
|
|
1104
1151
|
const abort = new AbortController();
|
|
1105
1152
|
const entry = { abort };
|
|
@@ -1109,7 +1156,7 @@ function serveTransport(peer, transport, { closeWaitMs = CLOSE_WAIT_MS } = {}) {
|
|
|
1109
1156
|
url: call.url,
|
|
1110
1157
|
method: call.method,
|
|
1111
1158
|
headers: call.headers,
|
|
1112
|
-
...call.body ? { body: call.body } : {},
|
|
1159
|
+
...call.streamed ? { bodyStream: uploads.of(call.nid, abort.signal) } : call.body ? { body: call.body } : {},
|
|
1113
1160
|
signal: abort.signal
|
|
1114
1161
|
});
|
|
1115
1162
|
if (!open.has(call.nid)) {
|
|
@@ -1247,7 +1294,9 @@ function serveTransport(peer, transport, { closeWaitMs = CLOSE_WAIT_MS } = {}) {
|
|
|
1247
1294
|
return {
|
|
1248
1295
|
answer(call) {
|
|
1249
1296
|
if (call.net === "fetch") void start(call);
|
|
1250
|
-
else if (call.net === "
|
|
1297
|
+
else if (call.net === "body-chunk" || call.net === "body-end" || call.net === "body-error") {
|
|
1298
|
+
uploads.answer(call);
|
|
1299
|
+
} else if (call.net === "read") void read(call.nid);
|
|
1251
1300
|
else if (call.net === "ws-open") void openSocket(call);
|
|
1252
1301
|
else if (call.net === "ws-send") void sendOn(call);
|
|
1253
1302
|
else if (call.net === "ws-close") {
|
|
@@ -1278,12 +1327,17 @@ var RemoteTransport = class {
|
|
|
1278
1327
|
waiting = /* @__PURE__ */ new Map();
|
|
1279
1328
|
nextId = 0;
|
|
1280
1329
|
sockets = /* @__PURE__ */ new Map();
|
|
1330
|
+
uploads = /* @__PURE__ */ new Map();
|
|
1281
1331
|
failure;
|
|
1282
1332
|
constructor(port, traits) {
|
|
1283
1333
|
this.port = port;
|
|
1284
1334
|
this.traits = traits;
|
|
1285
1335
|
}
|
|
1286
1336
|
receive(reply) {
|
|
1337
|
+
if (reply.net === "body-pull") {
|
|
1338
|
+
void this.pull(reply.nid);
|
|
1339
|
+
return;
|
|
1340
|
+
}
|
|
1287
1341
|
const socket = this.sockets.get(reply.nid);
|
|
1288
1342
|
if (socket && this.toSocket(reply, socket)) return;
|
|
1289
1343
|
const waiter = this.waiting.get(reply.nid);
|
|
@@ -1302,8 +1356,35 @@ var RemoteTransport = class {
|
|
|
1302
1356
|
} else return false;
|
|
1303
1357
|
return true;
|
|
1304
1358
|
}
|
|
1359
|
+
async pull(nid) {
|
|
1360
|
+
const upload = this.uploads.get(nid);
|
|
1361
|
+
if (!upload) {
|
|
1362
|
+
this.port.postMessage({ net: "body-error", nid, message: "the request body is gone" });
|
|
1363
|
+
return;
|
|
1364
|
+
}
|
|
1365
|
+
try {
|
|
1366
|
+
const next = await upload.next();
|
|
1367
|
+
if (next.done) {
|
|
1368
|
+
this.uploads.delete(nid);
|
|
1369
|
+
this.port.postMessage({ net: "body-end", nid });
|
|
1370
|
+
} else this.port.postMessage({ net: "body-chunk", nid, bytes: next.value });
|
|
1371
|
+
} catch (e) {
|
|
1372
|
+
this.uploads.delete(nid);
|
|
1373
|
+
this.port.postMessage({
|
|
1374
|
+
net: "body-error",
|
|
1375
|
+
nid,
|
|
1376
|
+
message: e instanceof Error ? e.message : String(e)
|
|
1377
|
+
});
|
|
1378
|
+
}
|
|
1379
|
+
}
|
|
1380
|
+
dropUpload(nid) {
|
|
1381
|
+
const upload = this.uploads.get(nid);
|
|
1382
|
+
this.uploads.delete(nid);
|
|
1383
|
+
void upload?.return?.().catch(() => void 0);
|
|
1384
|
+
}
|
|
1305
1385
|
fail(error) {
|
|
1306
1386
|
this.failure = error;
|
|
1387
|
+
for (const nid of [...this.uploads.keys()]) this.dropUpload(nid);
|
|
1307
1388
|
for (const waiter of this.waiting.values()) waiter.reject(error);
|
|
1308
1389
|
this.waiting.clear();
|
|
1309
1390
|
for (const socket of this.sockets.values())
|
|
@@ -1330,14 +1411,17 @@ var RemoteTransport = class {
|
|
|
1330
1411
|
let finished = false;
|
|
1331
1412
|
const abort = () => {
|
|
1332
1413
|
finished = true;
|
|
1414
|
+
this.dropUpload(nid);
|
|
1333
1415
|
this.cancel(nid);
|
|
1334
1416
|
};
|
|
1335
1417
|
signal.addEventListener("abort", abort, { once: true });
|
|
1336
1418
|
const finish = () => {
|
|
1419
|
+
this.dropUpload(nid);
|
|
1337
1420
|
if (finished) return;
|
|
1338
1421
|
finished = true;
|
|
1339
1422
|
signal.removeEventListener("abort", abort);
|
|
1340
1423
|
};
|
|
1424
|
+
if (request.bodyStream) this.uploads.set(nid, request.bodyStream[Symbol.asyncIterator]());
|
|
1341
1425
|
let head;
|
|
1342
1426
|
try {
|
|
1343
1427
|
head = await this.ask({
|
|
@@ -1346,7 +1430,7 @@ var RemoteTransport = class {
|
|
|
1346
1430
|
url: request.url,
|
|
1347
1431
|
method: request.method,
|
|
1348
1432
|
headers: request.headers,
|
|
1349
|
-
...request.body ? { body: request.body } : {}
|
|
1433
|
+
...request.bodyStream ? { streamed: true } : request.body ? { body: request.body } : {}
|
|
1350
1434
|
});
|
|
1351
1435
|
} catch (e) {
|
|
1352
1436
|
finish();
|