@cortexkit/aft-opencode 0.3.0 → 0.4.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/bridge.d.ts +8 -0
- package/dist/bridge.d.ts.map +1 -1
- package/dist/bridge.js +45 -2
- package/dist/bridge.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +11 -0
- package/dist/config.js.map +1 -1
- package/dist/downloader.d.ts.map +1 -1
- package/dist/downloader.js +51 -15
- package/dist/downloader.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +56 -16
- package/dist/index.js.map +1 -1
- package/dist/normalize-schemas.d.ts +16 -0
- package/dist/normalize-schemas.d.ts.map +1 -0
- package/dist/normalize-schemas.js +45 -0
- package/dist/normalize-schemas.js.map +1 -0
- package/dist/patch-parser.d.ts.map +1 -1
- package/dist/patch-parser.js +10 -0
- package/dist/patch-parser.js.map +1 -1
- package/dist/platform.d.ts +21 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +31 -0
- package/dist/platform.js.map +1 -0
- package/dist/pool.d.ts.map +1 -1
- package/dist/pool.js +14 -5
- package/dist/pool.js.map +1 -1
- package/dist/resolver.d.ts.map +1 -1
- package/dist/resolver.js +6 -9
- package/dist/resolver.js.map +1 -1
- package/dist/tools/ast.d.ts.map +1 -1
- package/dist/tools/ast.js +52 -59
- package/dist/tools/ast.js.map +1 -1
- package/dist/tools/hoisted.d.ts +1 -1
- package/dist/tools/hoisted.d.ts.map +1 -1
- package/dist/tools/hoisted.js +333 -230
- package/dist/tools/hoisted.js.map +1 -1
- package/dist/tools/imports.d.ts.map +1 -1
- package/dist/tools/imports.js +40 -30
- package/dist/tools/imports.js.map +1 -1
- package/dist/tools/lsp.d.ts +1 -2
- package/dist/tools/lsp.d.ts.map +1 -1
- package/dist/tools/lsp.js +31 -13
- package/dist/tools/lsp.js.map +1 -1
- package/dist/tools/navigation.d.ts.map +1 -1
- package/dist/tools/navigation.js +23 -14
- package/dist/tools/navigation.js.map +1 -1
- package/dist/tools/permissions.d.ts +8 -0
- package/dist/tools/permissions.d.ts.map +1 -0
- package/dist/tools/permissions.js +50 -0
- package/dist/tools/permissions.js.map +1 -0
- package/dist/tools/reading.d.ts +1 -2
- package/dist/tools/reading.d.ts.map +1 -1
- package/dist/tools/reading.js +191 -12
- package/dist/tools/reading.js.map +1 -1
- package/dist/tools/refactoring.d.ts.map +1 -1
- package/dist/tools/refactoring.js +72 -34
- package/dist/tools/refactoring.js.map +1 -1
- package/dist/tools/safety.d.ts.map +1 -1
- package/dist/tools/safety.js +34 -12
- package/dist/tools/safety.js.map +1 -1
- package/dist/tools/structure.d.ts.map +1 -1
- package/dist/tools/structure.js +66 -31
- package/dist/tools/structure.js.map +1 -1
- package/package.json +7 -7
- package/dist/tools/editing.d.ts +0 -8
- package/dist/tools/editing.d.ts.map +0 -1
- package/dist/tools/editing.js +0 -8
- package/dist/tools/editing.js.map +0 -1
package/dist/bridge.d.ts
CHANGED
|
@@ -3,6 +3,10 @@ export interface BridgeOptions {
|
|
|
3
3
|
timeoutMs?: number;
|
|
4
4
|
/** Maximum restart attempts before giving up. Default: 3 */
|
|
5
5
|
maxRestarts?: number;
|
|
6
|
+
/** Minimum binary version required (semver). If the binary is older, onVersionMismatch is called. */
|
|
7
|
+
minVersion?: string;
|
|
8
|
+
/** Called when binary version is older than minVersion. Receives (binaryVersion, minVersion). */
|
|
9
|
+
onVersionMismatch?: (binaryVersion: string, minVersion: string) => void;
|
|
6
10
|
}
|
|
7
11
|
/**
|
|
8
12
|
* Manages a persistent `aft` child process, communicating via NDJSON over
|
|
@@ -22,6 +26,8 @@ export declare class BinaryBridge {
|
|
|
22
26
|
private maxRestarts;
|
|
23
27
|
private configured;
|
|
24
28
|
private configOverrides;
|
|
29
|
+
private minVersion;
|
|
30
|
+
private onVersionMismatch;
|
|
25
31
|
constructor(binaryPath: string, cwd: string, options?: BridgeOptions, configOverrides?: Record<string, unknown>);
|
|
26
32
|
/** Number of times the binary has been restarted after a crash. */
|
|
27
33
|
get restartCount(): number;
|
|
@@ -34,6 +40,8 @@ export declare class BinaryBridge {
|
|
|
34
40
|
send(command: string, params?: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
35
41
|
/** Kill the child process and reject all pending requests. */
|
|
36
42
|
shutdown(): Promise<void>;
|
|
43
|
+
/** Query binary version and compare against minVersion. Calls onVersionMismatch if outdated. */
|
|
44
|
+
private checkVersion;
|
|
37
45
|
private ensureSpawned;
|
|
38
46
|
private spawnProcess;
|
|
39
47
|
private onStdoutData;
|
package/dist/bridge.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAyBA,MAAM,WAAW,aAAa;IAC5B,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qGAAqG;IACrG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iGAAiG;IACjG,iBAAiB,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;CACzE;AAED;;;;GAIG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,iBAAiB,CAAoE;gBAG3F,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,aAAa,EACvB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAW3C,mEAAmE;IACnE,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,oDAAoD;IACpD,OAAO,IAAI,OAAO;IAIlB;;;OAGG;IACG,IAAI,CACR,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACnC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAqDnC,8DAA8D;IACxD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B/B,gGAAgG;YAClF,YAAY;IAqB1B,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,YAAY;IAkCpB,OAAO,CAAC,YAAY;IA2BpB,OAAO,CAAC,WAAW;IA2BnB,OAAO,CAAC,gBAAgB;CAOzB"}
|
package/dist/bridge.js
CHANGED
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
2
|
/** Prefix for all bridge diagnostic messages on stderr. */
|
|
3
3
|
const TAG = "[aft-plugin]";
|
|
4
|
+
/**
|
|
5
|
+
* Compare two semver version strings (major.minor.patch).
|
|
6
|
+
* Returns: negative if a < b, 0 if equal, positive if a > b.
|
|
7
|
+
*/
|
|
8
|
+
function compareSemver(a, b) {
|
|
9
|
+
const pa = a.split(".").map(Number);
|
|
10
|
+
const pb = b.split(".").map(Number);
|
|
11
|
+
for (let i = 0; i < 3; i++) {
|
|
12
|
+
const diff = (pa[i] ?? 0) - (pb[i] ?? 0);
|
|
13
|
+
if (diff !== 0)
|
|
14
|
+
return diff;
|
|
15
|
+
}
|
|
16
|
+
return 0;
|
|
17
|
+
}
|
|
4
18
|
/**
|
|
5
19
|
* Manages a persistent `aft` child process, communicating via NDJSON over
|
|
6
20
|
* stdin/stdout. Lazy-spawns on first `send()` call. Handles crash detection
|
|
@@ -19,12 +33,16 @@ export class BinaryBridge {
|
|
|
19
33
|
maxRestarts;
|
|
20
34
|
configured = false;
|
|
21
35
|
configOverrides;
|
|
36
|
+
minVersion;
|
|
37
|
+
onVersionMismatch;
|
|
22
38
|
constructor(binaryPath, cwd, options, configOverrides) {
|
|
23
39
|
this.binaryPath = binaryPath;
|
|
24
40
|
this.cwd = cwd;
|
|
25
41
|
this.timeoutMs = options?.timeoutMs ?? 30_000;
|
|
26
42
|
this.maxRestarts = options?.maxRestarts ?? 3;
|
|
27
43
|
this.configOverrides = configOverrides ?? {};
|
|
44
|
+
this.minVersion = options?.minVersion;
|
|
45
|
+
this.onVersionMismatch = options?.onVersionMismatch;
|
|
28
46
|
}
|
|
29
47
|
/** Number of times the binary has been restarted after a crash. */
|
|
30
48
|
get restartCount() {
|
|
@@ -43,14 +61,15 @@ export class BinaryBridge {
|
|
|
43
61
|
throw new Error(`${TAG} Bridge is shutting down, cannot send "${command}"`);
|
|
44
62
|
}
|
|
45
63
|
this.ensureSpawned();
|
|
46
|
-
// Auto-configure project root + plugin config on first command
|
|
64
|
+
// Auto-configure project root + plugin config on first command, then check version
|
|
47
65
|
if (!this.configured) {
|
|
48
66
|
this.configured = true;
|
|
49
|
-
if (command !== "configure") {
|
|
67
|
+
if (command !== "configure" && command !== "version") {
|
|
50
68
|
await this.send("configure", {
|
|
51
69
|
project_root: this.cwd,
|
|
52
70
|
...this.configOverrides,
|
|
53
71
|
});
|
|
72
|
+
await this.checkVersion();
|
|
54
73
|
}
|
|
55
74
|
}
|
|
56
75
|
const id = String(this.nextId++);
|
|
@@ -102,6 +121,27 @@ export class BinaryBridge {
|
|
|
102
121
|
}
|
|
103
122
|
}
|
|
104
123
|
// ---- Internal ----
|
|
124
|
+
/** Query binary version and compare against minVersion. Calls onVersionMismatch if outdated. */
|
|
125
|
+
async checkVersion() {
|
|
126
|
+
if (!this.minVersion)
|
|
127
|
+
return;
|
|
128
|
+
try {
|
|
129
|
+
const resp = await this.send("version");
|
|
130
|
+
const binaryVersion = resp.version;
|
|
131
|
+
if (!binaryVersion) {
|
|
132
|
+
console.error(`${TAG} Binary did not report a version — skipping version check`);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
if (compareSemver(binaryVersion, this.minVersion) < 0) {
|
|
136
|
+
console.error(`${TAG} Binary version ${binaryVersion} is older than required ${this.minVersion}`);
|
|
137
|
+
this.onVersionMismatch?.(binaryVersion, this.minVersion);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
// Version check is best-effort — don't block tool usage if it fails
|
|
142
|
+
console.error(`${TAG} Version check failed: ${err.message}`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
105
145
|
ensureSpawned() {
|
|
106
146
|
if (this.isAlive())
|
|
107
147
|
return;
|
|
@@ -149,6 +189,8 @@ export class BinaryBridge {
|
|
|
149
189
|
const id = response.id;
|
|
150
190
|
if (id && this.pending.has(id)) {
|
|
151
191
|
const entry = this.pending.get(id);
|
|
192
|
+
if (!entry)
|
|
193
|
+
continue;
|
|
152
194
|
this.pending.delete(id);
|
|
153
195
|
clearTimeout(entry.timer);
|
|
154
196
|
entry.resolve(response);
|
|
@@ -161,6 +203,7 @@ export class BinaryBridge {
|
|
|
161
203
|
}
|
|
162
204
|
handleCrash() {
|
|
163
205
|
this.process = null;
|
|
206
|
+
this.configured = false; // Force reconfigure on next command after restart
|
|
164
207
|
// Reject all pending requests
|
|
165
208
|
this.rejectAllPending(new Error(`${TAG} Binary crashed (restarts: ${this._restartCount})`));
|
|
166
209
|
// Auto-restart with exponential backoff
|
package/dist/bridge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE9D,2DAA2D;AAC3D,MAAM,GAAG,GAAG,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -27,6 +27,7 @@ export declare const AftConfigSchema: z.ZodObject<{
|
|
|
27
27
|
staticcheck: "staticcheck";
|
|
28
28
|
}>>>;
|
|
29
29
|
hoist_builtin_tools: z.ZodOptional<z.ZodBoolean>;
|
|
30
|
+
disabled_tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
30
31
|
}, z.core.$strip>;
|
|
31
32
|
export type AftConfig = z.infer<typeof AftConfigSchema>;
|
|
32
33
|
/**
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA6BxB,eAAO,MAAM,eAAe
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA6BxB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsB1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAkJxD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAwBjE"}
|
package/dist/config.js
CHANGED
|
@@ -41,6 +41,13 @@ export const AftConfigSchema = z.object({
|
|
|
41
41
|
* inline diagnostics, and permission checks. Default: true.
|
|
42
42
|
*/
|
|
43
43
|
hoist_builtin_tools: z.boolean().optional(),
|
|
44
|
+
/**
|
|
45
|
+
* List of tool names to disable. Disabled tools are not registered with
|
|
46
|
+
* OpenCode and will be invisible to agents. Use exact tool names, e.g.
|
|
47
|
+
* ["aft_navigate", "aft_refactor"]. Hoisted names ("read", "edit") and
|
|
48
|
+
* aft-prefixed names both work.
|
|
49
|
+
*/
|
|
50
|
+
disabled_tools: z.array(z.string()).optional(),
|
|
44
51
|
});
|
|
45
52
|
// ---------------------------------------------------------------------------
|
|
46
53
|
// JSONC parsing (same approach as oh-my-opencode)
|
|
@@ -135,12 +142,16 @@ function loadConfigFromPath(configPath) {
|
|
|
135
142
|
// Merge configs (project overrides user, simple shallow merge for flat schema)
|
|
136
143
|
// ---------------------------------------------------------------------------
|
|
137
144
|
function mergeConfigs(base, override) {
|
|
145
|
+
// Union disabled_tools from both levels (user + project)
|
|
146
|
+
const disabledTools = [...(base.disabled_tools ?? []), ...(override.disabled_tools ?? [])];
|
|
138
147
|
return {
|
|
139
148
|
...base,
|
|
140
149
|
...override,
|
|
141
150
|
// Deep-merge language-scoped maps instead of replacing
|
|
142
151
|
formatter: { ...base.formatter, ...override.formatter },
|
|
143
152
|
checker: { ...base.checker, ...override.checker },
|
|
153
|
+
// Union — both levels contribute to the disabled set
|
|
154
|
+
...(disabledTools.length > 0 ? { disabled_tools: [...new Set(disabledTools)] } : {}),
|
|
144
155
|
};
|
|
145
156
|
}
|
|
146
157
|
// ---------------------------------------------------------------------------
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAmB,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC;IAC3B,OAAO;IACP,UAAU;IACV,MAAM;IACN,MAAM;IACN,OAAO;IACP,SAAS;IACT,WAAW;IACX,OAAO;IACP,MAAM;CACP,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC;IACzB,KAAK;IACL,OAAO;IACP,SAAS;IACT,MAAM;IACN,OAAO;IACP,IAAI;IACJ,aAAa;IACb,MAAM;CACP,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,+DAA+D;IAC/D,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACtC,uFAAuF;IACvF,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE;IACvD,oFAAoF;IACpF,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC,QAAQ,EAAE;IACzD,uFAAuF;IACvF,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,CAAC,QAAQ,EAAE;IACrD;;;;OAIG;IACH,mBAAmB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/downloader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"downloader.d.ts","sourceRoot":"","sources":["../src/downloader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"downloader.d.ts","sourceRoot":"","sources":["../src/downloader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAUH,yEAAyE;AACzE,wBAAgB,WAAW,IAAI,MAAM,CASpC;AAED,4CAA4C;AAC5C,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,kEAAkE;AAClE,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAGnD;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAuG7E;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAI3E"}
|
package/dist/downloader.js
CHANGED
|
@@ -13,16 +13,9 @@
|
|
|
13
13
|
import { chmodSync, existsSync, mkdirSync, unlinkSync } from "node:fs";
|
|
14
14
|
import { homedir } from "node:os";
|
|
15
15
|
import { join } from "node:path";
|
|
16
|
-
|
|
16
|
+
import { PLATFORM_ASSET_MAP } from "./platform.js";
|
|
17
|
+
const REPO = "ualtinok/aft";
|
|
17
18
|
const TAG = "[aft-downloader]";
|
|
18
|
-
/** Platform → GitHub release asset suffix */
|
|
19
|
-
const PLATFORM_MAP = {
|
|
20
|
-
"darwin-arm64": "aft-darwin-arm64",
|
|
21
|
-
"darwin-x64": "aft-darwin-x64",
|
|
22
|
-
"linux-arm64": "aft-linux-arm64",
|
|
23
|
-
"linux-x64": "aft-linux-x64",
|
|
24
|
-
"win32-x64": "aft-win32-x64.exe",
|
|
25
|
-
};
|
|
26
19
|
/** Get the cache directory, respecting XDG_CACHE_HOME / LOCALAPPDATA. */
|
|
27
20
|
export function getCacheDir() {
|
|
28
21
|
if (process.platform === "win32") {
|
|
@@ -51,7 +44,7 @@ export function getCachedBinaryPath() {
|
|
|
51
44
|
*/
|
|
52
45
|
export async function downloadBinary(version) {
|
|
53
46
|
const platformKey = `${process.platform}-${process.arch}`;
|
|
54
|
-
const assetName =
|
|
47
|
+
const assetName = PLATFORM_ASSET_MAP[platformKey];
|
|
55
48
|
if (!assetName) {
|
|
56
49
|
console.error(`${TAG} Unsupported platform: ${platformKey}`);
|
|
57
50
|
return null;
|
|
@@ -70,18 +63,42 @@ export async function downloadBinary(version) {
|
|
|
70
63
|
return null;
|
|
71
64
|
}
|
|
72
65
|
const downloadUrl = `https://github.com/${REPO}/releases/download/${tag}/${assetName}`;
|
|
66
|
+
const checksumUrl = `https://github.com/${REPO}/releases/download/${tag}/checksums.sha256`;
|
|
73
67
|
console.error(`${TAG} Downloading AFT binary (${tag}) for ${platformKey}...`);
|
|
74
68
|
try {
|
|
75
69
|
// Ensure cache directory exists
|
|
76
70
|
if (!existsSync(cacheDir)) {
|
|
77
71
|
mkdirSync(cacheDir, { recursive: true });
|
|
78
72
|
}
|
|
79
|
-
// Download
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
73
|
+
// Download binary and checksum file in parallel
|
|
74
|
+
const [binaryResponse, checksumResponse] = await Promise.all([
|
|
75
|
+
fetch(downloadUrl, { redirect: "follow" }),
|
|
76
|
+
fetch(checksumUrl, { redirect: "follow" }),
|
|
77
|
+
]);
|
|
78
|
+
if (!binaryResponse.ok) {
|
|
79
|
+
throw new Error(`HTTP ${binaryResponse.status}: ${binaryResponse.statusText} (${downloadUrl})`);
|
|
80
|
+
}
|
|
81
|
+
const arrayBuffer = await binaryResponse.arrayBuffer();
|
|
82
|
+
// Verify checksum if available
|
|
83
|
+
if (checksumResponse.ok) {
|
|
84
|
+
const checksumText = await checksumResponse.text();
|
|
85
|
+
const expectedHash = parseChecksumForAsset(checksumText, assetName);
|
|
86
|
+
if (expectedHash) {
|
|
87
|
+
const { createHash } = await import("node:crypto");
|
|
88
|
+
const actualHash = createHash("sha256").update(Buffer.from(arrayBuffer)).digest("hex");
|
|
89
|
+
if (actualHash !== expectedHash) {
|
|
90
|
+
throw new Error(`Checksum mismatch for ${assetName}: expected ${expectedHash}, got ${actualHash}. ` +
|
|
91
|
+
"The binary may have been tampered with.");
|
|
92
|
+
}
|
|
93
|
+
console.error(`${TAG} Checksum verified (SHA-256: ${actualHash.slice(0, 16)}...)`);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
console.error(`${TAG} Warning: checksums.sha256 found but no entry for ${assetName}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
console.error(`${TAG} Warning: no checksums.sha256 found for ${tag}, skipping verification`);
|
|
83
101
|
}
|
|
84
|
-
const arrayBuffer = await response.arrayBuffer();
|
|
85
102
|
// Write to a temp file first, then rename (atomic-ish)
|
|
86
103
|
const tmpPath = `${binaryPath}.tmp`;
|
|
87
104
|
const { writeFileSync } = await import("node:fs");
|
|
@@ -122,6 +139,25 @@ export async function ensureBinary(version) {
|
|
|
122
139
|
return cached;
|
|
123
140
|
return downloadBinary(version);
|
|
124
141
|
}
|
|
142
|
+
/**
|
|
143
|
+
* Parse a checksums.sha256 file (GNU coreutils format) and return the hash
|
|
144
|
+
* for the given asset name, or null if not found.
|
|
145
|
+
*
|
|
146
|
+
* Expected format: `<hex-hash> <filename>` (two spaces between hash and name)
|
|
147
|
+
*/
|
|
148
|
+
function parseChecksumForAsset(checksumText, assetName) {
|
|
149
|
+
for (const line of checksumText.split("\n")) {
|
|
150
|
+
const trimmed = line.trim();
|
|
151
|
+
if (!trimmed)
|
|
152
|
+
continue;
|
|
153
|
+
// Format: "abc123... aft-darwin-arm64"
|
|
154
|
+
const match = trimmed.match(/^([0-9a-f]{64})\s+(.+)$/);
|
|
155
|
+
if (match && match[2] === assetName) {
|
|
156
|
+
return match[1];
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
125
161
|
/** Fetch the latest release tag from GitHub API. */
|
|
126
162
|
async function fetchLatestTag() {
|
|
127
163
|
try {
|
package/dist/downloader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"downloader.js","sourceRoot":"","sources":["../src/downloader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"downloader.js","sourceRoot":"","sources":["../src/downloader.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AA8BlD;;;;;;;;;;;;;;;;;GAiBG;AACH,QAAA,MAAM,MAAM,EAAE,MA4Fb,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,21 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
1
2
|
import { loadAftConfig } from "./config.js";
|
|
3
|
+
import { ensureBinary } from "./downloader.js";
|
|
2
4
|
import { consumeToolMetadata } from "./metadata-store.js";
|
|
5
|
+
import { normalizeToolMap } from "./normalize-schemas.js";
|
|
3
6
|
import { BridgePool } from "./pool.js";
|
|
4
7
|
import { findBinary } from "./resolver.js";
|
|
8
|
+
/** Read the plugin's own version from package.json at build time. */
|
|
9
|
+
const PLUGIN_VERSION = (() => {
|
|
10
|
+
try {
|
|
11
|
+
const req = createRequire(import.meta.url);
|
|
12
|
+
return req("../package.json").version;
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return "0.0.0";
|
|
16
|
+
}
|
|
17
|
+
})();
|
|
5
18
|
import { astTools } from "./tools/ast.js";
|
|
6
|
-
import { editingTools } from "./tools/editing.js";
|
|
7
19
|
import { aftPrefixedTools, hoistedTools } from "./tools/hoisted.js";
|
|
8
20
|
import { importTools } from "./tools/imports.js";
|
|
9
21
|
import { lspTools } from "./tools/lsp.js";
|
|
@@ -44,23 +56,51 @@ const plugin = async (input) => {
|
|
|
44
56
|
configOverrides.formatter = aftConfig.formatter;
|
|
45
57
|
if (aftConfig.checker !== undefined)
|
|
46
58
|
configOverrides.checker = aftConfig.checker;
|
|
47
|
-
const pool = new BridgePool(binaryPath, {
|
|
59
|
+
const pool = new BridgePool(binaryPath, {
|
|
60
|
+
minVersion: PLUGIN_VERSION,
|
|
61
|
+
onVersionMismatch: (binaryVersion, minVersion) => {
|
|
62
|
+
console.error(`[aft-plugin] WARNING: aft binary v${binaryVersion} is older than plugin v${minVersion}. ` +
|
|
63
|
+
"Some features may not work. Attempting to download a compatible binary...");
|
|
64
|
+
// Fire-and-forget: try to download matching version in background
|
|
65
|
+
ensureBinary(`v${minVersion}`).then((path) => {
|
|
66
|
+
if (path) {
|
|
67
|
+
console.error(`[aft-plugin] Downloaded compatible binary to ${path}. Restart OpenCode to use it.`);
|
|
68
|
+
}
|
|
69
|
+
}, () => {
|
|
70
|
+
console.error(`[aft-plugin] Auto-download failed. Install manually: cargo install agent-file-tools@${minVersion}`);
|
|
71
|
+
});
|
|
72
|
+
},
|
|
73
|
+
}, configOverrides);
|
|
48
74
|
const ctx = { pool, client: input.client, config: aftConfig };
|
|
75
|
+
// Build full tool map, then filter out disabled tools
|
|
76
|
+
const allTools = normalizeToolMap({
|
|
77
|
+
// When hoisting enabled (default): override opencode built-ins (read, write, edit, apply_patch)
|
|
78
|
+
// When disabled: register with aft_ prefix (aft_read, aft_write, aft_edit, aft_apply_patch)
|
|
79
|
+
...(aftConfig.hoist_builtin_tools !== false ? hoistedTools(ctx) : aftPrefixedTools(ctx)),
|
|
80
|
+
...readingTools(ctx),
|
|
81
|
+
...safetyTools(ctx),
|
|
82
|
+
...importTools(ctx),
|
|
83
|
+
...structureTools(ctx),
|
|
84
|
+
...navigationTools(ctx),
|
|
85
|
+
...astTools(ctx),
|
|
86
|
+
...refactoringTools(ctx),
|
|
87
|
+
...lspTools(ctx),
|
|
88
|
+
});
|
|
89
|
+
// Filter disabled tools (user + project config union)
|
|
90
|
+
const disabled = new Set(aftConfig.disabled_tools ?? []);
|
|
91
|
+
if (disabled.size > 0) {
|
|
92
|
+
for (const name of disabled) {
|
|
93
|
+
if (name in allTools) {
|
|
94
|
+
delete allTools[name];
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
console.error(`[aft-plugin] disabled_tools: "${name}" not found — available: ${Object.keys(allTools).join(", ")}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
console.error(`[aft-plugin] Disabled ${disabled.size} tool(s): ${[...disabled].join(", ")}`);
|
|
101
|
+
}
|
|
49
102
|
return {
|
|
50
|
-
tool:
|
|
51
|
-
// When hoisting enabled (default): override opencode built-ins (read, write, edit, apply_patch)
|
|
52
|
-
// When disabled: register with aft_ prefix (aft_read, aft_write, aft_edit, aft_apply_patch)
|
|
53
|
-
...(aftConfig.hoist_builtin_tools !== false ? hoistedTools(ctx) : aftPrefixedTools(ctx)),
|
|
54
|
-
...readingTools(ctx),
|
|
55
|
-
...editingTools(ctx),
|
|
56
|
-
...safetyTools(ctx),
|
|
57
|
-
...importTools(ctx),
|
|
58
|
-
...structureTools(ctx),
|
|
59
|
-
...navigationTools(ctx),
|
|
60
|
-
...astTools(ctx),
|
|
61
|
-
...refactoringTools(ctx),
|
|
62
|
-
...lspTools(ctx),
|
|
63
|
-
},
|
|
103
|
+
tool: allTools,
|
|
64
104
|
// Restore metadata that fromPlugin() overwrites (opencode bug workaround)
|
|
65
105
|
"tool.execute.after": async (input, output) => {
|
|
66
106
|
if (!output)
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ToolDefinition } from "@opencode-ai/plugin";
|
|
2
|
+
/**
|
|
3
|
+
* Patch tool arg schemas so that `.describe()` and `.meta()` survive
|
|
4
|
+
* cross-Zod-instance JSON Schema serialization.
|
|
5
|
+
*
|
|
6
|
+
* OpenCode's host Zod can't see descriptions set by the plugin's Zod.
|
|
7
|
+
* This patches `_zod.toJSONSchema` on each arg to use the plugin's own
|
|
8
|
+
* `tool.schema.toJSONSchema`, which preserves all metadata.
|
|
9
|
+
*/
|
|
10
|
+
export declare function normalizeToolArgSchemas<T extends Pick<ToolDefinition, "args">>(toolDefinition: T): T;
|
|
11
|
+
/**
|
|
12
|
+
* Normalize all tool definitions in a record.
|
|
13
|
+
* Applies `normalizeToolArgSchemas` to each tool in the map.
|
|
14
|
+
*/
|
|
15
|
+
export declare function normalizeToolMap(tools: Record<string, ToolDefinition>): Record<string, ToolDefinition>;
|
|
16
|
+
//# sourceMappingURL=normalize-schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize-schemas.d.ts","sourceRoot":"","sources":["../src/normalize-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAiC1D;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,EAC5E,cAAc,EAAE,CAAC,GAChB,CAAC,CAKH;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GACpC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAKhC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { tool } from "@opencode-ai/plugin";
|
|
2
|
+
function stripRootJsonSchemaFields(jsonSchema) {
|
|
3
|
+
const { $schema: _schema, ...rest } = jsonSchema;
|
|
4
|
+
return rest;
|
|
5
|
+
}
|
|
6
|
+
function attachJsonSchemaOverride(schema) {
|
|
7
|
+
if (schema._zod.toJSONSchema) {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
schema._zod.toJSONSchema = () => {
|
|
11
|
+
const originalOverride = schema._zod.toJSONSchema;
|
|
12
|
+
delete schema._zod.toJSONSchema;
|
|
13
|
+
try {
|
|
14
|
+
return stripRootJsonSchemaFields(tool.schema.toJSONSchema(schema));
|
|
15
|
+
}
|
|
16
|
+
finally {
|
|
17
|
+
schema._zod.toJSONSchema = originalOverride;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Patch tool arg schemas so that `.describe()` and `.meta()` survive
|
|
23
|
+
* cross-Zod-instance JSON Schema serialization.
|
|
24
|
+
*
|
|
25
|
+
* OpenCode's host Zod can't see descriptions set by the plugin's Zod.
|
|
26
|
+
* This patches `_zod.toJSONSchema` on each arg to use the plugin's own
|
|
27
|
+
* `tool.schema.toJSONSchema`, which preserves all metadata.
|
|
28
|
+
*/
|
|
29
|
+
export function normalizeToolArgSchemas(toolDefinition) {
|
|
30
|
+
for (const schema of Object.values(toolDefinition.args)) {
|
|
31
|
+
attachJsonSchemaOverride(schema);
|
|
32
|
+
}
|
|
33
|
+
return toolDefinition;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Normalize all tool definitions in a record.
|
|
37
|
+
* Applies `normalizeToolArgSchemas` to each tool in the map.
|
|
38
|
+
*/
|
|
39
|
+
export function normalizeToolMap(tools) {
|
|
40
|
+
for (const def of Object.values(tools)) {
|
|
41
|
+
normalizeToolArgSchemas(def);
|
|
42
|
+
}
|
|
43
|
+
return tools;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=normalize-schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize-schemas.js","sourceRoot":"","sources":["../src/normalize-schemas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAU3C,SAAS,yBAAyB,CAAC,UAAmC;IACpE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,UAAU,CAAC;IACjD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAoC;IACpE,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QAC7B,OAAO;IACT,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,YAAY,GAAG,GAA4B,EAAE;QACvD,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;QAClD,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;QAEhC,IAAI,CAAC;YACH,OAAO,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QACrE,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,IAAI,CAAC,YAAY,GAAG,gBAAgB,CAAC;QAC9C,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CACrC,cAAiB;IAEjB,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QACxD,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAqC;IAErC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patch-parser.d.ts","sourceRoot":"","sources":["../src/patch-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,MAAM,MAAM,IAAI,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"patch-parser.d.ts","sourceRoot":"","sources":["../src/patch-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,MAAM,MAAM,IAAI,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC;AAqHrD,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,CAqDpD;AAyED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,eAAe,EAAE,GACxB,MAAM,CA+DR"}
|
package/dist/patch-parser.js
CHANGED
|
@@ -85,7 +85,14 @@ function parseUpdateFileChunks(lines, startIdx) {
|
|
|
85
85
|
}
|
|
86
86
|
return { chunks, nextIdx: i };
|
|
87
87
|
}
|
|
88
|
+
/** Maximum patch text size in bytes to prevent memory exhaustion. */
|
|
89
|
+
const MAX_PATCH_SIZE = 1024 * 1024; // 1 MB
|
|
90
|
+
/** Maximum number of hunks (file operations) per patch. */
|
|
91
|
+
const MAX_HUNKS = 500;
|
|
88
92
|
export function parsePatch(patchText) {
|
|
93
|
+
if (patchText.length > MAX_PATCH_SIZE) {
|
|
94
|
+
throw new Error(`Patch too large: ${patchText.length} bytes exceeds limit of ${MAX_PATCH_SIZE} bytes`);
|
|
95
|
+
}
|
|
89
96
|
const cleaned = stripHeredoc(patchText.trim());
|
|
90
97
|
const lines = cleaned.split("\n");
|
|
91
98
|
const hunks = [];
|
|
@@ -101,6 +108,9 @@ export function parsePatch(patchText) {
|
|
|
101
108
|
i++;
|
|
102
109
|
continue;
|
|
103
110
|
}
|
|
111
|
+
if (hunks.length >= MAX_HUNKS) {
|
|
112
|
+
throw new Error(`Patch exceeds maximum of ${MAX_HUNKS} file operations`);
|
|
113
|
+
}
|
|
104
114
|
if (lines[i].startsWith("*** Add File:")) {
|
|
105
115
|
const { content, nextIdx } = parseAddFileContent(lines, header.nextIdx);
|
|
106
116
|
hunks.push({ type: "add", path: header.filePath, contents: content });
|