@ai-ecoverse/slicc-kernel 1.179.0 → 1.180.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/index.js CHANGED
@@ -1958,7 +1958,7 @@ var RemoteTransport = class {
1958
1958
  };
1959
1959
 
1960
1960
  // src/client/protocol.ts
1961
- var PROTOCOL = [1, 14];
1961
+ var PROTOCOL = [1, 15];
1962
1962
  function locksOf(scope = globalThis) {
1963
1963
  const locks = scope.navigator?.locks;
1964
1964
  return typeof locks?.request === "function" ? locks : void 0;
@@ -2023,6 +2023,7 @@ var Channel = class {
2023
2023
  failure;
2024
2024
  pending = /* @__PURE__ */ new Map();
2025
2025
  watching = /* @__PURE__ */ new Map();
2026
+ tracing = /* @__PURE__ */ new Map();
2026
2027
  cdpHooks = /* @__PURE__ */ new Map();
2027
2028
  cdpOpen = /* @__PURE__ */ new Set();
2028
2029
  facadeHooks = /* @__PURE__ */ new Map();
@@ -2090,6 +2091,10 @@ var Channel = class {
2090
2091
  this.watching.get(data.watch)?.(data.change);
2091
2092
  return;
2092
2093
  }
2094
+ if (data.trace !== void 0 && data.id === void 0) {
2095
+ this.traced(data.trace, data.events ?? [], data.dropped ?? 0);
2096
+ return;
2097
+ }
2093
2098
  if (data.bye !== void 0) {
2094
2099
  this.end(new KernelGoneError(data.bye));
2095
2100
  return;
@@ -2118,6 +2123,23 @@ var Channel = class {
2118
2123
  if (reply.error !== void 0) call.reject(new KernelCallError(reply.error, reply.code));
2119
2124
  else call.resolve(reply.result);
2120
2125
  }
2126
+ traced(trace, events, dropped) {
2127
+ const listener = this.tracing.get(trace);
2128
+ if (!listener) return;
2129
+ const ack = () => {
2130
+ if (this.tracing.has(trace)) this.post({ traceAck: trace });
2131
+ };
2132
+ let consumed;
2133
+ try {
2134
+ consumed = listener({ events, dropped });
2135
+ } finally {
2136
+ if (typeof consumed?.then === "function") {
2137
+ void Promise.resolve(consumed).then(ack, ack);
2138
+ } else {
2139
+ ack();
2140
+ }
2141
+ }
2142
+ }
2121
2143
  openCdp({ cdpOpen: { registration, ...request }, port }) {
2122
2144
  const hook = registration === void 0 ? void 0 : this.cdpHooks.get(registration);
2123
2145
  if (!hook || this.failure) {
@@ -2180,6 +2202,29 @@ async function serveCdpOn(channel, hook, options) {
2180
2202
  }
2181
2203
  };
2182
2204
  }
2205
+ async function traceOn(channel, tag, onEvents, options) {
2206
+ if (typeof onEvents !== "function") throw new TypeError("trace: onEvents must be a function");
2207
+ await since(channel, 15, "trace", async () => {
2208
+ });
2209
+ const { id, done } = channel.request({
2210
+ op: "trace",
2211
+ tag,
2212
+ ...options.limit !== void 0 ? { limit: options.limit } : {}
2213
+ });
2214
+ channel.tracing.set(id, onEvents);
2215
+ try {
2216
+ await done;
2217
+ } catch (error) {
2218
+ channel.tracing.delete(id);
2219
+ throw error;
2220
+ }
2221
+ return {
2222
+ close: () => {
2223
+ if (!channel.tracing.delete(id)) return;
2224
+ void channel.call({ op: "untrace", trace: id }).catch(() => void 0);
2225
+ }
2226
+ };
2227
+ }
2183
2228
  async function dialOn(channel, { port, host }) {
2184
2229
  const req = { op: "dial", port, ...host ? { host } : {} };
2185
2230
  return dialStream(await since(channel, 4, "dial", () => channel.call(req)));
@@ -2193,6 +2238,8 @@ async function spawnOn(channel, argv, opts) {
2193
2238
  });
2194
2239
  if (opts.tag !== void 0) await since(channel, 12, "a tag per spawn", async () => {
2195
2240
  });
2241
+ if (Array.isArray(opts.tag)) await since(channel, 15, "several tags per spawn", async () => {
2242
+ });
2196
2243
  if (opts.cwdMissing === "error") await since(channel, 14, "cwdMissing: 'error'", async () => {
2197
2244
  });
2198
2245
  const started = Promise.withResolvers();
@@ -2254,6 +2301,10 @@ async function terminalOn(channel, argv, opts) {
2254
2301
  });
2255
2302
  if (opts.tag !== void 0) await since(channel, 12, "a tag per terminal", async () => {
2256
2303
  });
2304
+ if (Array.isArray(opts.tag)) {
2305
+ await since(channel, 15, "several tags per terminal", async () => {
2306
+ });
2307
+ }
2257
2308
  if (opts.cwdMissing === "error") await since(channel, 14, "cwdMissing: 'error'", async () => {
2258
2309
  });
2259
2310
  let listener = onData ?? null;
@@ -2413,6 +2464,7 @@ async function attachKernel(port, options = {}) {
2413
2464
  channel.traitsListeners.add(listener);
2414
2465
  return () => channel.traitsListeners.delete(listener);
2415
2466
  },
2467
+ trace: (tag, onEvents, options2 = {}) => traceOn(channel, tag, onEvents, options2),
2416
2468
  async close(o = {}) {
2417
2469
  if (channel.failure) return;
2418
2470
  await channel.call({ op: "detach", ...o.kill ? { kill: true } : {} }).catch(() => void 0);