@ai-ecoverse/slicc-kernel 1.152.1 → 1.153.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.
@@ -2424,6 +2424,7 @@ var init_js_kernel = __esm({
2424
2424
  "fd-write",
2425
2425
  "fd-close",
2426
2426
  "fd-open-clipboard",
2427
+ "fd-open-embedder",
2427
2428
  "net-ws-ready",
2428
2429
  "sock-tls",
2429
2430
  "sock-tls-upgrade",
@@ -2759,6 +2760,7 @@ function* lookup(abs) {
2759
2760
  if (DEVICES.includes(name2)) return { kind: "device" };
2760
2761
  if (name2 === "tty") return { kind: "tty" };
2761
2762
  if (name2 === "clipboard") return { kind: "clipboard" };
2763
+ if (name2 === "embedder") return { kind: "embedder" };
2762
2764
  if (name2 === "sealed") return { kind: "sealed" };
2763
2765
  const std = STDIO.indexOf(name2);
2764
2766
  if (std >= 0) return { kind: "link", target: `${SELF_FD}/${std}`, fd: std };
@@ -2815,7 +2817,8 @@ function* fdTarget(fd, path) {
2815
2817
  if (info.kind === "file") return (yield { op: "fd-vfs-stat", fd }).path;
2816
2818
  if (info.terminal) return info.terminal;
2817
2819
  if (info.meta && "device" in info.meta) return `/dev/${info.meta.device}`;
2818
- if (info.kind === "clipboard" || info.kind === "sealed") return `/dev/${info.kind}`;
2820
+ if (info.kind === "clipboard" || info.kind === "sealed" || info.kind === "embedder")
2821
+ return `/dev/${info.kind}`;
2819
2822
  return `${info.kind === "socket" ? "socket" : "pipe"}:[${fd}]`;
2820
2823
  }
2821
2824
  function devFdStat(fd) {
@@ -2832,6 +2835,7 @@ function* devStat(abs, follow3) {
2832
2835
  case "device":
2833
2836
  case "tty":
2834
2837
  case "clipboard":
2838
+ case "embedder":
2835
2839
  case "sealed":
2836
2840
  return nodeStat(CHAR | 438);
2837
2841
  case "terminal":
@@ -2877,7 +2881,18 @@ function* devReaddir(abs) {
2877
2881
  if (node.kind !== "dir") throw new JsCallError("ENOTDIR", abs);
2878
2882
  const names = yield { op: "fd-tty-names" };
2879
2883
  const ttys = names.filter((n) => /^\/dev\/tty\d+$/.test(n)).map((n) => n.slice(5));
2880
- return [...DEVICES, "clipboard", "sealed", "tty", "fd", "pts", "shm", ...STDIO, ...ttys].sort();
2884
+ return [
2885
+ ...DEVICES,
2886
+ "clipboard",
2887
+ "embedder",
2888
+ "sealed",
2889
+ "tty",
2890
+ "fd",
2891
+ "pts",
2892
+ "shm",
2893
+ ...STDIO,
2894
+ ...ttys
2895
+ ].sort();
2881
2896
  }
2882
2897
  function* aliasOf(fd, abs, o) {
2883
2898
  const info = yield* fdInfo(fd, abs);
@@ -2918,6 +2933,11 @@ function* opened(abs, o) {
2918
2933
  fd: yield { op: "fd-open-clipboard", flags: accessFlags(o) },
2919
2934
  file: false
2920
2935
  };
2936
+ case "embedder":
2937
+ return {
2938
+ fd: yield { op: "fd-open-embedder", flags: accessFlags(o) },
2939
+ file: false
2940
+ };
2921
2941
  case "sealed":
2922
2942
  return { fd: yield { op: "fd-open-sealed", flags: accessFlags(o) }, file: false };
2923
2943
  case "terminal": {
@@ -3109,6 +3129,7 @@ var init_js_dev = __esm({
3109
3129
  "device",
3110
3130
  "tty",
3111
3131
  "clipboard",
3132
+ "embedder",
3112
3133
  "sealed"
3113
3134
  ]);
3114
3135
  }
@@ -3384,7 +3405,7 @@ function deviceOf(path) {
3384
3405
  }
3385
3406
  function namedDevice(path) {
3386
3407
  if (deviceOf(path) || stdioAlias(path) !== void 0) return true;
3387
- return path === SEALED_PATH || path === CLIPBOARD_PATH || path === "/dev/tty";
3408
+ return NAMED_PATHS.has(path);
3388
3409
  }
3389
3410
  function within(path, root) {
3390
3411
  return path === root || path.startsWith(root === "/" ? "/" : `${root}/`);
@@ -3457,7 +3478,7 @@ function promoteRequest(fd, f, handed) {
3457
3478
  ...f.buffer.handle !== void 0 && f.ino !== void 0 ? { ino: f.ino } : {}
3458
3479
  };
3459
3480
  }
3460
- var SYNTHETIC_DIRS, O_NONBLOCK, O_WRONLY2, O_RDWR2, O_APPEND2, SEALED_PATH, CLIPBOARD_PATH, WasiFds, GEN2;
3481
+ var SYNTHETIC_DIRS, O_NONBLOCK, O_WRONLY2, O_RDWR2, O_APPEND2, SEALED_PATH, CLIPBOARD_PATH, EMBEDDER_PATH, NAMED_PATHS, WasiFds, GEN2;
3461
3482
  var init_wasi_fds = __esm({
3462
3483
  "src/process/wasi/wasi-fds.ts"() {
3463
3484
  "use strict";
@@ -3474,6 +3495,13 @@ var init_wasi_fds = __esm({
3474
3495
  O_APPEND2 = 1024;
3475
3496
  SEALED_PATH = "/dev/sealed";
3476
3497
  CLIPBOARD_PATH = "/dev/clipboard";
3498
+ EMBEDDER_PATH = "/dev/embedder";
3499
+ NAMED_PATHS = /* @__PURE__ */ new Set([
3500
+ SEALED_PATH,
3501
+ CLIPBOARD_PATH,
3502
+ EMBEDDER_PATH,
3503
+ "/dev/tty"
3504
+ ]);
3477
3505
  WasiFds = class {
3478
3506
  table = /* @__PURE__ */ new Map();
3479
3507
  buffers = /* @__PURE__ */ new Map();
@@ -4086,7 +4114,7 @@ var init_wasi_fds = __esm({
4086
4114
  return joined2.split("/").includes("..") ? physical(this.fs, joined2) : normalize(joined2);
4087
4115
  }
4088
4116
  openKernelDevice(path, oflags, fdflags, rights) {
4089
- const { openSealed, openClipboard, openTty } = this.kernel.sys;
4117
+ const { openSealed, openClipboard, openEmbedder, openTty } = this.kernel.sys;
4090
4118
  const nonblock = (fdflags & FDFLAGS.NONBLOCK) !== 0;
4091
4119
  let fd;
4092
4120
  let kind;
@@ -4096,6 +4124,9 @@ var init_wasi_fds = __esm({
4096
4124
  } else if (path === CLIPBOARD_PATH && openClipboard) {
4097
4125
  fd = this.openCharDevice(openClipboard, oflags, rights);
4098
4126
  kind = "clipboard";
4127
+ } else if (path === EMBEDDER_PATH && openEmbedder) {
4128
+ fd = this.openCharDevice(openEmbedder, oflags, rights);
4129
+ kind = "embedder";
4099
4130
  } else if (path === "/dev/tty" || /^\/dev\/tty\d+$/.test(path)) {
4100
4131
  const exclusive = (oflags & OFLAGS.CREAT) !== 0 && (oflags & OFLAGS.EXCL) !== 0;
4101
4132
  try {
@@ -5346,6 +5377,7 @@ function kernelFiletype(kind) {
5346
5377
  case "tty":
5347
5378
  case "sealed":
5348
5379
  case "clipboard":
5380
+ case "embedder":
5349
5381
  return { filetype: FILETYPE.CHARACTER_DEVICE, seeks: false };
5350
5382
  case "device":
5351
5383
  return { filetype: FILETYPE.CHARACTER_DEVICE, seeks: true };
@@ -6423,7 +6455,7 @@ var init_wasi_host = __esm({
6423
6455
  return gone2 ? { ...out, nlink: 0n } : out;
6424
6456
  }
6425
6457
  synthetic(path) {
6426
- return deviceOf(path) !== void 0 || path === SEALED_PATH && !!this.o.kernel.sys.openSealed || path === CLIPBOARD_PATH && !!this.o.kernel.sys.openClipboard;
6458
+ return deviceOf(path) !== void 0 || path === SEALED_PATH && !!this.o.kernel.sys.openSealed || path === CLIPBOARD_PATH && !!this.o.kernel.sys.openClipboard || path === EMBEDDER_PATH && !!this.o.kernel.sys.openEmbedder;
6427
6459
  }
6428
6460
  linkedDev(path, follow3) {
6429
6461
  if (!follow3) return void 0;
@@ -7213,7 +7245,7 @@ var KERNEL_VERSION, OS_RELEASE;
7213
7245
  var init_version = __esm({
7214
7246
  "src/version.ts"() {
7215
7247
  "use strict";
7216
- KERNEL_VERSION = true ? "1.152.1" : "0.0.0-dev";
7248
+ KERNEL_VERSION = true ? "1.153.0" : "0.0.0-dev";
7217
7249
  OS_RELEASE = "6.0.0-slicc";
7218
7250
  }
7219
7251
  });
@@ -12843,7 +12875,7 @@ function sealedStat(minor = 250) {
12843
12875
  const now = /* @__PURE__ */ new Date();
12844
12876
  return {
12845
12877
  dev: 22,
12846
- ino: minor === 251 ? 2 : 1,
12878
+ ino: DEVICE_INO[minor],
12847
12879
  mode: 8630,
12848
12880
  nlink: 1,
12849
12881
  uid: 0,
@@ -12867,7 +12899,7 @@ function datesOf(real) {
12867
12899
  dates[key] = new Date(value2);
12868
12900
  return dates;
12869
12901
  }
12870
- var POLLIN, POLLOUT, POLLERR, POLLHUP, POLLRDNORM, POLLWRNORM, TCSETSF, O_NONBLOCK2, SOCKET_MODE, PTY_PATH, TTY_PATH, PTS_MAJOR, TTY_NAME, SEALED_PATH2, STRERROR, CLIPBOARD_PATH2, O_CREAT2, O_EXCL2, O_NOCTTY, O_TRUNC3, O_DIRECTORY, KILLED_BY_SIGPIPE, ProcessExit, SyscallError, KernelStreams;
12902
+ var POLLIN, POLLOUT, POLLERR, POLLHUP, POLLRDNORM, POLLWRNORM, TCSETSF, O_NONBLOCK2, SOCKET_MODE, PTY_PATH, TTY_PATH, PTS_MAJOR, TTY_NAME, SEALED_PATH2, STRERROR, CLIPBOARD_PATH2, EMBEDDER_PATH2, DEVICE_INO, O_CREAT2, O_EXCL2, O_NOCTTY, O_TRUNC3, O_DIRECTORY, KILLED_BY_SIGPIPE, ProcessExit, SyscallError, KernelStreams;
12871
12903
  var init_kernel_streams = __esm({
12872
12904
  "src/process/kernel-streams.ts"() {
12873
12905
  "use strict";
@@ -12897,6 +12929,8 @@ var init_kernel_streams = __esm({
12897
12929
  EINTR: "Interrupted system call"
12898
12930
  };
12899
12931
  CLIPBOARD_PATH2 = "/dev/clipboard";
12932
+ EMBEDDER_PATH2 = "/dev/embedder";
12933
+ DEVICE_INO = { 250: 1, 251: 2, 252: 3 };
12900
12934
  O_CREAT2 = 64;
12901
12935
  O_EXCL2 = 128;
12902
12936
  O_NOCTTY = 256;
@@ -12979,7 +13013,7 @@ var init_kernel_streams = __esm({
12979
13013
  stream.stream_ops = { ...stream.stream_ops, getattr: () => this.Fs.stat?.(name2) ?? {} };
12980
13014
  }
12981
13015
  nameDevice(stream, kind) {
12982
- this.nameStream(stream, kind === "sealed" ? SEALED_PATH2 : CLIPBOARD_PATH2);
13016
+ this.nameStream(stream, `/dev/${kind}`);
12983
13017
  }
12984
13018
  listSealed() {
12985
13019
  const fs = this.Fs;
@@ -12987,7 +13021,8 @@ var init_kernel_streams = __esm({
12987
13021
  if (!analyzePath || !mkdev || !makedev) return;
12988
13022
  const nodes = [
12989
13023
  [SEALED_PATH2, 250, this.sys.openSealed],
12990
- [CLIPBOARD_PATH2, 251, this.sys.openClipboard]
13024
+ [CLIPBOARD_PATH2, 251, this.sys.openClipboard],
13025
+ [EMBEDDER_PATH2, 252, this.sys.openEmbedder]
12991
13026
  ];
12992
13027
  for (const [path, minor, opener] of nodes) {
12993
13028
  if (!opener) continue;
@@ -13017,6 +13052,7 @@ var init_kernel_streams = __esm({
13017
13052
  this.attach(stream, kfd, terminal);
13018
13053
  this.nameStream(stream, path);
13019
13054
  if (path === CLIPBOARD_PATH2) this.reportClose(kfd);
13055
+ if (path === EMBEDDER_PATH2) this.reportClose(kfd);
13020
13056
  }
13021
13057
  reporting = /* @__PURE__ */ new Set();
13022
13058
  reportClose(kfd) {
@@ -13304,10 +13340,11 @@ var init_kernel_streams = __esm({
13304
13340
  return this.vessel(open, kfd, { path, flags, mode }, false);
13305
13341
  }
13306
13342
  openClipboard(open, path, flags, mode) {
13307
- const { openClipboard } = this.sys;
13308
- if (path !== CLIPBOARD_PATH2 || !openClipboard) return void 0;
13343
+ const clipboard = path === CLIPBOARD_PATH2;
13344
+ const opener = clipboard ? this.sys.openClipboard : this.sys.openEmbedder;
13345
+ if (!clipboard && path !== EMBEDDER_PATH2 || !opener) return void 0;
13309
13346
  if (flags & O_DIRECTORY) throw new this.Fs.ErrnoError(wasiErrno("ENOTDIR"));
13310
- const kfd = this.call(() => openClipboard.call(this.sys, flags & 3));
13347
+ const kfd = this.call(() => opener.call(this.sys, flags & 3));
13311
13348
  try {
13312
13349
  const stream = this.vessel(open, kfd, { path, flags, mode }, false);
13313
13350
  this.reportClose(kfd);
@@ -13343,6 +13380,7 @@ var init_kernel_streams = __esm({
13343
13380
  fs[name2] = (path, ...rest2) => {
13344
13381
  if (path === SEALED_PATH2 && this.sys.openSealed) return sealedStat();
13345
13382
  if (path === CLIPBOARD_PATH2 && this.sys.openClipboard) return sealedStat(251);
13383
+ if (path === EMBEDDER_PATH2 && this.sys.openEmbedder) return sealedStat(252);
13346
13384
  const owned = this.ownedTty(path);
13347
13385
  if (owned && isPtyPath(path)) return this.owned(path, ptyStat(path));
13348
13386
  if (!isPtyPath(path))
@@ -13636,8 +13674,7 @@ function placeholder(Fs, streams2, entry) {
13636
13674
  const access = entry.flags ?? O_RDWR4;
13637
13675
  if (entry.kind === "socket") return streams2.socketStream(access);
13638
13676
  if (entry.kind === "tty") return Fs.open("/dev/tty", O_RDWR4);
13639
- if (entry.kind === "stream" || entry.kind === "clipboard" || entry.kind === "sealed")
13640
- return Fs.open("/dev/null", access);
13677
+ if (entry.kind === "stream" || DEVICE_KINDS.has(entry.kind)) return Fs.open("/dev/null", access);
13641
13678
  Fs.mkdirTree(PLACEHOLDER_DIR);
13642
13679
  return Fs.open(`${PLACEHOLDER_DIR}/${entry.fd}`, access | O_CREAT3);
13643
13680
  }
@@ -13661,8 +13698,9 @@ function placeKernelStream(Fs, streams2, entry) {
13661
13698
  streams2.sizeFromKernel(stream, entry.kernel);
13662
13699
  } else if (entry.kind === "socket") streams2.attachSocket(stream, entry.kernel);
13663
13700
  else streams2.attach(stream, entry.kernel, entry.kind === "tty");
13664
- if (entry.kind === "clipboard") streams2.reportClose(entry.kernel);
13665
- if (entry.kind === "sealed" || entry.kind === "clipboard") streams2.nameDevice(stream, entry.kind);
13701
+ if (entry.kind === "clipboard" || entry.kind === "embedder") streams2.reportClose(entry.kernel);
13702
+ if (DEVICE_KINDS.has(entry.kind))
13703
+ streams2.nameDevice(stream, entry.kind);
13666
13704
  if (entry.kind === "tty") streams2.nameTerminal(stream);
13667
13705
  if (entry.kind === "stream") {
13668
13706
  asFifo(stream, streams2, entry.desc !== void 0 ? `d${entry.desc}` : `k${entry.kernel}`);
@@ -13689,7 +13727,7 @@ function restoreForkedStreams(Fs, streams2, table) {
13689
13727
  }
13690
13728
  }
13691
13729
  }
13692
- var O_RDWR4, O_ACCMODE4, O_CREAT3, O_EXCL3, O_TRUNC4, PLACEHOLDER_DIR, NAMED_DEVICES, ACCESS, DEVICES2, FIFO_MODE, nextStreamIno, streamInos;
13730
+ var O_RDWR4, O_ACCMODE4, O_CREAT3, O_EXCL3, O_TRUNC4, PLACEHOLDER_DIR, NAMED_DEVICES, DEVICE_KINDS, ACCESS, DEVICES2, FIFO_MODE, nextStreamIno, streamInos;
13693
13731
  var init_process_fork = __esm({
13694
13732
  "src/process/process-fork.ts"() {
13695
13733
  "use strict";
@@ -13702,8 +13740,10 @@ var init_process_fork = __esm({
13702
13740
  PLACEHOLDER_DIR = "/dev/slicc-fd";
13703
13741
  NAMED_DEVICES = {
13704
13742
  "/dev/sealed": "sealed",
13705
- "/dev/clipboard": "clipboard"
13743
+ "/dev/clipboard": "clipboard",
13744
+ "/dev/embedder": "embedder"
13706
13745
  };
13746
+ DEVICE_KINDS = /* @__PURE__ */ new Set(["sealed", "clipboard", "embedder"]);
13707
13747
  ACCESS = { 0: "read", 1: "write" };
13708
13748
  DEVICES2 = {
13709
13749
  "/dev/null": "null",
@@ -14489,6 +14529,9 @@ function kernelSys(transport) {
14489
14529
  clipboardAbort(fd) {
14490
14530
  call2({ op: "fd-clipboard-abort", fd }, "fd-clipboard-abort");
14491
14531
  },
14532
+ openEmbedder(flags) {
14533
+ return json2(call2({ op: "fd-open-embedder", flags }, "fd-open-embedder"));
14534
+ },
14492
14535
  ptyNumbers() {
14493
14536
  return json2(call2({ op: "pty-list" }, "pty-list"));
14494
14537
  },
@@ -14984,7 +15027,14 @@ var init_process_runtime = __esm({
14984
15027
  O_ACCMODE5 = 3;
14985
15028
  O_DIRECTORY2 = 65536;
14986
15029
  accessMode = (access) => access === "read" ? O_RDONLY2 : access === "write" ? O_WRONLY6 : O_RDWR6;
14987
- PLACED = /* @__PURE__ */ new Set(["stream", "file", "socket", "clipboard", "sealed"]);
15030
+ PLACED = /* @__PURE__ */ new Set([
15031
+ "stream",
15032
+ "file",
15033
+ "socket",
15034
+ "clipboard",
15035
+ "embedder",
15036
+ "sealed"
15037
+ ]);
14988
15038
  GLUE_TRAILER = [
14989
15039
  "if (typeof ENV !== 'undefined') Object.assign(ENV, Module.sliccEnv);",
14990
15040
  "if (typeof thisProgram !== 'undefined' && Module.thisProgram === '') thisProgram = '';",