@cortexkit/aft-pi 0.52.0 → 0.52.1
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 +77 -26
- package/dist/tools/hoisted.d.ts.map +1 -1
- package/package.json +8 -8
package/dist/index.js
CHANGED
|
@@ -12482,6 +12482,8 @@ var AFT_MODULE_ID = "aft";
|
|
|
12482
12482
|
var MAX_CONSECUTIVE_TRANSPORT_FAILURES = 3;
|
|
12483
12483
|
var RECONNECT_RETRY_FLOOR_MS = 100;
|
|
12484
12484
|
var RECONNECT_RETRY_CAP_MS = 2000;
|
|
12485
|
+
var ROUTE_OPEN_RELOAD_WAIT_CAP_MS = 15000;
|
|
12486
|
+
var ROUTE_OPEN_RELOAD_WAIT_EXHAUSTED_SUFFIX = " The AFT daemon module did not return within the 15s reload window.";
|
|
12485
12487
|
var BG_STABLE_MS = 5000;
|
|
12486
12488
|
function reconnectBackoffMs(attempt) {
|
|
12487
12489
|
return Math.min(RECONNECT_RETRY_FLOOR_MS * 2 ** Math.min(attempt, 6), RECONNECT_RETRY_CAP_MS);
|
|
@@ -12790,6 +12792,15 @@ function isAbsentRootRouteError(err) {
|
|
|
12790
12792
|
function absentRootError(root) {
|
|
12791
12793
|
return new SubcError(`invalid route project root: project root does not exist: ${root}`, "config_divergence");
|
|
12792
12794
|
}
|
|
12795
|
+
function reloadWindowExhaustedError(error2) {
|
|
12796
|
+
if (error2 instanceof Error) {
|
|
12797
|
+
try {
|
|
12798
|
+
error2.message += ROUTE_OPEN_RELOAD_WAIT_EXHAUSTED_SUFFIX;
|
|
12799
|
+
return error2;
|
|
12800
|
+
} catch {}
|
|
12801
|
+
}
|
|
12802
|
+
return new Error(`${String(error2)}${ROUTE_OPEN_RELOAD_WAIT_EXHAUSTED_SUFFIX}`);
|
|
12803
|
+
}
|
|
12793
12804
|
function safeCloseRoute(client, route) {
|
|
12794
12805
|
try {
|
|
12795
12806
|
client.closeRouteChannel(route).catch(() => {
|
|
@@ -12914,6 +12925,7 @@ class SubcTransportPool {
|
|
|
12914
12925
|
connecting = null;
|
|
12915
12926
|
routeReopenRetryDelayMs = RECONNECT_RETRY_FLOOR_MS;
|
|
12916
12927
|
routeReopenRetry = null;
|
|
12928
|
+
routeReopenRetryMs = null;
|
|
12917
12929
|
sessions = new Map;
|
|
12918
12930
|
rootIndex = new Map;
|
|
12919
12931
|
dormantRoots = new Map;
|
|
@@ -13387,6 +13399,23 @@ class SubcTransportPool {
|
|
|
13387
13399
|
throw error2;
|
|
13388
13400
|
}
|
|
13389
13401
|
};
|
|
13402
|
+
const openRouteAfterReloadWindow = async () => {
|
|
13403
|
+
let reloadWaitedMs = 0;
|
|
13404
|
+
while (true) {
|
|
13405
|
+
try {
|
|
13406
|
+
return await openRoute();
|
|
13407
|
+
} catch (error2) {
|
|
13408
|
+
if (!isRouteOpenReloadWindowError(error2))
|
|
13409
|
+
throw error2;
|
|
13410
|
+
const { delayMs, wait } = this.waitForRouteReopenBackoff();
|
|
13411
|
+
if (reloadWaitedMs + delayMs > ROUTE_OPEN_RELOAD_WAIT_CAP_MS) {
|
|
13412
|
+
throw reloadWindowExhaustedError(error2);
|
|
13413
|
+
}
|
|
13414
|
+
reloadWaitedMs += delayMs;
|
|
13415
|
+
await wait;
|
|
13416
|
+
}
|
|
13417
|
+
}
|
|
13418
|
+
};
|
|
13390
13419
|
const clearRouteEntry = (entry) => {
|
|
13391
13420
|
if (record.routeEntry !== entry)
|
|
13392
13421
|
return;
|
|
@@ -13423,7 +13452,7 @@ class SubcTransportPool {
|
|
|
13423
13452
|
this.ensureBgSubscription(identity, record);
|
|
13424
13453
|
return reply;
|
|
13425
13454
|
};
|
|
13426
|
-
let routeAndEntry = await
|
|
13455
|
+
let routeAndEntry = await openRouteAfterReloadWindow();
|
|
13427
13456
|
try {
|
|
13428
13457
|
return await requestOnRoute(routeAndEntry.route);
|
|
13429
13458
|
} catch (error2) {
|
|
@@ -13431,8 +13460,8 @@ class SubcTransportPool {
|
|
|
13431
13460
|
throw this.annotateReapError(error2, record);
|
|
13432
13461
|
if (isRouteProvenAbsentError(error2) && this.isCurrentSession(key, record) && this.client === client) {
|
|
13433
13462
|
clearRouteEntry(routeAndEntry.entry);
|
|
13434
|
-
await this.waitForRouteReopenBackoff();
|
|
13435
|
-
routeAndEntry = await
|
|
13463
|
+
await this.waitForRouteReopenBackoff().wait;
|
|
13464
|
+
routeAndEntry = await openRouteAfterReloadWindow();
|
|
13436
13465
|
try {
|
|
13437
13466
|
const reply = await requestOnRoute(routeAndEntry.route);
|
|
13438
13467
|
this.resetRouteReopenBackoff();
|
|
@@ -13458,17 +13487,21 @@ class SubcTransportPool {
|
|
|
13458
13487
|
}
|
|
13459
13488
|
waitForRouteReopenBackoff() {
|
|
13460
13489
|
const pending = this.routeReopenRetry;
|
|
13461
|
-
|
|
13462
|
-
|
|
13463
|
-
|
|
13464
|
-
|
|
13490
|
+
const pendingDelay = this.routeReopenRetryMs;
|
|
13491
|
+
if (pending && pendingDelay !== null)
|
|
13492
|
+
return { delayMs: pendingDelay, wait: pending };
|
|
13493
|
+
const delayMs = this.routeReopenRetryDelayMs;
|
|
13494
|
+
this.routeReopenRetryDelayMs = Math.min(delayMs * 2, RECONNECT_RETRY_CAP_MS);
|
|
13465
13495
|
let retry;
|
|
13466
|
-
retry = Promise.resolve().then(() => this.routeRetrySleep(
|
|
13467
|
-
if (this.routeReopenRetry === retry)
|
|
13496
|
+
retry = Promise.resolve().then(() => this.routeRetrySleep(delayMs)).finally(() => {
|
|
13497
|
+
if (this.routeReopenRetry === retry) {
|
|
13468
13498
|
this.routeReopenRetry = null;
|
|
13499
|
+
this.routeReopenRetryMs = null;
|
|
13500
|
+
}
|
|
13469
13501
|
});
|
|
13470
13502
|
this.routeReopenRetry = retry;
|
|
13471
|
-
|
|
13503
|
+
this.routeReopenRetryMs = delayMs;
|
|
13504
|
+
return { delayMs, wait: retry };
|
|
13472
13505
|
}
|
|
13473
13506
|
resetRouteReopenBackoff() {
|
|
13474
13507
|
this.routeReopenRetryDelayMs = RECONNECT_RETRY_FLOOR_MS;
|
|
@@ -13755,6 +13788,12 @@ function isRouteGoodbyeError(error2) {
|
|
|
13755
13788
|
}
|
|
13756
13789
|
return error2.code === "route_closed" && error2.message.includes("route closed by subc");
|
|
13757
13790
|
}
|
|
13791
|
+
function isRouteOpenReloadWindowError(error2) {
|
|
13792
|
+
if (error2 === null || typeof error2 !== "object")
|
|
13793
|
+
return false;
|
|
13794
|
+
const code = error2.code;
|
|
13795
|
+
return code === "module_reloading" || code === "module_warming" || code === "target_unavailable";
|
|
13796
|
+
}
|
|
13758
13797
|
function hasEngineResponse(error2) {
|
|
13759
13798
|
const response = error2.response;
|
|
13760
13799
|
if (response !== null && typeof response === "object")
|
|
@@ -14086,7 +14125,16 @@ function platformKey(platform = process.platform, arch = process.arch) {
|
|
|
14086
14125
|
}
|
|
14087
14126
|
return key;
|
|
14088
14127
|
}
|
|
14128
|
+
function logBinaryResolution(resolution) {
|
|
14129
|
+
log(`Resolved binary from ${resolution.source}: ${resolution.path}`);
|
|
14130
|
+
}
|
|
14089
14131
|
function findBinarySync(expectedVersion) {
|
|
14132
|
+
const resolution = findBinarySyncInner(expectedVersion);
|
|
14133
|
+
if (resolution)
|
|
14134
|
+
logBinaryResolution(resolution);
|
|
14135
|
+
return resolution?.path ?? null;
|
|
14136
|
+
}
|
|
14137
|
+
function findBinarySyncInner(expectedVersion) {
|
|
14090
14138
|
const ext = process.platform === "win32" ? ".exe" : "";
|
|
14091
14139
|
const env = { ...process.env };
|
|
14092
14140
|
const pluginVersion = expectedVersion ?? (() => {
|
|
@@ -14100,8 +14148,9 @@ function findBinarySync(expectedVersion) {
|
|
|
14100
14148
|
if (pluginVersion) {
|
|
14101
14149
|
const tag = pluginVersion.startsWith("v") ? pluginVersion : `v${pluginVersion}`;
|
|
14102
14150
|
const versionCached = cachedBinaryPathFromEnv(tag, env, ext);
|
|
14103
|
-
if (versionCached && isExpectedCachedBinary2(versionCached, pluginVersion))
|
|
14104
|
-
return versionCached;
|
|
14151
|
+
if (versionCached && isExpectedCachedBinary2(versionCached, pluginVersion)) {
|
|
14152
|
+
return { path: versionCached, source: "versioned cache" };
|
|
14153
|
+
}
|
|
14105
14154
|
}
|
|
14106
14155
|
try {
|
|
14107
14156
|
const key = platformKey();
|
|
@@ -14116,7 +14165,7 @@ function findBinarySync(expectedVersion) {
|
|
|
14116
14165
|
warn(`npm platform package binary v${npmVersion} does not match plugin v${pluginVersion}; skipping (continuing to PATH lookup)`);
|
|
14117
14166
|
} else {
|
|
14118
14167
|
const copied = copyToVersionedCache(resolved, npmVersion);
|
|
14119
|
-
return copied ?? resolved;
|
|
14168
|
+
return { path: copied ?? resolved, source: "npm platform package" };
|
|
14120
14169
|
}
|
|
14121
14170
|
}
|
|
14122
14171
|
} catch {}
|
|
@@ -14134,27 +14183,28 @@ function findBinarySync(expectedVersion) {
|
|
|
14134
14183
|
}
|
|
14135
14184
|
const usable = probeBinaryCandidate(candidate, "PATH", expectedVersion);
|
|
14136
14185
|
if (usable)
|
|
14137
|
-
return usable;
|
|
14186
|
+
return { path: usable, source: "PATH" };
|
|
14138
14187
|
}
|
|
14139
14188
|
} catch {}
|
|
14140
14189
|
const cargoPath = join7(homeDirFromEnv(env), ".cargo", "bin", `aft${ext}`);
|
|
14141
14190
|
if (existsSync5(cargoPath)) {
|
|
14142
14191
|
const usable = probeBinaryCandidate(cargoPath, "cargo", expectedVersion);
|
|
14143
14192
|
if (usable)
|
|
14144
|
-
return usable;
|
|
14193
|
+
return { path: usable, source: "cargo" };
|
|
14145
14194
|
}
|
|
14146
14195
|
return null;
|
|
14147
14196
|
}
|
|
14148
14197
|
async function findBinary(expectedVersion) {
|
|
14149
14198
|
const syncResult = findBinarySync(expectedVersion);
|
|
14150
14199
|
if (syncResult) {
|
|
14151
|
-
log(`Resolved binary: ${syncResult}`);
|
|
14152
14200
|
return syncResult;
|
|
14153
14201
|
}
|
|
14154
14202
|
log("Binary not found locally, attempting auto-download...");
|
|
14155
14203
|
const downloaded = await ensureBinaryForResolver(expectedVersion);
|
|
14156
|
-
if (downloaded)
|
|
14204
|
+
if (downloaded) {
|
|
14205
|
+
logBinaryResolution({ path: downloaded, source: "auto-download" });
|
|
14157
14206
|
return downloaded;
|
|
14207
|
+
}
|
|
14158
14208
|
throw new Error([
|
|
14159
14209
|
"Could not find the `aft` binary.",
|
|
14160
14210
|
"",
|
|
@@ -17393,7 +17443,7 @@ import {
|
|
|
17393
17443
|
// package.json
|
|
17394
17444
|
var package_default = {
|
|
17395
17445
|
name: "@cortexkit/aft-pi",
|
|
17396
|
-
version: "0.52.
|
|
17446
|
+
version: "0.52.1",
|
|
17397
17447
|
type: "module",
|
|
17398
17448
|
description: "Pi coding agent extension for Agent File Tools (AFT) — tree-sitter and LSP-powered code analysis",
|
|
17399
17449
|
main: "dist/index.js",
|
|
@@ -17416,19 +17466,19 @@ var package_default = {
|
|
|
17416
17466
|
"test:unit": "bun test src/__tests__ --path-ignore-patterns 'src/__tests__/e2e/**'"
|
|
17417
17467
|
},
|
|
17418
17468
|
dependencies: {
|
|
17419
|
-
"@cortexkit/aft-bridge": "0.52.
|
|
17469
|
+
"@cortexkit/aft-bridge": "0.52.1",
|
|
17420
17470
|
"comment-json": "^5.0.0",
|
|
17421
17471
|
diff: "^8.0.4",
|
|
17422
17472
|
typebox: "1.1.38",
|
|
17423
17473
|
zod: "^4.4.3"
|
|
17424
17474
|
},
|
|
17425
17475
|
optionalDependencies: {
|
|
17426
|
-
"@cortexkit/aft-darwin-arm64": "0.52.
|
|
17427
|
-
"@cortexkit/aft-darwin-x64": "0.52.
|
|
17428
|
-
"@cortexkit/aft-linux-arm64": "0.52.
|
|
17429
|
-
"@cortexkit/aft-linux-x64": "0.52.
|
|
17430
|
-
"@cortexkit/aft-win32-arm64": "0.52.
|
|
17431
|
-
"@cortexkit/aft-win32-x64": "0.52.
|
|
17476
|
+
"@cortexkit/aft-darwin-arm64": "0.52.1",
|
|
17477
|
+
"@cortexkit/aft-darwin-x64": "0.52.1",
|
|
17478
|
+
"@cortexkit/aft-linux-arm64": "0.52.1",
|
|
17479
|
+
"@cortexkit/aft-linux-x64": "0.52.1",
|
|
17480
|
+
"@cortexkit/aft-win32-arm64": "0.52.1",
|
|
17481
|
+
"@cortexkit/aft-win32-x64": "0.52.1"
|
|
17432
17482
|
},
|
|
17433
17483
|
devDependencies: {
|
|
17434
17484
|
"@earendil-works/pi-coding-agent": "^0.80.2",
|
|
@@ -35240,6 +35290,7 @@ var HASHLINE_EDIT_DESCRIPTION = [
|
|
|
35240
35290
|
"",
|
|
35241
35291
|
"Quick reference:",
|
|
35242
35292
|
"- Header: `[path#TAG]`; TAG is exactly four hexadecimal digits from a current tagged read. Read every addressed row and gap boundary; REM and MV require a whole-file tagged read. Re-read after an edit before chaining: an edit-response tag can retain only changed context.",
|
|
35293
|
+
"- Same canonical path: multiple sections compose in patch order against pre-request coordinates.",
|
|
35243
35294
|
"- Addresses: `0` (BOF), `N` (one line), `N.=M` (range; `N..=M`/`N..M` also work), `<N`/`>N` (gap before/after), `N*`/`<N*`/`>N*` (block), and `$`/`$-K` (EOF-relative). A plain `N` PUT replaces; use `<N` or `>N` to insert.",
|
|
35244
35295
|
"- PUT text: `PUT <address>:` followed by one or more `+` body rows (`+` alone is blank). A final patch newline is allowed. PUT without `:` copies `@name` (or the anonymous register) and takes no body; names use `@` plus ASCII letters, digits, `_`, or `-`.",
|
|
35245
35296
|
"- CUT: `CUT <address> [@name]`. REM: bare `REM` only, removing the whole file. MV: `MV <destination>` (one whitespace-free path, optional matching quotes), once and after any line operations. `*** Begin Patch`/`*** End Patch` is an optional envelope."
|
|
@@ -38727,7 +38778,7 @@ var PLUGIN_VERSION = (() => {
|
|
|
38727
38778
|
return "0.0.0";
|
|
38728
38779
|
}
|
|
38729
38780
|
})();
|
|
38730
|
-
var ANNOUNCEMENT_VERSION = "0.52.
|
|
38781
|
+
var ANNOUNCEMENT_VERSION = "0.52.1";
|
|
38731
38782
|
var ANNOUNCEMENT_FEATURES = [
|
|
38732
38783
|
"Callgraph stays consistent under load: edits arriving mid-rebuild can no longer be silently lost from navigation results.",
|
|
38733
38784
|
"aft_zoom handles real-world .jsonc: files with comment banners above the opening brace now resolve, and not-found errors point at the segment that actually failed (thanks @iceteaSA).",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hoisted.d.ts","sourceRoot":"","sources":["../../src/tools/hoisted.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAWH,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,YAAY,EAEjB,KAAK,KAAK,EACX,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,SAAS,EAAE,SAAS,EAAU,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAEjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAyDjD;;;;GAIG;AACH,UAAU,iBAAiB;IACzB,aAAa,EAAE,SAAS,GAAG,SAAS,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC;CAClB;AAuFD;;;;;;;;;GASG;AACH,wBAAsB,iCAAiC,CACrD,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC/E,OAAO,CAAC,IAAI,CAAC,CA6Bf;
|
|
1
|
+
{"version":3,"file":"hoisted.d.ts","sourceRoot":"","sources":["../../src/tools/hoisted.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAWH,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,YAAY,EAEjB,KAAK,KAAK,EACX,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,SAAS,EAAE,SAAS,EAAU,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAEjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAyDjD;;;;GAIG;AACH,UAAU,iBAAiB;IACzB,aAAa,EAAE,SAAS,GAAG,SAAS,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC;CAClB;AAuFD;;;;;;;;;GASG;AACH,wBAAsB,iCAAiC,CACrD,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC/E,OAAO,CAAC,IAAI,CAAC,CA6Bf;AA4HD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB;;;;;;;;;;;OAWG;IACH,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED,kEAAkE;AAClE,UAAU,mBAAmB;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;IACxB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;OAOG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA8ED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,gBAAgB,GACxB,IAAI,CAySN;AAMD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,eAAe,CAAC,mBAAmB,CAAC,CAmFtC;AAuED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,OAAO,GAAG,MAAM,EAC1B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,GACzB,IAAI,CAON;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,eAAe,CAAC,mBAAmB,CAAC,EAC5C,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,GACzB,SAAS,GAAG,IAAI,CAmDlB;AAQD;6BAC6B;AAC7B,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS/E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CA0B3D;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,mBAAmB,EAAE,OAAO,EAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,CAER"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cortexkit/aft-pi",
|
|
3
|
-
"version": "0.52.
|
|
3
|
+
"version": "0.52.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Pi coding agent extension for Agent File Tools (AFT) — tree-sitter and LSP-powered code analysis",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -23,19 +23,19 @@
|
|
|
23
23
|
"test:unit": "bun test src/__tests__ --path-ignore-patterns 'src/__tests__/e2e/**'"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@cortexkit/aft-bridge": "0.52.
|
|
26
|
+
"@cortexkit/aft-bridge": "0.52.1",
|
|
27
27
|
"comment-json": "^5.0.0",
|
|
28
28
|
"diff": "^8.0.4",
|
|
29
29
|
"typebox": "1.1.38",
|
|
30
30
|
"zod": "^4.4.3"
|
|
31
31
|
},
|
|
32
32
|
"optionalDependencies": {
|
|
33
|
-
"@cortexkit/aft-darwin-arm64": "0.52.
|
|
34
|
-
"@cortexkit/aft-darwin-x64": "0.52.
|
|
35
|
-
"@cortexkit/aft-linux-arm64": "0.52.
|
|
36
|
-
"@cortexkit/aft-linux-x64": "0.52.
|
|
37
|
-
"@cortexkit/aft-win32-arm64": "0.52.
|
|
38
|
-
"@cortexkit/aft-win32-x64": "0.52.
|
|
33
|
+
"@cortexkit/aft-darwin-arm64": "0.52.1",
|
|
34
|
+
"@cortexkit/aft-darwin-x64": "0.52.1",
|
|
35
|
+
"@cortexkit/aft-linux-arm64": "0.52.1",
|
|
36
|
+
"@cortexkit/aft-linux-x64": "0.52.1",
|
|
37
|
+
"@cortexkit/aft-win32-arm64": "0.52.1",
|
|
38
|
+
"@cortexkit/aft-win32-x64": "0.52.1"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@earendil-works/pi-coding-agent": "^0.80.2",
|