@ai-ecoverse/slicc-kernel 1.77.2 → 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) => {
@@ -14861,22 +14875,22 @@ function keepWatching(loop, signal) {
14861
14875
  const stop = () => session2.abort();
14862
14876
  signal.addEventListener("abort", stop);
14863
14877
  let timer;
14864
- const quiet = () => {
14878
+ const quiet2 = () => {
14865
14879
  clearTimeout(timer);
14866
14880
  timer = setTimeout(stop, silenceMs);
14867
14881
  };
14868
14882
  let opened2 = false;
14869
14883
  try {
14870
14884
  const client = await loop.connect();
14871
- quiet();
14885
+ quiet2();
14872
14886
  await client.watch(
14873
14887
  session2.signal,
14874
14888
  (event) => {
14875
- quiet();
14889
+ quiet2();
14876
14890
  if (!event.ping) loop.event(event);
14877
14891
  },
14878
14892
  () => {
14879
- quiet();
14893
+ quiet2();
14880
14894
  opened2 = true;
14881
14895
  up = true;
14882
14896
  loop.up(client);
@@ -17558,6 +17572,7 @@ var Launcher = class {
17558
17572
  return {
17559
17573
  pid: handle.pid,
17560
17574
  exited: handle.exited,
17575
+ termsig: () => handle.termsig(),
17561
17576
  write: (bytes) => tty.receive(bytes),
17562
17577
  resize: (cols, rows) => tty.resize(cols, rows),
17563
17578
  signal: (sig) => this.jobs.signalForeground(tty, leader, sig),
@@ -17602,7 +17617,8 @@ var Launcher = class {
17602
17617
  });
17603
17618
  options.onStarted?.(handle.pid);
17604
17619
  const status = await handle.exited;
17605
- return { status, stdout: concat5(out), stderr: concat5(err) };
17620
+ const signal = handle.termsig();
17621
+ return { status, ...signal ? { signal } : {}, stdout: concat5(out), stderr: concat5(err) };
17606
17622
  }
17607
17623
  };
17608
17624
 
@@ -18411,6 +18427,7 @@ var Channel = class {
18411
18427
  return;
18412
18428
  }
18413
18429
  this.pending.delete(reply.id);
18430
+ call.ended?.(reply.signal);
18414
18431
  if (reply.error !== void 0) call.reject(new KernelCallError(reply.error, reply.code));
18415
18432
  else call.resolve(reply.result);
18416
18433
  }
@@ -18459,12 +18476,14 @@ async function spawnOn(channel, argv, opts) {
18459
18476
  if (opts.user !== void 0) await since(channel, 8, "spawn as a user", async () => {
18460
18477
  });
18461
18478
  const started = Promise.withResolvers();
18479
+ let endedBy;
18462
18480
  const options = { ...rest2, ...stdin !== void 0 ? { stdin: bytesOf2(stdin) } : {} };
18463
18481
  const { done: done4 } = channel.request(
18464
18482
  { op: "spawn", argv, options },
18465
18483
  {
18466
18484
  output: (fd, bytes) => (fd === 1 ? onStdout : onStderr)?.(bytes),
18467
- started: started.resolve
18485
+ started: started.resolve,
18486
+ ended: (signal) => endedBy = signal
18468
18487
  }
18469
18488
  );
18470
18489
  done4.catch(started.reject);
@@ -18474,9 +18493,18 @@ async function spawnOn(channel, argv, opts) {
18474
18493
  pid,
18475
18494
  pgid,
18476
18495
  exited: done4,
18496
+ ended: endedOf(done4, () => endedBy),
18477
18497
  signal: async (name2 = "SIGTERM") => void await channel.call({ op: "kill", pid: -pgid, signal: name2 })
18478
18498
  };
18479
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
+ }
18480
18508
  async function runOn(channel, argv, opts) {
18481
18509
  const { onStdout, onStderr, ...rest2 } = opts;
18482
18510
  const chunks2 = { 1: [], 2: [] };
@@ -18490,9 +18518,15 @@ async function runOn(channel, argv, opts) {
18490
18518
  onStdout: tee(1, onStdout),
18491
18519
  onStderr: tee(2, onStderr)
18492
18520
  });
18493
- const status = await child.exited;
18521
+ const { status, signal } = await child.ended;
18494
18522
  const text = (fd) => new TextDecoder().decode(concat6(chunks2[fd]));
18495
- 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
+ };
18496
18530
  }
18497
18531
  async function terminalOn(channel, argv, opts) {
18498
18532
  const { onData, ...options } = opts;
@@ -18501,11 +18535,13 @@ async function terminalOn(channel, argv, opts) {
18501
18535
  let listener = onData ?? null;
18502
18536
  const backlog = [];
18503
18537
  const started = Promise.withResolvers();
18538
+ let endedBy;
18504
18539
  const { id: id2, done: done4 } = channel.request(
18505
18540
  { op: "open-terminal", argv, options },
18506
18541
  {
18507
18542
  output: (_fd, bytes) => listener ? listener(bytes) : backlog.push(bytes),
18508
- started: started.resolve
18543
+ started: started.resolve,
18544
+ ended: (signal) => endedBy = signal
18509
18545
  }
18510
18546
  );
18511
18547
  done4.catch(started.reject);
@@ -18514,6 +18550,7 @@ async function terminalOn(channel, argv, opts) {
18514
18550
  return {
18515
18551
  pid,
18516
18552
  exited: done4,
18553
+ ended: endedOf(done4, () => endedBy),
18517
18554
  get onData() {
18518
18555
  return listener;
18519
18556
  },
@@ -18749,7 +18786,7 @@ async function createNodeKernel(options = {}) {
18749
18786
  ...hostfsFetchOf(options),
18750
18787
  ...options.cdp ? { cdp: options.cdp } : {},
18751
18788
  ...options.hostname !== void 0 ? { hostname: options.hostname } : {},
18752
- ...options.users !== void 0 ? { users: options.users } : {},
18789
+ users: options.users === void 0 ? DEFAULT_USERS : options.users,
18753
18790
  ...options.onDenial ? { onDenial: options.onDenial } : {},
18754
18791
  ...options.protect ? { protect: options.protect } : {},
18755
18792
  ...options.sealed ? { sealed: options.sealed } : {},
@@ -18779,6 +18816,7 @@ async function createNodeKernel(options = {}) {
18779
18816
  );
18780
18817
  return {
18781
18818
  status: result.status,
18819
+ ...signalField(result.signal),
18782
18820
  stdout: decoder4.decode(result.stdout),
18783
18821
  stderr: decoder4.decode(result.stderr)
18784
18822
  };
@@ -18795,7 +18833,10 @@ async function createNodeKernel(options = {}) {
18795
18833
  );
18796
18834
  return {
18797
18835
  pid: session.pid,
18798
- exited: guard2(() => session.exited),
18836
+ exited: quiet(guard2(() => session.exited)),
18837
+ ended: quiet(
18838
+ guard2(async () => ({ status: await session.exited, ...signalField(session.termsig()) }))
18839
+ ),
18799
18840
  get onData() {
18800
18841
  return listener;
18801
18842
  },