@ai-ecoverse/slicc-kernel 1.109.0 → 1.110.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.
@@ -5204,7 +5204,7 @@ var KERNEL_VERSION, OS_RELEASE;
5204
5204
  var init_version = __esm({
5205
5205
  "src/version.ts"() {
5206
5206
  "use strict";
5207
- KERNEL_VERSION = true ? "1.109.0" : "0.0.0-dev";
5207
+ KERNEL_VERSION = true ? "1.110.0" : "0.0.0-dev";
5208
5208
  OS_RELEASE = "6.0.0-slicc";
5209
5209
  }
5210
5210
  });
package/dist/node.js CHANGED
@@ -5975,14 +5975,14 @@ var WsReader = class {
5975
5975
  }
5976
5976
  };
5977
5977
  function switchingHead(accept2, protocol = "") {
5978
- const chosen = protocol ? `Sec-WebSocket-Protocol: ${protocol}\r
5978
+ const chosen2 = protocol ? `Sec-WebSocket-Protocol: ${protocol}\r
5979
5979
  ` : "";
5980
5980
  return latin1Bytes(
5981
5981
  `HTTP/1.1 101 Switching Protocols\r
5982
5982
  Upgrade: websocket\r
5983
5983
  Connection: Upgrade\r
5984
5984
  Sec-WebSocket-Accept: ${accept2}\r
5985
- ${chosen}\r
5985
+ ${chosen2}\r
5986
5986
  `
5987
5987
  );
5988
5988
  }
@@ -6435,7 +6435,7 @@ function satisfies(version, range2) {
6435
6435
  }
6436
6436
 
6437
6437
  // src/version.ts
6438
- var KERNEL_VERSION = true ? "1.109.0" : "0.0.0-dev";
6438
+ var KERNEL_VERSION = true ? "1.110.0" : "0.0.0-dev";
6439
6439
  var OS_RELEASE = "6.0.0-slicc";
6440
6440
  function procVersion() {
6441
6441
  return `Linux version ${OS_RELEASE} (slicc-kernel ${KERNEL_VERSION}) #1 SMP PREEMPT_DYNAMIC
@@ -6483,6 +6483,37 @@ function argsOf(pkg, raw) {
6483
6483
  if (!raw.every((arg) => typeof arg === "string")) return void 0;
6484
6484
  return raw.map((arg) => arg.replace(PACKAGE, pkg));
6485
6485
  }
6486
+ var warnedVariants = /* @__PURE__ */ new Set();
6487
+ function variantOf(pkg, raw) {
6488
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) return void 0;
6489
+ const { env, wasm } = raw;
6490
+ const path = inside(pkg, wasm);
6491
+ if (!path || !env || typeof env !== "object" || Array.isArray(env)) return void 0;
6492
+ const pairs = Object.entries(env);
6493
+ if (pairs.length === 0) return void 0;
6494
+ if (!pairs.every(([key, value2]) => ENV_KEY.test(key) && typeof value2 === "string")) {
6495
+ return void 0;
6496
+ }
6497
+ return { env: Object.fromEntries(pairs), wasm: path };
6498
+ }
6499
+ function variantsOf(pkg, name2, raw) {
6500
+ if (raw === void 0) return void 0;
6501
+ const variants = Array.isArray(raw) ? raw.map((one) => variantOf(pkg, one)) : [void 0];
6502
+ if (variants.every((one) => one !== void 0)) {
6503
+ return variants.length > 0 ? variants : void 0;
6504
+ }
6505
+ const key = `${pkg}:${name2}:${JSON.stringify(raw)}`;
6506
+ if (!warnedVariants.has(key)) {
6507
+ warnedVariants.add(key);
6508
+ console.warn(`slicc-kernel: ${pkg}: ${name2}: ignoring malformed "variants", running its wasm`);
6509
+ }
6510
+ return void 0;
6511
+ }
6512
+ function variantFor(variants, env) {
6513
+ return variants?.find(
6514
+ (one) => Object.entries(one.env).every(([key, value2]) => env[key] === value2)
6515
+ )?.wasm;
6516
+ }
6486
6517
  function abiOf(raw, fallback) {
6487
6518
  const abi = raw ?? fallback;
6488
6519
  return abi === "emscripten" || abi === "wasi" || abi === "js" ? abi : void 0;
@@ -6516,6 +6547,7 @@ function commandOf(pkg, name2, raw, packageAbi, shared) {
6516
6547
  const glue = abi === "wasi" ? wasm : inside(pkg, raw.glue);
6517
6548
  if (!abi || !glue || !wasm) return void 0;
6518
6549
  const imports = abi === "wasi" ? inside(pkg, raw.imports) : void 0;
6550
+ const variants = variantsOf(pkg, name2, raw.variants);
6519
6551
  return {
6520
6552
  name: name2,
6521
6553
  abi,
@@ -6527,7 +6559,8 @@ function commandOf(pkg, name2, raw, packageAbi, shared) {
6527
6559
  ...abi === "wasi" && raw.preopenRoot === true ? { preopenRoot: true } : {},
6528
6560
  ...args ? { args } : {},
6529
6561
  ...withEnv,
6530
- ...imports ? { imports } : {}
6562
+ ...imports ? { imports } : {},
6563
+ ...variants ? { variants } : {}
6531
6564
  };
6532
6565
  }
6533
6566
  function commandsOf(pkg, manifest) {
@@ -6847,13 +6880,14 @@ var CRONTAB_SOURCE = `export default async function crontab(ctx) {
6847
6880
  let text;
6848
6881
  try {
6849
6882
  if (file === "-") {
6883
+ const stream = new TextDecoder();
6850
6884
  const parts = [];
6851
6885
  for (;;) {
6852
6886
  const chunk = await ctx.read(0);
6853
6887
  if (chunk.length === 0) break;
6854
- parts.push(decode(chunk));
6888
+ parts.push(stream.decode(chunk, { stream: true }));
6855
6889
  }
6856
- text = parts.join("");
6890
+ text = parts.join("") + stream.decode();
6857
6891
  } else text = decode(await ctx.fs.readFile(ctx.resolve(file)));
6858
6892
  } catch (err) {
6859
6893
  await say(2, "crontab: " + file + ": " + (err && err.code ? err.code : String(err)) + "\\n");
@@ -7399,7 +7433,10 @@ var CronService = class {
7399
7433
  const account = await this.host.lookup(job.user);
7400
7434
  if (account) out.push({ source: "system", account, job });
7401
7435
  }
7402
- const names = await fs.readdir(SPOOL_DIR).catch(() => []);
7436
+ const names = await fs.readdir(SPOOL_DIR).catch((err) => {
7437
+ if (err?.code === "ENOENT") return [];
7438
+ throw err;
7439
+ });
7403
7440
  for (const name2 of names.sort()) {
7404
7441
  if (name2.startsWith(".") || name2.endsWith("~")) continue;
7405
7442
  const path = `${SPOOL_DIR}/${name2}`;
@@ -21991,9 +22028,18 @@ function targetOf(command) {
21991
22028
  ...command.env ? { env: command.env } : {},
21992
22029
  ...command.unset ? { unset: command.unset } : {},
21993
22030
  ...command.imports ? { imports: command.imports } : {},
21994
- ...command.preopenRoot ? { preopenRoot: true } : {}
22031
+ ...command.preopenRoot ? { preopenRoot: true } : {},
22032
+ ...command.variants ? { variants: command.variants } : {}
21995
22033
  };
21996
22034
  }
22035
+ function chosen(planned, env) {
22036
+ const { target } = planned;
22037
+ const wasm = variantFor(target.variants, env);
22038
+ if (wasm === void 0) return planned;
22039
+ const { asked: _asked, ...rest2 } = target;
22040
+ const glue = target.abi === "wasi" ? wasm : target.glue;
22041
+ return { ...planned, target: { ...rest2, wasm, glue } };
22042
+ }
21997
22043
  function withScriptEnv(target, command) {
21998
22044
  if (!command) return target;
21999
22045
  return {
@@ -22904,14 +22950,15 @@ var Launcher = class {
22904
22950
  ...target.preopenRoot ? { preopenRoot: true } : {}
22905
22951
  };
22906
22952
  }
22907
- async launch(planned, req) {
22908
- const { target, args } = planned;
22953
+ async launch(asked, req) {
22909
22954
  const cwd = await physicalPathAsync(this.base, req.cwd);
22910
22955
  const seen = { ...req.env, HOSTNAME: this.hostname, cwd };
22911
- const env = { ...expandDefaults(target.env, seen), ...req.env };
22912
- for (const key of target.unset ?? []) delete env[key];
22956
+ const env = { ...expandDefaults(asked.target.env, seen), ...req.env };
22957
+ for (const key of asked.target.unset ?? []) delete env[key];
22913
22958
  delete env[TICKET_ENV];
22914
22959
  env.HOSTNAME = this.hostname;
22960
+ const planned = chosen(asked, env);
22961
+ const { target, args } = planned;
22915
22962
  let program;
22916
22963
  await this.pnpmReady();
22917
22964
  try {