@ai-ecoverse/slicc-kernel 1.162.0 → 1.163.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/dist/node.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // src/node.ts
2
2
  import { createHash } from "node:crypto";
3
- import { lstatSync, mkdtempSync, readdirSync, rmSync } from "node:fs";
3
+ import { lstatSync, mkdirSync, mkdtempSync, readdirSync, rmSync } from "node:fs";
4
4
  import { tmpdir } from "node:os";
5
5
  import { isAbsolute, join } from "node:path";
6
6
  import { MessageChannel as MessageChannel2, Worker } from "node:worker_threads";
@@ -2212,7 +2212,9 @@ var KernelSocket = class _KernelSocket {
2212
2212
  throw new KernelError("ECONNRESET", "read ECONNRESET");
2213
2213
  return bytes.length > 0 ? bytes : null;
2214
2214
  },
2215
- write: (bytes) => raw2.tx.write(bytes),
2215
+ write: (bytes) => raw2.tx.write(bytes).catch((err) => {
2216
+ throw this.refused ? new KernelError("ECONNRESET", "read ECONNRESET") : err;
2217
+ }),
2216
2218
  closeWrite: () => raw2.tx.closeWrite(),
2217
2219
  close: () => {
2218
2220
  raw2.rx.closeRead();
@@ -3675,7 +3677,7 @@ function satisfies(version, range2) {
3675
3677
  }
3676
3678
 
3677
3679
  // src/version.ts
3678
- var KERNEL_VERSION = true ? "1.162.0" : "0.0.0-dev";
3680
+ var KERNEL_VERSION = true ? "1.163.0" : "0.0.0-dev";
3679
3681
  var OS_RELEASE = "6.0.0-slicc";
3680
3682
  function procVersion() {
3681
3683
  return `Linux version ${OS_RELEASE} (slicc-kernel ${KERNEL_VERSION}) #1 SMP PREEMPT_DYNAMIC
@@ -35247,8 +35249,35 @@ function sparesOf(options) {
35247
35249
  }
35248
35250
  return n;
35249
35251
  }
35250
- function processWorker(file, workerData) {
35251
- return new Worker(file, { env: workerEnv(), ...workerData ? { workerData } : {} });
35252
+ var INTERNALS = "--expose-internals";
35253
+ var internalArgv;
35254
+ function narrowArgv(argv, message3) {
35255
+ const at = message3.indexOf(": ");
35256
+ if (at < 0) return null;
35257
+ const bad = new Set(message3.slice(at + 2).split(", "));
35258
+ const kept = argv.filter((arg) => !bad.has(arg));
35259
+ return kept.length < argv.length ? kept : null;
35260
+ }
35261
+ function internalsWorker(make, argv = process.execArgv) {
35262
+ internalArgv ??= [...argv, INTERNALS];
35263
+ for (let tries = 0; internalArgv !== null && tries < 2; tries++) {
35264
+ try {
35265
+ return make(internalArgv);
35266
+ } catch (err) {
35267
+ const { code, message: message3 } = err;
35268
+ if (code !== "ERR_WORKER_INVALID_EXEC_ARGV" || typeof message3 !== "string") throw err;
35269
+ internalArgv = narrowArgv(internalArgv, message3);
35270
+ }
35271
+ }
35272
+ internalArgv = null;
35273
+ return make();
35274
+ }
35275
+ function resetInternalArgv() {
35276
+ internalArgv = void 0;
35277
+ }
35278
+ function processWorker(file, workerData, internals = false) {
35279
+ const make = (execArgv) => new Worker(file, { env: workerEnv(), ...workerData ? { workerData } : {}, execArgv });
35280
+ return internals ? internalsWorker(make) : make();
35252
35281
  }
35253
35282
  function sourceModule(source) {
35254
35283
  const url = `slicc-module:${createHash("sha256").update(source).digest("hex")}`;
@@ -35258,9 +35287,9 @@ function sourceModule(source) {
35258
35287
  function warmPoolOf(options, file, workerData, live) {
35259
35288
  const size = sparesOf(options);
35260
35289
  if (size === 0) return void 0;
35261
- return warmPool(() => processWorker(file, workerData), live, WARM_IDLE_MS, size);
35290
+ return warmPool(() => processWorker(file, workerData, true), live, WARM_IDLE_MS, size);
35262
35291
  }
35263
- function nodeWorker(file, live, closed, workerData, take) {
35292
+ function nodeWorker(file, live, closed, workerData, take, internals = false) {
35264
35293
  const errors = /* @__PURE__ */ new Set();
35265
35294
  const messages = /* @__PURE__ */ new Map();
35266
35295
  const fail3 = (message3) => {
@@ -35269,7 +35298,7 @@ function nodeWorker(file, live, closed, workerData, take) {
35269
35298
  } });
35270
35299
  }
35271
35300
  };
35272
- const worker = closed ? void 0 : take?.() ?? processWorker(file, workerData);
35301
+ const worker = closed ? void 0 : take?.() ?? processWorker(file, workerData, internals);
35273
35302
  let ending = false;
35274
35303
  if (worker) {
35275
35304
  const kill = () => {
@@ -35355,25 +35384,38 @@ function ownCacheDir(make = privateCacheDir) {
35355
35384
  }
35356
35385
  }
35357
35386
  var swept = false;
35358
- function privateCacheDir(base = tmpdir(), alive = pidAlive) {
35387
+ function privateCacheDir(base = tmpdir(), alive = pidAlive, uid = process.getuid?.()) {
35388
+ const parent = cacheParent(base, uid);
35359
35389
  if (!swept) {
35360
35390
  swept = true;
35361
- sweepCacheDirs(base, alive);
35391
+ sweepCacheDirs(parent, alive, uid);
35392
+ }
35393
+ return mkdtempSync(join(parent, `${process.pid}-`));
35394
+ }
35395
+ function cacheParent(base, uid) {
35396
+ const parent = join(base, uid === void 0 ? "slicc-kernel-cc" : `${CACHE_PREFIX}u${uid}`);
35397
+ try {
35398
+ mkdirSync(parent, { mode: 448 });
35399
+ } catch (err) {
35400
+ if (err.code !== "EEXIST") throw err;
35401
+ }
35402
+ const st = lstatSync(parent);
35403
+ if (!st.isDirectory() || uid !== void 0 && (st.uid !== uid || (st.mode & 63) !== 0)) {
35404
+ throw new Error(`slicc-kernel: ${parent} is not a private directory of this user`);
35362
35405
  }
35363
- return mkdtempSync(join(base, `${CACHE_PREFIX}${process.pid}-`));
35406
+ return parent;
35364
35407
  }
35365
- function sweepCacheDirs(base, alive = pidAlive, uid = process.getuid?.()) {
35408
+ function sweepCacheDirs(parent, alive = pidAlive, uid = process.getuid?.()) {
35366
35409
  let names2;
35367
35410
  try {
35368
- names2 = readdirSync(base);
35411
+ names2 = readdirSync(parent);
35369
35412
  } catch {
35370
35413
  return;
35371
35414
  }
35372
35415
  for (const name2 of names2) {
35373
- if (!name2.startsWith(CACHE_PREFIX)) continue;
35374
- const pid = Number(name2.slice(CACHE_PREFIX.length).split("-")[0]);
35416
+ const pid = Number(name2.split("-")[0]);
35375
35417
  if (!Number.isInteger(pid) || pid <= 0 || alive(pid)) continue;
35376
- removeOurs(join(base, name2), uid);
35418
+ removeOurs(join(parent, name2), uid);
35377
35419
  }
35378
35420
  }
35379
35421
  function removeOurs(path, uid) {
@@ -35434,7 +35476,7 @@ async function createNodeKernel(options = {}) {
35434
35476
  fs,
35435
35477
  moduleUrl: sourceModule,
35436
35478
  unlinkOwner: pidOwner(process),
35437
- createWorker: () => nodeWorker(file, live, terminated, workerData, warm ? () => warm.take() : void 0),
35479
+ createWorker: () => nodeWorker(file, live, terminated, workerData, warm ? () => warm.take() : void 0, true),
35438
35480
  createDriverWorker: () => nodeWorker(
35439
35481
  options.driverWorker ?? new URL("./node-driver-worker.js", import.meta.url),
35440
35482
  live,
@@ -35577,10 +35619,13 @@ export {
35577
35619
  attachKernel,
35578
35620
  createNodeKernel,
35579
35621
  fetchTransport,
35622
+ internalsWorker,
35580
35623
  memoryRoot,
35624
+ narrowArgv,
35581
35625
  nodeTransport,
35582
35626
  ownCacheDir,
35583
35627
  privateCacheDir,
35628
+ resetInternalArgv,
35584
35629
  serveHostfsPort,
35585
35630
  sourceModule,
35586
35631
  sparesOf,