@ai-ecoverse/slicc-kernel 1.78.1 → 1.80.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
@@ -1247,7 +1247,7 @@ var RemoteTransport = class {
1247
1247
  };
1248
1248
 
1249
1249
  // src/client/protocol.ts
1250
- var PROTOCOL = [1, 9];
1250
+ var PROTOCOL = [1, 10];
1251
1251
  function locksOf(scope = globalThis) {
1252
1252
  const locks = scope.navigator?.locks;
1253
1253
  return typeof locks?.request === "function" ? locks : void 0;
@@ -1308,6 +1308,7 @@ var Channel = class {
1308
1308
  greeted = Promise.withResolvers();
1309
1309
  ended = Promise.withResolvers();
1310
1310
  remote;
1311
+ traitsListeners = /* @__PURE__ */ new Set();
1311
1312
  failure;
1312
1313
  pending = /* @__PURE__ */ new Map();
1313
1314
  watching = /* @__PURE__ */ new Map();
@@ -1355,6 +1356,11 @@ var Channel = class {
1355
1356
  return this.request(call).done;
1356
1357
  }
1357
1358
  receive(data) {
1359
+ if (data.traits && data.id === void 0) {
1360
+ if (this.remote) this.remote.traits = data.traits;
1361
+ for (const listener of [...this.traitsListeners]) listener(data.traits);
1362
+ return;
1363
+ }
1358
1364
  if (data.cdpOpen && data.port) {
1359
1365
  this.openCdp(data);
1360
1366
  return;
@@ -1635,6 +1641,10 @@ async function attachKernel(port, options = {}) {
1635
1641
  loopbackFetch: (input, options2) => loopbackFetch((o) => dialOn(channel, o), input, options2),
1636
1642
  fs: fsOn(channel),
1637
1643
  serveCdp: (hook, options2 = {}) => serveCdpOn(channel, hook, options2),
1644
+ onTraits(listener) {
1645
+ channel.traitsListeners.add(listener);
1646
+ return () => channel.traitsListeners.delete(listener);
1647
+ },
1638
1648
  async close(o = {}) {
1639
1649
  if (channel.failure) return;
1640
1650
  await channel.call({ op: "detach", ...o.kill ? { kill: true } : {} }).catch(() => void 0);
@@ -2112,6 +2122,15 @@ function endedOf2(r) {
2112
2122
  const { status, signal } = r;
2113
2123
  return { status, ...signalField(signal) };
2114
2124
  }
2125
+ function uplinkServer(worker, uplink) {
2126
+ return uplink ? serveUplink(worker, uplink) : void 0;
2127
+ }
2128
+ function traitsUpdater(transport, call) {
2129
+ return async () => {
2130
+ const traits = transport ? { traits: { ...transport.traits } } : {};
2131
+ return await call({ op: "transport-traits", ...traits }) === true;
2132
+ };
2133
+ }
2115
2134
  async function createKernel(options = {}) {
2116
2135
  checkOptions(options);
2117
2136
  writerTags(options.protect);
@@ -2141,8 +2160,7 @@ async function createKernel(options = {}) {
2141
2160
  };
2142
2161
  const transport = options.network?.transport;
2143
2162
  const bridge = transport ? serveTransport(worker, transport) : void 0;
2144
- const uplink = options.network?.uplink;
2145
- const uplinks = uplink ? serveUplink(worker, uplink) : void 0;
2163
+ const uplinks = uplinkServer(worker, options.network?.uplink);
2146
2164
  async function chosen(handle) {
2147
2165
  if (handle) {
2148
2166
  const state = await handle.requestPermission?.({ mode: "readwrite" });
@@ -2256,6 +2274,7 @@ async function createKernel(options = {}) {
2256
2274
  connect: async (connectOptions = {}) => await call({ op: "connect", ...connectOptions }),
2257
2275
  ...accounts(call, options.users === void 0 ? DEFAULT_USERS : options.users),
2258
2276
  setRoutes: async (routes) => void await call({ op: "routes", routes }),
2277
+ updateTransportTraits: traitsUpdater(transport, call),
2259
2278
  dial,
2260
2279
  loopbackFetch: (input, fetchOptions) => loopbackFetch(dial, input, fetchOptions),
2261
2280
  mount: async (spec) => await call({ op: "mount", spec }),