@ai-ecoverse/slicc-kernel 1.4.0 → 1.6.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.
@@ -14,7 +14,7 @@ var __export = (target, all) => {
14
14
  };
15
15
 
16
16
  // src/kernel/protocol.ts
17
- var WASM_PROCESS_INIT, WASM_PROCESS_EXIT, WASM_PROCESS_ERROR, WASM_THREAD_SPAWN, WASM_THREAD_INIT, WASM_THREAD_EXIT, WASM_MAX_THREADS;
17
+ var WASM_PROCESS_INIT, WASM_PROCESS_EXIT, WASM_PROCESS_ERROR, WASM_THREAD_SPAWN, WASM_THREAD_INIT, WASM_THREAD_EXIT, WASM_MAX_THREADS, WASM_DEFAULT_THREADS;
18
18
  var init_protocol = __esm({
19
19
  "src/kernel/protocol.ts"() {
20
20
  "use strict";
@@ -24,7 +24,8 @@ var init_protocol = __esm({
24
24
  WASM_THREAD_SPAWN = "wasm-thread-spawn";
25
25
  WASM_THREAD_INIT = "wasm-thread-init";
26
26
  WASM_THREAD_EXIT = "wasm-thread-exit";
27
- WASM_MAX_THREADS = 64;
27
+ WASM_MAX_THREADS = 256;
28
+ WASM_DEFAULT_THREADS = 64;
28
29
  }
29
30
  });
30
31
 
@@ -4255,6 +4256,7 @@ function importsContext({
4255
4256
  fs,
4256
4257
  fds,
4257
4258
  syscall: call2,
4259
+ ...processes(host, call2),
4258
4260
  async: {
4259
4261
  submit: (req) => call2({ op: "async-submit", req }),
4260
4262
  wait(timeoutMs) {
@@ -4284,13 +4286,69 @@ function importsContext({
4284
4286
  errno: (err) => wasiErrnoOf(code(err))
4285
4287
  };
4286
4288
  }
4287
- var UID;
4289
+ function processes(host, call2) {
4290
+ const close = (fd) => void call2({ op: "fd-close", fd });
4291
+ const slot = (n, how, mine, theirs) => {
4292
+ if (how === "inherit") return { fd: n };
4293
+ if (how === "null") return { none: true };
4294
+ const [read, write] = call2({ op: "fd-pipe" });
4295
+ mine[n] = n === 0 ? write : read;
4296
+ theirs.push(n === 0 ? read : write);
4297
+ return { fd: n === 0 ? read : write };
4298
+ };
4299
+ return {
4300
+ spawn(o) {
4301
+ const mine = [];
4302
+ const theirs = [];
4303
+ host.fds.promoteFiles();
4304
+ try {
4305
+ const stdio = STDIO.map((name, n) => slot(n, o[name] ?? "inherit", mine, theirs));
4306
+ const pid = call2({
4307
+ op: "proc-spawn",
4308
+ file: o.argv[0],
4309
+ argv: o.argv,
4310
+ env: o.env ?? { ...host.o.env },
4311
+ cwd: o.cwd ?? host.cwd,
4312
+ stdio
4313
+ });
4314
+ const out = { pid };
4315
+ STDIO.forEach((name, n) => {
4316
+ if (mine[n] !== void 0) out[name] = mine[n];
4317
+ });
4318
+ return out;
4319
+ } catch (err) {
4320
+ for (const fd of mine) if (fd !== void 0) close(fd);
4321
+ throw err;
4322
+ } finally {
4323
+ for (const fd of theirs) close(fd);
4324
+ host.o.fs.invalidate?.();
4325
+ }
4326
+ },
4327
+ wait(pid) {
4328
+ for (; ; ) {
4329
+ try {
4330
+ const [, status2] = call2({ op: "proc-wait", pid, nohang: false });
4331
+ host.o.fs.invalidate?.();
4332
+ const signal = status2 & 127;
4333
+ return signal ? { status: 128 + signal, signal } : { status: status2 >> 8 & 255 };
4334
+ } catch (err) {
4335
+ if (code(err) !== "EINTR") throw err;
4336
+ }
4337
+ }
4338
+ },
4339
+ kill(pid, sig) {
4340
+ call2({ op: "proc-kill", pid, sig });
4341
+ }
4342
+ };
4343
+ }
4344
+ var UID, STDIO;
4288
4345
  var init_wasi_imports = __esm({
4289
4346
  "src/process/wasi/wasi-imports.ts"() {
4290
4347
  "use strict";
4291
4348
  init_wasi_abi();
4292
4349
  init_wasi_files();
4293
4350
  UID = 1e3;
4351
+ STDIO = ["stdin", "stdout", "stderr"];
4294
4352
  }
4295
4353
  });
4296
4354
 
@@ -4409,7 +4467,7 @@ var init_wasi_stats = __esm({
4409
4467
  // src/process/wasi/wasi-threads.ts
4410
4468
  function threadCap(env) {
4411
4469
  const asked = Number.parseInt(env.SLICC_WASM_THREADS ?? "", 10);
4412
- return asked >= 1 ? Math.min(asked, WASM_MAX_THREADS) : WASM_MAX_THREADS;
4470
+ return asked >= 1 ? Math.min(asked, WASM_MAX_THREADS) : WASM_DEFAULT_THREADS;
4413
4471
  }
4414
4472
  var LAST_TID, RUNNING, MAIN_TID, ThreadExit, WasiThreads;
4415
4473
  var init_wasi_threads = __esm({