@cortexkit/aft 0.45.0 → 0.46.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.
@@ -5,10 +5,6 @@ export type { HarnessAdapter, HarnessKind } from "./types.js";
5
5
  export { OpenCodeAdapter, PiAdapter };
6
6
  export declare function getAllAdapters(): HarnessAdapter[];
7
7
  export declare function getAdapter(kind: HarnessKind): HarnessAdapter;
8
- /** Adapters whose host binary is on PATH. Order: installed first, then rest. */
9
- export declare function getAdaptersPreferInstalled(): HarnessAdapter[];
10
- /** Adapters that have AFT registered (either via plugin entry or `pi install`). */
11
- export declare function getAdaptersWithPluginRegistered(): HarnessAdapter[];
12
8
  /** Adapters whose host is installed, regardless of whether AFT is registered. */
13
9
  export declare function getInstalledAdapters(): HarnessAdapter[];
14
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9D,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC;AAItC,wBAAgB,cAAc,IAAI,cAAc,EAAE,CAEjD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,cAAc,CAI5D;AAED,gFAAgF;AAChF,wBAAgB,0BAA0B,IAAI,cAAc,EAAE,CAM7D;AAED,mFAAmF;AACnF,wBAAgB,+BAA+B,IAAI,cAAc,EAAE,CAElE;AAED,iFAAiF;AACjF,wBAAgB,oBAAoB,IAAI,cAAc,EAAE,CAEvD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9D,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC;AAItC,wBAAgB,cAAc,IAAI,cAAc,EAAE,CAEjD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,cAAc,CAI5D;AAED,iFAAiF;AACjF,wBAAgB,oBAAoB,IAAI,cAAc,EAAE,CAEvD"}
package/dist/index.js CHANGED
@@ -4188,7 +4188,7 @@ var init_pool = __esm(() => {
4188
4188
  };
4189
4189
  });
4190
4190
 
4191
- // ../../node_modules/.bun/@cortexkit+subc-client@0.3.0/node_modules/@cortexkit/subc-client/src/auth.ts
4191
+ // ../../node_modules/.bun/@cortexkit+subc-client@0.3.4/node_modules/@cortexkit/subc-client/dist/auth.js
4192
4192
  import { createHmac, randomBytes, timingSafeEqual } from "node:crypto";
4193
4193
  function computeProof(key, domain, clientNonce, serverNonce, daemonId) {
4194
4194
  const mac = createHmac("sha256", Buffer.from(key));
@@ -4249,7 +4249,7 @@ var init_auth = __esm(() => {
4249
4249
  };
4250
4250
  });
4251
4251
 
4252
- // ../../node_modules/.bun/@cortexkit+subc-client@0.3.0/node_modules/@cortexkit/subc-client/src/connection-file.ts
4252
+ // ../../node_modules/.bun/@cortexkit+subc-client@0.3.4/node_modules/@cortexkit/subc-client/dist/connection-file.js
4253
4253
  import { promises as fs } from "node:fs";
4254
4254
  function toBytes(value, field) {
4255
4255
  if (!Array.isArray(value) || value.some((n) => typeof n !== "number")) {
@@ -4317,9 +4317,9 @@ var init_connection_file = __esm(() => {
4317
4317
  };
4318
4318
  });
4319
4319
 
4320
- // ../../node_modules/.bun/@cortexkit+subc-client@0.3.0/node_modules/@cortexkit/subc-client/src/envelope.ts
4320
+ // ../../node_modules/.bun/@cortexkit+subc-client@0.3.4/node_modules/@cortexkit/subc-client/dist/envelope.js
4321
4321
  function isPureHeader(ty) {
4322
- return ty === 6 /* Cancel */ || ty === 7 /* Ping */ || ty === 8 /* Pong */ || ty === 11 /* Goodbye */;
4322
+ return ty === FrameType.Cancel || ty === FrameType.Ping || ty === FrameType.Pong || ty === FrameType.Goodbye;
4323
4323
  }
4324
4324
  function buildFlags(binary, priority, last) {
4325
4325
  let b = 0;
@@ -4395,10 +4395,10 @@ function encodeFrame(frame) {
4395
4395
  out.set(frame.body, header.length);
4396
4396
  return out;
4397
4397
  }
4398
- var PROTOCOL_VERSION = 1, HEADER_LEN = 17, FROZEN_PREFIX_LEN = 5, MAX_FRAME_BODY_LEN, FrameType, FRAME_TYPE_MAX = 11 /* Goodbye */, FLAG_BINARY = 1, FLAG_PRIORITY_MASK = 6, FLAG_PRIORITY_SHIFT = 1, FLAG_LAST = 8, FLAG_RESERVED_MASK = 240, DecodeError;
4398
+ var PROTOCOL_VERSION = 1, HEADER_LEN = 17, FROZEN_PREFIX_LEN = 5, MAX_FRAME_BODY_LEN, FrameType, FRAME_TYPE_MAX, Priority, FLAG_BINARY = 1, FLAG_PRIORITY_MASK = 6, FLAG_PRIORITY_SHIFT = 1, FLAG_LAST = 8, FLAG_RESERVED_MASK = 240, DecodeError;
4399
4399
  var init_envelope = __esm(() => {
4400
4400
  MAX_FRAME_BODY_LEN = 64 * 1024 * 1024;
4401
- ((FrameType2) => {
4401
+ (function(FrameType2) {
4402
4402
  FrameType2[FrameType2["Request"] = 0] = "Request";
4403
4403
  FrameType2[FrameType2["Response"] = 1] = "Response";
4404
4404
  FrameType2[FrameType2["Push"] = 2] = "Push";
@@ -4411,12 +4411,18 @@ var init_envelope = __esm(() => {
4411
4411
  FrameType2[FrameType2["Hello"] = 9] = "Hello";
4412
4412
  FrameType2[FrameType2["HelloAck"] = 10] = "HelloAck";
4413
4413
  FrameType2[FrameType2["Goodbye"] = 11] = "Goodbye";
4414
- })(FrameType ||= {});
4414
+ })(FrameType || (FrameType = {}));
4415
+ FRAME_TYPE_MAX = FrameType.Goodbye;
4416
+ (function(Priority2) {
4417
+ Priority2[Priority2["Passive"] = 0] = "Passive";
4418
+ Priority2[Priority2["Interactive"] = 1] = "Interactive";
4419
+ Priority2[Priority2["Background"] = 2] = "Background";
4420
+ })(Priority || (Priority = {}));
4415
4421
  DecodeError = class DecodeError extends Error {
4416
4422
  };
4417
4423
  });
4418
4424
 
4419
- // ../../node_modules/.bun/@cortexkit+subc-client@0.3.0/node_modules/@cortexkit/subc-client/src/socket.ts
4425
+ // ../../node_modules/.bun/@cortexkit+subc-client@0.3.4/node_modules/@cortexkit/subc-client/dist/socket.js
4420
4426
  import net from "node:net";
4421
4427
 
4422
4428
  class SubcSocket {
@@ -4607,7 +4613,7 @@ var init_socket = __esm(() => {
4607
4613
  };
4608
4614
  });
4609
4615
 
4610
- // ../../node_modules/.bun/@cortexkit+subc-client@0.3.0/node_modules/@cortexkit/subc-client/src/client.ts
4616
+ // ../../node_modules/.bun/@cortexkit+subc-client@0.3.4/node_modules/@cortexkit/subc-client/dist/client.js
4611
4617
  import { promises as fs2 } from "node:fs";
4612
4618
  import { debuglog } from "node:util";
4613
4619
 
@@ -4660,12 +4666,13 @@ class SubcClient {
4660
4666
  }
4661
4667
  async request(routeChannel, body, opts = {}) {
4662
4668
  const bytes = body instanceof Uint8Array ? body : this.encode(body);
4663
- const priority = opts.priority ?? 1 /* Interactive */;
4669
+ const priority = opts.priority ?? Priority.Interactive;
4664
4670
  const reply = await this.send(routeChannel, bytes, priority, opts.timeoutMs, opts.onProgress);
4665
4671
  return this.parseJson(reply);
4666
4672
  }
4667
4673
  async call(moduleId, method, params, opts = {}) {
4668
4674
  const body = params === undefined ? { method } : { method, params };
4675
+ let retriedUnknownChannel = false;
4669
4676
  for (;; ) {
4670
4677
  const routeChannel = await this.cachedRouteChannel(moduleId, opts);
4671
4678
  try {
@@ -4673,6 +4680,11 @@ class SubcClient {
4673
4680
  } catch (err) {
4674
4681
  if (!(err instanceof SubcCallError))
4675
4682
  throw this.terminalCallError("managed call failed", err);
4683
+ if (err.code === "unknown_channel" && !retriedUnknownChannel && !this.closeStarted) {
4684
+ retriedUnknownChannel = true;
4685
+ this.evictRouteChannel(routeChannel);
4686
+ continue;
4687
+ }
4676
4688
  if (err.kind === "not_sent") {
4677
4689
  try {
4678
4690
  await this.reconnectAfterDrop(err);
@@ -4690,7 +4702,7 @@ class SubcClient {
4690
4702
  }
4691
4703
  subscribe(routeChannel, body, onEvent, opts = {}) {
4692
4704
  const bytes = body instanceof Uint8Array ? body : this.encode(body);
4693
- const priority = opts.priority ?? 1 /* Interactive */;
4705
+ const priority = opts.priority ?? Priority.Interactive;
4694
4706
  const corr = this.nextCorr++;
4695
4707
  const key = `${routeChannel}:${corr}`;
4696
4708
  const closed = new Promise((resolve7, reject) => {
@@ -4706,7 +4718,7 @@ class SubcClient {
4706
4718
  timer: null,
4707
4719
  subscription: true
4708
4720
  });
4709
- const frame = buildFrame(0 /* Request */, buildFlags(false, priority, false), routeChannel, corr, bytes);
4721
+ const frame = buildFrame(FrameType.Request, buildFlags(false, priority, false), routeChannel, corr, bytes);
4710
4722
  this.sock.write(encodeFrame(frame), Date.now() + DEFAULT_REQUEST_TIMEOUT_MS).catch((err) => {
4711
4723
  const p = this.pending.get(key);
4712
4724
  if (p)
@@ -4718,7 +4730,7 @@ class SubcClient {
4718
4730
  if (cancelled)
4719
4731
  return;
4720
4732
  cancelled = true;
4721
- const cancel = buildFrame(6 /* Cancel */, buildFlags(false, priority, false), routeChannel, corr, EMPTY_BODY);
4733
+ const cancel = buildFrame(FrameType.Cancel, buildFlags(false, priority, false), routeChannel, corr, EMPTY_BODY);
4722
4734
  this.sock.write(encodeFrame(cancel), Date.now() + DEFAULT_REQUEST_TIMEOUT_MS).catch(() => {});
4723
4735
  };
4724
4736
  return { unsubscribe, closed };
@@ -4769,7 +4781,7 @@ class SubcClient {
4769
4781
  sendRouteGoodbye(channel) {
4770
4782
  if (this.closedErr)
4771
4783
  return;
4772
- const goodbye = buildFrame(11 /* Goodbye */, buildFlags(false, 1 /* Interactive */, false), channel, 0n, EMPTY_BODY);
4784
+ const goodbye = buildFrame(FrameType.Goodbye, buildFlags(false, Priority.Interactive, false), channel, 0n, EMPTY_BODY);
4773
4785
  this.sock.write(encodeFrame(goodbye), Date.now() + DEFAULT_REQUEST_TIMEOUT_MS).catch(() => {});
4774
4786
  }
4775
4787
  static async openConnection(opts) {
@@ -4786,14 +4798,14 @@ class SubcClient {
4786
4798
  return { sock, conn };
4787
4799
  }
4788
4800
  async controlRpc(body) {
4789
- return this.send(0, body, 1 /* Interactive */, undefined, undefined);
4801
+ return this.send(0, body, Priority.Interactive, undefined, undefined);
4790
4802
  }
4791
4803
  send(channel, body, priority, timeoutMs, onProgress) {
4792
4804
  if (this.closedErr)
4793
4805
  return Promise.reject(this.closedErr);
4794
4806
  const corr = this.nextCorr++;
4795
4807
  const key = `${channel}:${corr}`;
4796
- const frame = buildFrame(0 /* Request */, buildFlags(false, priority, false), channel, corr, body);
4808
+ const frame = buildFrame(FrameType.Request, buildFlags(false, priority, false), channel, corr, body);
4797
4809
  return new Promise((resolve7, reject) => {
4798
4810
  const ms = timeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
4799
4811
  const pending = {
@@ -4833,7 +4845,7 @@ class SubcClient {
4833
4845
  }
4834
4846
  async managedRequest(routeChannel, body, opts) {
4835
4847
  const bytes = body instanceof Uint8Array ? body : this.encode(body);
4836
- const priority = opts.priority ?? 1 /* Interactive */;
4848
+ const priority = opts.priority ?? Priority.Interactive;
4837
4849
  try {
4838
4850
  const reply = await this.sendManaged(routeChannel, bytes, priority, opts.timeoutMs, opts.onProgress);
4839
4851
  return this.parseJson(reply);
@@ -4849,7 +4861,7 @@ class SubcClient {
4849
4861
  }
4850
4862
  const corr = this.nextCorr++;
4851
4863
  const key = `${channel}:${corr}`;
4852
- const frame = buildFrame(0 /* Request */, buildFlags(false, priority, false), channel, corr, body);
4864
+ const frame = buildFrame(FrameType.Request, buildFlags(false, priority, false), channel, corr, body);
4853
4865
  let handedToSocket = false;
4854
4866
  const classifyFailure = (err) => {
4855
4867
  if (!handedToSocket) {
@@ -5008,6 +5020,9 @@ class SubcClient {
5008
5020
  return;
5009
5021
  } catch (err) {
5010
5022
  if (!isConsumerReconnectTransient(err) || attempt >= this.opts.reconnectBackoff.maxAttempts) {
5023
+ if (err instanceof AuthError && attempt > 1) {
5024
+ throw new AuthError(`reconnect gave up after ${attempt} attempts: ${err.message} — the connection file and the daemon's key disagree persistently ` + `(daemon restarting in a loop, split connection-file paths, or a genuinely foreign daemon on this port); ` + `check the daemon, then restart this host app`);
5025
+ }
5011
5026
  throw err;
5012
5027
  }
5013
5028
  await this.opts.sleep(delay);
@@ -5076,26 +5091,27 @@ class SubcClient {
5076
5091
  const pending = this.pending.get(key);
5077
5092
  if (pending) {
5078
5093
  switch (frame.header.ty) {
5079
- case 2 /* Push */:
5080
- case 3 /* StreamData */:
5094
+ case FrameType.Push:
5095
+ case FrameType.StreamData:
5081
5096
  pending.onProgress?.(frame.body);
5082
5097
  return;
5083
- case 1 /* Response */:
5084
- case 4 /* StreamEnd */:
5098
+ case FrameType.Response:
5099
+ case FrameType.StreamEnd:
5085
5100
  this.settle(key, pending, () => pending.resolve(frame));
5086
5101
  return;
5087
- case 5 /* Error */:
5102
+ case FrameType.Error:
5088
5103
  this.settle(key, pending, () => pending.reject(this.errorFromFrame(frame)));
5089
5104
  return;
5090
5105
  default:
5091
5106
  return;
5092
5107
  }
5093
5108
  }
5094
- if (frame.header.ty === 11 /* Goodbye */) {
5109
+ if (frame.header.ty === FrameType.Goodbye) {
5095
5110
  this.failChannel(frame.header.channel, new SubcError("route closed by subc (GOODBYE)"));
5111
+ this.evictRouteChannel(frame.header.channel);
5096
5112
  return;
5097
5113
  }
5098
- if (frame.header.ty === 1 /* Response */ || frame.header.ty === 5 /* Error */ || frame.header.ty === 4 /* StreamEnd */) {
5114
+ if (frame.header.ty === FrameType.Response || frame.header.ty === FrameType.Error || frame.header.ty === FrameType.StreamEnd) {
5099
5115
  debug("dropped terminal frame with no waiter: type=%d channel=%d corr=%s port=%s", frame.header.ty, frame.header.channel, frame.header.corr, this.sock.localPort() ?? "?");
5100
5116
  return;
5101
5117
  }
@@ -5121,6 +5137,13 @@ class SubcClient {
5121
5137
  return new SubcError(Buffer.from(frame.body).toString("utf8") || "subc error");
5122
5138
  }
5123
5139
  }
5140
+ evictRouteChannel(channel) {
5141
+ for (const cached of this.routes.values()) {
5142
+ if (cached.channel === channel && cached.generation === this.generation) {
5143
+ cached.channel = null;
5144
+ }
5145
+ }
5146
+ }
5124
5147
  failChannel(channel, err) {
5125
5148
  for (const [key, pending] of this.pending) {
5126
5149
  if (pending.channel === channel) {
@@ -5167,7 +5190,9 @@ function isConsumerReconnectTransient(err) {
5167
5190
  return true;
5168
5191
  if (err instanceof SubcCallError)
5169
5192
  return err.kind === "not_sent" || err.kind === "outcome_unknown";
5170
- if (err instanceof SubcError || err instanceof ConnectionFileError || err instanceof AuthError)
5193
+ if (err instanceof AuthError)
5194
+ return true;
5195
+ if (err instanceof SubcError || err instanceof ConnectionFileError)
5171
5196
  return false;
5172
5197
  const code = errorCode(err);
5173
5198
  return code === "ECONNREFUSED" || code === "ECONNRESET" || code === "EPIPE" || code === "ETIMEDOUT" || code === "ENOENT";
@@ -5220,7 +5245,7 @@ function causeMessage(cause) {
5220
5245
  return "";
5221
5246
  return `: ${cause instanceof Error ? cause.message : String(cause)}`;
5222
5247
  }
5223
- var debug, DEFAULT_HANDSHAKE_TIMEOUT_MS = 1e4, DEFAULT_REQUEST_TIMEOUT_MS = 30000, TIMEOUT_ARBITRATION_GRACE_MS = 50, REQUEST_DEADLINE_MARKER = "request_deadline", DEADLINE_NO_DROP_CODE = "deadline_exceeded_no_drop_observed", ROUTE_OPEN_RETRY_DEADLINE_MS = 1e4, BODY_READ_TIMEOUT_MS = 30000, EMPTY_BODY, DEFAULT_MANAGED_TARGET_KIND = "management_surface", SUBC_MODULE_ID_ENV = "SUBC_MODULE_ID", SUBC_LAUNCH_NONCE_ENV = "SUBC_LAUNCH_NONCE", DEFAULT_RECONNECT_BACKOFF, SubcCallError, SubcError;
5248
+ var debug, DEFAULT_HANDSHAKE_TIMEOUT_MS = 1e4, DEFAULT_REQUEST_TIMEOUT_MS = 30000, TIMEOUT_ARBITRATION_GRACE_MS = 50, REQUEST_DEADLINE_MARKER = "request_deadline", DEADLINE_NO_DROP_CODE = "deadline_exceeded_no_drop_observed", ROUTE_OPEN_RETRY_DEADLINE_MS = 30000, BODY_READ_TIMEOUT_MS = 30000, EMPTY_BODY, DEFAULT_MANAGED_TARGET_KIND = "management_surface", SUBC_MODULE_ID_ENV = "SUBC_MODULE_ID", SUBC_LAUNCH_NONCE_ENV = "SUBC_LAUNCH_NONCE", DEFAULT_RECONNECT_BACKOFF, SubcCallError, SubcError;
5224
5249
  var init_client = __esm(() => {
5225
5250
  init_auth();
5226
5251
  init_connection_file();
@@ -5254,9 +5279,44 @@ var init_client = __esm(() => {
5254
5279
  };
5255
5280
  });
5256
5281
 
5257
- // ../../node_modules/.bun/@cortexkit+subc-client@0.3.0/node_modules/@cortexkit/subc-client/src/provider.ts
5282
+ // ../../node_modules/.bun/@cortexkit+subc-client@0.3.4/node_modules/@cortexkit/subc-client/dist/provider.js
5258
5283
  import { Buffer as Buffer2 } from "node:buffer";
5259
5284
 
5285
+ class AsyncPermitPool {
5286
+ available;
5287
+ waiters = [];
5288
+ constructor(capacity) {
5289
+ if (!Number.isInteger(capacity) || capacity <= 0) {
5290
+ throw new SubcProviderError("provider handler capacity must be a positive integer", "invalid_handler_capacity");
5291
+ }
5292
+ this.available = capacity;
5293
+ }
5294
+ async acquire() {
5295
+ if (this.available > 0) {
5296
+ this.available -= 1;
5297
+ return this.releaseOnce();
5298
+ }
5299
+ await new Promise((resolve7) => {
5300
+ this.waiters.push(resolve7);
5301
+ });
5302
+ return this.releaseOnce();
5303
+ }
5304
+ releaseOnce() {
5305
+ let released = false;
5306
+ return () => {
5307
+ if (released)
5308
+ return;
5309
+ released = true;
5310
+ const next = this.waiters.shift();
5311
+ if (next) {
5312
+ next();
5313
+ } else {
5314
+ this.available += 1;
5315
+ }
5316
+ };
5317
+ }
5318
+ }
5319
+
5260
5320
  class SubcProvider {
5261
5321
  sock;
5262
5322
  currentConn;
@@ -5268,6 +5328,7 @@ class SubcProvider {
5268
5328
  closeStarted = false;
5269
5329
  closedErr = null;
5270
5330
  inflight = new Map;
5331
+ requestGate = new AsyncPermitPool(DEFAULT_PROVIDER_HANDLER_CAPACITY);
5271
5332
  reconnecting = null;
5272
5333
  generation = 1;
5273
5334
  connectionEpoch = 1;
@@ -5306,7 +5367,7 @@ class SubcProvider {
5306
5367
  this.cancelRestoredDebounce();
5307
5368
  const sock = this.sock;
5308
5369
  try {
5309
- await sendFrame(sock, buildFrame(11 /* Goodbye */, controlFlags(), 0, 0n, new Uint8Array(0)));
5370
+ await sendFrame(sock, buildFrame(FrameType.Goodbye, controlFlags(), 0, 0n, new Uint8Array(0)));
5310
5371
  } catch {} finally {
5311
5372
  sock.close();
5312
5373
  this.finishClosed();
@@ -5357,21 +5418,21 @@ class SubcProvider {
5357
5418
  }
5358
5419
  async dispatch(frame, sock, generation) {
5359
5420
  switch (frame.header.ty) {
5360
- case 7 /* Ping */:
5421
+ case FrameType.Ping:
5361
5422
  if (frame.header.channel === 0) {
5362
- await this.sendOn(sock, generation, buildFrameWithVersion(frame.header.ver, 8 /* Pong */, frame.header.flags, 0, frame.header.corr, new Uint8Array(0)));
5423
+ await this.sendOn(sock, generation, buildFrameWithVersion(frame.header.ver, FrameType.Pong, frame.header.flags, 0, frame.header.corr, new Uint8Array(0)));
5363
5424
  }
5364
5425
  return true;
5365
- case 11 /* Goodbye */:
5426
+ case FrameType.Goodbye:
5366
5427
  if (frame.header.channel === 0)
5367
5428
  return false;
5368
5429
  this.abortChannel(generation, frame.header.channel);
5369
5430
  await this.opts.onRouteGone?.(frame.header.channel);
5370
5431
  return true;
5371
- case 6 /* Cancel */:
5432
+ case FrameType.Cancel:
5372
5433
  this.inflight.get(routeKey(generation, frame.header.channel, frame.header.corr))?.abort();
5373
5434
  return true;
5374
- case 0 /* Request */:
5435
+ case FrameType.Request:
5375
5436
  if (frame.header.channel === 0) {
5376
5437
  await this.handleControlRequest(frame, sock, generation);
5377
5438
  } else {
@@ -5406,6 +5467,14 @@ class SubcProvider {
5406
5467
  }
5407
5468
  async handleControlRequest(frame, sock, generation) {
5408
5469
  const request = parseJson(frame.body);
5470
+ if (request.op === HEALTH_CHECK_OP) {
5471
+ this.handleHealthRequest(frame, sock, generation).catch((err) => {
5472
+ if (!this.closeStarted && this.sock === sock && this.generation === generation) {
5473
+ console.warn("SubcProvider health handler failed after its request was dispatched", err);
5474
+ }
5475
+ });
5476
+ return;
5477
+ }
5409
5478
  if (request.op !== "route.bind") {
5410
5479
  throw new SubcProviderError(`unsupported module control request ${request.op ?? "<missing op>"}`);
5411
5480
  }
@@ -5421,41 +5490,67 @@ class SubcProvider {
5421
5490
  await this.sendError(frame, rejection.code, rejection.message, controlFlags(), sock, generation);
5422
5491
  return;
5423
5492
  }
5424
- await this.sendOn(sock, generation, buildFrameWithVersion(frame.header.ver, 1 /* Response */, controlFlags(), 0, frame.header.corr, encodeJson({ op: "route.bind" })));
5493
+ await this.sendOn(sock, generation, buildFrameWithVersion(frame.header.ver, FrameType.Response, controlFlags(), 0, frame.header.corr, encodeJson({ op: "route.bind" })));
5425
5494
  }
5426
5495
  async handleDataRequest(frame, sock, generation) {
5427
5496
  const { channel, corr, ver } = frame.header;
5428
5497
  const key = routeKey(generation, channel, corr);
5429
5498
  const controller = new AbortController;
5430
5499
  this.inflight.set(key, controller);
5431
- const dataFlags = buildFlags(false, 1 /* Interactive */, false);
5500
+ const dataFlags = buildFlags(false, Priority.Interactive, false);
5432
5501
  const ctx = {
5433
5502
  signal: controller.signal,
5434
5503
  currentEpoch: () => this.connectionEpoch,
5435
5504
  emit: async (eventBody) => {
5436
5505
  if (controller.signal.aborted)
5437
5506
  return;
5438
- await this.sendOn(sock, generation, buildFrameWithVersion(ver, 3 /* StreamData */, dataFlags, channel, corr, eventBody));
5507
+ await this.sendOn(sock, generation, buildFrameWithVersion(ver, FrameType.StreamData, dataFlags, channel, corr, eventBody));
5439
5508
  }
5440
5509
  };
5510
+ const releasePermit = await (this.requestGate ?? new AsyncPermitPool(DEFAULT_PROVIDER_HANDLER_CAPACITY)).acquire();
5441
5511
  try {
5442
5512
  const body = await this.opts.handler(channel, frame.body, ctx);
5443
5513
  if (body === undefined) {
5444
- await this.sendOn(sock, generation, buildFrameWithVersion(ver, 4 /* StreamEnd */, dataFlags, channel, corr, new Uint8Array(0)));
5514
+ await this.sendOn(sock, generation, buildFrameWithVersion(ver, FrameType.StreamEnd, dataFlags, channel, corr, new Uint8Array(0)));
5445
5515
  } else if (body instanceof Uint8Array) {
5446
- await this.sendOn(sock, generation, buildFrameWithVersion(ver, 1 /* Response */, dataFlags, channel, corr, body));
5516
+ await this.sendOn(sock, generation, buildFrameWithVersion(ver, FrameType.Response, dataFlags, channel, corr, body));
5447
5517
  } else {
5448
5518
  throw new SubcProviderError("provider handler must return a Uint8Array or void", "invalid_handler_response");
5449
5519
  }
5450
5520
  } catch (err) {
5451
5521
  await this.sendError(frame, err instanceof SubcProviderError && err.code ? err.code : "handler_error", err instanceof Error ? err.message : String(err), dataFlags, sock, generation);
5452
5522
  } finally {
5523
+ releasePermit();
5524
+ if (this.inflight.get(key) === controller)
5525
+ this.inflight.delete(key);
5526
+ }
5527
+ }
5528
+ async handleHealthRequest(frame, sock, generation) {
5529
+ const { channel, corr, ver } = frame.header;
5530
+ const key = routeKey(generation, channel, corr);
5531
+ const controller = new AbortController;
5532
+ this.inflight.set(key, controller);
5533
+ const releasePermit = await (this.requestGate ?? new AsyncPermitPool(DEFAULT_PROVIDER_HANDLER_CAPACITY)).acquire();
5534
+ try {
5535
+ if (controller.signal.aborted)
5536
+ return;
5537
+ const report = await this.opts.health();
5538
+ await this.sendOn(sock, generation, buildFrameWithVersion(ver, FrameType.Response, controlFlags(), channel, corr, encodeJson({
5539
+ op: HEALTH_CHECK_OP,
5540
+ status: report.status,
5541
+ ...report.detail === undefined ? {} : { detail: report.detail },
5542
+ ...report.metrics === undefined ? {} : { metrics: report.metrics }
5543
+ })));
5544
+ } catch (err) {
5545
+ await this.sendError(frame, err instanceof SubcProviderError && err.code ? err.code : "health_error", err instanceof Error ? err.message : String(err), controlFlags(), sock, generation);
5546
+ } finally {
5547
+ releasePermit();
5453
5548
  if (this.inflight.get(key) === controller)
5454
5549
  this.inflight.delete(key);
5455
5550
  }
5456
5551
  }
5457
5552
  async sendError(frame, code, message, flags, sock, generation) {
5458
- await this.sendOn(sock, generation, buildFrameWithVersion(frame.header.ver, 5 /* Error */, flags, frame.header.channel, frame.header.corr, encodeJson({ code, message })));
5553
+ await this.sendOn(sock, generation, buildFrameWithVersion(frame.header.ver, FrameType.Error, flags, frame.header.channel, frame.header.corr, encodeJson({ code, message })));
5459
5554
  }
5460
5555
  async sendOn(sock, generation, frame) {
5461
5556
  if (this.sock !== sock || this.generation !== generation || this.closeStarted || this.closedErr)
@@ -5594,6 +5689,7 @@ function normalizeProviderConnectOptions(opts) {
5594
5689
  connectionFile: opts.connectionFile,
5595
5690
  manifest: opts.manifest,
5596
5691
  handler: opts.handler,
5692
+ health: opts.health ?? (() => ({ status: "ok" })),
5597
5693
  handshakeTimeoutMs: opts.handshakeTimeoutMs,
5598
5694
  controlOps: opts.controlOps,
5599
5695
  onBind: opts.onBind,
@@ -5605,12 +5701,19 @@ function normalizeProviderConnectOptions(opts) {
5605
5701
  launchNonce: opts.launchNonce
5606
5702
  };
5607
5703
  }
5704
+ function normalizedControlOps(controlOps) {
5705
+ if (controlOps === null)
5706
+ return null;
5707
+ const merged = new Set(controlOps ?? []);
5708
+ merged.add(HEALTH_CHECK_OP);
5709
+ return [...merged];
5710
+ }
5608
5711
  function buildHelloFrame(opts) {
5609
5712
  const nonce = launchNonce(opts);
5610
- return buildFrame(9 /* Hello */, controlFlags(), 0, HELLO_CORR, encodeJson({
5713
+ return buildFrame(FrameType.Hello, controlFlags(), 0, HELLO_CORR, encodeJson({
5611
5714
  manifest: normalizeManifest(opts.manifest),
5612
5715
  protocol_ver: PROTOCOL_VERSION,
5613
- control_ops: opts.controlOps === undefined ? null : opts.controlOps,
5716
+ control_ops: normalizedControlOps(opts.controlOps),
5614
5717
  ...nonce ? { launch_nonce: nonce } : {}
5615
5718
  }));
5616
5719
  }
@@ -5621,7 +5724,9 @@ function isProviderReconnectTransient(err) {
5621
5724
  return true;
5622
5725
  if (err instanceof SocketWriteNotQueuedError || err instanceof SocketWriteQueuedError)
5623
5726
  return true;
5624
- if (err instanceof ConnectionFileError || err instanceof AuthError)
5727
+ if (err instanceof AuthError)
5728
+ return true;
5729
+ if (err instanceof ConnectionFileError)
5625
5730
  return false;
5626
5731
  const code = errorCode2(err);
5627
5732
  return code === "ECONNREFUSED" || code === "ECONNRESET" || code === "EPIPE" || code === "ETIMEDOUT" || code === "ENOENT";
@@ -5638,7 +5743,7 @@ async function pauseBeforeStateRetry() {
5638
5743
  await new Promise((resolve7) => setTimeout(resolve7, 0));
5639
5744
  }
5640
5745
  function controlFlags() {
5641
- return buildFlags(false, 0 /* Passive */, false);
5746
+ return buildFlags(false, Priority.Passive, false);
5642
5747
  }
5643
5748
  async function sendFrame(sock, frame) {
5644
5749
  await sock.write(encodeFrame(frame), Date.now() + WRITE_TIMEOUT_MS);
@@ -5648,9 +5753,9 @@ async function expectHelloAck(sock, deadline) {
5648
5753
  const body = header.len === 0 ? new Uint8Array(0) : await sock.readExact(header.len, deadline);
5649
5754
  const frame = { header, body };
5650
5755
  switch (header.ty) {
5651
- case 10 /* HelloAck */:
5756
+ case FrameType.HelloAck:
5652
5757
  return parseJson(body);
5653
- case 5 /* Error */: {
5758
+ case FrameType.Error: {
5654
5759
  const error2 = parseJson(body);
5655
5760
  throw new SubcProviderError(`subc rejected HELLO: ${error2.code ?? "unknown"} — ${error2.message ?? "subc error"}`, error2.code);
5656
5761
  }
@@ -5716,6 +5821,7 @@ function normalizeProviderRole(role) {
5716
5821
  role: "tool_provider",
5717
5822
  tools: role.tools.map((tool) => ({
5718
5823
  name: tool.name,
5824
+ ...tool.description === undefined ? {} : { description: tool.description },
5719
5825
  execution_mode: tool.execution_mode,
5720
5826
  schema: tool.schema
5721
5827
  })),
@@ -5791,7 +5897,7 @@ function normalizeScheduledTask(task) {
5791
5897
  }
5792
5898
  };
5793
5899
  }
5794
- var DEFAULT_HANDSHAKE_TIMEOUT_MS2 = 1e4, BODY_READ_TIMEOUT_MS2 = 30000, WRITE_TIMEOUT_MS = 30000, DEFAULT_RESTORED_DEBOUNCE_MS = 250, HELLO_CORR = 1n, SubcProviderError, SUBC_LAUNCH_NONCE_ENV2 = "SUBC_LAUNCH_NONCE";
5900
+ var DEFAULT_HANDSHAKE_TIMEOUT_MS2 = 1e4, BODY_READ_TIMEOUT_MS2 = 30000, WRITE_TIMEOUT_MS = 30000, DEFAULT_RESTORED_DEBOUNCE_MS = 250, DEFAULT_PROVIDER_HANDLER_CAPACITY = 64, HEALTH_CHECK_OP = "health.check", HELLO_CORR = 1n, SubcProviderError, SUBC_LAUNCH_NONCE_ENV2 = "SUBC_LAUNCH_NONCE";
5795
5901
  var init_provider = __esm(() => {
5796
5902
  init_auth();
5797
5903
  init_client();
@@ -5807,8 +5913,8 @@ var init_provider = __esm(() => {
5807
5913
  };
5808
5914
  });
5809
5915
 
5810
- // ../../node_modules/.bun/@cortexkit+subc-client@0.3.0/node_modules/@cortexkit/subc-client/src/index.ts
5811
- var init_src = __esm(() => {
5916
+ // ../../node_modules/.bun/@cortexkit+subc-client@0.3.4/node_modules/@cortexkit/subc-client/dist/index.js
5917
+ var init_dist = __esm(() => {
5812
5918
  init_client();
5813
5919
  init_connection_file();
5814
5920
  init_envelope();
@@ -5911,6 +6017,9 @@ class BgSubscription {
5911
6017
  function isRecord(value) {
5912
6018
  return typeof value === "object" && value !== null && !Array.isArray(value);
5913
6019
  }
6020
+ function isUnknownChannelError(err) {
6021
+ return err instanceof SubcError && err.code === "unknown_channel";
6022
+ }
5914
6023
  function safeCloseRoute(client, channel) {
5915
6024
  try {
5916
6025
  client.closeRouteChannel(channel).catch(() => {
@@ -5987,7 +6096,7 @@ class SubcTransport {
5987
6096
  if (!options)
5988
6097
  return {};
5989
6098
  const preview = options.preview;
5990
- const timeoutMs = options.timeoutMs;
6099
+ const timeoutMs = options.transportTimeoutMs ?? options.timeoutMs;
5991
6100
  const onProgress = options.onProgress;
5992
6101
  return { preview, timeoutMs, onProgress };
5993
6102
  }
@@ -6057,45 +6166,66 @@ class SubcTransportPool {
6057
6166
  record.inflight += 1;
6058
6167
  try {
6059
6168
  const client = await this.ensureClient();
6060
- if (!this.isCurrentSession(key, record)) {
6061
- throw new RouteTornDownError("subc session closed");
6062
- }
6063
- let channel;
6064
- let entry;
6065
- try {
6066
- ({ channel, entry } = await this.routeChannel(client, identity, record));
6169
+ const openRoute = async () => {
6067
6170
  if (!this.isCurrentSession(key, record)) {
6068
6171
  throw new RouteTornDownError("subc session closed");
6069
6172
  }
6070
- } catch (err) {
6071
- if (err instanceof RouteTornDownError)
6173
+ try {
6174
+ const opened = await this.routeChannel(client, identity, record);
6175
+ if (!this.isCurrentSession(key, record)) {
6176
+ throw new RouteTornDownError("subc session closed");
6177
+ }
6178
+ return opened;
6179
+ } catch (err) {
6180
+ if (err instanceof RouteTornDownError)
6181
+ throw err;
6182
+ if (isConsumerReconnectTransient(err) && this.isCurrentSession(key, record) && this.client === client) {
6183
+ this.dropClient(client);
6184
+ }
6072
6185
  throw err;
6073
- if (isConsumerReconnectTransient(err) && this.isCurrentSession(key, record) && this.client === client) {
6074
- this.dropClient(client);
6075
- }
6076
- throw err;
6077
- }
6078
- try {
6079
- const reply = await client.request(channel, body, { timeoutMs, onProgress });
6080
- if (this.isCurrentSession(key, record) && this.client === client) {
6081
- this.transportFailures = 0;
6082
6186
  }
6083
- this.ensureBgSubscription(identity, record);
6084
- return reply;
6085
- } catch (err) {
6086
- if (record.routeEntry === entry) {
6087
- entry.closed = true;
6187
+ };
6188
+ const clearRouteEntry = (entry2) => {
6189
+ if (record.routeEntry === entry2) {
6190
+ entry2.closed = true;
6088
6191
  record.routeEntry = null;
6089
6192
  }
6193
+ };
6194
+ const handleRequestFailure = (err, entry2) => {
6195
+ clearRouteEntry(entry2);
6090
6196
  if (this.isCurrentSession(key, record) && this.client === client) {
6091
6197
  if (isConsumerReconnectTransient(err)) {
6092
6198
  this.transportFailures = 0;
6093
6199
  this.dropClient(client);
6094
- } else if (++this.transportFailures >= MAX_CONSECUTIVE_TRANSPORT_FAILURES) {
6200
+ } else if (!isUnknownChannelError(err) && ++this.transportFailures >= MAX_CONSECUTIVE_TRANSPORT_FAILURES) {
6095
6201
  this.transportFailures = 0;
6096
6202
  this.dropClient(client);
6097
6203
  }
6098
6204
  }
6205
+ };
6206
+ const requestOnRoute = async (channel2) => {
6207
+ const reply = await client.request(channel2, body, { timeoutMs, onProgress });
6208
+ if (this.isCurrentSession(key, record) && this.client === client) {
6209
+ this.transportFailures = 0;
6210
+ }
6211
+ this.ensureBgSubscription(identity, record);
6212
+ return reply;
6213
+ };
6214
+ let { channel, entry } = await openRoute();
6215
+ try {
6216
+ return await requestOnRoute(channel);
6217
+ } catch (err) {
6218
+ if (isUnknownChannelError(err) && this.isCurrentSession(key, record) && this.client === client) {
6219
+ clearRouteEntry(entry);
6220
+ ({ channel, entry } = await openRoute());
6221
+ try {
6222
+ return await requestOnRoute(channel);
6223
+ } catch (retryErr) {
6224
+ handleRequestFailure(retryErr, entry);
6225
+ throw retryErr;
6226
+ }
6227
+ }
6228
+ handleRequestFailure(err, entry);
6099
6229
  throw err;
6100
6230
  }
6101
6231
  } finally {
@@ -6261,7 +6391,7 @@ class SubcTransportPool {
6261
6391
  }
6262
6392
  var AFT_MODULE_ID = "aft", MAX_CONSECUTIVE_TRANSPORT_FAILURES = 3, BG_STABLE_MS = 5000, DEFAULT_SESSION_ID = "__default__", LOCALLY_SATISFIED_COMMANDS, RouteTornDownError;
6263
6393
  var init_subc_transport = __esm(() => {
6264
- init_src();
6394
+ init_dist();
6265
6395
  init_project_identity();
6266
6396
  LOCALLY_SATISFIED_COMMANDS = new Set(["configure"]);
6267
6397
  RouteTornDownError = class RouteTornDownError extends Error {
@@ -6581,7 +6711,7 @@ __export(exports_dist, {
6581
6711
  BridgePool: () => BridgePool,
6582
6712
  BinaryBridge: () => BinaryBridge
6583
6713
  });
6584
- var init_dist = __esm(() => {
6714
+ var init_dist2 = __esm(() => {
6585
6715
  init_active_logger();
6586
6716
  init_bash_hints();
6587
6717
  init_bridge();
@@ -6672,7 +6802,7 @@ import { homedir as homedir12 } from "node:os";
6672
6802
  import { join as join11 } from "node:path";
6673
6803
  async function loadPluginVersion() {
6674
6804
  try {
6675
- const bridge = await Promise.resolve().then(() => (init_dist(), exports_dist));
6805
+ const bridge = await Promise.resolve().then(() => (init_dist2(), exports_dist));
6676
6806
  if (typeof bridge.PLUGIN_VERSION === "string" && bridge.PLUGIN_VERSION.length > 0) {
6677
6807
  return bridge.PLUGIN_VERSION;
6678
6808
  }
@@ -6822,7 +6952,7 @@ function findAftBinary(preferredVersion) {
6822
6952
  }
6823
6953
  var PLUGIN_VERSION, VERSION_LINE;
6824
6954
  var init_binary_probe = __esm(async () => {
6825
- init_dist();
6955
+ init_dist2();
6826
6956
  init_paths2();
6827
6957
  PLUGIN_VERSION = await loadPluginVersion();
6828
6958
  VERSION_LINE = /^(?:aft\s+)?v?(\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?)$/i;
@@ -15020,7 +15150,7 @@ class OpenCodeAdapter {
15020
15150
  }
15021
15151
  var PLUGIN_NAME = "@cortexkit/aft-opencode", PLUGIN_ENTRY;
15022
15152
  var init_opencode = __esm(() => {
15023
- init_dist();
15153
+ init_dist2();
15024
15154
  init_fs_util();
15025
15155
  init_jsonc();
15026
15156
  init_paths2();
@@ -15246,7 +15376,7 @@ class PiAdapter {
15246
15376
  }
15247
15377
  var PLUGIN_NAME2 = "@cortexkit/aft-pi", PLUGIN_ENTRY2;
15248
15378
  var init_pi = __esm(() => {
15249
- init_dist();
15379
+ init_dist2();
15250
15380
  init_fs_util();
15251
15381
  init_jsonc();
15252
15382
  init_paths2();
@@ -15382,7 +15512,7 @@ var ANSI_RE, CONTROL_RE, CJKT_WIDE_RE, TAB_RE, EMOJI_RE, LATIN_RE, MODIFIER_RE,
15382
15512
  ellipsed: truncationEnabled && LIMIT >= ELLIPSIS_WIDTH
15383
15513
  };
15384
15514
  }, dist_default;
15385
- var init_dist2 = __esm(() => {
15515
+ var init_dist3 = __esm(() => {
15386
15516
  init_utils();
15387
15517
  ANSI_RE = /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y;
15388
15518
  CONTROL_RE = /[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y;
@@ -15399,8 +15529,8 @@ var init_dist2 = __esm(() => {
15399
15529
  var NO_TRUNCATION2, fastStringWidth = (input, options = {}) => {
15400
15530
  return dist_default(input, NO_TRUNCATION2, options).width;
15401
15531
  }, dist_default2;
15402
- var init_dist3 = __esm(() => {
15403
- init_dist2();
15532
+ var init_dist4 = __esm(() => {
15533
+ init_dist3();
15404
15534
  NO_TRUNCATION2 = {
15405
15535
  limit: Infinity,
15406
15536
  ellipsis: "",
@@ -15606,7 +15736,7 @@ var ESC = "\x1B", CSI = "›", END_CODE = 39, ANSI_ESCAPE_BELL = "\x07", ANSI_CSI
15606
15736
  return returnValue;
15607
15737
  }, CRLF_OR_LF;
15608
15738
  var init_main = __esm(() => {
15609
- init_dist3();
15739
+ init_dist4();
15610
15740
  ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;
15611
15741
  GROUP_REGEX = new RegExp(`(?:\\${ANSI_CSI}(?<code>\\d+)m|\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`, "y");
15612
15742
  CRLF_OR_LF = /\r?\n/;
@@ -15961,7 +16091,7 @@ function T2(r2, t2, i, s) {
15961
16091
  };
15962
16092
  }
15963
16093
  var import_sisteransi, a$2, t, settings, R, CANCEL_SYMBOL, getColumns = (e) => ("columns" in e) && typeof e.columns == "number" ? e.columns : 80, getRows = (e) => ("rows" in e) && typeof e.rows == "number" ? e.rows : 20, T$1, r, _, U, u$1, o$1, h, a$1, a2, n;
15964
- var init_dist4 = __esm(() => {
16094
+ var init_dist5 = __esm(() => {
15965
16095
  init_main();
15966
16096
  import_sisteransi = __toESM(require_src3(), 1);
15967
16097
  a$2 = ["up", "down", "left", "right", "space", "enter", "cancel"];
@@ -16813,11 +16943,11 @@ ${r2}
16813
16943
  }
16814
16944
  }
16815
16945
  }).prompt();
16816
- var init_dist5 = __esm(() => {
16817
- init_dist4();
16818
- init_dist4();
16946
+ var init_dist6 = __esm(() => {
16947
+ init_dist5();
16948
+ init_dist5();
16819
16949
  init_main();
16820
- init_dist3();
16950
+ init_dist4();
16821
16951
  import_sisteransi2 = __toESM(require_src3(), 1);
16822
16952
  unicode = isUnicodeSupported();
16823
16953
  S_STEP_ACTIVE = unicodeOr("◆", "*");
@@ -16954,7 +17084,7 @@ async function text2(message, options = {}) {
16954
17084
  return result;
16955
17085
  }
16956
17086
  var init_prompts = __esm(() => {
16957
- init_dist5();
17087
+ init_dist6();
16958
17088
  });
16959
17089
 
16960
17090
  // src/lib/harness-select.ts
@@ -17475,7 +17605,7 @@ function installHint(binaryName) {
17475
17605
  }
17476
17606
  var PROJECT_ROOT_MARKERS;
17477
17607
  var init_lsp = __esm(async () => {
17478
- init_dist();
17608
+ init_dist2();
17479
17609
  init_aft_bridge();
17480
17610
  init_harness_select();
17481
17611
  init_paths2();
@@ -18078,7 +18208,7 @@ var init_lsp_cache = __esm(() => {
18078
18208
  });
18079
18209
 
18080
18210
  // src/lib/onnx.ts
18081
- import { existsSync as existsSync17, readdirSync as readdirSync7, readlinkSync as readlinkSync2, realpathSync as realpathSync4, statSync as statSync11 } from "node:fs";
18211
+ import { existsSync as existsSync17, readdirSync as readdirSync7, readlinkSync as readlinkSync2, realpathSync as realpathSync4 } from "node:fs";
18082
18212
  import { basename as basename3, isAbsolute as isAbsolute6, join as join19, resolve as resolve10, win32 as win322 } from "node:path";
18083
18213
  function getOnnxLibraryName() {
18084
18214
  if (process.platform === "darwin")
@@ -18266,7 +18396,7 @@ import {
18266
18396
  existsSync as existsSync18,
18267
18397
  openSync as openSync6,
18268
18398
  readSync as readSync3,
18269
- statSync as statSync12
18399
+ statSync as statSync11
18270
18400
  } from "node:fs";
18271
18401
  async function collectDiagnostics(adapters) {
18272
18402
  const cliVersion = getSelfVersion();
@@ -18352,7 +18482,7 @@ async function diagnoseHarness(adapter) {
18352
18482
  logFile: {
18353
18483
  path: logPath,
18354
18484
  exists: existsSync18(logPath),
18355
- sizeKb: existsSync18(logPath) ? Math.round(statSync12(logPath).size / 1024) : 0
18485
+ sizeKb: existsSync18(logPath) ? Math.round(statSync11(logPath).size / 1024) : 0
18356
18486
  }
18357
18487
  };
18358
18488
  }
@@ -18555,7 +18685,7 @@ function tailLogFile(path2, lines) {
18555
18685
  const chunkSize = 64 * 1024;
18556
18686
  let fd = null;
18557
18687
  try {
18558
- const size = statSync12(path2).size;
18688
+ const size = statSync11(path2).size;
18559
18689
  fd = openSync6(path2, "r");
18560
18690
  const chunks = [];
18561
18691
  let position = size;
@@ -18585,7 +18715,7 @@ function tailLogFile(path2, lines) {
18585
18715
  }
18586
18716
  }
18587
18717
  var init_diagnostics = __esm(async () => {
18588
- init_dist();
18718
+ init_dist2();
18589
18719
  init_binary_cache();
18590
18720
  init_jsonc();
18591
18721
  init_lsp_cache();
@@ -18818,7 +18948,7 @@ var init_onnx_fix = __esm(() => {
18818
18948
  });
18819
18949
 
18820
18950
  // src/lib/sessions.ts
18821
- import { existsSync as existsSync20, readdirSync as readdirSync8, readFileSync as readFileSync10, statSync as statSync13 } from "node:fs";
18951
+ import { existsSync as existsSync20, readdirSync as readdirSync8, readFileSync as readFileSync10, statSync as statSync12 } from "node:fs";
18822
18952
  import { createRequire as createRequire4 } from "node:module";
18823
18953
  import { homedir as homedir17 } from "node:os";
18824
18954
  import { basename as basename4, join as join21 } from "node:path";
@@ -18885,7 +19015,7 @@ function listPiSessionsFromDir(sessionsDir) {
18885
19015
  return [];
18886
19016
  const files = collectJsonlFiles(sessionsDir).map((filePath) => {
18887
19017
  try {
18888
- const stats = statSync13(filePath);
19018
+ const stats = statSync12(filePath);
18889
19019
  return { filePath, mtimeMs: stats.mtimeMs };
18890
19020
  } catch {
18891
19021
  return null;
@@ -19025,7 +19155,7 @@ import {
19025
19155
  readFileSync as readFileSync11,
19026
19156
  realpathSync as realpathSync5,
19027
19157
  rmSync as rmSync7,
19028
- statSync as statSync14,
19158
+ statSync as statSync13,
19029
19159
  writeFileSync as writeFileSync5
19030
19160
  } from "node:fs";
19031
19161
  import { tmpdir as tmpdir4 } from "node:os";
@@ -19207,7 +19337,7 @@ function clearOldBinaries() {
19207
19337
  const dir = join22(info.path, version);
19208
19338
  let bytes = 0;
19209
19339
  try {
19210
- bytes = statSync14(dir).isDirectory() ? dirSize(dir) : 0;
19340
+ bytes = statSync13(dir).isDirectory() ? dirSize(dir) : 0;
19211
19341
  } catch {
19212
19342
  bytes = 0;
19213
19343
  }
@@ -19468,7 +19598,7 @@ async function runFixFlow(argv) {
19468
19598
  } else {
19469
19599
  log2.info("AFT binary not found. Downloading…");
19470
19600
  try {
19471
- const { ensureBinary: ensureBinary2 } = await Promise.resolve().then(() => (init_dist(), exports_dist));
19601
+ const { ensureBinary: ensureBinary2 } = await Promise.resolve().then(() => (init_dist2(), exports_dist));
19472
19602
  const path2 = await ensureBinary2(`v${report.cliVersion}`);
19473
19603
  if (path2) {
19474
19604
  log2.success(`AFT binary installed at ${path2}`);
@@ -19826,7 +19956,7 @@ https://github.com/cortexkit/aft/issues/new and paste the contents of ${outPath}
19826
19956
  }
19827
19957
  var DOCTOR_CLEAR_TARGET_OPTIONS, DOCTOR_FORCE_CLEAR_TARGETS;
19828
19958
  var init_doctor = __esm(async () => {
19829
- init_dist();
19959
+ init_dist2();
19830
19960
  init_binary_cache();
19831
19961
  init_bridge_tool_failures();
19832
19962
  init_fs_util();
@@ -13,10 +13,4 @@ export declare function detectOrtVersion(libDir: string): string | null;
13
13
  export declare const REQUIRED_ORT_MAJOR = 1;
14
14
  export declare const REQUIRED_ORT_MIN_MINOR = 20;
15
15
  export declare function isOrtVersionCompatible(version: string): boolean;
16
- /** File-stat helper so callers can report age/size of the ONNX dir. */
17
- export declare function inspectPathStats(path: string): {
18
- exists: boolean;
19
- isDir: boolean;
20
- isFile: boolean;
21
- };
22
16
  //# sourceMappingURL=onnx.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"onnx.d.ts","sourceRoot":"","sources":["../../src/lib/onnx.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,oBAAoB,WAAW,CAAC;AAE7C,wBAAgB,kBAAkB,IAAI,MAAM,CAI3C;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAkB7C;AA8BD,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,IAAI,CAoErD;AACD,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUvE;AAyBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwC9D;AAED,+DAA+D;AAC/D,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAM/D;AAED,uEAAuE;AACvE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG;IAC9C,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB,CAQA"}
1
+ {"version":3,"file":"onnx.d.ts","sourceRoot":"","sources":["../../src/lib/onnx.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,oBAAoB,WAAW,CAAC;AAE7C,wBAAgB,kBAAkB,IAAI,MAAM,CAI3C;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAkB7C;AA8BD,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,IAAI,CAoErD;AACD,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUvE;AAyBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwC9D;AAED,+DAA+D;AAC/D,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAM/D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cortexkit/aft",
3
- "version": "0.45.0",
3
+ "version": "0.46.0",
4
4
  "type": "module",
5
5
  "description": "Unified CLI for Agent File Tools (AFT) — setup, doctor, and diagnostics across supported agent harnesses (OpenCode, Pi)",
6
6
  "license": "MIT",
@@ -24,7 +24,7 @@
24
24
  },
25
25
  "dependencies": {
26
26
  "@clack/prompts": "^1.6.0",
27
- "@cortexkit/aft-bridge": "0.45.0",
27
+ "@cortexkit/aft-bridge": "0.46.0",
28
28
  "comment-json": "^4.6.2"
29
29
  },
30
30
  "devDependencies": {