@ai-ecoverse/slicc-kernel 1.176.0 → 1.176.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.
@@ -2071,6 +2071,9 @@ function normalizePath(path) {
2071
2071
  }
2072
2072
  return `/${parts.join("/")}`;
2073
2073
  }
2074
+ function resolvePath(base, path) {
2075
+ return normalizePath(path.startsWith("/") ? path : `${base}/${path}`);
2076
+ }
2074
2077
  function inodeOf(path) {
2075
2078
  let h1 = 3735928559;
2076
2079
  let h2 = 1103547991;
@@ -7513,7 +7516,7 @@ var init_version = __esm({
7513
7516
  "src/version.ts"() {
7514
7517
  "use strict";
7515
7518
  init_captured_globals();
7516
- KERNEL_VERSION = true ? "1.176.0" : "0.0.0-dev";
7519
+ KERNEL_VERSION = true ? "1.176.2" : "0.0.0-dev";
7517
7520
  OS_RELEASE = "6.0.0-slicc";
7518
7521
  }
7519
7522
  });
@@ -9963,6 +9966,7 @@ function liveRoot(Fs, bridge) {
9963
9966
  plugin.mounts.add(root.mount);
9964
9967
  invalidateLiveVfs(Fs, plugin);
9965
9968
  guardRenames(Fs);
9969
+ guardCreateParents(Fs, bridge);
9966
9970
  guardKeptNodes(Fs, plugin.handled);
9967
9971
  guardStaleNodes(Fs, plugin);
9968
9972
  guardVanished(Fs);
@@ -10120,6 +10124,62 @@ function guardRenames(Fs) {
10120
10124
  rename(from, to);
10121
10125
  };
10122
10126
  }
10127
+ function createParentRefreshCount() {
10128
+ return createParentRefresh;
10129
+ }
10130
+ function aboveOf(path) {
10131
+ const norm = path.replace(/\/+$/, "") || "/";
10132
+ if (norm === "/") return "/";
10133
+ const slash = norm.lastIndexOf("/");
10134
+ const parent = slash <= 0 ? "/" : norm.slice(0, slash);
10135
+ if (parent === "/") return "/";
10136
+ const above = parent.lastIndexOf("/");
10137
+ return above <= 0 ? "/" : parent.slice(0, above);
10138
+ }
10139
+ function absoluteCreatePath(Fs, path) {
10140
+ if (typeof path !== "string" || path.length === 0) return void 0;
10141
+ if (path.startsWith("/")) return normalizePath(path);
10142
+ const cwd = Fs.cwd?.();
10143
+ if (typeof cwd !== "string") return void 0;
10144
+ return resolvePath(cwd, path);
10145
+ }
10146
+ function refreshCreateParent(Fs, bridge, path) {
10147
+ const abs = absoluteCreatePath(Fs, path);
10148
+ if (abs === void 0) return;
10149
+ createParentRefresh++;
10150
+ try {
10151
+ bridge.readdir(aboveOf(abs));
10152
+ } catch {
10153
+ }
10154
+ }
10155
+ function oncePastStaleParent(Fs, bridge, path, op) {
10156
+ try {
10157
+ return op();
10158
+ } catch (err) {
10159
+ if (err.errno !== wasiErrno("ENOENT")) throw err;
10160
+ refreshCreateParent(Fs, bridge, path);
10161
+ return op();
10162
+ }
10163
+ }
10164
+ function guardCreateParents(Fs, bridge) {
10165
+ if (Fs.sliccCreateParent) return;
10166
+ Fs.sliccCreateParent = true;
10167
+ const mkdir = Fs.mkdir?.bind(Fs);
10168
+ if (mkdir) {
10169
+ Fs.mkdir = (path, mode) => oncePastStaleParent(Fs, bridge, path, () => mkdir(path, mode));
10170
+ }
10171
+ const symlink = Fs.symlink?.bind(Fs);
10172
+ if (symlink) {
10173
+ Fs.symlink = (target, path) => oncePastStaleParent(Fs, bridge, path, () => symlink(target, path));
10174
+ }
10175
+ const open = Fs.open?.bind(Fs);
10176
+ if (open) {
10177
+ Fs.open = (path, flags, mode) => {
10178
+ if ((flags & O_CREAT) === 0) return open(path, flags, mode);
10179
+ return oncePastStaleParent(Fs, bridge, path, () => open(path, flags, mode));
10180
+ };
10181
+ }
10182
+ }
10123
10183
  function idOf3(value2) {
10124
10184
  return value2 === -1 || value2 === 4294967295 ? void 0 : value2 >>> 0;
10125
10185
  }
@@ -10224,7 +10284,7 @@ function readingLinks(Fs) {
10224
10284
  }
10225
10285
  };
10226
10286
  }
10227
- var S_IFDIR, S_IFREG, S_IFLNK2, S_IFSOCK, S_IFIFO2, S_IFMT2, PERM_MASK, DEFAULT_DIR_PERM, UMASK2, SEEK_CUR2, SEEK_END2, EARLY_WHOLE_FILE, O_APPEND4, O_ACCMODE, O_TRUNC, O_PATH, stale, opening, O_NOFOLLOW, RESOLVING;
10287
+ var S_IFDIR, S_IFREG, S_IFLNK2, S_IFSOCK, S_IFIFO2, S_IFMT2, PERM_MASK, DEFAULT_DIR_PERM, UMASK2, SEEK_CUR2, SEEK_END2, EARLY_WHOLE_FILE, O_APPEND4, O_ACCMODE, O_TRUNC, O_PATH, stale, opening, O_NOFOLLOW, RESOLVING, O_CREAT, createParentRefresh;
10228
10288
  var init_live_vfs_fs = __esm({
10229
10289
  "src/realm/live-vfs-fs.ts"() {
10230
10290
  "use strict";
@@ -10264,6 +10324,8 @@ var init_live_vfs_fs = __esm({
10264
10324
  ["readlink", () => false],
10265
10325
  ["truncate", () => true]
10266
10326
  ];
10327
+ O_CREAT = 64;
10328
+ createParentRefresh = 0;
10267
10329
  }
10268
10330
  });
10269
10331
 
@@ -10628,7 +10690,7 @@ function kernelUmask(imports, deps) {
10628
10690
  const { glue } = deps;
10629
10691
  wrapImport(imports, "openat", glue, (openat) => (dirfd, path, flags, varargs) => {
10630
10692
  const memory = deps.memory();
10631
- if (flags & O_CREAT && varargs && memory) new capturedInt32Array(memory.buffer)[varargs >> 2] &= ~umask;
10693
+ if (flags & O_CREAT2 && varargs && memory) new capturedInt32Array(memory.buffer)[varargs >> 2] &= ~umask;
10632
10694
  return openat(dirfd, path, flags, varargs);
10633
10695
  });
10634
10696
  wrapImport(
@@ -11060,7 +11122,7 @@ function useMounts(Fs, env = {}, live = false) {
11060
11122
  const seed = (path, text) => {
11061
11123
  let stream;
11062
11124
  try {
11063
- stream = open(path, O_WRONLY5 | O_CREAT | O_EXCL, 420);
11125
+ stream = open(path, O_WRONLY5 | O_CREAT2 | O_EXCL, 420);
11064
11126
  } catch {
11065
11127
  return;
11066
11128
  }
@@ -11074,8 +11136,8 @@ function useMounts(Fs, env = {}, live = false) {
11074
11136
  Fs.open = (path, flags, mode) => {
11075
11137
  const instead = backing[path];
11076
11138
  const text = defaults[path];
11077
- if (text !== void 0 && (flags & (O_ACCMODE3 | O_CREAT)) !== 0) seed(path, text);
11078
- if (!instead || (flags & (O_ACCMODE3 | O_CREAT)) !== 0) return open(path, flags, mode);
11139
+ if (text !== void 0 && (flags & (O_ACCMODE3 | O_CREAT2)) !== 0) seed(path, text);
11140
+ if (!instead || (flags & (O_ACCMODE3 | O_CREAT2)) !== 0) return open(path, flags, mode);
11079
11141
  try {
11080
11142
  return open(path, flags, mode);
11081
11143
  } catch (e) {
@@ -11192,7 +11254,7 @@ function devCreations(imports, fs, memory, glue) {
11192
11254
  imports,
11193
11255
  "openat",
11194
11256
  glue,
11195
- (own2) => (dirfd, path, flags, varargs) => flags & O_CREAT && check(dirfd, path) || own2(dirfd, path, flags, varargs),
11257
+ (own2) => (dirfd, path, flags, varargs) => flags & O_CREAT2 && check(dirfd, path) || own2(dirfd, path, flags, varargs),
11196
11258
  true
11197
11259
  );
11198
11260
  wrapImport(
@@ -11268,7 +11330,7 @@ function linuxDevices(Fs, owners = true) {
11268
11330
  }
11269
11331
  }
11270
11332
  }
11271
- var O_CLOEXEC, FD_CLOEXEC, F_DUPFD, F_GETFD, F_SETFD, F_GETFL, F_DUPFD_CLOEXEC, tracked, IMPORT_NAMES, EBADF, AT_SYMLINK_NOFOLLOW2, EMSCRIPTEN_EPERM, O_PATH2, LITERALS, UTIME_NOW, UTIME_OMIT, PROT_WRITE, MAP_PRIVATE, MAP_TYPE, O_WRONLY5, MAP_ALIGN, DIR_MODE, LINK_MODE, CHAR_DEVICE, O_TRUNC2, S_IFMT_BITS, S_IFIFO_BITS, REFUSED, OWN_ERRORS, O_ACCMODE3, O_CREAT, O_EXCL, field, pinnedRoot, rootKind, NAME, AT_FDCWD2, AT_EACCESS2, W_ACCESS, X_ACCESS, AT_SYMLINK_FOLLOW, UTS_FIELD, CHAR_DEVICES, DEVICE_MODES;
11333
+ var O_CLOEXEC, FD_CLOEXEC, F_DUPFD, F_GETFD, F_SETFD, F_GETFL, F_DUPFD_CLOEXEC, tracked, IMPORT_NAMES, EBADF, AT_SYMLINK_NOFOLLOW2, EMSCRIPTEN_EPERM, O_PATH2, LITERALS, UTIME_NOW, UTIME_OMIT, PROT_WRITE, MAP_PRIVATE, MAP_TYPE, O_WRONLY5, MAP_ALIGN, DIR_MODE, LINK_MODE, CHAR_DEVICE, O_TRUNC2, S_IFMT_BITS, S_IFIFO_BITS, REFUSED, OWN_ERRORS, O_ACCMODE3, O_CREAT2, O_EXCL, field, pinnedRoot, rootKind, NAME, AT_FDCWD2, AT_EACCESS2, W_ACCESS, X_ACCESS, AT_SYMLINK_FOLLOW, UTS_FIELD, CHAR_DEVICES, DEVICE_MODES;
11272
11334
  var init_process_fds = __esm({
11273
11335
  "src/process/process-fds.ts"() {
11274
11336
  "use strict";
@@ -11335,7 +11397,7 @@ var init_process_fds = __esm({
11335
11397
  REFUSED = new capturedSet([wasiErrno("EACCES"), wasiErrno("EPERM")]);
11336
11398
  OWN_ERRORS = 128 | 131072;
11337
11399
  O_ACCMODE3 = 3;
11338
- O_CREAT = 64;
11400
+ O_CREAT2 = 64;
11339
11401
  O_EXCL = 128;
11340
11402
  field = (text) => (text || "none").replace(/[\s\\]/g, (c) => `\\${c.charCodeAt(0).toString(8).padStart(3, "0")}`);
11341
11403
  rootKind = () => capturedGlobalThis.navigator?.storage ? "opfs" : "memory";
@@ -11766,6 +11828,7 @@ var init_procfs = __esm({
11766
11828
  init_captured_globals();
11767
11829
  init_cred();
11768
11830
  init_proc_info();
11831
+ init_live_vfs_fs();
11769
11832
  init_version();
11770
11833
  init_process_fds();
11771
11834
  HZ = 100;
@@ -11794,6 +11857,8 @@ var init_procfs = __esm({
11794
11857
  slicc_opfs_calls: (listing2) => `${listing2.opfsCalls ?? 0}
11795
11858
  `,
11796
11859
  slicc_opfs_ops: (listing2) => `${listing2.opfsOps ?? 0}
11860
+ `,
11861
+ slicc_create_parent_refresh: (_listing) => `${createParentRefreshCount()}
11797
11862
  `,
11798
11863
  slicc_meta_transactions: ({ meta }) => `${meta?.reads ?? 0} ${meta?.writes ?? 0}
11799
11864
  `,
@@ -13317,7 +13382,7 @@ function datesOf(real) {
13317
13382
  dates[key] = new capturedDate(value2);
13318
13383
  return dates;
13319
13384
  }
13320
- 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;
13385
+ 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_CREAT3, O_EXCL2, O_NOCTTY, O_TRUNC3, O_DIRECTORY, KILLED_BY_SIGPIPE, ProcessExit, SyscallError, KernelStreams;
13321
13386
  var init_kernel_streams = __esm({
13322
13387
  "src/process/kernel-streams.ts"() {
13323
13388
  "use strict";
@@ -13350,7 +13415,7 @@ var init_kernel_streams = __esm({
13350
13415
  CLIPBOARD_PATH2 = "/dev/clipboard";
13351
13416
  EMBEDDER_PATH2 = "/dev/embedder";
13352
13417
  DEVICE_INO = { 250: 1, 251: 2, 252: 3 };
13353
- O_CREAT2 = 64;
13418
+ O_CREAT3 = 64;
13354
13419
  O_EXCL2 = 128;
13355
13420
  O_NOCTTY = 256;
13356
13421
  O_TRUNC3 = 512;
@@ -13734,7 +13799,7 @@ var init_kernel_streams = __esm({
13734
13799
  }
13735
13800
  }
13736
13801
  refuseExclusiveLink(path, flags) {
13737
- if ((flags & (O_CREAT2 | O_EXCL2)) !== (O_CREAT2 | O_EXCL2)) return;
13802
+ if ((flags & (O_CREAT3 | O_EXCL2)) !== (O_CREAT3 | O_EXCL2)) return;
13738
13803
  let mode = 0;
13739
13804
  try {
13740
13805
  mode = this.Fs.stat?.(path, true)?.mode ?? 0;
@@ -13777,7 +13842,7 @@ var init_kernel_streams = __esm({
13777
13842
  vessel(open, kfd, at, terminal) {
13778
13843
  let stream;
13779
13844
  try {
13780
- stream = open("/dev/null", at.flags & ~(O_CREAT2 | O_EXCL2 | O_TRUNC3), at.mode);
13845
+ stream = open("/dev/null", at.flags & ~(O_CREAT3 | O_EXCL2 | O_TRUNC3), at.mode);
13781
13846
  } catch (e) {
13782
13847
  this.sys.close(kfd);
13783
13848
  throw e;
@@ -14095,7 +14160,7 @@ function placeholder(Fs, streams2, entry) {
14095
14160
  if (entry.kind === "tty") return Fs.open("/dev/tty", O_RDWR4);
14096
14161
  if (entry.kind === "stream" || DEVICE_KINDS.has(entry.kind)) return Fs.open("/dev/null", access);
14097
14162
  Fs.mkdirTree(PLACEHOLDER_DIR);
14098
- return Fs.open(`${PLACEHOLDER_DIR}/${entry.fd}`, access | O_CREAT3);
14163
+ return Fs.open(`${PLACEHOLDER_DIR}/${entry.fd}`, access | O_CREAT4);
14099
14164
  }
14100
14165
  function asFifo(stream, streams2, identity) {
14101
14166
  const inos = streamInos.get(streams2) ?? new capturedMap();
@@ -14137,7 +14202,7 @@ function restoreForkedStreams(Fs, streams2, table) {
14137
14202
  } else {
14138
14203
  const placed = place(
14139
14204
  Fs,
14140
- Fs.open(entry.path, entry.flags & ~(O_CREAT3 | O_EXCL3 | O_TRUNC4)),
14205
+ Fs.open(entry.path, entry.flags & ~(O_CREAT4 | O_EXCL3 | O_TRUNC4)),
14141
14206
  entry.fd
14142
14207
  );
14143
14208
  setCloseOnExec(placed, (entry.flags & O_CLOEXEC) !== 0);
@@ -14146,7 +14211,7 @@ function restoreForkedStreams(Fs, streams2, table) {
14146
14211
  }
14147
14212
  }
14148
14213
  }
14149
- var O_RDWR4, O_ACCMODE4, O_CREAT3, O_EXCL3, O_TRUNC4, PLACEHOLDER_DIR, NAMED_DEVICES, DEVICE_KINDS, ACCESS, DEVICES2, FIFO_MODE, nextStreamIno, streamInos;
14214
+ var O_RDWR4, O_ACCMODE4, O_CREAT4, O_EXCL3, O_TRUNC4, PLACEHOLDER_DIR, NAMED_DEVICES, DEVICE_KINDS, ACCESS, DEVICES2, FIFO_MODE, nextStreamIno, streamInos;
14150
14215
  var init_process_fork = __esm({
14151
14216
  "src/process/process-fork.ts"() {
14152
14217
  "use strict";
@@ -14154,7 +14219,7 @@ var init_process_fork = __esm({
14154
14219
  init_process_fds();
14155
14220
  O_RDWR4 = 2;
14156
14221
  O_ACCMODE4 = 3;
14157
- O_CREAT3 = 64;
14222
+ O_CREAT4 = 64;
14158
14223
  O_EXCL3 = 128;
14159
14224
  O_TRUNC4 = 512;
14160
14225
  PLACEHOLDER_DIR = "/dev/slicc-fd";
@@ -16079,7 +16144,7 @@ function signalNumber(signal) {
16079
16144
  }
16080
16145
  return SIG[name2];
16081
16146
  }
16082
- function resolvePath(cwd, path) {
16147
+ function resolvePath2(cwd, path) {
16083
16148
  const parts = [];
16084
16149
  for (const part of (path.startsWith("/") ? path : `${cwd}/${path}`).split("/")) {
16085
16150
  if (part === "" || part === ".") continue;
@@ -16411,7 +16476,7 @@ function createContext(o) {
16411
16476
  const pending = new capturedSet();
16412
16477
  const random2 = o.random ?? cryptoRandom;
16413
16478
  let held2;
16414
- const resolve2 = (path) => resolvePath(cwdFor(o.cwd, held2, path), path);
16479
+ const resolve2 = (path) => resolvePath2(cwdFor(o.cwd, held2, path), path);
16415
16480
  const tryDev = (abs) => resolveDevAsync(kernel, abs);
16416
16481
  const clean = cleanOf(o.changes);
16417
16482
  let exiting;