@cortexkit/aft-opencode 0.9.1 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/dist/bridge.d.ts.map +1 -1
  2. package/dist/config.d.ts +1 -0
  3. package/dist/config.d.ts.map +1 -1
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +25413 -182
  6. package/dist/notifications.d.ts +48 -0
  7. package/dist/notifications.d.ts.map +1 -0
  8. package/dist/onnx-runtime.d.ts +35 -0
  9. package/dist/onnx-runtime.d.ts.map +1 -0
  10. package/dist/pool.d.ts +2 -0
  11. package/dist/pool.d.ts.map +1 -1
  12. package/dist/resolver.d.ts.map +1 -1
  13. package/dist/shared/opencode-config-dir.d.ts +16 -0
  14. package/dist/shared/opencode-config-dir.d.ts.map +1 -0
  15. package/dist/shared/rpc-client.d.ts +16 -0
  16. package/dist/shared/rpc-client.d.ts.map +1 -0
  17. package/dist/shared/rpc-server.d.ts +17 -0
  18. package/dist/shared/rpc-server.d.ts.map +1 -0
  19. package/dist/shared/rpc-utils.d.ts +11 -0
  20. package/dist/shared/rpc-utils.d.ts.map +1 -0
  21. package/dist/shared/runtime.d.ts +10 -0
  22. package/dist/shared/runtime.d.ts.map +1 -0
  23. package/dist/shared/status.d.ts +37 -0
  24. package/dist/shared/status.d.ts.map +1 -0
  25. package/dist/shared/tui-config.d.ts +2 -0
  26. package/dist/shared/tui-config.d.ts.map +1 -0
  27. package/dist/shared/url-fetch.d.ts +11 -0
  28. package/dist/shared/url-fetch.d.ts.map +1 -0
  29. package/dist/tools/reading.d.ts.map +1 -1
  30. package/dist/tools/search.d.ts.map +1 -1
  31. package/dist/tools/semantic.d.ts +4 -0
  32. package/dist/tools/semantic.d.ts.map +1 -0
  33. package/dist/types.d.ts +2 -0
  34. package/dist/types.d.ts.map +1 -1
  35. package/package.json +29 -9
  36. package/src/shared/opencode-config-dir.ts +46 -0
  37. package/src/shared/rpc-client.ts +123 -0
  38. package/src/shared/rpc-server.ts +135 -0
  39. package/src/shared/rpc-utils.ts +21 -0
  40. package/src/shared/runtime.ts +26 -0
  41. package/src/shared/status.ts +206 -0
  42. package/src/shared/tui-config.ts +58 -0
  43. package/src/shared/url-fetch.ts +237 -0
  44. package/src/tui/index.tsx +209 -0
  45. package/src/tui/types/opencode-plugin-tui.d.ts +232 -0
  46. package/dist/bridge.js +0 -311
  47. package/dist/bridge.js.map +0 -1
  48. package/dist/config.js +0 -302
  49. package/dist/config.js.map +0 -1
  50. package/dist/downloader.js +0 -198
  51. package/dist/downloader.js.map +0 -1
  52. package/dist/index.js.map +0 -1
  53. package/dist/logger.js +0 -78
  54. package/dist/logger.js.map +0 -1
  55. package/dist/lsp.js +0 -79
  56. package/dist/lsp.js.map +0 -1
  57. package/dist/metadata-store.js +0 -53
  58. package/dist/metadata-store.js.map +0 -1
  59. package/dist/normalize-schemas.js +0 -45
  60. package/dist/normalize-schemas.js.map +0 -1
  61. package/dist/patch-parser.js +0 -247
  62. package/dist/patch-parser.js.map +0 -1
  63. package/dist/platform.js +0 -31
  64. package/dist/platform.js.map +0 -1
  65. package/dist/pool.js +0 -111
  66. package/dist/pool.js.map +0 -1
  67. package/dist/resolver.js +0 -168
  68. package/dist/resolver.js.map +0 -1
  69. package/dist/tools/ast.js +0 -200
  70. package/dist/tools/ast.js.map +0 -1
  71. package/dist/tools/conflicts.js +0 -20
  72. package/dist/tools/conflicts.js.map +0 -1
  73. package/dist/tools/hoisted.js +0 -870
  74. package/dist/tools/hoisted.js.map +0 -1
  75. package/dist/tools/imports.js +0 -90
  76. package/dist/tools/imports.js.map +0 -1
  77. package/dist/tools/lsp.js +0 -58
  78. package/dist/tools/lsp.js.map +0 -1
  79. package/dist/tools/navigation.js +0 -58
  80. package/dist/tools/navigation.js.map +0 -1
  81. package/dist/tools/permissions.js +0 -50
  82. package/dist/tools/permissions.js.map +0 -1
  83. package/dist/tools/reading.js +0 -229
  84. package/dist/tools/reading.js.map +0 -1
  85. package/dist/tools/refactoring.js +0 -129
  86. package/dist/tools/refactoring.js.map +0 -1
  87. package/dist/tools/safety.js +0 -83
  88. package/dist/tools/safety.js.map +0 -1
  89. package/dist/tools/search.js +0 -88
  90. package/dist/tools/search.js.map +0 -1
  91. package/dist/tools/structure.js +0 -157
  92. package/dist/tools/structure.js.map +0 -1
  93. package/dist/types.js +0 -2
  94. package/dist/types.js.map +0 -1
@@ -1,247 +0,0 @@
1
- /**
2
- * Minimal patch parser for the opencode `*** Begin Patch` format.
3
- * Ported from opencode's internal Patch module.
4
- */
5
- function stripHeredoc(input) {
6
- const heredocMatch = input.match(/^(?:cat\s+)?<<['"]?(\w+)['"]?\s*\n([\s\S]*?)\n\1\s*$/);
7
- return heredocMatch ? heredocMatch[2] : input;
8
- }
9
- function parsePatchHeader(lines, startIdx) {
10
- const line = lines[startIdx];
11
- if (line.startsWith("*** Add File:")) {
12
- const filePath = line.slice("*** Add File:".length).trim();
13
- return filePath ? { filePath, nextIdx: startIdx + 1 } : null;
14
- }
15
- if (line.startsWith("*** Delete File:")) {
16
- const filePath = line.slice("*** Delete File:".length).trim();
17
- return filePath ? { filePath, nextIdx: startIdx + 1 } : null;
18
- }
19
- if (line.startsWith("*** Update File:")) {
20
- const filePath = line.slice("*** Update File:".length).trim();
21
- let movePath;
22
- let nextIdx = startIdx + 1;
23
- if (nextIdx < lines.length && lines[nextIdx].startsWith("*** Move to:")) {
24
- movePath = lines[nextIdx].slice("*** Move to:".length).trim();
25
- nextIdx++;
26
- }
27
- return filePath ? { filePath, movePath, nextIdx } : null;
28
- }
29
- return null;
30
- }
31
- function parseAddFileContent(lines, startIdx) {
32
- let content = "";
33
- let i = startIdx;
34
- while (i < lines.length && !lines[i].startsWith("***")) {
35
- if (lines[i].startsWith("+")) {
36
- content += `${lines[i].substring(1)}\n`;
37
- }
38
- i++;
39
- }
40
- if (content.endsWith("\n")) {
41
- content = content.slice(0, -1);
42
- }
43
- return { content, nextIdx: i };
44
- }
45
- function parseUpdateFileChunks(lines, startIdx) {
46
- const chunks = [];
47
- let i = startIdx;
48
- while (i < lines.length && !lines[i].startsWith("***")) {
49
- if (lines[i].startsWith("@@")) {
50
- const contextLine = lines[i].substring(2).trim();
51
- i++;
52
- const oldLines = [];
53
- const newLines = [];
54
- let isEndOfFile = false;
55
- while (i < lines.length && !lines[i].startsWith("@@") && !lines[i].startsWith("***")) {
56
- const changeLine = lines[i];
57
- if (changeLine === "*** End of File") {
58
- isEndOfFile = true;
59
- i++;
60
- break;
61
- }
62
- if (changeLine.startsWith(" ")) {
63
- const content = changeLine.substring(1);
64
- oldLines.push(content);
65
- newLines.push(content);
66
- }
67
- else if (changeLine.startsWith("-")) {
68
- oldLines.push(changeLine.substring(1));
69
- }
70
- else if (changeLine.startsWith("+")) {
71
- newLines.push(changeLine.substring(1));
72
- }
73
- i++;
74
- }
75
- chunks.push({
76
- old_lines: oldLines,
77
- new_lines: newLines,
78
- change_context: contextLine || undefined,
79
- is_end_of_file: isEndOfFile || undefined,
80
- });
81
- }
82
- else {
83
- i++;
84
- }
85
- }
86
- return { chunks, nextIdx: i };
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;
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
- }
96
- const cleaned = stripHeredoc(patchText.trim());
97
- const lines = cleaned.split("\n");
98
- const hunks = [];
99
- const beginIdx = lines.findIndex((line) => line.trim() === "*** Begin Patch");
100
- const endIdx = lines.findIndex((line) => line.trim() === "*** End Patch");
101
- if (beginIdx === -1 || endIdx === -1 || beginIdx >= endIdx) {
102
- throw new Error("Invalid patch format: missing *** Begin Patch / *** End Patch markers");
103
- }
104
- let i = beginIdx + 1;
105
- while (i < endIdx) {
106
- const header = parsePatchHeader(lines, i);
107
- if (!header) {
108
- i++;
109
- continue;
110
- }
111
- if (hunks.length >= MAX_HUNKS) {
112
- throw new Error(`Patch exceeds maximum of ${MAX_HUNKS} file operations`);
113
- }
114
- if (lines[i].startsWith("*** Add File:")) {
115
- const { content, nextIdx } = parseAddFileContent(lines, header.nextIdx);
116
- hunks.push({ type: "add", path: header.filePath, contents: content });
117
- i = nextIdx;
118
- }
119
- else if (lines[i].startsWith("*** Delete File:")) {
120
- hunks.push({ type: "delete", path: header.filePath });
121
- i = header.nextIdx;
122
- }
123
- else if (lines[i].startsWith("*** Update File:")) {
124
- const { chunks, nextIdx } = parseUpdateFileChunks(lines, header.nextIdx);
125
- hunks.push({
126
- type: "update",
127
- path: header.filePath,
128
- move_path: header.movePath,
129
- chunks,
130
- });
131
- i = nextIdx;
132
- }
133
- else {
134
- i++;
135
- }
136
- }
137
- return hunks;
138
- }
139
- // ---------------------------------------------------------------------------
140
- // Apply update chunks to file content
141
- // ---------------------------------------------------------------------------
142
- function normalizeUnicode(str) {
143
- return str
144
- .replace(/[\u2018\u2019\u201A\u201B]/g, "'")
145
- .replace(/[\u201C\u201D\u201E\u201F]/g, '"')
146
- .replace(/[\u2010\u2011\u2012\u2013\u2014\u2015]/g, "-")
147
- .replace(/\u2026/g, "...")
148
- .replace(/\u00A0/g, " ");
149
- }
150
- function tryMatch(lines, pattern, startIndex, compare, eof) {
151
- if (eof) {
152
- const fromEnd = lines.length - pattern.length;
153
- if (fromEnd >= startIndex) {
154
- let matches = true;
155
- for (let j = 0; j < pattern.length; j++) {
156
- if (!compare(lines[fromEnd + j], pattern[j])) {
157
- matches = false;
158
- break;
159
- }
160
- }
161
- if (matches)
162
- return fromEnd;
163
- }
164
- }
165
- for (let i = startIndex; i <= lines.length - pattern.length; i++) {
166
- let matches = true;
167
- for (let j = 0; j < pattern.length; j++) {
168
- if (!compare(lines[i + j], pattern[j])) {
169
- matches = false;
170
- break;
171
- }
172
- }
173
- if (matches)
174
- return i;
175
- }
176
- return -1;
177
- }
178
- function seekSequence(lines, pattern, startIndex, eof = false) {
179
- if (pattern.length === 0)
180
- return -1;
181
- const exact = tryMatch(lines, pattern, startIndex, (a, b) => a === b, eof);
182
- if (exact !== -1)
183
- return exact;
184
- const rstrip = tryMatch(lines, pattern, startIndex, (a, b) => a.trimEnd() === b.trimEnd(), eof);
185
- if (rstrip !== -1)
186
- return rstrip;
187
- const trim = tryMatch(lines, pattern, startIndex, (a, b) => a.trim() === b.trim(), eof);
188
- if (trim !== -1)
189
- return trim;
190
- return tryMatch(lines, pattern, startIndex, (a, b) => normalizeUnicode(a.trim()) === normalizeUnicode(b.trim()), eof);
191
- }
192
- /**
193
- * Apply update chunks to the original file content, producing new content.
194
- * Ported from opencode's deriveNewContentsFromChunks.
195
- */
196
- export function applyUpdateChunks(originalContent, filePath, chunks) {
197
- const originalLines = originalContent.split("\n");
198
- if (originalLines.length > 0 && originalLines[originalLines.length - 1] === "") {
199
- originalLines.pop();
200
- }
201
- const replacements = [];
202
- let lineIndex = 0;
203
- for (const chunk of chunks) {
204
- if (chunk.change_context) {
205
- const contextIdx = seekSequence(originalLines, [chunk.change_context], lineIndex);
206
- if (contextIdx === -1) {
207
- throw new Error(`Failed to find context '${chunk.change_context}' in ${filePath}`);
208
- }
209
- lineIndex = contextIdx + 1;
210
- }
211
- if (chunk.old_lines.length === 0) {
212
- const insertionIdx = originalLines.length > 0 && originalLines[originalLines.length - 1] === ""
213
- ? originalLines.length - 1
214
- : originalLines.length;
215
- replacements.push([insertionIdx, 0, chunk.new_lines]);
216
- continue;
217
- }
218
- let pattern = chunk.old_lines;
219
- let newSlice = chunk.new_lines;
220
- let found = seekSequence(originalLines, pattern, lineIndex, chunk.is_end_of_file);
221
- if (found === -1 && pattern.length > 0 && pattern[pattern.length - 1] === "") {
222
- pattern = pattern.slice(0, -1);
223
- if (newSlice.length > 0 && newSlice[newSlice.length - 1] === "") {
224
- newSlice = newSlice.slice(0, -1);
225
- }
226
- found = seekSequence(originalLines, pattern, lineIndex, chunk.is_end_of_file);
227
- }
228
- if (found !== -1) {
229
- replacements.push([found, pattern.length, newSlice]);
230
- lineIndex = found + pattern.length;
231
- }
232
- else {
233
- throw new Error(`Failed to find expected lines in ${filePath}:\n${chunk.old_lines.join("\n")}`);
234
- }
235
- }
236
- replacements.sort((a, b) => a[0] - b[0]);
237
- const result = [...originalLines];
238
- for (let i = replacements.length - 1; i >= 0; i--) {
239
- const [startIdx, oldLen, newSegment] = replacements[i];
240
- result.splice(startIdx, oldLen, ...newSegment);
241
- }
242
- if (result.length === 0 || result[result.length - 1] !== "") {
243
- result.push("");
244
- }
245
- return result.join("\n");
246
- }
247
- //# sourceMappingURL=patch-parser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"patch-parser.js","sourceRoot":"","sources":["../src/patch-parser.ts"],"names":[],"mappings":"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"}
package/dist/platform.js DELETED
@@ -1,31 +0,0 @@
1
- /**
2
- * Shared platform / architecture mappings used by both the resolver and downloader.
3
- *
4
- * Keeping them here avoids duplication and ensures resolver + downloader always
5
- * agree on the canonical platform key strings (e.g. "darwin-arm64").
6
- */
7
- /**
8
- * Nested map: `process.platform` → `process.arch` → platform-key string.
9
- *
10
- * Used by the resolver to turn the current runtime environment into the
11
- * canonical key (e.g. `"darwin-arm64"`) that the rest of the system uses.
12
- */
13
- export const PLATFORM_ARCH_MAP = {
14
- darwin: { arm64: "darwin-arm64", x64: "darwin-x64" },
15
- linux: { arm64: "linux-arm64", x64: "linux-x64" },
16
- win32: { x64: "win32-x64" },
17
- };
18
- /**
19
- * Flat map: platform-key string → GitHub release asset filename.
20
- *
21
- * Used by the downloader to turn the canonical key into the exact asset name
22
- * that appears in the GitHub release (e.g. `"aft-darwin-arm64"`).
23
- */
24
- export const PLATFORM_ASSET_MAP = {
25
- "darwin-arm64": "aft-darwin-arm64",
26
- "darwin-x64": "aft-darwin-x64",
27
- "linux-arm64": "aft-linux-arm64",
28
- "linux-x64": "aft-linux-x64",
29
- "win32-x64": "aft-win32-x64.exe",
30
- };
31
- //# sourceMappingURL=platform.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA2C;IACvE,MAAM,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,YAAY,EAAE;IACpD,KAAK,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,WAAW,EAAE;IACjD,KAAK,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE;CAC5B,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAA2B;IACxD,cAAc,EAAE,kBAAkB;IAClC,YAAY,EAAE,gBAAgB;IAC9B,aAAa,EAAE,iBAAiB;IAChC,WAAW,EAAE,eAAe;IAC5B,WAAW,EAAE,mBAAmB;CACjC,CAAC"}
package/dist/pool.js DELETED
@@ -1,111 +0,0 @@
1
- import { BinaryBridge } from "./bridge";
2
- import { error, log } from "./logger.js";
3
- const DEFAULT_IDLE_TIMEOUT_MS = Infinity; // keep alive as long as opencode is running
4
- const DEFAULT_MAX_POOL_SIZE = 8;
5
- const CLEANUP_INTERVAL_MS = 60 * 1000; // check every minute
6
- /**
7
- * Manages a pool of BinaryBridge instances, one per session.
8
- * Each session gets its own binary process with isolated backup/undo history.
9
- * Handles idle cleanup and LRU eviction when at capacity.
10
- */
11
- export class BridgePool {
12
- bridges = new Map();
13
- binaryPath;
14
- maxPoolSize;
15
- idleTimeoutMs;
16
- bridgeOptions;
17
- configOverrides;
18
- cleanupTimer = null;
19
- constructor(binaryPath, options = {}, configOverrides = {}) {
20
- this.binaryPath = binaryPath;
21
- this.maxPoolSize = options.maxPoolSize ?? DEFAULT_MAX_POOL_SIZE;
22
- this.idleTimeoutMs = options.idleTimeoutMs ?? DEFAULT_IDLE_TIMEOUT_MS;
23
- this.bridgeOptions = {
24
- timeoutMs: options.timeoutMs,
25
- maxRestarts: options.maxRestarts,
26
- minVersion: options.minVersion,
27
- onVersionMismatch: options.onVersionMismatch,
28
- };
29
- this.configOverrides = configOverrides;
30
- // Skip cleanup timer when idle timeout is Infinity (no-op) to avoid wasted cycles
31
- if (Number.isFinite(this.idleTimeoutMs)) {
32
- this.cleanupTimer = setInterval(() => this.cleanup(), CLEANUP_INTERVAL_MS);
33
- this.cleanupTimer.unref(); // don't prevent Node from exiting
34
- }
35
- }
36
- /**
37
- * Get or create a bridge for the given session.
38
- * Each session gets its own binary process with isolated backup/undo history.
39
- * The bridge's working directory is set to `directory`.
40
- */
41
- getBridge(directory, sessionID) {
42
- const key = sessionID || directory.replace(/\/+$/, "");
43
- const existing = this.bridges.get(key);
44
- if (existing) {
45
- existing.lastUsed = Date.now();
46
- return existing.bridge;
47
- }
48
- // Evict LRU if at capacity
49
- if (this.bridges.size >= this.maxPoolSize) {
50
- this.evictLRU();
51
- }
52
- const normalized = directory.replace(/\/+$/, "");
53
- const bridge = new BinaryBridge(this.binaryPath, normalized, this.bridgeOptions, this.configOverrides);
54
- this.bridges.set(key, { bridge, lastUsed: Date.now() });
55
- return bridge;
56
- }
57
- /** Shut down idle bridges that haven't been used within the timeout. */
58
- cleanup() {
59
- const now = Date.now();
60
- for (const [dir, entry] of this.bridges) {
61
- if (now - entry.lastUsed > this.idleTimeoutMs) {
62
- entry.bridge.shutdown().catch((err) => error("cleanup shutdown failed:", err));
63
- this.bridges.delete(dir);
64
- }
65
- }
66
- }
67
- /** Evict the least recently used bridge to make room. */
68
- evictLRU() {
69
- let oldestDir = null;
70
- let oldestTime = Infinity;
71
- for (const [dir, entry] of this.bridges) {
72
- if (entry.lastUsed < oldestTime) {
73
- oldestTime = entry.lastUsed;
74
- oldestDir = dir;
75
- }
76
- }
77
- if (oldestDir) {
78
- const entry = this.bridges.get(oldestDir);
79
- entry?.bridge.shutdown().catch((err) => error("eviction shutdown failed:", err));
80
- this.bridges.delete(oldestDir);
81
- }
82
- }
83
- /** Shut down all bridges and stop the cleanup timer. */
84
- async shutdown() {
85
- if (this.cleanupTimer) {
86
- clearInterval(this.cleanupTimer);
87
- this.cleanupTimer = null;
88
- }
89
- const shutdowns = Array.from(this.bridges.values()).map((e) => e.bridge.shutdown());
90
- this.bridges.clear();
91
- await Promise.allSettled(shutdowns);
92
- }
93
- /**
94
- * Replace the binary path and restart all bridges.
95
- * Used after downloading a newer binary version.
96
- */
97
- async replaceBinary(newPath) {
98
- this.binaryPath = newPath;
99
- // Do NOT kill running bridges — they may be mid-request. The old process
100
- // continues running from the old binary (safe on all platforms since the
101
- // binary is already loaded in memory). New bridges created by getBridge()
102
- // will use the updated binaryPath. Old bridges will be recycled naturally
103
- // when their session ends or when a version-check detects the mismatch.
104
- log(`Binary path updated to ${newPath}. New sessions will use the updated binary.`);
105
- }
106
- /** Number of active bridges in the pool. */
107
- get size() {
108
- return this.bridges.size;
109
- }
110
- }
111
- //# sourceMappingURL=pool.js.map
package/dist/pool.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"pool.js","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"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"}
package/dist/resolver.js DELETED
@@ -1,168 +0,0 @@
1
- import { execSync, spawnSync } from "node:child_process";
2
- import { chmodSync, copyFileSync, existsSync, mkdirSync } from "node:fs";
3
- import { createRequire } from "node:module";
4
- import { homedir } from "node:os";
5
- import { join } from "node:path";
6
- import { ensureBinary, getCacheDir, getCachedBinaryPath } from "./downloader.js";
7
- import { log, warn } from "./logger.js";
8
- import { PLATFORM_ARCH_MAP } from "./platform.js";
9
- /**
10
- * Copy an npm platform binary to the versioned cache so we never run from
11
- * node_modules directly. This prevents corruption when npm updates the
12
- * package while a bridge process is running the binary.
13
- */
14
- function copyToVersionedCache(npmBinaryPath) {
15
- try {
16
- // Get the version from the binary
17
- const result = spawnSync(npmBinaryPath, ["--version"], {
18
- encoding: "utf-8",
19
- stdio: ["pipe", "pipe", "pipe"],
20
- timeout: 5000,
21
- });
22
- const rawVersion = result.stdout?.trim();
23
- if (!rawVersion)
24
- return null;
25
- // `aft --version` outputs "aft 0.9.0" — extract just the version number
26
- const version = rawVersion.replace(/^aft\s+/, "");
27
- const tag = version.startsWith("v") ? version : `v${version}`;
28
- const cacheDir = getCacheDir();
29
- const versionedDir = join(cacheDir, tag);
30
- const ext = process.platform === "win32" ? ".exe" : "";
31
- const cachedPath = join(versionedDir, `aft${ext}`);
32
- // Already cached
33
- if (existsSync(cachedPath))
34
- return cachedPath;
35
- // Copy to versioned cache
36
- mkdirSync(versionedDir, { recursive: true });
37
- const tmpPath = `${cachedPath}.tmp`;
38
- copyFileSync(npmBinaryPath, tmpPath);
39
- if (process.platform !== "win32") {
40
- chmodSync(tmpPath, 0o755);
41
- }
42
- const { renameSync } = require("node:fs");
43
- renameSync(tmpPath, cachedPath);
44
- log(`Copied npm binary to versioned cache: ${cachedPath}`);
45
- return cachedPath;
46
- }
47
- catch (err) {
48
- warn(`Failed to copy binary to cache: ${err instanceof Error ? err.message : String(err)}`);
49
- return null;
50
- }
51
- }
52
- /**
53
- * Map the current `process.platform` and `process.arch` to the npm platform
54
- * package suffix (e.g. `"darwin-arm64"`, `"linux-x64"`).
55
- *
56
- * Exported for testability — agents and scripts can call this directly to
57
- * verify the platform mapping without running the full resolver.
58
- *
59
- * @throws {Error} with the exact `process.platform` and `process.arch` values
60
- * when the combination is unsupported.
61
- */
62
- export function platformKey(platform = process.platform, arch = process.arch) {
63
- const archMap = PLATFORM_ARCH_MAP[platform];
64
- if (!archMap) {
65
- throw new Error(`Unsupported platform: ${platform} (arch: ${arch}). ` +
66
- `Supported platforms: ${Object.keys(PLATFORM_ARCH_MAP).join(", ")}`);
67
- }
68
- const key = archMap[arch];
69
- if (!key) {
70
- throw new Error(`Unsupported architecture: ${arch} on platform ${platform}. ` +
71
- `Supported architectures for ${platform}: ${Object.keys(archMap).join(", ")}`);
72
- }
73
- return key;
74
- }
75
- /**
76
- * Locate the `aft` binary synchronously by checking (in order):
77
- * 1. Cached binary from previous auto-download (~/.cache/aft/bin/)
78
- * 2. npm platform package via `require.resolve(@cortexkit/aft-<platform>/bin/aft)`
79
- * 3. PATH lookup via `which aft` (or `where aft` on Windows)
80
- * 4. ~/.cargo/bin/aft (Rust cargo install location)
81
- *
82
- * Returns the absolute path to the first binary found, or null if none found.
83
- */
84
- export function findBinarySync() {
85
- const ext = process.platform === "win32" ? ".exe" : "";
86
- // 1. Check cached binary from auto-download
87
- const cached = getCachedBinaryPath();
88
- if (cached)
89
- return cached;
90
- // 2. Check npm platform package — copy to versioned cache to avoid
91
- // corruption when npm updates the package while a bridge is running
92
- try {
93
- const key = platformKey();
94
- const packageBin = `@cortexkit/aft-${key}/bin/aft${ext}`;
95
- const req = createRequire(import.meta.url);
96
- const resolved = req.resolve(packageBin);
97
- if (existsSync(resolved)) {
98
- const copied = copyToVersionedCache(resolved);
99
- return copied ?? resolved;
100
- }
101
- }
102
- catch {
103
- // npm package not installed or resolution failed
104
- }
105
- // 3. Check PATH
106
- try {
107
- const whichCmd = process.platform === "win32" ? "where aft" : "which aft";
108
- const result = execSync(whichCmd, {
109
- encoding: "utf-8",
110
- stdio: ["pipe", "pipe", "pipe"],
111
- }).trim();
112
- if (result)
113
- return result;
114
- }
115
- catch {
116
- // not in PATH
117
- }
118
- // 4. Check ~/.cargo/bin/aft
119
- const cargoPath = join(homedir(), ".cargo", "bin", `aft${ext}`);
120
- if (existsSync(cargoPath))
121
- return cargoPath;
122
- return null;
123
- }
124
- /**
125
- * Locate the `aft` binary, with auto-download as a last resort.
126
- *
127
- * Resolution order:
128
- * 1. Cached binary (~/.cache/aft/bin/)
129
- * 2. npm platform package (@cortexkit/aft-<platform>)
130
- * 3. PATH lookup (which aft)
131
- * 4. ~/.cargo/bin/aft
132
- * 5. Auto-download from GitHub releases
133
- *
134
- * Returns the absolute path to the binary.
135
- * Throws a descriptive error with install instructions if all sources fail.
136
- */
137
- export async function findBinary() {
138
- // Try synchronous resolution first (fast path)
139
- const syncResult = findBinarySync();
140
- if (syncResult) {
141
- log(`Resolved binary: ${syncResult}`);
142
- return syncResult;
143
- }
144
- // 5. Auto-download from GitHub releases
145
- log("Binary not found locally, attempting auto-download...");
146
- const downloaded = await ensureBinary();
147
- if (downloaded)
148
- return downloaded;
149
- // All sources exhausted
150
- throw new Error([
151
- "Could not find the `aft` binary.",
152
- "",
153
- "Attempted sources:",
154
- " - Cache directory (~/.cache/aft/bin/)",
155
- " - npm platform package (@cortexkit/aft-<platform>)",
156
- " - PATH lookup (which aft)",
157
- " - ~/.cargo/bin/aft",
158
- " - Auto-download from GitHub releases (failed)",
159
- "",
160
- "Install it using one of these methods:",
161
- " npm install @cortexkit/aft-opencode # installs platform-specific binary via npm",
162
- " cargo install aft # from crates.io",
163
- " cargo build --release # from source (binary at target/release/aft)",
164
- "",
165
- "Or add the aft directory to your PATH.",
166
- ].join("\n"));
167
- }
168
- //# sourceMappingURL=resolver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"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"}