@ai-ecoverse/slicc-kernel 1.77.1 → 1.78.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
@@ -93,6 +93,7 @@ function portCdpHook(ask, gone) {
93
93
  }
94
94
 
95
95
  // src/fs/types.ts
96
+ var DEFAULT_USERS = "enforce";
96
97
  function rangedOps(fs) {
97
98
  const { pread, pwrite, truncate } = fs;
98
99
  if (!pread || !pwrite || !truncate) return void 0;
@@ -1684,6 +1685,18 @@ function isSignal(sig) {
1684
1685
  function sigbit(sig) {
1685
1686
  return 1 << sig;
1686
1687
  }
1688
+ function signalName(sig) {
1689
+ const name2 = Object.entries(SIG).find(([, n]) => n === sig)?.[0];
1690
+ return name2 === void 0 ? void 0 : `SIG${name2}`;
1691
+ }
1692
+ function quiet(p) {
1693
+ p.catch(() => void 0);
1694
+ return p;
1695
+ }
1696
+ function signalField(sig) {
1697
+ const name2 = signalName(sig);
1698
+ return name2 ? { signal: name2 } : {};
1699
+ }
1687
1700
  var SIGNAL_BY_NAME = {
1688
1701
  SIGINT: SIG.INT,
1689
1702
  SIGTERM: SIG.TERM,
@@ -2782,7 +2795,8 @@ function serveClient(port, host) {
2782
2795
  reply(req.id, { started: session.pid });
2783
2796
  }
2784
2797
  try {
2785
- return { result: await session.exited };
2798
+ const status = await session.exited;
2799
+ return { result: status, ...signalField(session.termsig()) };
2786
2800
  } finally {
2787
2801
  terminals.delete(req.id);
2788
2802
  }
@@ -2807,7 +2821,7 @@ function serveClient(port, host) {
2807
2821
  });
2808
2822
  if (leader === void 0) throw fsError("ENOENT", `${req.argv[0] ?? ""}: command not found`);
2809
2823
  if (!l.list().some((p) => p.pgid === leader)) groups.delete(leader);
2810
- return { result: result.status };
2824
+ return { result: result.status, ...signalField(result.signal) };
2811
2825
  }
2812
2826
  async function handle(req) {
2813
2827
  if (host.scope === "transport" && req.op !== "detach") {
@@ -2868,8 +2882,8 @@ function serveClient(port, host) {
2868
2882
  }
2869
2883
  const req = data;
2870
2884
  handle(req).then(
2871
- ({ result, transfer }) => {
2872
- reply(req.id, { result }, transfer);
2885
+ ({ result, signal, transfer }) => {
2886
+ reply(req.id, { result, ...signal ? { signal } : {} }, transfer);
2873
2887
  if (req.op === "detach") detach(req.kill === true);
2874
2888
  },
2875
2889
  (err) => {
@@ -3605,6 +3619,7 @@ var OpfsFs = class {
3605
3619
  }
3606
3620
  }
3607
3621
  async current(path, dir) {
3622
+ if (dir === this.root) return path === "/";
3608
3623
  if (performance.now() - (this.checked.get(dir) ?? -CHECK_MS) < CHECK_MS) return true;
3609
3624
  const where = await this.root.resolve(dir).catch(() => null);
3610
3625
  if (where === null || `/${where.join("/")}` !== path) return false;
@@ -14860,22 +14875,22 @@ function keepWatching(loop, signal) {
14860
14875
  const stop = () => session2.abort();
14861
14876
  signal.addEventListener("abort", stop);
14862
14877
  let timer;
14863
- const quiet = () => {
14878
+ const quiet2 = () => {
14864
14879
  clearTimeout(timer);
14865
14880
  timer = setTimeout(stop, silenceMs);
14866
14881
  };
14867
14882
  let opened2 = false;
14868
14883
  try {
14869
14884
  const client = await loop.connect();
14870
- quiet();
14885
+ quiet2();
14871
14886
  await client.watch(
14872
14887
  session2.signal,
14873
14888
  (event) => {
14874
- quiet();
14889
+ quiet2();
14875
14890
  if (!event.ping) loop.event(event);
14876
14891
  },
14877
14892
  () => {
14878
- quiet();
14893
+ quiet2();
14879
14894
  opened2 = true;
14880
14895
  up = true;
14881
14896
  loop.up(client);
@@ -17557,6 +17572,7 @@ var Launcher = class {
17557
17572
  return {
17558
17573
  pid: handle.pid,
17559
17574
  exited: handle.exited,
17575
+ termsig: () => handle.termsig(),
17560
17576
  write: (bytes) => tty.receive(bytes),
17561
17577
  resize: (cols, rows) => tty.resize(cols, rows),
17562
17578
  signal: (sig) => this.jobs.signalForeground(tty, leader, sig),
@@ -17601,7 +17617,8 @@ var Launcher = class {
17601
17617
  });
17602
17618
  options.onStarted?.(handle.pid);
17603
17619
  const status = await handle.exited;
17604
- return { status, stdout: concat5(out), stderr: concat5(err) };
17620
+ const signal = handle.termsig();
17621
+ return { status, ...signal ? { signal } : {}, stdout: concat5(out), stderr: concat5(err) };
17605
17622
  }
17606
17623
  };
17607
17624
 
@@ -18410,6 +18427,7 @@ var Channel = class {
18410
18427
  return;
18411
18428
  }
18412
18429
  this.pending.delete(reply.id);
18430
+ call.ended?.(reply.signal);
18413
18431
  if (reply.error !== void 0) call.reject(new KernelCallError(reply.error, reply.code));
18414
18432
  else call.resolve(reply.result);
18415
18433
  }
@@ -18458,12 +18476,14 @@ async function spawnOn(channel, argv, opts) {
18458
18476
  if (opts.user !== void 0) await since(channel, 8, "spawn as a user", async () => {
18459
18477
  });
18460
18478
  const started = Promise.withResolvers();
18479
+ let endedBy;
18461
18480
  const options = { ...rest2, ...stdin !== void 0 ? { stdin: bytesOf2(stdin) } : {} };
18462
18481
  const { done: done4 } = channel.request(
18463
18482
  { op: "spawn", argv, options },
18464
18483
  {
18465
18484
  output: (fd, bytes) => (fd === 1 ? onStdout : onStderr)?.(bytes),
18466
- started: started.resolve
18485
+ started: started.resolve,
18486
+ ended: (signal) => endedBy = signal
18467
18487
  }
18468
18488
  );
18469
18489
  done4.catch(started.reject);
@@ -18473,9 +18493,18 @@ async function spawnOn(channel, argv, opts) {
18473
18493
  pid,
18474
18494
  pgid,
18475
18495
  exited: done4,
18496
+ ended: endedOf(done4, () => endedBy),
18476
18497
  signal: async (name2 = "SIGTERM") => void await channel.call({ op: "kill", pid: -pgid, signal: name2 })
18477
18498
  };
18478
18499
  }
18500
+ function endedOf(done4, signal) {
18501
+ return quiet(
18502
+ done4.then((status) => {
18503
+ const by = signal();
18504
+ return { status, ...by ? { signal: by } : {} };
18505
+ })
18506
+ );
18507
+ }
18479
18508
  async function runOn(channel, argv, opts) {
18480
18509
  const { onStdout, onStderr, ...rest2 } = opts;
18481
18510
  const chunks2 = { 1: [], 2: [] };
@@ -18489,9 +18518,15 @@ async function runOn(channel, argv, opts) {
18489
18518
  onStdout: tee(1, onStdout),
18490
18519
  onStderr: tee(2, onStderr)
18491
18520
  });
18492
- const status = await child.exited;
18521
+ const { status, signal } = await child.ended;
18493
18522
  const text = (fd) => new TextDecoder().decode(concat6(chunks2[fd]));
18494
- return { pid: child.pid, status, stdout: text(1), stderr: text(2) };
18523
+ return {
18524
+ pid: child.pid,
18525
+ status,
18526
+ ...signal ? { signal } : {},
18527
+ stdout: text(1),
18528
+ stderr: text(2)
18529
+ };
18495
18530
  }
18496
18531
  async function terminalOn(channel, argv, opts) {
18497
18532
  const { onData, ...options } = opts;
@@ -18500,11 +18535,13 @@ async function terminalOn(channel, argv, opts) {
18500
18535
  let listener = onData ?? null;
18501
18536
  const backlog = [];
18502
18537
  const started = Promise.withResolvers();
18538
+ let endedBy;
18503
18539
  const { id: id2, done: done4 } = channel.request(
18504
18540
  { op: "open-terminal", argv, options },
18505
18541
  {
18506
18542
  output: (_fd, bytes) => listener ? listener(bytes) : backlog.push(bytes),
18507
- started: started.resolve
18543
+ started: started.resolve,
18544
+ ended: (signal) => endedBy = signal
18508
18545
  }
18509
18546
  );
18510
18547
  done4.catch(started.reject);
@@ -18513,6 +18550,7 @@ async function terminalOn(channel, argv, opts) {
18513
18550
  return {
18514
18551
  pid,
18515
18552
  exited: done4,
18553
+ ended: endedOf(done4, () => endedBy),
18516
18554
  get onData() {
18517
18555
  return listener;
18518
18556
  },
@@ -18748,7 +18786,7 @@ async function createNodeKernel(options = {}) {
18748
18786
  ...hostfsFetchOf(options),
18749
18787
  ...options.cdp ? { cdp: options.cdp } : {},
18750
18788
  ...options.hostname !== void 0 ? { hostname: options.hostname } : {},
18751
- ...options.users !== void 0 ? { users: options.users } : {},
18789
+ users: options.users === void 0 ? DEFAULT_USERS : options.users,
18752
18790
  ...options.onDenial ? { onDenial: options.onDenial } : {},
18753
18791
  ...options.protect ? { protect: options.protect } : {},
18754
18792
  ...options.sealed ? { sealed: options.sealed } : {},
@@ -18778,6 +18816,7 @@ async function createNodeKernel(options = {}) {
18778
18816
  );
18779
18817
  return {
18780
18818
  status: result.status,
18819
+ ...signalField(result.signal),
18781
18820
  stdout: decoder4.decode(result.stdout),
18782
18821
  stderr: decoder4.decode(result.stderr)
18783
18822
  };
@@ -18794,7 +18833,10 @@ async function createNodeKernel(options = {}) {
18794
18833
  );
18795
18834
  return {
18796
18835
  pid: session.pid,
18797
- exited: guard2(() => session.exited),
18836
+ exited: quiet(guard2(() => session.exited)),
18837
+ ended: quiet(
18838
+ guard2(async () => ({ status: await session.exited, ...signalField(session.termsig()) }))
18839
+ ),
18798
18840
  get onData() {
18799
18841
  return listener;
18800
18842
  },