@ai-ecoverse/slicc-kernel 1.26.1 → 1.26.3

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.
@@ -290,6 +290,12 @@ var init_ranged = __esm({
290
290
  get changed() {
291
291
  return this.pages.changed;
292
292
  }
293
+ get pinnedVersion() {
294
+ return this.version;
295
+ }
296
+ forget() {
297
+ this.pages.reset(this.pages.length);
298
+ }
293
299
  size() {
294
300
  return this.pages.length;
295
301
  }
@@ -825,6 +831,17 @@ function flushLiveVfs(Fs, plugin) {
825
831
  }
826
832
  }
827
833
  }
834
+ function refresh(s) {
835
+ if (s.dirty || s.orphan) return;
836
+ if (s.ranged?.pinnedVersion !== void 0) {
837
+ s.ranged.forget();
838
+ return;
839
+ }
840
+ s.data = void 0;
841
+ s.ranged = void 0;
842
+ s.len = 0;
843
+ s.loaded = false;
844
+ }
828
845
  function invalidateLiveVfs(Fs, plugin) {
829
846
  const table = Fs.nameTable ?? [];
830
847
  const drop = [];
@@ -836,12 +853,7 @@ function invalidateLiveVfs(Fs, plugin) {
836
853
  s.listed = void 0;
837
854
  if (s.openCount === 0) {
838
855
  if (node !== node.mount.root && !node.mounted) drop.push(node);
839
- } else if (!s.dirty && !s.orphan) {
840
- s.data = void 0;
841
- s.ranged = void 0;
842
- s.len = 0;
843
- s.loaded = false;
844
- }
856
+ } else refresh(s);
845
857
  }
846
858
  }
847
859
  if (!Fs.hashRemoveNode) return;
@@ -1330,55 +1342,159 @@ var init_sync_sab_bridge = __esm({
1330
1342
  }
1331
1343
  });
1332
1344
 
1345
+ // src/process/wasi/wasi-abi.ts
1346
+ function wasiErrnoOf(code2) {
1347
+ if (!code2) return E.IO;
1348
+ const name = code2.startsWith("E") ? code2.slice(1) : code2;
1349
+ if (name === "OPNOTSUPP") return E.NOTSUP;
1350
+ if (name === "WOULDBLOCK") return E.AGAIN;
1351
+ if (name === "NOMEDIUM") return E.NODEV;
1352
+ return E[name] ?? E.IO;
1353
+ }
1354
+ var E, FILETYPE, RIGHTS, OFLAGS, FDFLAGS, LOOKUP_SYMLINK_FOLLOW, WHENCE, CLOCK, FSTFLAGS, EVENTTYPE, SUBCLOCK_ABSTIME, EVENT_FD_READWRITE_HANGUP, RIFLAGS, SDFLAGS, PREOPENTYPE_DIR, SIZE, WASI_SIGNAL_TO_POSIX;
1355
+ var init_wasi_abi = __esm({
1356
+ "src/process/wasi/wasi-abi.ts"() {
1357
+ "use strict";
1358
+ E = {
1359
+ SUCCESS: 0,
1360
+ "2BIG": 1,
1361
+ ACCES: 2,
1362
+ ADDRINUSE: 3,
1363
+ ADDRNOTAVAIL: 4,
1364
+ AFNOSUPPORT: 5,
1365
+ AGAIN: 6,
1366
+ ALREADY: 7,
1367
+ BADF: 8,
1368
+ BADMSG: 9,
1369
+ BUSY: 10,
1370
+ CANCELED: 11,
1371
+ CHILD: 12,
1372
+ CONNABORTED: 13,
1373
+ CONNREFUSED: 14,
1374
+ CONNRESET: 15,
1375
+ DEADLK: 16,
1376
+ DESTADDRREQ: 17,
1377
+ DOM: 18,
1378
+ DQUOT: 19,
1379
+ EXIST: 20,
1380
+ FAULT: 21,
1381
+ FBIG: 22,
1382
+ HOSTUNREACH: 23,
1383
+ IDRM: 24,
1384
+ ILSEQ: 25,
1385
+ INPROGRESS: 26,
1386
+ INTR: 27,
1387
+ INVAL: 28,
1388
+ IO: 29,
1389
+ ISCONN: 30,
1390
+ ISDIR: 31,
1391
+ LOOP: 32,
1392
+ MFILE: 33,
1393
+ MLINK: 34,
1394
+ MSGSIZE: 35,
1395
+ MULTIHOP: 36,
1396
+ NAMETOOLONG: 37,
1397
+ NETDOWN: 38,
1398
+ NETRESET: 39,
1399
+ NETUNREACH: 40,
1400
+ NFILE: 41,
1401
+ NOBUFS: 42,
1402
+ NODEV: 43,
1403
+ NOENT: 44,
1404
+ NOEXEC: 45,
1405
+ NOLCK: 46,
1406
+ NOLINK: 47,
1407
+ NOMEM: 48,
1408
+ NOMSG: 49,
1409
+ NOPROTOOPT: 50,
1410
+ NOSPC: 51,
1411
+ NOSYS: 52,
1412
+ NOTCONN: 53,
1413
+ NOTDIR: 54,
1414
+ NOTEMPTY: 55,
1415
+ NOTRECOVERABLE: 56,
1416
+ NOTSOCK: 57,
1417
+ NOTSUP: 58,
1418
+ NOTTY: 59,
1419
+ NXIO: 60,
1420
+ OVERFLOW: 61,
1421
+ OWNERDEAD: 62,
1422
+ PERM: 63,
1423
+ PIPE: 64,
1424
+ PROTO: 65,
1425
+ PROTONOSUPPORT: 66,
1426
+ PROTOTYPE: 67,
1427
+ RANGE: 68,
1428
+ ROFS: 69,
1429
+ SPIPE: 70,
1430
+ SRCH: 71,
1431
+ STALE: 72,
1432
+ TIMEDOUT: 73,
1433
+ TXTBSY: 74,
1434
+ XDEV: 75,
1435
+ NOTCAPABLE: 76
1436
+ };
1437
+ FILETYPE = {
1438
+ UNKNOWN: 0,
1439
+ BLOCK_DEVICE: 1,
1440
+ CHARACTER_DEVICE: 2,
1441
+ DIRECTORY: 3,
1442
+ REGULAR_FILE: 4,
1443
+ SOCKET_DGRAM: 5,
1444
+ SOCKET_STREAM: 6,
1445
+ SYMBOLIC_LINK: 7
1446
+ };
1447
+ RIGHTS = {
1448
+ FD_DATASYNC: 1n << 0n,
1449
+ FD_READ: 1n << 1n,
1450
+ FD_SEEK: 1n << 2n,
1451
+ FD_FDSTAT_SET_FLAGS: 1n << 3n,
1452
+ FD_SYNC: 1n << 4n,
1453
+ FD_TELL: 1n << 5n,
1454
+ FD_WRITE: 1n << 6n,
1455
+ ALL: (1n << 30n) - 1n
1456
+ };
1457
+ OFLAGS = { CREAT: 1, DIRECTORY: 2, EXCL: 4, TRUNC: 8 };
1458
+ FDFLAGS = { APPEND: 1, DSYNC: 2, NONBLOCK: 4, RSYNC: 8, SYNC: 16 };
1459
+ LOOKUP_SYMLINK_FOLLOW = 1;
1460
+ WHENCE = { SET: 0, CUR: 1, END: 2 };
1461
+ CLOCK = { REALTIME: 0, MONOTONIC: 1, PROCESS_CPUTIME: 2, THREAD_CPUTIME: 3 };
1462
+ FSTFLAGS = { ATIM: 1, ATIM_NOW: 2, MTIM: 4, MTIM_NOW: 8 };
1463
+ EVENTTYPE = { CLOCK: 0, FD_READ: 1, FD_WRITE: 2 };
1464
+ SUBCLOCK_ABSTIME = 1;
1465
+ EVENT_FD_READWRITE_HANGUP = 1;
1466
+ RIFLAGS = { PEEK: 1, WAITALL: 2 };
1467
+ SDFLAGS = { RD: 1, WR: 2 };
1468
+ PREOPENTYPE_DIR = 0;
1469
+ SIZE = {
1470
+ FILESTAT: 64,
1471
+ FDSTAT: 24,
1472
+ DIRENT: 24,
1473
+ SUBSCRIPTION: 48,
1474
+ EVENT: 32
1475
+ };
1476
+ WASI_SIGNAL_TO_POSIX = Object.fromEntries(
1477
+ Array.from({ length: 30 }, (_, i) => [i + 1, i + 1 < 16 ? i + 1 : i + 2])
1478
+ );
1479
+ }
1480
+ });
1481
+
1333
1482
  // src/process/wasi-errno.ts
1334
1483
  function wasiErrno(code2) {
1335
- return WASI_ERRNO[code2] ?? EIO2;
1484
+ return WASI_ERRNO[code2] ?? E.IO;
1336
1485
  }
1337
- var WASI_ERRNO, EIO2;
1486
+ var WASI_ERRNO;
1338
1487
  var init_wasi_errno = __esm({
1339
1488
  "src/process/wasi-errno.ts"() {
1340
1489
  "use strict";
1490
+ init_wasi_abi();
1341
1491
  WASI_ERRNO = {
1342
- EACCES: 2,
1343
- EADDRINUSE: 3,
1344
- EADDRNOTAVAIL: 4,
1345
- EAFNOSUPPORT: 5,
1346
- EAGAIN: 6,
1347
- ECONNREFUSED: 14,
1348
- EEXIST: 20,
1349
- EINPROGRESS: 26,
1350
- EISCONN: 30,
1351
- ENETUNREACH: 40,
1352
- ENOTCONN: 53,
1353
- ENOTSOCK: 57,
1354
- EPROTONOSUPPORT: 66,
1492
+ ...Object.fromEntries(Object.entries(E).map(([name, errno2]) => [`E${name}`, errno2])),
1493
+ EWOULDBLOCK: E.AGAIN,
1494
+ ENOTSUP: 138,
1355
1495
  EOPNOTSUPP: 138,
1356
- EBADF: 8,
1357
- EBUSY: 10,
1358
- ECHILD: 12,
1359
- EFAULT: 21,
1360
- EINTR: 27,
1361
- EINVAL: 28,
1362
- EIO: 29,
1363
- EMFILE: 33,
1364
- ENODEV: 43,
1365
- ENOENT: 44,
1366
- ENOEXEC: 45,
1367
- ENOSYS: 52,
1368
- ENOTDIR: 54,
1369
- ENOTTY: 59,
1370
- ENXIO: 60,
1371
- EPERM: 63,
1372
- EPIPE: 64,
1373
- ESPIPE: 70,
1374
- ESRCH: 71,
1375
- ETIMEDOUT: 73,
1376
- EFBIG: 22,
1377
- ENOSPC: 51,
1378
- EROFS: 69,
1379
1496
  ENOMEDIUM: 148
1380
1497
  };
1381
- EIO2 = 29;
1382
1498
  }
1383
1499
  });
1384
1500
 
@@ -2465,6 +2581,7 @@ function isVfsFile(Fs, stream) {
2465
2581
  function orphanContents(stream) {
2466
2582
  const live = stream.node.live;
2467
2583
  if (!live?.orphan) return void 0;
2584
+ if (live.ranged) return live.ranged.read(0, live.ranged.size());
2468
2585
  return live.data?.slice(0, live.len ?? live.data.length) ?? new Uint8Array(0);
2469
2586
  }
2470
2587
  function vfsPromoter(Fs, sys, streams, livePath) {
@@ -2474,11 +2591,14 @@ function vfsPromoter(Fs, sys, streams, livePath) {
2474
2591
  let kfd = promoted.get(stream.shared);
2475
2592
  if (kfd === void 0) {
2476
2593
  const contents = orphanContents(stream);
2594
+ const ranged = stream.node.live?.ranged;
2595
+ const version = ranged?.pinnedVersion;
2596
+ const pin = ranged && version !== void 0 ? { version, size: ranged.size() } : void 0;
2477
2597
  kfd = sys.openVfs(
2478
2598
  livePath(stream),
2479
2599
  stream.flags,
2480
2600
  stream.position,
2481
- contents !== void 0 ? { contents, orphan: true } : void 0
2601
+ contents !== void 0 ? { contents, orphan: true } : pin ? { pin } : void 0
2482
2602
  );
2483
2603
  promoted.set(stream.shared, kfd);
2484
2604
  }
@@ -3262,7 +3382,8 @@ function kernelSys(transport) {
3262
3382
  ...opts?.contents !== void 0 ? { contents: opts.contents } : {},
3263
3383
  ...opts?.orphan ? { orphan: true } : {},
3264
3384
  ...opts?.truncate ? { truncate: true } : {},
3265
- ...opts?.create ? { create: true } : {}
3385
+ ...opts?.create ? { create: true } : {},
3386
+ ...opts?.pin ? { pin: opts.pin } : {}
3266
3387
  },
3267
3388
  `fd-open-vfs ${path}`
3268
3389
  )
@@ -3840,6 +3961,9 @@ var init_wasi_files = __esm({
3840
3961
  get isRanged() {
3841
3962
  return this.ranged !== void 0;
3842
3963
  }
3964
+ get pin() {
3965
+ return this.ranged?.pinnedVersion;
3966
+ }
3843
3967
  keep() {
3844
3968
  if (this.ranged) this.ranged.pin();
3845
3969
  else this.load();
@@ -3970,116 +4094,6 @@ var init_wasi_files = __esm({
3970
4094
  }
3971
4095
  });
3972
4096
 
3973
- // src/process/wasi/wasi-abi.ts
3974
- function wasiErrnoOf(code2) {
3975
- if (!code2) return E.IO;
3976
- const name = code2.startsWith("E") ? code2.slice(1) : code2;
3977
- if (name === "OPNOTSUPP") return E.NOTSUP;
3978
- if (name === "WOULDBLOCK") return E.AGAIN;
3979
- if (name === "NOMEDIUM") return E.NODEV;
3980
- return E[name] ?? E.IO;
3981
- }
3982
- var E, FILETYPE, RIGHTS, OFLAGS, FDFLAGS, LOOKUP_SYMLINK_FOLLOW, WHENCE, CLOCK, FSTFLAGS, EVENTTYPE, SUBCLOCK_ABSTIME, EVENT_FD_READWRITE_HANGUP, RIFLAGS, SDFLAGS, PREOPENTYPE_DIR, SIZE, WASI_SIGNAL_TO_POSIX;
3983
- var init_wasi_abi = __esm({
3984
- "src/process/wasi/wasi-abi.ts"() {
3985
- "use strict";
3986
- E = {
3987
- SUCCESS: 0,
3988
- "2BIG": 1,
3989
- ACCES: 2,
3990
- ADDRINUSE: 3,
3991
- ADDRNOTAVAIL: 4,
3992
- AFNOSUPPORT: 5,
3993
- AGAIN: 6,
3994
- ALREADY: 7,
3995
- BADF: 8,
3996
- BUSY: 10,
3997
- CHILD: 12,
3998
- CONNREFUSED: 14,
3999
- CONNRESET: 15,
4000
- NODEV: 43,
4001
- EXIST: 20,
4002
- FAULT: 21,
4003
- FBIG: 22,
4004
- INPROGRESS: 26,
4005
- INTR: 27,
4006
- INVAL: 28,
4007
- IO: 29,
4008
- ISCONN: 30,
4009
- ISDIR: 31,
4010
- LOOP: 32,
4011
- MFILE: 33,
4012
- NAMETOOLONG: 37,
4013
- NETUNREACH: 40,
4014
- NOENT: 44,
4015
- NOEXEC: 45,
4016
- NOMEM: 48,
4017
- NOSPC: 51,
4018
- NOSYS: 52,
4019
- NOTCONN: 53,
4020
- NOTDIR: 54,
4021
- NOTEMPTY: 55,
4022
- NOTSOCK: 57,
4023
- NOTSUP: 58,
4024
- NOTTY: 59,
4025
- NXIO: 60,
4026
- PERM: 63,
4027
- PIPE: 64,
4028
- PROTONOSUPPORT: 66,
4029
- RANGE: 68,
4030
- ROFS: 69,
4031
- SPIPE: 70,
4032
- SRCH: 71,
4033
- STALE: 72,
4034
- TIMEDOUT: 73,
4035
- XDEV: 75,
4036
- NOTCAPABLE: 76
4037
- };
4038
- FILETYPE = {
4039
- UNKNOWN: 0,
4040
- BLOCK_DEVICE: 1,
4041
- CHARACTER_DEVICE: 2,
4042
- DIRECTORY: 3,
4043
- REGULAR_FILE: 4,
4044
- SOCKET_DGRAM: 5,
4045
- SOCKET_STREAM: 6,
4046
- SYMBOLIC_LINK: 7
4047
- };
4048
- RIGHTS = {
4049
- FD_DATASYNC: 1n << 0n,
4050
- FD_READ: 1n << 1n,
4051
- FD_SEEK: 1n << 2n,
4052
- FD_FDSTAT_SET_FLAGS: 1n << 3n,
4053
- FD_SYNC: 1n << 4n,
4054
- FD_TELL: 1n << 5n,
4055
- FD_WRITE: 1n << 6n,
4056
- ALL: (1n << 30n) - 1n
4057
- };
4058
- OFLAGS = { CREAT: 1, DIRECTORY: 2, EXCL: 4, TRUNC: 8 };
4059
- FDFLAGS = { APPEND: 1, DSYNC: 2, NONBLOCK: 4, RSYNC: 8, SYNC: 16 };
4060
- LOOKUP_SYMLINK_FOLLOW = 1;
4061
- WHENCE = { SET: 0, CUR: 1, END: 2 };
4062
- CLOCK = { REALTIME: 0, MONOTONIC: 1, PROCESS_CPUTIME: 2, THREAD_CPUTIME: 3 };
4063
- FSTFLAGS = { ATIM: 1, ATIM_NOW: 2, MTIM: 4, MTIM_NOW: 8 };
4064
- EVENTTYPE = { CLOCK: 0, FD_READ: 1, FD_WRITE: 2 };
4065
- SUBCLOCK_ABSTIME = 1;
4066
- EVENT_FD_READWRITE_HANGUP = 1;
4067
- RIFLAGS = { PEEK: 1, WAITALL: 2 };
4068
- SDFLAGS = { RD: 1, WR: 2 };
4069
- PREOPENTYPE_DIR = 0;
4070
- SIZE = {
4071
- FILESTAT: 64,
4072
- FDSTAT: 24,
4073
- DIRENT: 24,
4074
- SUBSCRIPTION: 48,
4075
- EVENT: 32
4076
- };
4077
- WASI_SIGNAL_TO_POSIX = Object.fromEntries(
4078
- Array.from({ length: 30 }, (_, i) => [i + 1, i + 1 < 16 ? i + 1 : i + 2])
4079
- );
4080
- }
4081
- });
4082
-
4083
4097
  // src/process/wasi/wasi-fds.ts
4084
4098
  function stdioAlias(path) {
4085
4099
  const m = /^\/dev\/(?:(stdin)|(stdout)|(stderr)|fd\/(\d+))$/.exec(path);
@@ -4139,6 +4153,7 @@ function promoteRequest(fd, f, handed) {
4139
4153
  position: f.offset,
4140
4154
  ...joins ? {} : { contents: f.buffer.contents() },
4141
4155
  ...orphan ? { orphan: true } : {},
4156
+ ...!orphan && f.buffer.pin !== void 0 ? { pin: { version: f.buffer.pin, size: f.buffer.size() } } : {},
4142
4157
  ...!joins && f.buffer.isDirty() ? { dirty: true } : {}
4143
4158
  };
4144
4159
  }
@@ -6360,12 +6375,20 @@ function readAddr(view, ptr) {
6360
6375
  return { family: "inet", host, port: port2 };
6361
6376
  }
6362
6377
  if (tag === INET6) {
6363
- const bytes = new Uint8Array(view.buffer, ptr + 4, 16);
6364
- const any = bytes.every((b) => b === 0);
6365
- return { family: "inet", host: any ? "0.0.0.0" : LOOPBACK, port: port2 };
6378
+ return { family: "inet", host: ipv6Host(new Uint8Array(view.buffer, ptr + 4, 16)), port: port2 };
6366
6379
  }
6367
6380
  throw new WasiError("EAFNOSUPPORT");
6368
6381
  }
6382
+ function ipv6Host(bytes) {
6383
+ const zeros = (n) => bytes.subarray(0, n).every((b) => b === 0);
6384
+ if (zeros(16)) return "0.0.0.0";
6385
+ if (zeros(15) && bytes[15] === 1) return LOOPBACK;
6386
+ if (zeros(10) && bytes[10] === 255 && bytes[11] === 255) return bytes.subarray(12).join(".");
6387
+ const groups = [0, 2, 4, 6, 8, 10, 12, 14].map(
6388
+ (i) => (bytes[i] << 8 | bytes[i + 1]).toString(16)
6389
+ );
6390
+ return new URL(`http://[${groups.join(":")}]/`).hostname.slice(1, -1);
6391
+ }
6369
6392
  function writeAddr(view, ptr, addr) {
6370
6393
  new Uint8Array(view.buffer, ptr, 110).fill(0);
6371
6394
  if (!addr) return;