@cortexkit/aft 0.45.1 → 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.
- package/dist/index.js +224 -94
- package/package.json +2 -2
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.
|
|
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.
|
|
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.
|
|
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 ===
|
|
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
|
|
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.
|
|
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.
|
|
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 ??
|
|
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 ??
|
|
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(
|
|
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(
|
|
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(
|
|
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,
|
|
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(
|
|
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 ??
|
|
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(
|
|
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
|
|
5080
|
-
case
|
|
5094
|
+
case FrameType.Push:
|
|
5095
|
+
case FrameType.StreamData:
|
|
5081
5096
|
pending.onProgress?.(frame.body);
|
|
5082
5097
|
return;
|
|
5083
|
-
case
|
|
5084
|
-
case
|
|
5098
|
+
case FrameType.Response:
|
|
5099
|
+
case FrameType.StreamEnd:
|
|
5085
5100
|
this.settle(key, pending, () => pending.resolve(frame));
|
|
5086
5101
|
return;
|
|
5087
|
-
case
|
|
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 ===
|
|
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 ===
|
|
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
|
|
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 =
|
|
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.
|
|
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(
|
|
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
|
|
5421
|
+
case FrameType.Ping:
|
|
5361
5422
|
if (frame.header.channel === 0) {
|
|
5362
|
-
await this.sendOn(sock, generation, buildFrameWithVersion(frame.header.ver,
|
|
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
|
|
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
|
|
5432
|
+
case FrameType.Cancel:
|
|
5372
5433
|
this.inflight.get(routeKey(generation, frame.header.channel, frame.header.corr))?.abort();
|
|
5373
5434
|
return true;
|
|
5374
|
-
case
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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(
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
5756
|
+
case FrameType.HelloAck:
|
|
5652
5757
|
return parseJson(body);
|
|
5653
|
-
case
|
|
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.
|
|
5811
|
-
var
|
|
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
|
-
|
|
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
|
-
|
|
6071
|
-
|
|
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
|
-
|
|
6084
|
-
|
|
6085
|
-
|
|
6086
|
-
|
|
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
|
-
|
|
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
|
|
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(() => (
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
15403
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
16817
|
-
|
|
16818
|
-
|
|
16946
|
+
var init_dist6 = __esm(() => {
|
|
16947
|
+
init_dist5();
|
|
16948
|
+
init_dist5();
|
|
16819
16949
|
init_main();
|
|
16820
|
-
|
|
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
|
-
|
|
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
|
-
|
|
17608
|
+
init_dist2();
|
|
17479
17609
|
init_aft_bridge();
|
|
17480
17610
|
init_harness_select();
|
|
17481
17611
|
init_paths2();
|
|
@@ -18585,7 +18715,7 @@ function tailLogFile(path2, lines) {
|
|
|
18585
18715
|
}
|
|
18586
18716
|
}
|
|
18587
18717
|
var init_diagnostics = __esm(async () => {
|
|
18588
|
-
|
|
18718
|
+
init_dist2();
|
|
18589
18719
|
init_binary_cache();
|
|
18590
18720
|
init_jsonc();
|
|
18591
18721
|
init_lsp_cache();
|
|
@@ -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(() => (
|
|
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
|
-
|
|
19959
|
+
init_dist2();
|
|
19830
19960
|
init_binary_cache();
|
|
19831
19961
|
init_bridge_tool_failures();
|
|
19832
19962
|
init_fs_util();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cortexkit/aft",
|
|
3
|
-
"version": "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.
|
|
27
|
+
"@cortexkit/aft-bridge": "0.46.0",
|
|
28
28
|
"comment-json": "^4.6.2"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|