@ai-ecoverse/slicc-kernel 1.142.1 → 1.142.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.
@@ -6725,7 +6725,7 @@ var KERNEL_VERSION, OS_RELEASE;
6725
6725
  var init_version = __esm({
6726
6726
  "src/version.ts"() {
6727
6727
  "use strict";
6728
- KERNEL_VERSION = true ? "1.142.1" : "0.0.0-dev";
6728
+ KERNEL_VERSION = true ? "1.142.3" : "0.0.0-dev";
6729
6729
  OS_RELEASE = "6.0.0-slicc";
6730
6730
  }
6731
6731
  });
package/dist/node.js CHANGED
@@ -4549,6 +4549,8 @@ var EXECUTABLE = /\/node_modules\/(?:@[^/]+\/)?[^/]+\/bin\//;
4549
4549
  var RENAMES = "/.slicc-renames";
4550
4550
  var RENAME_LOCK = "slicc-rename:";
4551
4551
  var RENAME_ADMIT = "slicc-rename-admit:";
4552
+ var escapeRoot = (name2) => name2.replace(/[%:]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);
4553
+ var LEGACY_RENAME_LOCK = /^slicc-rename:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
4552
4554
  var PAIRED = /* @__PURE__ */ new Set(["rename", "link", "copyFile"]);
4553
4555
  var LISTINGS = /* @__PURE__ */ new Set(["readdir", "readdirStat"]);
4554
4556
  var RETRY = /* @__PURE__ */ Symbol("retry");
@@ -4709,6 +4711,7 @@ var OpfsFs = class {
4709
4711
  locks;
4710
4712
  lockPrefix;
4711
4713
  rootName;
4714
+ renamePrefix;
4712
4715
  constructor(root, meta = new MemoryMeta(), channel, options = {}) {
4713
4716
  this.root = root;
4714
4717
  this.meta = sidecar(meta);
@@ -4716,6 +4719,7 @@ var OpfsFs = class {
4716
4719
  this.locks = options.locks === void 0 ? lockManager() : options.locks ?? void 0;
4717
4720
  this.lockPrefix = `slicc-excl:${channel ?? ""}:`;
4718
4721
  this.rootName = channel;
4722
+ this.renamePrefix = `${RENAME_LOCK}${escapeRoot(channel ?? "")}:`;
4719
4723
  this.channel = channel === void 0 ? void 0 : new BroadcastChannel(channel);
4720
4724
  this.remote = channel === void 0 ? void 0 : new RemoteWatch(`${channel}:watch`, { locks: this.locks ?? null });
4721
4725
  if (this.remote) {
@@ -5880,7 +5884,7 @@ var OpfsFs = class {
5880
5884
  try {
5881
5885
  const locks = this.locks;
5882
5886
  if (locks) {
5883
- lock = `${RENAME_LOCK}${crypto.randomUUID()}`;
5887
+ lock = `${this.renameLocks()}${crypto.randomUUID()}`;
5884
5888
  this.ownLocks.add(lock);
5885
5889
  call?.release();
5886
5890
  await this.admitted(locks, lock, source.path, destination, place, hooks);
@@ -5972,6 +5976,13 @@ var OpfsFs = class {
5972
5976
  if (!known.trees.some(([a, b]) => a === tree2[0] && b === tree2[1])) known.trees.push(tree2);
5973
5977
  return known;
5974
5978
  }
5979
+ renameLocks() {
5980
+ return this.renamePrefix;
5981
+ }
5982
+ renameHere(name2) {
5983
+ if (name2 === void 0) return false;
5984
+ return name2.startsWith(this.renameLocks()) || LEGACY_RENAME_LOCK.test(name2);
5985
+ }
5975
5986
  async learnRenames() {
5976
5987
  for (const { rename } of await this.meta.under(RENAMES)) {
5977
5988
  if (rename?.lock === void 0 || this.ownLocks.has(rename.lock)) continue;
@@ -5980,7 +5991,7 @@ var OpfsFs = class {
5980
5991
  }
5981
5992
  async renamingElsewhere() {
5982
5993
  const { held = [] } = await this.locks.query();
5983
- return held.some(({ name: name2 }) => name2?.startsWith(RENAME_LOCK) && !this.ownLocks.has(name2));
5994
+ return held.some(({ name: name2 }) => this.renameHere(name2) && !this.ownLocks.has(name2));
5984
5995
  }
5985
5996
  lookForRenames() {
5986
5997
  const locks = this.locks;
@@ -5992,7 +6003,7 @@ var OpfsFs = class {
5992
6003
  this.queries++;
5993
6004
  const { held = [] } = await locks.query();
5994
6005
  const unknown = () => held.some(
5995
- ({ name: name2 }) => name2?.startsWith(RENAME_LOCK) && !this.ownLocks.has(name2) && !this.peerMoves.has(name2)
6006
+ ({ name: name2 }) => this.renameHere(name2) && !this.ownLocks.has(name2) && !this.peerMoves.has(name2)
5996
6007
  );
5997
6008
  if (unknown()) await this.learnRenames();
5998
6009
  if (!unknown()) {
@@ -7968,7 +7979,7 @@ function satisfies(version, range2) {
7968
7979
  }
7969
7980
 
7970
7981
  // src/version.ts
7971
- var KERNEL_VERSION = true ? "1.142.1" : "0.0.0-dev";
7982
+ var KERNEL_VERSION = true ? "1.142.3" : "0.0.0-dev";
7972
7983
  var OS_RELEASE = "6.0.0-slicc";
7973
7984
  function procVersion() {
7974
7985
  return `Linux version ${OS_RELEASE} (slicc-kernel ${KERNEL_VERSION}) #1 SMP PREEMPT_DYNAMIC
@@ -32099,7 +32110,66 @@ function nodeTransport(options = {}) {
32099
32110
  }
32100
32111
  var TERMINATED = "the kernel is terminated";
32101
32112
  var EXIT_GRACE_MS = 50;
32102
- function nodeWorker(file, live, closed, workerData) {
32113
+ var WARM_IDLE_MS = 3e4;
32114
+ function warmPool(make, live, idleMs = WARM_IDLE_MS) {
32115
+ let spare;
32116
+ let idle2;
32117
+ let closed = false;
32118
+ const drop = (worker) => {
32119
+ if (spare !== worker) return;
32120
+ spare = void 0;
32121
+ clearTimeout(idle2);
32122
+ live.delete(kill);
32123
+ };
32124
+ const kill = () => {
32125
+ const worker = spare;
32126
+ if (!worker) return;
32127
+ drop(worker);
32128
+ void worker.terminate();
32129
+ };
32130
+ const fill2 = () => {
32131
+ if (closed || spare) return;
32132
+ let worker;
32133
+ try {
32134
+ worker = make();
32135
+ } catch {
32136
+ closed = true;
32137
+ return;
32138
+ }
32139
+ worker.unref();
32140
+ worker.once("error", () => drop(worker));
32141
+ worker.once("exit", () => drop(worker));
32142
+ spare = worker;
32143
+ live.add(kill);
32144
+ idle2 = setTimeout(kill, idleMs);
32145
+ idle2.unref?.();
32146
+ };
32147
+ return {
32148
+ take() {
32149
+ const worker = spare;
32150
+ if (worker) {
32151
+ drop(worker);
32152
+ worker.removeAllListeners("error");
32153
+ worker.removeAllListeners("exit");
32154
+ worker.ref();
32155
+ }
32156
+ setImmediate(fill2);
32157
+ return worker ?? make();
32158
+ },
32159
+ close() {
32160
+ closed = true;
32161
+ kill();
32162
+ }
32163
+ };
32164
+ }
32165
+ function processWorker(file, workerData) {
32166
+ return new Worker(file, { env: workerEnv(), ...workerData ? { workerData } : {} });
32167
+ }
32168
+ function warmPoolOf(options, file, workerData, live) {
32169
+ if (options.warmWorker === false) return void 0;
32170
+ return warmPool(() => processWorker(file, workerData), live);
32171
+ }
32172
+ function nodeWorker(file, live, closed, workerData, take) {
32103
32173
  const errors = /* @__PURE__ */ new Set();
32104
32174
  const messages = /* @__PURE__ */ new Map();
32105
32175
  const fail3 = (message3) => {
@@ -32108,7 +32178,7 @@ function nodeWorker(file, live, closed, workerData) {
32108
32178
  } });
32109
32179
  }
32110
32180
  };
32111
- const worker = closed ? void 0 : new Worker(file, { env: workerEnv(), ...workerData ? { workerData } : {} });
32181
+ const worker = closed ? void 0 : take?.() ?? processWorker(file, workerData);
32112
32182
  let ending = false;
32113
32183
  if (worker) {
32114
32184
  const kill = () => {
@@ -32181,11 +32251,13 @@ async function createNodeKernel(options = {}) {
32181
32251
  let terminated = false;
32182
32252
  const file = options.worker ?? new URL("./node-process-worker.js", import.meta.url);
32183
32253
  const compileCache = cacheDirOf(options.compileCache);
32254
+ const workerData = compileCache ? { compileCache } : void 0;
32255
+ const warm = warmPoolOf(options, file, workerData, live);
32184
32256
  const transport = options.network?.transport;
32185
32257
  const launcher = new Launcher({
32186
32258
  fs,
32187
32259
  unlinkOwner: pidOwner(process),
32188
- createWorker: () => nodeWorker(file, live, terminated, compileCache ? { compileCache } : void 0),
32260
+ createWorker: () => nodeWorker(file, live, terminated, workerData, warm ? () => warm.take() : void 0),
32189
32261
  createDriverWorker: () => nodeWorker(
32190
32262
  options.driverWorker ?? new URL("./node-driver-worker.js", import.meta.url),
32191
32263
  live,
@@ -32318,6 +32390,7 @@ async function createNodeKernel(options = {}) {
32318
32390
  },
32319
32391
  terminate() {
32320
32392
  terminated = true;
32393
+ warm?.close();
32321
32394
  for (const client of [...clients]) client.detach();
32322
32395
  for (const reject of [...pending]) reject(new Error(TERMINATED));
32323
32396
  for (const kill of [...live]) kill();
@@ -32329,11 +32402,13 @@ async function createNodeKernel(options = {}) {
32329
32402
  export {
32330
32403
  KernelCallError,
32331
32404
  KernelGoneError,
32405
+ WARM_IDLE_MS,
32332
32406
  attachKernel,
32333
32407
  createNodeKernel,
32334
32408
  fetchTransport,
32335
32409
  memoryRoot,
32336
32410
  nodeTransport,
32337
- serveHostfsPort
32411
+ serveHostfsPort,
32412
+ warmPool
32338
32413
  };
32339
32414
  //# sourceMappingURL=node.js.map