@cortexkit/aft 0.48.1 → 0.49.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/commands/doctor-filters.d.ts.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/lsp.d.ts.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/index.d.ts +1 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +614 -77
- package/dist/lib/aft-bridge.d.ts.map +1 -1
- package/dist/lib/cli.d.ts +2 -0
- package/dist/lib/cli.d.ts.map +1 -0
- package/dist/lib/diagnostics.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-filters.d.ts","sourceRoot":"","sources":["../../src/commands/doctor-filters.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor-filters.d.ts","sourceRoot":"","sources":["../../src/commands/doctor-filters.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAO,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,eAAe,CAAC;IACtC,UAAU,CAAC,EAAE,OAAO,aAAa,CAAC;IAClC,eAAe,CAAC,EAAE,OAAO,yBAAyB,CAAC;IACnD,UAAU,CAAC,EAAE,OAAO,UAAU,CAAC;CAChC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EACF,SAAS,GACT,MAAM,GACN,SAAS,GACT,iBAAiB,GACjB,cAAc,GACd,iBAAiB,GACjB,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AASD,wBAAgB,sBAAsB,IAAI,IAAI,CAW7C;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6DrF;AAmHD,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,mBAAmB,EAC7B,WAAW,SAAgB,GAC1B,MAAM,CA4BR;AA2BD,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,mBAAmB,EAC7B,IAAI,EAAE,MAAM,EACZ,WAAW,SAAgB,GAC1B,MAAM,GAAG,IAAI,CAmBf;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAE7D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lsp.d.ts","sourceRoot":"","sources":["../../src/commands/lsp.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAc,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"lsp.d.ts","sourceRoot":"","sources":["../../src/commands/lsp.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAc,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAKrE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,cAAc,CAAC;IACpC,YAAY,CAAC,EAAE,OAAO,eAAe,CAAC;IACtC,UAAU,CAAC,EAAE,OAAO,aAAa,CAAC;IAClC,eAAe,CAAC,EAAE,OAAO,yBAAyB,CAAC;CACpD;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,gBAAgB,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACzC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,aAAa,EAAE,CAAC;IAC9B,0BAA0B,CAAC,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,GAAG,iBAAiB,GAAG,sBAAsB,GAAG,WAAW,GAAG,MAAM,CAAC;IAC1F,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAkBD,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,WAAW,GAAE,MAAsB,GAClC,MAAM,CAoBR;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkE7E;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CAwD3F;AA2FD,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI,CAapF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAMA,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA2E9D"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,8 +6,5 @@
|
|
|
6
6
|
* (OpenCode, Pi) is auto-detected from installed config paths; explicit
|
|
7
7
|
* `--harness <name>` overrides detection.
|
|
8
8
|
*/
|
|
9
|
-
|
|
10
|
-
declare const args: string[];
|
|
11
|
-
declare function printHelp(): void;
|
|
12
|
-
declare function main(): Promise<number>;
|
|
9
|
+
export {};
|
|
13
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;GAMG
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;GAMG"}
|
package/dist/index.js
CHANGED
|
@@ -46,6 +46,9 @@ var __export = (target, all) => {
|
|
|
46
46
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
47
47
|
var __promiseAll = (args) => Promise.all(args);
|
|
48
48
|
|
|
49
|
+
// src/lib/cli.ts
|
|
50
|
+
var CLI = "npx @cortexkit/aft";
|
|
51
|
+
|
|
49
52
|
// ../aft-bridge/dist/active-logger.js
|
|
50
53
|
function loggerGlobal() {
|
|
51
54
|
return globalThis;
|
|
@@ -141,6 +144,7 @@ function sleep(ms) {
|
|
|
141
144
|
}
|
|
142
145
|
|
|
143
146
|
// ../aft-bridge/dist/bash-hints.js
|
|
147
|
+
import * as fs from "node:fs";
|
|
144
148
|
import * as os from "node:os";
|
|
145
149
|
import * as path from "node:path";
|
|
146
150
|
function maybeAppendConflictsHint(output) {
|
|
@@ -214,12 +218,19 @@ function shouldSuppressGrepSearchHint(command, projectRoot) {
|
|
|
214
218
|
const operands = collectPathOperands(firstStage, firstToken.end);
|
|
215
219
|
if (operands.length === 0)
|
|
216
220
|
return false;
|
|
221
|
+
let sawInProjectOperand = false;
|
|
217
222
|
for (const operand of operands) {
|
|
218
223
|
if (isDynamicPathOperand(operand))
|
|
219
224
|
continue;
|
|
220
|
-
|
|
221
|
-
|
|
225
|
+
const resolvedOperand = resolvePathOperand(effectiveCwd, operand);
|
|
226
|
+
if (!isPathInsideProject(resolvedRoot, effectiveCwd, operand))
|
|
227
|
+
continue;
|
|
228
|
+
sawInProjectOperand = true;
|
|
229
|
+
if (shouldSuppressResolvedPath(resolvedOperand))
|
|
230
|
+
return true;
|
|
222
231
|
}
|
|
232
|
+
if (sawInProjectOperand)
|
|
233
|
+
return false;
|
|
223
234
|
}
|
|
224
235
|
return sawCodeSearchStatement;
|
|
225
236
|
}
|
|
@@ -318,6 +329,17 @@ function isPathInsideProject(resolvedRoot, baseCwd, operand) {
|
|
|
318
329
|
const rel = path.relative(resolvedRoot, resolved);
|
|
319
330
|
return rel === "" || !rel.startsWith("..") && !path.isAbsolute(rel);
|
|
320
331
|
}
|
|
332
|
+
function shouldSuppressResolvedPath(resolved) {
|
|
333
|
+
try {
|
|
334
|
+
const stats = fs.statSync(resolved);
|
|
335
|
+
if (stats.isFile())
|
|
336
|
+
return true;
|
|
337
|
+
const ageMs = Date.now() - stats.mtimeMs;
|
|
338
|
+
return ageMs >= 0 && ageMs < GREP_SEARCH_FRESHNESS_WINDOW_MS;
|
|
339
|
+
} catch {
|
|
340
|
+
return false;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
321
343
|
function splitTopLevelStatements(command) {
|
|
322
344
|
const statements = [];
|
|
323
345
|
let start = 0;
|
|
@@ -490,7 +512,7 @@ function skipSpaces(input, start) {
|
|
|
490
512
|
}
|
|
491
513
|
var CONFLICT_HINT = `
|
|
492
514
|
|
|
493
|
-
[Hint] Use aft_conflicts to see all conflict regions across files in a single call.`, GREP_SEARCH_AFT_SEARCH_HINT = "DO NOT search code by running grep/rg in bash — it is unindexed, unranked, and serial. Use the `aft_search` tool instead (it auto-routes concepts, identifiers, regex, and literals).", GREP_SEARCH_GREP_HINT = "DO NOT search code by running grep/rg in bash — it is unindexed, unranked, and serial. Use the `grep` tool instead (indexed and ranked).", GREP_SEARCH_HINT_PREFIX = "DO NOT search code by running grep/rg in bash —";
|
|
515
|
+
[Hint] Use aft_conflicts to see all conflict regions across files in a single call.`, GREP_SEARCH_AFT_SEARCH_HINT = "DO NOT search code by running grep/rg in bash — it is unindexed, unranked, and serial. Use the `aft_search` tool instead (it auto-routes concepts, identifiers, regex, and literals).", GREP_SEARCH_GREP_HINT = "DO NOT search code by running grep/rg in bash — it is unindexed, unranked, and serial. Use the `grep` tool instead (indexed and ranked).", GREP_SEARCH_HINT_PREFIX = "DO NOT search code by running grep/rg in bash —", GREP_SEARCH_FRESHNESS_WINDOW_MS = 60000;
|
|
494
516
|
var init_bash_hints = () => {};
|
|
495
517
|
|
|
496
518
|
// ../aft-bridge/dist/bash-timeout.js
|
|
@@ -1970,7 +1992,7 @@ var init_platform = __esm(() => {
|
|
|
1970
1992
|
// ../aft-bridge/dist/downloader.js
|
|
1971
1993
|
import { spawnSync } from "node:child_process";
|
|
1972
1994
|
import { createHash as createHash2, randomUUID } from "node:crypto";
|
|
1973
|
-
import { chmodSync, closeSync, copyFileSync, createWriteStream, existsSync as existsSync2, mkdirSync, openSync, readFileSync as readFileSync3, renameSync, rmSync, statSync, unlinkSync, writeSync } from "node:fs";
|
|
1995
|
+
import { chmodSync, closeSync, copyFileSync, createWriteStream, existsSync as existsSync2, mkdirSync, openSync, readFileSync as readFileSync3, renameSync, rmSync, statSync as statSync2, unlinkSync, writeSync } from "node:fs";
|
|
1974
1996
|
import { homedir as homedir4 } from "node:os";
|
|
1975
1997
|
import { join as join3 } from "node:path";
|
|
1976
1998
|
import { Readable } from "node:stream";
|
|
@@ -1980,7 +2002,7 @@ function readBinaryVersion(binaryPath) {
|
|
|
1980
2002
|
const result = spawnSync(binaryPath, ["--version"], {
|
|
1981
2003
|
encoding: "utf-8",
|
|
1982
2004
|
stdio: ["pipe", "pipe", "pipe"],
|
|
1983
|
-
timeout:
|
|
2005
|
+
timeout: 60000
|
|
1984
2006
|
});
|
|
1985
2007
|
const stdoutVersion = result.stdout?.trim();
|
|
1986
2008
|
const stderrVersion = result.stderr?.trim();
|
|
@@ -2185,7 +2207,7 @@ async function acquireDownloadLock(lockPath) {
|
|
|
2185
2207
|
if (code !== "EEXIST")
|
|
2186
2208
|
throw err;
|
|
2187
2209
|
try {
|
|
2188
|
-
const ageMs = Date.now() -
|
|
2210
|
+
const ageMs = Date.now() - statSync2(lockPath).mtimeMs;
|
|
2189
2211
|
if (ageMs > DOWNLOAD_LOCK_STALE_MS) {
|
|
2190
2212
|
rmSync(lockPath, { force: true });
|
|
2191
2213
|
continue;
|
|
@@ -2400,6 +2422,27 @@ ${reflowText}`;
|
|
|
2400
2422
|
return " Auto-formatted.";
|
|
2401
2423
|
}
|
|
2402
2424
|
|
|
2425
|
+
// ../aft-bridge/dist/error-contract.js
|
|
2426
|
+
function toolErrorFromResponse(command, response) {
|
|
2427
|
+
const code = typeof response.code === "string" && response.code.length > 0 ? response.code : "unknown_error";
|
|
2428
|
+
const message = typeof response.message === "string" && response.message.length > 0 ? response.message : `${command} failed`;
|
|
2429
|
+
return new AftToolError(message, code, response);
|
|
2430
|
+
}
|
|
2431
|
+
var AftToolError;
|
|
2432
|
+
var init_error_contract = __esm(() => {
|
|
2433
|
+
AftToolError = class AftToolError extends Error {
|
|
2434
|
+
code;
|
|
2435
|
+
response;
|
|
2436
|
+
constructor(message, code, response) {
|
|
2437
|
+
const cause = { code, message, response };
|
|
2438
|
+
super(message, { cause });
|
|
2439
|
+
this.name = "AftToolError";
|
|
2440
|
+
this.code = code;
|
|
2441
|
+
this.response = response;
|
|
2442
|
+
}
|
|
2443
|
+
};
|
|
2444
|
+
});
|
|
2445
|
+
|
|
2403
2446
|
// ../aft-bridge/dist/format.js
|
|
2404
2447
|
function formatTokenCount(n) {
|
|
2405
2448
|
if (!Number.isFinite(n) || n < 0)
|
|
@@ -2803,7 +2846,7 @@ var init_resolver = __esm(() => {
|
|
|
2803
2846
|
|
|
2804
2847
|
// ../aft-bridge/dist/migration.js
|
|
2805
2848
|
import { spawnSync as spawnSync2 } from "node:child_process";
|
|
2806
|
-
import { closeSync as closeSync3, existsSync as existsSync5, mkdirSync as mkdirSync4, openSync as openSync3, readFileSync as readFileSync5, renameSync as renameSync4, rmSync as rmSync2, statSync as
|
|
2849
|
+
import { closeSync as closeSync3, existsSync as existsSync5, mkdirSync as mkdirSync4, openSync as openSync3, readFileSync as readFileSync5, renameSync as renameSync4, rmSync as rmSync2, statSync as statSync3, unlinkSync as unlinkSync3, writeFileSync as writeFileSync2 } from "node:fs";
|
|
2807
2850
|
import { homedir as homedir8, tmpdir } from "node:os";
|
|
2808
2851
|
import { basename, dirname as dirname3, join as join7, resolve as resolve4 } from "node:path";
|
|
2809
2852
|
function dataHome2() {
|
|
@@ -2940,7 +2983,7 @@ function acquireConfigMigrationLock(lockDir) {
|
|
|
2940
2983
|
if (code !== "EEXIST")
|
|
2941
2984
|
throw err;
|
|
2942
2985
|
try {
|
|
2943
|
-
const ageMs = Date.now() -
|
|
2986
|
+
const ageMs = Date.now() - statSync3(lockDir).mtimeMs;
|
|
2944
2987
|
if (ageMs > 60000) {
|
|
2945
2988
|
rmSync2(lockDir, { recursive: true, force: true });
|
|
2946
2989
|
continue;
|
|
@@ -3263,7 +3306,7 @@ var init_migration = __esm(() => {
|
|
|
3263
3306
|
|
|
3264
3307
|
// ../aft-bridge/dist/npm-resolver.js
|
|
3265
3308
|
import { execFileSync } from "node:child_process";
|
|
3266
|
-
import { readdirSync, statSync as
|
|
3309
|
+
import { readdirSync, statSync as statSync4 } from "node:fs";
|
|
3267
3310
|
import { homedir as homedir9 } from "node:os";
|
|
3268
3311
|
import { delimiter, dirname as dirname4, isAbsolute as isAbsolute3, join as join8 } from "node:path";
|
|
3269
3312
|
function defaultDeps() {
|
|
@@ -3279,7 +3322,7 @@ function npmBinaryName(platform) {
|
|
|
3279
3322
|
}
|
|
3280
3323
|
function isFile(p) {
|
|
3281
3324
|
try {
|
|
3282
|
-
return
|
|
3325
|
+
return statSync4(p).isFile();
|
|
3283
3326
|
} catch {
|
|
3284
3327
|
return false;
|
|
3285
3328
|
}
|
|
@@ -3398,7 +3441,7 @@ var init_npm_resolver = () => {};
|
|
|
3398
3441
|
// ../aft-bridge/dist/onnx-runtime.js
|
|
3399
3442
|
import { execFileSync as execFileSync2 } from "node:child_process";
|
|
3400
3443
|
import { createHash as createHash3 } from "node:crypto";
|
|
3401
|
-
import { chmodSync as chmodSync3, closeSync as closeSync4, copyFileSync as copyFileSync3, createWriteStream as createWriteStream2, existsSync as existsSync6, lstatSync, mkdirSync as mkdirSync5, openSync as openSync4, readdirSync as readdirSync2, readFileSync as readFileSync6, readlinkSync, realpathSync, rmSync as rmSync3, statSync as
|
|
3444
|
+
import { chmodSync as chmodSync3, closeSync as closeSync4, copyFileSync as copyFileSync3, createWriteStream as createWriteStream2, existsSync as existsSync6, lstatSync, mkdirSync as mkdirSync5, openSync as openSync4, readdirSync as readdirSync2, readFileSync as readFileSync6, readlinkSync, realpathSync, rmSync as rmSync3, statSync as statSync5, symlinkSync, unlinkSync as unlinkSync4, writeFileSync as writeFileSync3 } from "node:fs";
|
|
3402
3445
|
import { basename as basename2, dirname as dirname5, isAbsolute as isAbsolute4, join as join9, relative as relative2, resolve as resolve5, win32 } from "node:path";
|
|
3403
3446
|
import { Readable as Readable2 } from "node:stream";
|
|
3404
3447
|
import { pipeline as pipeline2 } from "node:stream/promises";
|
|
@@ -3491,7 +3534,7 @@ function cleanupAbandonedStagingDirs(onnxBaseDir) {
|
|
|
3491
3534
|
abandoned = true;
|
|
3492
3535
|
} else {
|
|
3493
3536
|
try {
|
|
3494
|
-
const ageMs = Date.now() -
|
|
3537
|
+
const ageMs = Date.now() - statSync5(stagingDir).mtimeMs;
|
|
3495
3538
|
abandoned = ageMs > STALE_LOCK_MS;
|
|
3496
3539
|
} catch {
|
|
3497
3540
|
abandoned = true;
|
|
@@ -3925,7 +3968,7 @@ function writeOnnxInstalledMeta(installDir, version, sha256, archiveSha256) {
|
|
|
3925
3968
|
function readOnnxInstalledMeta(installDir) {
|
|
3926
3969
|
const path2 = join9(installDir, ONNX_INSTALLED_META_FILE);
|
|
3927
3970
|
try {
|
|
3928
|
-
if (!
|
|
3971
|
+
if (!statSync5(path2).isFile())
|
|
3929
3972
|
return null;
|
|
3930
3973
|
const raw = readFileSync6(path2, "utf8");
|
|
3931
3974
|
const parsed = JSON.parse(raw);
|
|
@@ -3976,7 +4019,7 @@ ${new Date().toISOString()}
|
|
|
3976
4019
|
const parsed = Number.parseInt(firstLine, 10);
|
|
3977
4020
|
if (Number.isFinite(parsed) && parsed > 0)
|
|
3978
4021
|
owningPid = parsed;
|
|
3979
|
-
lockMtimeMs =
|
|
4022
|
+
lockMtimeMs = statSync5(lockPath).mtimeMs;
|
|
3980
4023
|
} catch {
|
|
3981
4024
|
return tryClaim();
|
|
3982
4025
|
}
|
|
@@ -4126,6 +4169,492 @@ var init_onnx_runtime = __esm(() => {
|
|
|
4126
4169
|
};
|
|
4127
4170
|
});
|
|
4128
4171
|
|
|
4172
|
+
// ../aft-bridge/dist/path-aliases.js
|
|
4173
|
+
function isWellFormedUnicodeString(value) {
|
|
4174
|
+
for (let index = 0;index < value.length; index++) {
|
|
4175
|
+
const codeUnit = value.charCodeAt(index);
|
|
4176
|
+
if (codeUnit >= 55296 && codeUnit <= 56319) {
|
|
4177
|
+
const next = value.charCodeAt(index + 1);
|
|
4178
|
+
if (next < 56320 || next > 57343 || Number.isNaN(next))
|
|
4179
|
+
return false;
|
|
4180
|
+
index++;
|
|
4181
|
+
} else if (codeUnit >= 56320 && codeUnit <= 57343) {
|
|
4182
|
+
return false;
|
|
4183
|
+
}
|
|
4184
|
+
}
|
|
4185
|
+
return true;
|
|
4186
|
+
}
|
|
4187
|
+
function hasOwn(record, key) {
|
|
4188
|
+
return Object.hasOwn(record, key);
|
|
4189
|
+
}
|
|
4190
|
+
function invalidPathValue(property) {
|
|
4191
|
+
throw new InvalidRequestError(`'${property}' must be a non-empty well-formed Unicode string`);
|
|
4192
|
+
}
|
|
4193
|
+
function pathValue(record, property) {
|
|
4194
|
+
const value = record[property];
|
|
4195
|
+
if (typeof value !== "string" || value.length === 0 || !isWellFormedUnicodeString(value)) {
|
|
4196
|
+
invalidPathValue(property);
|
|
4197
|
+
}
|
|
4198
|
+
return value;
|
|
4199
|
+
}
|
|
4200
|
+
function normalizeAliasPair(record, canonical, legacy, required) {
|
|
4201
|
+
const hasCanonical = hasOwn(record, canonical);
|
|
4202
|
+
const hasLegacy = hasOwn(record, legacy);
|
|
4203
|
+
if (!hasCanonical && !hasLegacy) {
|
|
4204
|
+
if (required) {
|
|
4205
|
+
throw new InvalidRequestError(`'${canonical}' is required`);
|
|
4206
|
+
}
|
|
4207
|
+
return;
|
|
4208
|
+
}
|
|
4209
|
+
if (hasCanonical && hasLegacy) {
|
|
4210
|
+
let canonicalValue;
|
|
4211
|
+
let legacyValue;
|
|
4212
|
+
try {
|
|
4213
|
+
canonicalValue = pathValue(record, canonical);
|
|
4214
|
+
legacyValue = pathValue(record, legacy);
|
|
4215
|
+
} catch {
|
|
4216
|
+
throw new InvalidRequestError(`Invalid request: '${canonical}' and '${legacy}' must both be non-empty well-formed Unicode strings`);
|
|
4217
|
+
}
|
|
4218
|
+
if (canonicalValue !== legacyValue) {
|
|
4219
|
+
throw new InvalidRequestError(`Invalid request: '${canonical}' and '${legacy}' must contain equal decoded strings`);
|
|
4220
|
+
}
|
|
4221
|
+
delete record[legacy];
|
|
4222
|
+
return;
|
|
4223
|
+
}
|
|
4224
|
+
if (hasCanonical) {
|
|
4225
|
+
pathValue(record, canonical);
|
|
4226
|
+
return;
|
|
4227
|
+
}
|
|
4228
|
+
record[canonical] = pathValue(record, legacy);
|
|
4229
|
+
delete record[legacy];
|
|
4230
|
+
}
|
|
4231
|
+
function validateOptionalCanonicalPath(record, property) {
|
|
4232
|
+
if (hasOwn(record, property))
|
|
4233
|
+
pathValue(record, property);
|
|
4234
|
+
}
|
|
4235
|
+
function normalizeZoomTargets(record) {
|
|
4236
|
+
if (!hasOwn(record, "targets"))
|
|
4237
|
+
return;
|
|
4238
|
+
const targets = record.targets;
|
|
4239
|
+
const normalizeTarget = (target, index) => {
|
|
4240
|
+
if (!target || typeof target !== "object" || Array.isArray(target)) {
|
|
4241
|
+
throw new InvalidRequestError(`'targets[${index}].path' must be a non-empty string`);
|
|
4242
|
+
}
|
|
4243
|
+
const source = target;
|
|
4244
|
+
const emptyTarget = source.symbol === "" && (hasOwn(source, "path") && source.path === "" || hasOwn(source, "filePath") && source.filePath === "");
|
|
4245
|
+
if (emptyTarget)
|
|
4246
|
+
return { ...source };
|
|
4247
|
+
const normalized = { ...source };
|
|
4248
|
+
try {
|
|
4249
|
+
normalizeAliasPair(normalized, "path", "filePath", true);
|
|
4250
|
+
} catch (error2) {
|
|
4251
|
+
if (error2 instanceof InvalidRequestError) {
|
|
4252
|
+
throw new InvalidRequestError(error2.message.replace("'filePath'", `'targets[${index}].filePath'`).replace("'path'", `'targets[${index}].path'`));
|
|
4253
|
+
}
|
|
4254
|
+
throw error2;
|
|
4255
|
+
}
|
|
4256
|
+
return normalized;
|
|
4257
|
+
};
|
|
4258
|
+
if (Array.isArray(targets)) {
|
|
4259
|
+
if (targets.length === 0)
|
|
4260
|
+
return;
|
|
4261
|
+
record.targets = targets.map(normalizeTarget);
|
|
4262
|
+
return;
|
|
4263
|
+
}
|
|
4264
|
+
if (targets && typeof targets === "object") {
|
|
4265
|
+
record.targets = normalizeTarget(targets, 0);
|
|
4266
|
+
}
|
|
4267
|
+
}
|
|
4268
|
+
function bareToolName(toolName) {
|
|
4269
|
+
const bare = toolName.startsWith("aft_") ? toolName.slice(4) : toolName;
|
|
4270
|
+
if (bare === "read" || bare === "write" || bare === "edit" || bare === "zoom" || bare === "callgraph" || bare === "safety" || bare === "move" || bare === "import" || bare === "refactor" || bare === "grep" || bare === "search" || bare === "conflicts") {
|
|
4271
|
+
return bare;
|
|
4272
|
+
}
|
|
4273
|
+
return;
|
|
4274
|
+
}
|
|
4275
|
+
function prepareCanonicalPathArguments(toolName, rawArguments) {
|
|
4276
|
+
if (!rawArguments || typeof rawArguments !== "object" || Array.isArray(rawArguments)) {
|
|
4277
|
+
throw new InvalidRequestError("tool arguments must be an object");
|
|
4278
|
+
}
|
|
4279
|
+
const tool = bareToolName(toolName);
|
|
4280
|
+
const record = { ...rawArguments };
|
|
4281
|
+
if (!tool)
|
|
4282
|
+
return record;
|
|
4283
|
+
switch (tool) {
|
|
4284
|
+
case "read":
|
|
4285
|
+
case "write":
|
|
4286
|
+
case "edit":
|
|
4287
|
+
case "move":
|
|
4288
|
+
case "import":
|
|
4289
|
+
case "refactor":
|
|
4290
|
+
normalizeAliasPair(record, "path", "filePath", true);
|
|
4291
|
+
break;
|
|
4292
|
+
case "zoom":
|
|
4293
|
+
normalizeAliasPair(record, "path", "filePath", false);
|
|
4294
|
+
normalizeZoomTargets(record);
|
|
4295
|
+
break;
|
|
4296
|
+
case "callgraph":
|
|
4297
|
+
normalizeAliasPair(record, "path", "filePath", true);
|
|
4298
|
+
normalizeAliasPair(record, "toPath", "toFile", false);
|
|
4299
|
+
break;
|
|
4300
|
+
case "safety":
|
|
4301
|
+
normalizeAliasPair(record, "path", "filePath", false);
|
|
4302
|
+
break;
|
|
4303
|
+
case "grep":
|
|
4304
|
+
case "search":
|
|
4305
|
+
case "conflicts":
|
|
4306
|
+
validateOptionalCanonicalPath(record, "path");
|
|
4307
|
+
break;
|
|
4308
|
+
}
|
|
4309
|
+
return record;
|
|
4310
|
+
}
|
|
4311
|
+
function prepareCanonicalEditArguments(toolName, rawArguments) {
|
|
4312
|
+
if (!rawArguments || typeof rawArguments !== "object" || Array.isArray(rawArguments)) {
|
|
4313
|
+
throw new InvalidRequestError("tool arguments must be an object");
|
|
4314
|
+
}
|
|
4315
|
+
const raw = rawArguments;
|
|
4316
|
+
const record = copyOwnProperties(raw);
|
|
4317
|
+
normalizeEditPathAlias(record);
|
|
4318
|
+
const suppliedLineFields = ["startLine", "endLine"].filter((key) => hasOwn(record, key));
|
|
4319
|
+
if (suppliedLineFields.length > 0) {
|
|
4320
|
+
throw new InvalidRequestError(`edit: top-level ${suppliedLineFields.map((key) => `'${key}'`).join(" and ")} are invalid; ` + "line-range fields are valid only inside 'edits[]'. " + "Use edits: [{ startLine, endLine, content }].");
|
|
4321
|
+
}
|
|
4322
|
+
const isOpenCodeRetiredBoundary = toolName === "aft_edit";
|
|
4323
|
+
const retiredFields = ["file", "mode"].filter((key) => hasOwn(record, key));
|
|
4324
|
+
if (retiredFields.length > 0 && isOpenCodeRetiredBoundary) {
|
|
4325
|
+
throw new InvalidRequestError("aft_edit: the retired `mode`/`file` edit form is no longer supported; use `path` with " + "exactly one of `appendContent`, `edits`, or `symbol` plus `content`.");
|
|
4326
|
+
}
|
|
4327
|
+
const unknownRootKeys = Object.getOwnPropertyNames(record).filter((key) => !EDIT_ROOT_CANONICAL_KEYS.has(key) && !EDIT_ROOT_COMPATIBILITY_KEYS.has(key) && key !== "filePath").sort();
|
|
4328
|
+
if (unknownRootKeys.length > 0) {
|
|
4329
|
+
throw new InvalidRequestError(formatUnknownKeys(unknownRootKeys));
|
|
4330
|
+
}
|
|
4331
|
+
const modes = editModesPresent(record);
|
|
4332
|
+
if (hasOrphanedSymbolContent(record)) {
|
|
4333
|
+
throw new InvalidRequestError("edit: 'content' requires a non-empty string 'symbol' when symbol mode is selected");
|
|
4334
|
+
}
|
|
4335
|
+
if (modes.length > 1) {
|
|
4336
|
+
throw new InvalidRequestError(`edit: conflicting modes: ${modes.join(", ")}. ` + OMIT_OPTIONAL_FIELDS_STEERING);
|
|
4337
|
+
}
|
|
4338
|
+
if (modes.length === 0) {
|
|
4339
|
+
throw new InvalidRequestError("edit: exactly one of `appendContent`, `edits`, or `symbol` plus `content` is required. " + OMIT_OPTIONAL_FIELDS_STEERING);
|
|
4340
|
+
}
|
|
4341
|
+
const mode = modes[0];
|
|
4342
|
+
if (mode === "appendContent") {
|
|
4343
|
+
if (typeof record.appendContent !== "string") {
|
|
4344
|
+
throw new InvalidRequestError("edit: 'appendContent' must be a string");
|
|
4345
|
+
}
|
|
4346
|
+
} else if (mode === "edits") {
|
|
4347
|
+
const parsedEdits = parseEditArray(record.edits);
|
|
4348
|
+
record.edits = parsedEdits.map((item, index) => normalizeEditItem(item, index));
|
|
4349
|
+
} else if (mode === "symbol/content") {
|
|
4350
|
+
if (!hasOwn(record, "symbol") || typeof record.symbol !== "string") {
|
|
4351
|
+
throw new InvalidRequestError("edit: 'symbol' must be a string when symbol mode is selected");
|
|
4352
|
+
}
|
|
4353
|
+
if (!hasOwn(record, "content") || typeof record.content !== "string") {
|
|
4354
|
+
throw new InvalidRequestError("edit: symbol mode requires both 'symbol' and 'content' string properties");
|
|
4355
|
+
}
|
|
4356
|
+
} else {
|
|
4357
|
+
const item = {};
|
|
4358
|
+
for (const key of EDIT_ROOT_COMPATIBILITY_KEYS) {
|
|
4359
|
+
if (hasOwn(record, key))
|
|
4360
|
+
item[key] = record[key];
|
|
4361
|
+
}
|
|
4362
|
+
record.edits = [normalizeEditItem(item, 0)];
|
|
4363
|
+
for (const key of EDIT_ROOT_COMPATIBILITY_KEYS)
|
|
4364
|
+
delete record[key];
|
|
4365
|
+
}
|
|
4366
|
+
validateEditPath(record);
|
|
4367
|
+
return record;
|
|
4368
|
+
}
|
|
4369
|
+
function normalizeEditPathAlias(record) {
|
|
4370
|
+
const hasCanonical = hasOwn(record, "path");
|
|
4371
|
+
const hasLegacy = hasOwn(record, "filePath");
|
|
4372
|
+
if (!hasCanonical && !hasLegacy)
|
|
4373
|
+
return;
|
|
4374
|
+
if (hasCanonical && hasLegacy) {
|
|
4375
|
+
let canonical;
|
|
4376
|
+
let legacy;
|
|
4377
|
+
try {
|
|
4378
|
+
canonical = pathValue(record, "path");
|
|
4379
|
+
legacy = pathValue(record, "filePath");
|
|
4380
|
+
} catch {
|
|
4381
|
+
throw new InvalidRequestError("Invalid request: 'path' and 'filePath' must both be non-empty well-formed Unicode strings");
|
|
4382
|
+
}
|
|
4383
|
+
if (canonical !== legacy) {
|
|
4384
|
+
throw new InvalidRequestError("Invalid request: 'path' and 'filePath' must contain equal decoded strings");
|
|
4385
|
+
}
|
|
4386
|
+
delete record.filePath;
|
|
4387
|
+
return;
|
|
4388
|
+
}
|
|
4389
|
+
if (!hasCanonical) {
|
|
4390
|
+
record.path = pathValue(record, "filePath");
|
|
4391
|
+
delete record.filePath;
|
|
4392
|
+
}
|
|
4393
|
+
}
|
|
4394
|
+
function validateEditPath(record) {
|
|
4395
|
+
if (!hasOwn(record, "path")) {
|
|
4396
|
+
throw new InvalidRequestError("'path' is required");
|
|
4397
|
+
}
|
|
4398
|
+
pathValue(record, "path");
|
|
4399
|
+
}
|
|
4400
|
+
function formatUnknownKeys(keys) {
|
|
4401
|
+
return `Unrecognized keys: ${keys.map((key) => `"${key}"`).join(", ")}`;
|
|
4402
|
+
}
|
|
4403
|
+
function editModesPresent(record) {
|
|
4404
|
+
const hasAppendContent = isNonEmptyString(record.appendContent);
|
|
4405
|
+
if (!hasAppendContent)
|
|
4406
|
+
delete record.appendContent;
|
|
4407
|
+
const hasEdits = normalizeEditArraySentinels(record);
|
|
4408
|
+
if (!hasEdits)
|
|
4409
|
+
delete record.edits;
|
|
4410
|
+
const hasSymbol = isNonEmptyString(record.symbol);
|
|
4411
|
+
if (!hasSymbol) {
|
|
4412
|
+
delete record.symbol;
|
|
4413
|
+
if (record.content === null || record.content === "")
|
|
4414
|
+
delete record.content;
|
|
4415
|
+
} else if (record.content === null) {
|
|
4416
|
+
delete record.content;
|
|
4417
|
+
}
|
|
4418
|
+
const hasSingleEdit = isNonEmptyString(record.oldString);
|
|
4419
|
+
if (!hasSingleEdit) {
|
|
4420
|
+
for (const key of EDIT_ROOT_COMPATIBILITY_KEYS)
|
|
4421
|
+
delete record[key];
|
|
4422
|
+
} else {
|
|
4423
|
+
for (const key of ["newString", "replaceAll", "occurrence"]) {
|
|
4424
|
+
if (record[key] === null)
|
|
4425
|
+
delete record[key];
|
|
4426
|
+
}
|
|
4427
|
+
}
|
|
4428
|
+
const modes = [];
|
|
4429
|
+
if (hasAppendContent)
|
|
4430
|
+
modes.push("appendContent");
|
|
4431
|
+
if (hasEdits)
|
|
4432
|
+
modes.push("edits");
|
|
4433
|
+
if (hasSymbol)
|
|
4434
|
+
modes.push("symbol/content");
|
|
4435
|
+
if (hasSingleEdit)
|
|
4436
|
+
modes.push("oldString/newString");
|
|
4437
|
+
return modes;
|
|
4438
|
+
}
|
|
4439
|
+
function isNonEmptyString(value) {
|
|
4440
|
+
return typeof value === "string" && value.length > 0;
|
|
4441
|
+
}
|
|
4442
|
+
function isEditSentinelItem(item) {
|
|
4443
|
+
if (!item || typeof item !== "object" || Array.isArray(item))
|
|
4444
|
+
return false;
|
|
4445
|
+
const record = item;
|
|
4446
|
+
if (record.oldString !== "")
|
|
4447
|
+
return false;
|
|
4448
|
+
const newStringEmpty = !hasOwn(record, "newString") || record.newString === "" || record.newString === null;
|
|
4449
|
+
if (!newStringEmpty)
|
|
4450
|
+
return false;
|
|
4451
|
+
return !hasOwn(record, "content") || record.content === "" || record.content === null;
|
|
4452
|
+
}
|
|
4453
|
+
function normalizeEditArraySentinels(record) {
|
|
4454
|
+
const value = record.edits;
|
|
4455
|
+
if (Array.isArray(value)) {
|
|
4456
|
+
const survivors = value.filter((item) => !isEditSentinelItem(item));
|
|
4457
|
+
if (survivors.length === 0)
|
|
4458
|
+
return false;
|
|
4459
|
+
record.edits = survivors;
|
|
4460
|
+
return true;
|
|
4461
|
+
}
|
|
4462
|
+
if (typeof value !== "string" || value.length === 0)
|
|
4463
|
+
return false;
|
|
4464
|
+
try {
|
|
4465
|
+
const parsed = JSON.parse(value);
|
|
4466
|
+
if (!Array.isArray(parsed))
|
|
4467
|
+
return true;
|
|
4468
|
+
const survivors = parsed.filter((item) => !isEditSentinelItem(item));
|
|
4469
|
+
if (survivors.length === 0)
|
|
4470
|
+
return false;
|
|
4471
|
+
record.edits = survivors;
|
|
4472
|
+
return true;
|
|
4473
|
+
} catch {
|
|
4474
|
+
return true;
|
|
4475
|
+
}
|
|
4476
|
+
}
|
|
4477
|
+
function hasOrphanedSymbolContent(record) {
|
|
4478
|
+
return isNonEmptyString(record.content) && !isNonEmptyString(record.symbol);
|
|
4479
|
+
}
|
|
4480
|
+
function parseEditArray(value) {
|
|
4481
|
+
if (typeof value === "string") {
|
|
4482
|
+
let parsed;
|
|
4483
|
+
try {
|
|
4484
|
+
parsed = JSON.parse(value);
|
|
4485
|
+
} catch {
|
|
4486
|
+
throw new InvalidRequestError("edit: 'edits' must contain valid JSON representing an array");
|
|
4487
|
+
}
|
|
4488
|
+
if (!Array.isArray(parsed)) {
|
|
4489
|
+
throw new InvalidRequestError("edit: 'edits' JSON must have an array root");
|
|
4490
|
+
}
|
|
4491
|
+
if (parsed.length === 0) {
|
|
4492
|
+
throw new InvalidRequestError("edit: 'edits' array must not be empty");
|
|
4493
|
+
}
|
|
4494
|
+
return parsed;
|
|
4495
|
+
}
|
|
4496
|
+
if (!Array.isArray(value)) {
|
|
4497
|
+
throw new InvalidRequestError("edit: 'edits' must be a non-empty array");
|
|
4498
|
+
}
|
|
4499
|
+
if (value.length === 0) {
|
|
4500
|
+
throw new InvalidRequestError("edit: 'edits' array must not be empty");
|
|
4501
|
+
}
|
|
4502
|
+
return value;
|
|
4503
|
+
}
|
|
4504
|
+
function normalizeEditItem(value, index) {
|
|
4505
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
4506
|
+
throw new InvalidRequestError(`edit: edits[${index}] must be an object`);
|
|
4507
|
+
}
|
|
4508
|
+
const source = value;
|
|
4509
|
+
const item = copyOwnProperties(source);
|
|
4510
|
+
normalizeItemAlias(item, "oldString", "oldText");
|
|
4511
|
+
normalizeItemAlias(item, "newString", "newText");
|
|
4512
|
+
const hasFindField = ["oldString", "newString", "replaceAll", "occurrence"].some((key) => hasOwn(item, key));
|
|
4513
|
+
const hasRangeField = ["startLine", "endLine", "content"].some((key) => hasOwn(item, key));
|
|
4514
|
+
if (hasFindField && hasRangeField) {
|
|
4515
|
+
throw new InvalidRequestError(`edit: edits[${index}] mixes find/replace and line-range fields`);
|
|
4516
|
+
}
|
|
4517
|
+
if (hasFindField) {
|
|
4518
|
+
if (!hasOwn(item, "oldString") || typeof item.oldString !== "string") {
|
|
4519
|
+
throw new InvalidRequestError(`edit: edits[${index}] requires string 'oldString'`);
|
|
4520
|
+
}
|
|
4521
|
+
if (hasOwn(item, "newString") && typeof item.newString !== "string") {
|
|
4522
|
+
throw new InvalidRequestError(`edit: edits[${index}].newString must be a string`);
|
|
4523
|
+
}
|
|
4524
|
+
coerceEditScalars(item, index);
|
|
4525
|
+
validateEditItemKeys(item, index);
|
|
4526
|
+
return item;
|
|
4527
|
+
}
|
|
4528
|
+
if (hasRangeField) {
|
|
4529
|
+
for (const key of ["startLine", "endLine"]) {
|
|
4530
|
+
const value2 = item[key];
|
|
4531
|
+
if (typeof value2 === "string" && /^[0-9]+$/.test(value2.trim())) {
|
|
4532
|
+
item[key] = Number(value2.trim());
|
|
4533
|
+
}
|
|
4534
|
+
if (!hasOwn(item, key) || !isPositiveSafeInteger(item[key])) {
|
|
4535
|
+
throw new InvalidRequestError(`edit: edits[${index}].${key} must be a positive integer`);
|
|
4536
|
+
}
|
|
4537
|
+
}
|
|
4538
|
+
if (item.startLine > item.endLine) {
|
|
4539
|
+
throw new InvalidRequestError(`edit: edits[${index}] requires startLine <= endLine`);
|
|
4540
|
+
}
|
|
4541
|
+
if (!hasOwn(item, "content") || typeof item.content !== "string") {
|
|
4542
|
+
throw new InvalidRequestError(`edit: edits[${index}] requires string 'content'`);
|
|
4543
|
+
}
|
|
4544
|
+
validateEditItemKeys(item, index);
|
|
4545
|
+
return item;
|
|
4546
|
+
}
|
|
4547
|
+
throw new InvalidRequestError(`edit: edits[${index}] must be a find/replace or line-range item`);
|
|
4548
|
+
}
|
|
4549
|
+
function normalizeItemAlias(item, canonical, legacy) {
|
|
4550
|
+
if (hasOwn(item, legacy)) {
|
|
4551
|
+
if (!hasOwn(item, canonical))
|
|
4552
|
+
item[canonical] = item[legacy];
|
|
4553
|
+
delete item[legacy];
|
|
4554
|
+
}
|
|
4555
|
+
}
|
|
4556
|
+
function validateEditItemKeys(item, index) {
|
|
4557
|
+
const unknown = Object.getOwnPropertyNames(item).filter((key) => !EDIT_ITEM_KEYS.has(key)).sort();
|
|
4558
|
+
if (unknown.length > 0) {
|
|
4559
|
+
throw new InvalidRequestError(`edit: edits[${index}] contains ${formatUnknownKeys(unknown)}`);
|
|
4560
|
+
}
|
|
4561
|
+
}
|
|
4562
|
+
function coerceEditScalars(item, index) {
|
|
4563
|
+
if (hasOwn(item, "replaceAll") && hasOwn(item, "occurrence")) {
|
|
4564
|
+
throw new InvalidRequestError(`edit: edits[${index}] cannot contain both 'replaceAll' and 'occurrence'`);
|
|
4565
|
+
}
|
|
4566
|
+
if (hasOwn(item, "replaceAll"))
|
|
4567
|
+
item.replaceAll = coerceEditBoolean(item.replaceAll, index);
|
|
4568
|
+
if (hasOwn(item, "occurrence")) {
|
|
4569
|
+
const occurrence = coerceEditOccurrence(item.occurrence, index);
|
|
4570
|
+
if (occurrence === undefined)
|
|
4571
|
+
delete item.occurrence;
|
|
4572
|
+
else
|
|
4573
|
+
item.occurrence = occurrence;
|
|
4574
|
+
}
|
|
4575
|
+
}
|
|
4576
|
+
function coerceEditBoolean(value, index) {
|
|
4577
|
+
if (typeof value === "boolean")
|
|
4578
|
+
return value;
|
|
4579
|
+
if (typeof value === "number" && Number.isFinite(value) && (value === 0 || value === 1)) {
|
|
4580
|
+
return value === 1;
|
|
4581
|
+
}
|
|
4582
|
+
if (typeof value === "string") {
|
|
4583
|
+
if (value === "1")
|
|
4584
|
+
return true;
|
|
4585
|
+
if (value === "0")
|
|
4586
|
+
return false;
|
|
4587
|
+
if (/^(?:true|false)$/i.test(value))
|
|
4588
|
+
return value.toLowerCase() === "true";
|
|
4589
|
+
}
|
|
4590
|
+
throw new InvalidRequestError(`edit: edits[${index}].replaceAll must be a boolean, true/false string, or 0/1`);
|
|
4591
|
+
}
|
|
4592
|
+
function coerceEditOccurrence(value, index) {
|
|
4593
|
+
if (value === null)
|
|
4594
|
+
return;
|
|
4595
|
+
if (typeof value === "string") {
|
|
4596
|
+
const trimmed = value.replace(ASCII_TRIM, "");
|
|
4597
|
+
if (trimmed.length === 0 || ASCII_WHITESPACE.test(trimmed))
|
|
4598
|
+
return;
|
|
4599
|
+
if (!/^[+]?[0-9]+$/.test(trimmed)) {
|
|
4600
|
+
throw new InvalidRequestError(`edit: edits[${index}].occurrence must be a positive integer`);
|
|
4601
|
+
}
|
|
4602
|
+
try {
|
|
4603
|
+
const parsed = BigInt(trimmed);
|
|
4604
|
+
if (parsed < 1n || parsed > BigInt(MAX_SAFE_INTEGER))
|
|
4605
|
+
throw new Error("out of range");
|
|
4606
|
+
return Number(parsed);
|
|
4607
|
+
} catch {
|
|
4608
|
+
throw new InvalidRequestError(`edit: edits[${index}].occurrence must be a positive integer`);
|
|
4609
|
+
}
|
|
4610
|
+
}
|
|
4611
|
+
if (typeof value === "number" && isPositiveSafeInteger(value))
|
|
4612
|
+
return value;
|
|
4613
|
+
throw new InvalidRequestError(`edit: edits[${index}].occurrence must be a positive integer`);
|
|
4614
|
+
}
|
|
4615
|
+
function isPositiveSafeInteger(value) {
|
|
4616
|
+
return typeof value === "number" && Number.isSafeInteger(value) && value >= 1;
|
|
4617
|
+
}
|
|
4618
|
+
function copyOwnProperties(source) {
|
|
4619
|
+
const copy = Object.create(null);
|
|
4620
|
+
for (const key of Object.getOwnPropertyNames(source))
|
|
4621
|
+
copy[key] = source[key];
|
|
4622
|
+
return copy;
|
|
4623
|
+
}
|
|
4624
|
+
var InvalidRequestError, EDIT_ROOT_COMPATIBILITY_KEYS, EDIT_ROOT_CANONICAL_KEYS, EDIT_ITEM_KEYS, ASCII_WHITESPACE, ASCII_TRIM, MAX_SAFE_INTEGER, OMIT_OPTIONAL_FIELDS_STEERING = "Omit unused optional fields entirely; do not send empty strings or empty arrays for them.";
|
|
4625
|
+
var init_path_aliases = __esm(() => {
|
|
4626
|
+
init_error_contract();
|
|
4627
|
+
InvalidRequestError = class InvalidRequestError extends AftToolError {
|
|
4628
|
+
constructor(message) {
|
|
4629
|
+
super(message, "invalid_request", {
|
|
4630
|
+
success: false,
|
|
4631
|
+
code: "invalid_request",
|
|
4632
|
+
message
|
|
4633
|
+
});
|
|
4634
|
+
this.name = "InvalidRequestError";
|
|
4635
|
+
}
|
|
4636
|
+
};
|
|
4637
|
+
EDIT_ROOT_COMPATIBILITY_KEYS = new Set([
|
|
4638
|
+
"oldString",
|
|
4639
|
+
"newString",
|
|
4640
|
+
"replaceAll",
|
|
4641
|
+
"occurrence"
|
|
4642
|
+
]);
|
|
4643
|
+
EDIT_ROOT_CANONICAL_KEYS = new Set(["path", "appendContent", "edits", "symbol", "content"]);
|
|
4644
|
+
EDIT_ITEM_KEYS = new Set([
|
|
4645
|
+
"oldString",
|
|
4646
|
+
"newString",
|
|
4647
|
+
"replaceAll",
|
|
4648
|
+
"occurrence",
|
|
4649
|
+
"startLine",
|
|
4650
|
+
"endLine",
|
|
4651
|
+
"content"
|
|
4652
|
+
]);
|
|
4653
|
+
ASCII_WHITESPACE = /^[\t\n\v\f\r ]+$/;
|
|
4654
|
+
ASCII_TRIM = /^[\t\n\v\f\r ]+|[\t\n\v\f\r ]+$/g;
|
|
4655
|
+
MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER;
|
|
4656
|
+
});
|
|
4657
|
+
|
|
4129
4658
|
// ../aft-bridge/dist/project-identity.js
|
|
4130
4659
|
import { createHash as createHash4 } from "node:crypto";
|
|
4131
4660
|
import { realpathSync as realpathSync2 } from "node:fs";
|
|
@@ -4788,7 +5317,7 @@ var init_envelope = __esm(() => {
|
|
|
4788
5317
|
});
|
|
4789
5318
|
|
|
4790
5319
|
// ../../node_modules/.bun/@cortexkit+subc-client@0.5.0/node_modules/@cortexkit/subc-client/dist/connection-file.js
|
|
4791
|
-
import { promises as
|
|
5320
|
+
import { promises as fs2 } from "node:fs";
|
|
4792
5321
|
function toBytes(value, field) {
|
|
4793
5322
|
if (!Array.isArray(value) || value.some((n) => typeof n !== "number")) {
|
|
4794
5323
|
throw new ConnectionFileError(`connection file field '${field}' must be a JSON array of bytes`);
|
|
@@ -4812,7 +5341,7 @@ function validate(info) {
|
|
|
4812
5341
|
async function verifyOwnerOnly(path2) {
|
|
4813
5342
|
if (process.platform === "win32")
|
|
4814
5343
|
return;
|
|
4815
|
-
const stat2 = await
|
|
5344
|
+
const stat2 = await fs2.stat(path2);
|
|
4816
5345
|
const mode = stat2.mode & 511;
|
|
4817
5346
|
if ((mode & 63) !== 0) {
|
|
4818
5347
|
throw new ConnectionFileError(`connection file ${path2} has insecure permissions 0o${mode.toString(8)}; expected owner-only 0600`);
|
|
@@ -4820,7 +5349,7 @@ async function verifyOwnerOnly(path2) {
|
|
|
4820
5349
|
}
|
|
4821
5350
|
async function readConnectionFile(path2) {
|
|
4822
5351
|
await verifyOwnerOnly(path2);
|
|
4823
|
-
const raw = await
|
|
5352
|
+
const raw = await fs2.readFile(path2, "utf8");
|
|
4824
5353
|
let parsed;
|
|
4825
5354
|
try {
|
|
4826
5355
|
parsed = JSON.parse(raw);
|
|
@@ -5118,7 +5647,7 @@ var init_socket = __esm(() => {
|
|
|
5118
5647
|
});
|
|
5119
5648
|
|
|
5120
5649
|
// ../../node_modules/.bun/@cortexkit+subc-client@0.5.0/node_modules/@cortexkit/subc-client/dist/client.js
|
|
5121
|
-
import { promises as
|
|
5650
|
+
import { promises as fs3 } from "node:fs";
|
|
5122
5651
|
import { debuglog } from "node:util";
|
|
5123
5652
|
|
|
5124
5653
|
class SubcClient {
|
|
@@ -5855,7 +6384,7 @@ function isRetryableRouteOpenCode(code) {
|
|
|
5855
6384
|
}
|
|
5856
6385
|
async function connectionFileExists(path2) {
|
|
5857
6386
|
try {
|
|
5858
|
-
await
|
|
6387
|
+
await fs3.access(path2);
|
|
5859
6388
|
return true;
|
|
5860
6389
|
} catch {
|
|
5861
6390
|
return false;
|
|
@@ -7531,6 +8060,7 @@ function unwrapRustZoomBatchEnvelope(response) {
|
|
|
7531
8060
|
var exports_dist = {};
|
|
7532
8061
|
__export(exports_dist, {
|
|
7533
8062
|
unwrapRustZoomBatchEnvelope: () => unwrapRustZoomBatchEnvelope,
|
|
8063
|
+
toolErrorFromResponse: () => toolErrorFromResponse,
|
|
7534
8064
|
timeoutForCommand: () => timeoutForCommand,
|
|
7535
8065
|
tagStderrLine: () => tagStderrLine,
|
|
7536
8066
|
stripJsoncSymbols: () => stripJsoncSymbols,
|
|
@@ -7555,6 +8085,8 @@ __export(exports_dist, {
|
|
|
7555
8085
|
readConfigTiers: () => readConfigTiers,
|
|
7556
8086
|
projectRootKeyHash: () => projectRootKeyHash,
|
|
7557
8087
|
probeNpmVersion: () => probeNpmVersion,
|
|
8088
|
+
prepareCanonicalPathArguments: () => prepareCanonicalPathArguments,
|
|
8089
|
+
prepareCanonicalEditArguments: () => prepareCanonicalEditArguments,
|
|
7558
8090
|
platformKey: () => platformKey,
|
|
7559
8091
|
parseStatusBarCounts: () => parseStatusBarCounts,
|
|
7560
8092
|
npmSpawnEnv: () => npmSpawnEnv,
|
|
@@ -7562,6 +8094,7 @@ __export(exports_dist, {
|
|
|
7562
8094
|
maybeAppendGrepSearchHint: () => maybeAppendGrepSearchHint,
|
|
7563
8095
|
maybeAppendConflictsHint: () => maybeAppendConflictsHint,
|
|
7564
8096
|
markAnnouncementSeen: () => markAnnouncementSeen,
|
|
8097
|
+
isWellFormedUnicodeString: () => isWellFormedUnicodeString,
|
|
7565
8098
|
isTerminalStatus: () => isTerminalStatus,
|
|
7566
8099
|
isRustZoomBatchEnvelope: () => isRustZoomBatchEnvelope,
|
|
7567
8100
|
isOrtAutoDownloadSupported: () => isOrtAutoDownloadSupported,
|
|
@@ -7617,12 +8150,14 @@ __export(exports_dist, {
|
|
|
7617
8150
|
PI_ONLY_KEYS: () => PI_ONLY_KEYS,
|
|
7618
8151
|
OPENCODE_ONLY_KEYS: () => OPENCODE_ONLY_KEYS,
|
|
7619
8152
|
LONG_RUNNING_COMMAND_TIMEOUT_MS: () => LONG_RUNNING_COMMAND_TIMEOUT_MS,
|
|
8153
|
+
InvalidRequestError: () => InvalidRequestError,
|
|
7620
8154
|
HomeProjectRootError: () => HomeProjectRootError,
|
|
7621
8155
|
DEFAULT_LOG_GENERATIONS: () => DEFAULT_LOG_GENERATIONS,
|
|
7622
8156
|
DEFAULT_LOG_BYTES: () => DEFAULT_LOG_BYTES,
|
|
7623
8157
|
BridgeTransportTimeoutError: () => BridgeTransportTimeoutError,
|
|
7624
8158
|
BridgePool: () => BridgePool,
|
|
7625
|
-
BinaryBridge: () => BinaryBridge
|
|
8159
|
+
BinaryBridge: () => BinaryBridge,
|
|
8160
|
+
AftToolError: () => AftToolError
|
|
7626
8161
|
});
|
|
7627
8162
|
var init_dist2 = __esm(() => {
|
|
7628
8163
|
init_active_logger();
|
|
@@ -7634,9 +8169,11 @@ var init_dist2 = __esm(() => {
|
|
|
7634
8169
|
init_config_tiers();
|
|
7635
8170
|
init_downloader();
|
|
7636
8171
|
init_durable_log();
|
|
8172
|
+
init_error_contract();
|
|
7637
8173
|
init_migration();
|
|
7638
8174
|
init_npm_resolver();
|
|
7639
8175
|
init_onnx_runtime();
|
|
8176
|
+
init_path_aliases();
|
|
7640
8177
|
init_paths();
|
|
7641
8178
|
init_platform();
|
|
7642
8179
|
init_pool();
|
|
@@ -7874,13 +8411,13 @@ var init_binary_probe = __esm(async () => {
|
|
|
7874
8411
|
});
|
|
7875
8412
|
|
|
7876
8413
|
// src/lib/fs-util.ts
|
|
7877
|
-
import { existsSync as existsSync8, readdirSync as readdirSync3, statSync as
|
|
8414
|
+
import { existsSync as existsSync8, readdirSync as readdirSync3, statSync as statSync6 } from "node:fs";
|
|
7878
8415
|
import { join as join13 } from "node:path";
|
|
7879
8416
|
function dirSize(path2) {
|
|
7880
8417
|
if (!existsSync8(path2)) {
|
|
7881
8418
|
return 0;
|
|
7882
8419
|
}
|
|
7883
|
-
const stat2 =
|
|
8420
|
+
const stat2 = statSync6(path2);
|
|
7884
8421
|
if (stat2.isFile()) {
|
|
7885
8422
|
return stat2.size;
|
|
7886
8423
|
}
|
|
@@ -15751,7 +16288,7 @@ var init_self_version = () => {};
|
|
|
15751
16288
|
|
|
15752
16289
|
// src/adapters/opencode.ts
|
|
15753
16290
|
import { execSync as execSync3 } from "node:child_process";
|
|
15754
|
-
import { existsSync as existsSync10, readFileSync as readFileSync8, rmSync as rmSync4, statSync as
|
|
16291
|
+
import { existsSync as existsSync10, readFileSync as readFileSync8, rmSync as rmSync4, statSync as statSync7 } from "node:fs";
|
|
15755
16292
|
import { homedir as homedir14 } from "node:os";
|
|
15756
16293
|
import { dirname as dirname7, join as join14, parse, resolve as resolve7 } from "node:path";
|
|
15757
16294
|
import { fileURLToPath } from "node:url";
|
|
@@ -15817,7 +16354,7 @@ function pathPointsToOurPlugin(entry) {
|
|
|
15817
16354
|
try {
|
|
15818
16355
|
if (!existsSync10(fsPath))
|
|
15819
16356
|
return false;
|
|
15820
|
-
let searchDir =
|
|
16357
|
+
let searchDir = statSync7(fsPath).isDirectory() ? fsPath : dirname7(fsPath);
|
|
15821
16358
|
let pkgJsonPath = null;
|
|
15822
16359
|
while (true) {
|
|
15823
16360
|
const candidate = join14(searchDir, "package.json");
|
|
@@ -18111,7 +18648,7 @@ __export(exports_setup, {
|
|
|
18111
18648
|
runSetup: () => runSetup
|
|
18112
18649
|
});
|
|
18113
18650
|
async function runSetup(argv) {
|
|
18114
|
-
intro(
|
|
18651
|
+
intro(`${CLI} setup`);
|
|
18115
18652
|
const adapters = await resolveAdaptersForCommand(argv, {
|
|
18116
18653
|
allowMulti: true,
|
|
18117
18654
|
verb: "setup"
|
|
@@ -18120,7 +18657,7 @@ async function runSetup(argv) {
|
|
|
18120
18657
|
for (const adapter of adapters) {
|
|
18121
18658
|
log2.info(`${adapter.displayName}: configuring ${adapter.pluginPackageName}…`);
|
|
18122
18659
|
if (!adapter.isInstalled()) {
|
|
18123
|
-
log2.warn(`${adapter.displayName} host not found on PATH. ${adapter.getInstallHint()} and rerun
|
|
18660
|
+
log2.warn(`${adapter.displayName} host not found on PATH. ${adapter.getInstallHint()} and rerun \`${CLI} setup\`.`);
|
|
18124
18661
|
anyFailure = true;
|
|
18125
18662
|
continue;
|
|
18126
18663
|
}
|
|
@@ -18171,7 +18708,7 @@ function printNextSteps(adapter) {
|
|
|
18171
18708
|
if (adapter.kind === "opencode") {
|
|
18172
18709
|
note([
|
|
18173
18710
|
"Restart OpenCode (or reload your session) so the plugin loads.",
|
|
18174
|
-
|
|
18711
|
+
`Verify with: \`${CLI} doctor\`.`
|
|
18175
18712
|
].join(`
|
|
18176
18713
|
`), "Next steps");
|
|
18177
18714
|
return;
|
|
@@ -18179,7 +18716,7 @@ function printNextSteps(adapter) {
|
|
|
18179
18716
|
if (adapter.kind === "pi") {
|
|
18180
18717
|
note([
|
|
18181
18718
|
"Restart your Pi session so the extension registers.",
|
|
18182
|
-
|
|
18719
|
+
`Verify with: \`${CLI} doctor\`.`
|
|
18183
18720
|
].join(`
|
|
18184
18721
|
`), "Next steps");
|
|
18185
18722
|
}
|
|
@@ -18292,7 +18829,7 @@ The binary printed ${ctx.noiseLines.length} non-JSON line(s) to stdout — this
|
|
|
18292
18829
|
parts.push(` | (… ${ctx.noiseLines.length - MAX_NOISE_LINES_IN_ERROR} more line(s) omitted)`);
|
|
18293
18830
|
}
|
|
18294
18831
|
parts.push(`
|
|
18295
|
-
Try:
|
|
18832
|
+
Try: ${CLI} doctor (full diagnostics) or check ~/.cache/aft/bin/ for the right binary.`);
|
|
18296
18833
|
}
|
|
18297
18834
|
const stderrTrimmed = ctx.stderr.trim();
|
|
18298
18835
|
if (stderrTrimmed) {
|
|
@@ -18315,14 +18852,14 @@ __export(exports_lsp, {
|
|
|
18315
18852
|
printLspDoctorHelp: () => printLspDoctorHelp,
|
|
18316
18853
|
findProjectRootForFile: () => findProjectRootForFile
|
|
18317
18854
|
});
|
|
18318
|
-
import { existsSync as existsSync12, readdirSync as readdirSync4, statSync as
|
|
18855
|
+
import { existsSync as existsSync12, readdirSync as readdirSync4, statSync as statSync8 } from "node:fs";
|
|
18319
18856
|
import { createRequire as createRequire4 } from "node:module";
|
|
18320
18857
|
import { dirname as dirname8, join as join16, resolve as resolve8 } from "node:path";
|
|
18321
18858
|
function findProjectRootForFile(filePath, fallbackCwd = process.cwd()) {
|
|
18322
18859
|
const resolvedFile = resolve8(fallbackCwd, filePath);
|
|
18323
18860
|
let dir = dirname8(resolvedFile);
|
|
18324
18861
|
try {
|
|
18325
|
-
if (existsSync12(resolvedFile) &&
|
|
18862
|
+
if (existsSync12(resolvedFile) && statSync8(resolvedFile).isDirectory()) {
|
|
18326
18863
|
dir = resolvedFile;
|
|
18327
18864
|
}
|
|
18328
18865
|
} catch {
|
|
@@ -18339,7 +18876,7 @@ function findProjectRootForFile(filePath, fallbackCwd = process.cwd()) {
|
|
|
18339
18876
|
}
|
|
18340
18877
|
}
|
|
18341
18878
|
function printLspDoctorHelp() {
|
|
18342
|
-
console.log(
|
|
18879
|
+
console.log(`Usage: ${CLI} doctor lsp <file> [--harness opencode|pi]`);
|
|
18343
18880
|
console.log("");
|
|
18344
18881
|
console.log("Inspect what AFT's LSP layer would do for a file.");
|
|
18345
18882
|
}
|
|
@@ -18489,7 +19026,7 @@ function childDirs(path2) {
|
|
|
18489
19026
|
try {
|
|
18490
19027
|
return readdirSync4(path2).map((entry) => join16(path2, entry)).filter((entry) => {
|
|
18491
19028
|
try {
|
|
18492
|
-
return
|
|
19029
|
+
return statSync8(entry).isDirectory();
|
|
18493
19030
|
} catch {
|
|
18494
19031
|
return false;
|
|
18495
19032
|
}
|
|
@@ -18580,16 +19117,16 @@ import { existsSync as existsSync13 } from "node:fs";
|
|
|
18580
19117
|
import { homedir as homedir16 } from "node:os";
|
|
18581
19118
|
import { relative as relative3, resolve as resolve9 } from "node:path";
|
|
18582
19119
|
function printDoctorFiltersHelp() {
|
|
18583
|
-
console.log(
|
|
19120
|
+
console.log(`Usage: ${CLI} doctor filters [--show <name>] [trust|untrust]`);
|
|
18584
19121
|
console.log("");
|
|
18585
19122
|
console.log("Inspect declarative TOML compression filters.");
|
|
18586
19123
|
console.log("");
|
|
18587
19124
|
console.log("Commands:");
|
|
18588
|
-
console.log(
|
|
18589
|
-
console.log(
|
|
18590
|
-
console.log(
|
|
18591
|
-
console.log(
|
|
18592
|
-
console.log(
|
|
19125
|
+
console.log(` ${CLI} doctor filters List built-in, user, and project filters`);
|
|
19126
|
+
console.log(` ${CLI} doctor filters --show <name> Show resolved TOML for a filter`);
|
|
19127
|
+
console.log(` ${CLI} doctor filters trust Trust current project's .aft/filters`);
|
|
19128
|
+
console.log(` ${CLI} doctor filters trust --list List trusted filter project paths`);
|
|
19129
|
+
console.log(` ${CLI} doctor filters untrust Remove trusted project paths`);
|
|
18593
19130
|
}
|
|
18594
19131
|
async function runDoctorFilters(options) {
|
|
18595
19132
|
const mode = parseMode(options.argv);
|
|
@@ -18743,7 +19280,7 @@ function pushSection(lines, title, filters, titleHasOpenParen = false) {
|
|
|
18743
19280
|
}
|
|
18744
19281
|
for (const filter of filters) {
|
|
18745
19282
|
const description = filter.error ? `invalid — ${filter.error}` : truncate(filter.description ?? "");
|
|
18746
|
-
const trust = filter.source.startsWith("project") && filter.trusted === false ? filter.error ? " (untrusted)" :
|
|
19283
|
+
const trust = filter.source.startsWith("project") && filter.trusted === false ? filter.error ? " (untrusted)" : ` (untrusted — run \`${CLI} doctor filters trust\` to enable)` : "";
|
|
18747
19284
|
lines.push(` ${filter.name.padEnd(20)} ${description}${trust}`.trimEnd());
|
|
18748
19285
|
}
|
|
18749
19286
|
}
|
|
@@ -18818,7 +19355,7 @@ var init_doctor_filters = __esm(async () => {
|
|
|
18818
19355
|
});
|
|
18819
19356
|
|
|
18820
19357
|
// src/lib/binary-cache.ts
|
|
18821
|
-
import { existsSync as existsSync14, readdirSync as readdirSync5, statSync as
|
|
19358
|
+
import { existsSync as existsSync14, readdirSync as readdirSync5, statSync as statSync9 } from "node:fs";
|
|
18822
19359
|
import { join as join17 } from "node:path";
|
|
18823
19360
|
function getBinaryCacheInfo(activeVersion) {
|
|
18824
19361
|
const path2 = getAftBinaryCacheDir();
|
|
@@ -18832,7 +19369,7 @@ function getBinaryCacheInfo(activeVersion) {
|
|
|
18832
19369
|
}
|
|
18833
19370
|
const versions = readdirSync5(path2).filter((entry) => {
|
|
18834
19371
|
try {
|
|
18835
|
-
return
|
|
19372
|
+
return statSync9(join17(path2, entry)).isDirectory();
|
|
18836
19373
|
} catch {
|
|
18837
19374
|
return false;
|
|
18838
19375
|
}
|
|
@@ -18930,7 +19467,7 @@ var init_sanitize = __esm(() => {
|
|
|
18930
19467
|
});
|
|
18931
19468
|
|
|
18932
19469
|
// src/lib/bridge-tool-failures.ts
|
|
18933
|
-
import { closeSync as closeSync5, existsSync as existsSync15, openSync as openSync5, readSync as readSync2, statSync as
|
|
19470
|
+
import { closeSync as closeSync5, existsSync as existsSync15, openSync as openSync5, readSync as readSync2, statSync as statSync10 } from "node:fs";
|
|
18934
19471
|
function resolveBridgePluginLogPath() {
|
|
18935
19472
|
const isTestEnv = process.env.BUN_TEST === "1" || false;
|
|
18936
19473
|
return resolveAftLogPath(isTestEnv ? "aft-plugin-test.log" : "aft-plugin.log");
|
|
@@ -18940,7 +19477,7 @@ function tailLogFileBytes(path2, maxBytes) {
|
|
|
18940
19477
|
return "";
|
|
18941
19478
|
let fd = null;
|
|
18942
19479
|
try {
|
|
18943
|
-
const size =
|
|
19480
|
+
const size = statSync10(path2).size;
|
|
18944
19481
|
if (size === 0)
|
|
18945
19482
|
return "";
|
|
18946
19483
|
const readLength = Math.min(size, maxBytes);
|
|
@@ -19072,7 +19609,7 @@ var init_bridge_tool_failures = __esm(() => {
|
|
|
19072
19609
|
});
|
|
19073
19610
|
|
|
19074
19611
|
// src/lib/legacy-storage.ts
|
|
19075
|
-
import { existsSync as existsSync16, readdirSync as readdirSync6, statSync as
|
|
19612
|
+
import { existsSync as existsSync16, readdirSync as readdirSync6, statSync as statSync11 } from "node:fs";
|
|
19076
19613
|
import { join as join18 } from "node:path";
|
|
19077
19614
|
function summarizeLegacyPartitionDuplication(storageRoot) {
|
|
19078
19615
|
if (!existsSync16(storageRoot)) {
|
|
@@ -19177,14 +19714,14 @@ function safeReadDir(path2) {
|
|
|
19177
19714
|
}
|
|
19178
19715
|
function isDirectory(path2) {
|
|
19179
19716
|
try {
|
|
19180
|
-
return
|
|
19717
|
+
return statSync11(path2).isDirectory();
|
|
19181
19718
|
} catch {
|
|
19182
19719
|
return false;
|
|
19183
19720
|
}
|
|
19184
19721
|
}
|
|
19185
19722
|
function safeFileSize(path2) {
|
|
19186
19723
|
try {
|
|
19187
|
-
return
|
|
19724
|
+
return statSync11(path2).isFile() ? statSync11(path2).size : 0;
|
|
19188
19725
|
} catch {
|
|
19189
19726
|
return 0;
|
|
19190
19727
|
}
|
|
@@ -19196,7 +19733,7 @@ var init_legacy_storage = __esm(() => {
|
|
|
19196
19733
|
});
|
|
19197
19734
|
|
|
19198
19735
|
// src/lib/lsp-cache.ts
|
|
19199
|
-
import { existsSync as existsSync17, readdirSync as readdirSync7, rmSync as rmSync5, statSync as
|
|
19736
|
+
import { existsSync as existsSync17, readdirSync as readdirSync7, rmSync as rmSync5, statSync as statSync12 } from "node:fs";
|
|
19200
19737
|
import { join as join19 } from "node:path";
|
|
19201
19738
|
function inspectDir(path2) {
|
|
19202
19739
|
if (!existsSync17(path2)) {
|
|
@@ -19213,7 +19750,7 @@ function inspectDir(path2) {
|
|
|
19213
19750
|
for (const name of names) {
|
|
19214
19751
|
const full = join19(path2, name);
|
|
19215
19752
|
try {
|
|
19216
|
-
if (!
|
|
19753
|
+
if (!statSync12(full).isDirectory())
|
|
19217
19754
|
continue;
|
|
19218
19755
|
const size = dirSize(full);
|
|
19219
19756
|
entries.push({
|
|
@@ -19488,7 +20025,7 @@ import {
|
|
|
19488
20025
|
existsSync as existsSync19,
|
|
19489
20026
|
openSync as openSync6,
|
|
19490
20027
|
readSync as readSync3,
|
|
19491
|
-
statSync as
|
|
20028
|
+
statSync as statSync13
|
|
19492
20029
|
} from "node:fs";
|
|
19493
20030
|
async function collectDiagnostics(adapters) {
|
|
19494
20031
|
const cliVersion = getSelfVersion();
|
|
@@ -19579,7 +20116,7 @@ async function diagnoseHarness(adapter) {
|
|
|
19579
20116
|
logFile: {
|
|
19580
20117
|
path: logPath,
|
|
19581
20118
|
exists: existsSync19(logPath),
|
|
19582
|
-
sizeKb: existsSync19(logPath) ? Math.round(
|
|
20119
|
+
sizeKb: existsSync19(logPath) ? Math.round(statSync13(logPath).size / 1024) : 0
|
|
19583
20120
|
}
|
|
19584
20121
|
};
|
|
19585
20122
|
}
|
|
@@ -19693,7 +20230,7 @@ function collectDiagnosticIssues(report) {
|
|
|
19693
20230
|
severity: "high",
|
|
19694
20231
|
scope: "AFT binary",
|
|
19695
20232
|
message: `No aft binary matching CLI ${report.cliVersion} was detected.`,
|
|
19696
|
-
remediation:
|
|
20233
|
+
remediation: `Run \`${CLI} doctor --fix\` to download the matching binary, or start an AFT-enabled session to trigger plugin-side install.`
|
|
19697
20234
|
});
|
|
19698
20235
|
}
|
|
19699
20236
|
for (const h2 of report.harnesses) {
|
|
@@ -19703,7 +20240,7 @@ function collectDiagnosticIssues(report) {
|
|
|
19703
20240
|
severity: "high",
|
|
19704
20241
|
scope: h2.displayName,
|
|
19705
20242
|
message: "Host CLI is not installed or is not on PATH.",
|
|
19706
|
-
remediation: `Install ${h2.displayName} and rerun
|
|
20243
|
+
remediation: `Install ${h2.displayName} and rerun \`${CLI} doctor\`.`
|
|
19707
20244
|
});
|
|
19708
20245
|
continue;
|
|
19709
20246
|
}
|
|
@@ -19713,7 +20250,7 @@ function collectDiagnosticIssues(report) {
|
|
|
19713
20250
|
severity: "medium",
|
|
19714
20251
|
scope: h2.displayName,
|
|
19715
20252
|
message: "AFT plugin is not registered with this harness.",
|
|
19716
|
-
remediation:
|
|
20253
|
+
remediation: `Run \`${CLI} setup\` or \`${CLI} doctor --fix\` to register the plugin.`
|
|
19717
20254
|
});
|
|
19718
20255
|
}
|
|
19719
20256
|
if (h2.aftConfig.parseError) {
|
|
@@ -19735,7 +20272,7 @@ function collectDiagnosticIssues(report) {
|
|
|
19735
20272
|
severity: "medium",
|
|
19736
20273
|
scope: h2.displayName,
|
|
19737
20274
|
message: h2.onnxRuntime.ignoredSystemPath ? `ONNX Runtime at ${h2.onnxRuntime.ignoredSystemPath} has a ${h2.onnxRuntime.ignoredSystemReason}; no compatible runtime was detected.` : "ONNX Runtime is required for semantic search but was not detected.",
|
|
19738
|
-
remediation: `Run
|
|
20275
|
+
remediation: `Run \`${CLI} doctor --fix\` or install ONNX Runtime manually (${h2.onnxRuntime.installHint}).`
|
|
19739
20276
|
});
|
|
19740
20277
|
}
|
|
19741
20278
|
if (h2.onnxRuntime.cachedCompatible === false) {
|
|
@@ -19744,7 +20281,7 @@ function collectDiagnosticIssues(report) {
|
|
|
19744
20281
|
severity: "medium",
|
|
19745
20282
|
scope: h2.displayName,
|
|
19746
20283
|
message: `Cached ONNX Runtime ${h2.onnxRuntime.cachedVersion ?? "unknown"} is incompatible (requires ${h2.onnxRuntime.requirement}).`,
|
|
19747
|
-
remediation:
|
|
20284
|
+
remediation: `Run \`${CLI} doctor --fix\` to refresh AFT-managed ONNX Runtime state.`
|
|
19748
20285
|
});
|
|
19749
20286
|
}
|
|
19750
20287
|
if (h2.onnxRuntime.systemCompatible === false) {
|
|
@@ -19782,7 +20319,7 @@ function tailLogFile(path2, lines) {
|
|
|
19782
20319
|
const chunkSize = 64 * 1024;
|
|
19783
20320
|
let fd = null;
|
|
19784
20321
|
try {
|
|
19785
|
-
const size =
|
|
20322
|
+
const size = statSync13(path2).size;
|
|
19786
20323
|
fd = openSync6(path2, "r");
|
|
19787
20324
|
const chunks = [];
|
|
19788
20325
|
let position = size;
|
|
@@ -20070,7 +20607,7 @@ var init_onnx_fix = __esm(() => {
|
|
|
20070
20607
|
});
|
|
20071
20608
|
|
|
20072
20609
|
// src/lib/sessions.ts
|
|
20073
|
-
import { existsSync as existsSync21, readdirSync as readdirSync9, readFileSync as readFileSync10, statSync as
|
|
20610
|
+
import { existsSync as existsSync21, readdirSync as readdirSync9, readFileSync as readFileSync10, statSync as statSync14 } from "node:fs";
|
|
20074
20611
|
import { createRequire as createRequire5 } from "node:module";
|
|
20075
20612
|
import { homedir as homedir18 } from "node:os";
|
|
20076
20613
|
import { basename as basename4, join as join22 } from "node:path";
|
|
@@ -20137,7 +20674,7 @@ function listPiSessionsFromDir(sessionsDir) {
|
|
|
20137
20674
|
return [];
|
|
20138
20675
|
const files = collectJsonlFiles(sessionsDir).map((filePath) => {
|
|
20139
20676
|
try {
|
|
20140
|
-
const stats =
|
|
20677
|
+
const stats = statSync14(filePath);
|
|
20141
20678
|
return { filePath, mtimeMs: stats.mtimeMs };
|
|
20142
20679
|
} catch {
|
|
20143
20680
|
return null;
|
|
@@ -20277,7 +20814,7 @@ import {
|
|
|
20277
20814
|
readFileSync as readFileSync11,
|
|
20278
20815
|
realpathSync as realpathSync5,
|
|
20279
20816
|
rmSync as rmSync7,
|
|
20280
|
-
statSync as
|
|
20817
|
+
statSync as statSync15,
|
|
20281
20818
|
writeFileSync as writeFileSync5
|
|
20282
20819
|
} from "node:fs";
|
|
20283
20820
|
import { tmpdir as tmpdir2 } from "node:os";
|
|
@@ -20286,7 +20823,7 @@ async function runDoctor(options) {
|
|
|
20286
20823
|
if (options.issue) {
|
|
20287
20824
|
return runIssueFlow(options.argv);
|
|
20288
20825
|
}
|
|
20289
|
-
intro(
|
|
20826
|
+
intro(`${CLI} doctor`);
|
|
20290
20827
|
if (options.fix) {
|
|
20291
20828
|
return runFixFlow(options.argv);
|
|
20292
20829
|
}
|
|
@@ -20303,11 +20840,11 @@ async function runDoctor(options) {
|
|
|
20303
20840
|
const hasEnabledRegisteredHarness = report.harnesses.some((h2) => h2.pluginRegistered && h2.aftConfig.enabled);
|
|
20304
20841
|
const hasRegisteredHarness = report.harnesses.some((h2) => h2.pluginRegistered);
|
|
20305
20842
|
if (hasEnabledRegisteredHarness) {
|
|
20306
|
-
log2.warn(
|
|
20843
|
+
log2.warn(` no matching aft binary detected — run \`${CLI} doctor --fix\` to download, or it will install automatically when an AFT-enabled session makes its first tool call`);
|
|
20307
20844
|
} else if (hasRegisteredHarness) {
|
|
20308
20845
|
log2.info(" no matching aft binary detected; all registered AFT harnesses are disabled by config");
|
|
20309
20846
|
} else {
|
|
20310
|
-
log2.warn(
|
|
20847
|
+
log2.warn(` no matching aft binary detected — run \`${CLI} doctor --fix\` to download`);
|
|
20311
20848
|
}
|
|
20312
20849
|
logUnmatchedBinaryCandidates(report.cliVersion);
|
|
20313
20850
|
}
|
|
@@ -20331,7 +20868,7 @@ async function runDoctor(options) {
|
|
|
20331
20868
|
log2.info(` AFT disabled by config${h2.aftConfig.enabledSource ? ` (${h2.aftConfig.enabledSource})` : ""}; plugin will stay inert`);
|
|
20332
20869
|
}
|
|
20333
20870
|
if (!h2.pluginRegistered) {
|
|
20334
|
-
log2.warn(
|
|
20871
|
+
log2.warn(` plugin registration can be fixed with \`${CLI} setup\` or \`${CLI} doctor --fix\``);
|
|
20335
20872
|
}
|
|
20336
20873
|
log2.info(` aft config: ${h2.aftConfig.exists ? h2.configPaths.aftConfig : "(not set)"}`);
|
|
20337
20874
|
if (h2.aftConfig.parseError) {
|
|
@@ -20339,7 +20876,7 @@ async function runDoctor(options) {
|
|
|
20339
20876
|
} else if (h2.aftConfig.exists) {
|
|
20340
20877
|
const { value } = readJsoncFile(h2.configPaths.aftConfig);
|
|
20341
20878
|
const schemaSet = value?.$schema === AFT_SCHEMA_URL;
|
|
20342
|
-
log2.info(` aft config $schema: ${schemaSet ? "set" :
|
|
20879
|
+
log2.info(` aft config $schema: ${schemaSet ? "set" : `not set — run \`${CLI} doctor --fix\` for editor autocomplete`}`);
|
|
20343
20880
|
}
|
|
20344
20881
|
log2.info(` storage: ${formatDoctorStorageStatus(h2)}`);
|
|
20345
20882
|
if (h2.onnxRuntime.required) {
|
|
@@ -20357,7 +20894,7 @@ async function runDoctor(options) {
|
|
|
20357
20894
|
parts.push(`not installed — ${h2.onnxRuntime.installHint}`);
|
|
20358
20895
|
}
|
|
20359
20896
|
if (h2.onnxRuntime.cachedCompatible === false || h2.onnxRuntime.systemCompatible === false) {
|
|
20360
|
-
parts.push(
|
|
20897
|
+
parts.push(`needs reinstall — run \`${CLI} doctor --fix\``);
|
|
20361
20898
|
}
|
|
20362
20899
|
log2.info(` onnx runtime: ${parts.join(" · ")}`);
|
|
20363
20900
|
} else {
|
|
@@ -20370,7 +20907,7 @@ async function runDoctor(options) {
|
|
|
20370
20907
|
}
|
|
20371
20908
|
if (hadProblems) {
|
|
20372
20909
|
logDoctorIssues(report);
|
|
20373
|
-
note(
|
|
20910
|
+
note(`Run \`${CLI} setup\` or \`${CLI} doctor --fix\` to register AFT with any harness showing \`plugin registered: no\`. Run \`${CLI} doctor --fix\` for ONNX Runtime issues or to download a missing aft binary.`, "Tips");
|
|
20374
20911
|
outro("Done — some issues found.");
|
|
20375
20912
|
return 1;
|
|
20376
20913
|
}
|
|
@@ -20461,7 +20998,7 @@ function clearOldBinaries() {
|
|
|
20461
20998
|
const dir = join23(info.path, version);
|
|
20462
20999
|
let bytes = 0;
|
|
20463
21000
|
try {
|
|
20464
|
-
bytes =
|
|
21001
|
+
bytes = statSync15(dir).isDirectory() ? dirSize(dir) : 0;
|
|
20465
21002
|
} catch {
|
|
20466
21003
|
bytes = 0;
|
|
20467
21004
|
}
|
|
@@ -20741,7 +21278,7 @@ async function runFixFlow(argv) {
|
|
|
20741
21278
|
const onnxResult = await runOnnxFix(adapters, report, { yes: true });
|
|
20742
21279
|
if (onnxResult === null && !binaryDownloaded && !binaryDownloadSkipped && !binaryDownloadError && storageSummary.created === 0 && storageSummary.errors === 0 && schemaSummary.changed === 0 && schemaSummary.errors === 0 && pluginUpdateSummary.updated === 0 && pluginUpdateSummary.errors === 0) {
|
|
20743
21280
|
log2.info("No auto-fixable issues detected.");
|
|
20744
|
-
note(
|
|
21281
|
+
note(`If you're still seeing 'Semantic Index: failed' in the TUI sidebar, run \`${CLI} doctor\` (without --fix) for a full diagnostic dump.`, "Tip");
|
|
20745
21282
|
const afterReport2 = await collectDiagnostics(adapters);
|
|
20746
21283
|
const stillHasProblems2 = hasDoctorProblems(afterReport2);
|
|
20747
21284
|
outro(stillHasProblems2 ? "Done — some issues remain." : "Done.");
|
|
@@ -20791,7 +21328,7 @@ async function confirmBinaryDownloadDespitePluginSkew(report, argv) {
|
|
|
20791
21328
|
return true;
|
|
20792
21329
|
}
|
|
20793
21330
|
if (decision === "skip") {
|
|
20794
|
-
log2.info(
|
|
21331
|
+
log2.info(`Skipped binary download. Update the plugin to @latest, then rerun \`${CLI} doctor --fix\`.`);
|
|
20795
21332
|
return false;
|
|
20796
21333
|
}
|
|
20797
21334
|
return confirm2("Download/cache the CLI-matching binary anyway for after you update the plugin?", false);
|
|
@@ -20975,9 +21512,9 @@ function shortSessionId(id) {
|
|
|
20975
21512
|
return bareId.length <= 12 ? bareId : bareId.slice(0, 12);
|
|
20976
21513
|
}
|
|
20977
21514
|
async function runIssueFlow(argv) {
|
|
20978
|
-
intro(
|
|
21515
|
+
intro(`${CLI} doctor --issue`);
|
|
20979
21516
|
if (!isInteractiveTerminal()) {
|
|
20980
|
-
note(
|
|
21517
|
+
note(`Non-interactive terminal — not collecting or filing automatically. Run \`${CLI} doctor --issue\` from an interactive terminal so you can describe and review the report before filing.`, "Manual filing");
|
|
20981
21518
|
outro("Done.");
|
|
20982
21519
|
return 0;
|
|
20983
21520
|
}
|
|
@@ -21145,11 +21682,11 @@ function printHelp() {
|
|
|
21145
21682
|
console.log(" (default: auto-detect, prompt if multiple detected)");
|
|
21146
21683
|
console.log("");
|
|
21147
21684
|
console.log(" Usage:");
|
|
21148
|
-
console.log(
|
|
21149
|
-
console.log(
|
|
21150
|
-
console.log(
|
|
21151
|
-
console.log(
|
|
21152
|
-
console.log(
|
|
21685
|
+
console.log(` ${CLI} setup`);
|
|
21686
|
+
console.log(` ${CLI} doctor`);
|
|
21687
|
+
console.log(` ${CLI} doctor lsp ./src/main.py`);
|
|
21688
|
+
console.log(` ${CLI} doctor --clear`);
|
|
21689
|
+
console.log(` ${CLI} doctor --issue`);
|
|
21153
21690
|
console.log("");
|
|
21154
21691
|
}
|
|
21155
21692
|
async function main() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aft-bridge.d.ts","sourceRoot":"","sources":["../../src/lib/aft-bridge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"aft-bridge.d.ts","sourceRoot":"","sources":["../../src/lib/aft-bridge.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAwBD,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,WAAW,CAAC,CAKtB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,UAAU,EAAE,GACrB,OAAO,CAAC,WAAW,EAAE,CAAC,CA6FxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/lib/cli.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,GAAG,uBAAuB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/lib/diagnostics.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/lib/diagnostics.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cortexkit/aft",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.49.1",
|
|
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.49.1",
|
|
28
28
|
"comment-json": "^4.6.2"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|