@cortexkit/aft-bridge 0.26.0 → 0.26.2
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/active-logger.d.ts.map +1 -1
- package/dist/active-logger.js +28 -4
- package/dist/active-logger.js.map +1 -1
- package/dist/bridge.d.ts +6 -15
- package/dist/bridge.d.ts.map +1 -1
- package/dist/bridge.js +102 -60
- package/dist/bridge.js.map +1 -1
- package/dist/downloader.d.ts.map +1 -1
- package/dist/downloader.js +117 -13
- package/dist/downloader.js.map +1 -1
- package/dist/pool.d.ts +14 -11
- package/dist/pool.d.ts.map +1 -1
- package/dist/pool.js +47 -30
- package/dist/pool.js.map +1 -1
- package/dist/resolver.d.ts.map +1 -1
- package/dist/resolver.js +46 -10
- package/dist/resolver.js.map +1 -1
- package/package.json +1 -1
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;AA6BH,yEAAyE;AACzE,wBAAgB,WAAW,IAAI,MAAM,CASpC;AAED,4CAA4C;AAC5C,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;sFAGsF;AACtF,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAInE;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmL7E;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqB3E"}
|
package/dist/downloader.js
CHANGED
|
@@ -10,12 +10,20 @@
|
|
|
10
10
|
*
|
|
11
11
|
* Cache dir respects XDG_CACHE_HOME on Linux/macOS and LOCALAPPDATA on Windows.
|
|
12
12
|
*/
|
|
13
|
-
import {
|
|
13
|
+
import { createHash } from "node:crypto";
|
|
14
|
+
import { chmodSync, closeSync, createWriteStream, existsSync, mkdirSync, openSync, renameSync, rmSync, statSync, unlinkSync, } from "node:fs";
|
|
14
15
|
import { homedir } from "node:os";
|
|
15
16
|
import { join } from "node:path";
|
|
17
|
+
import { Readable } from "node:stream";
|
|
18
|
+
import { pipeline } from "node:stream/promises";
|
|
16
19
|
import { error, log, warn } from "./active-logger.js";
|
|
17
20
|
import { PLATFORM_ARCH_MAP, PLATFORM_ASSET_MAP } from "./platform.js";
|
|
18
21
|
const REPO = "cortexkit/aft";
|
|
22
|
+
const DOWNLOAD_TIMEOUT_MS = 300_000;
|
|
23
|
+
const LATEST_TAG_TIMEOUT_MS = 30_000;
|
|
24
|
+
const MAX_DOWNLOAD_BYTES = 200 * 1024 * 1024;
|
|
25
|
+
const DOWNLOAD_LOCK_TIMEOUT_MS = 120_000;
|
|
26
|
+
const DOWNLOAD_LOCK_STALE_MS = 10 * 60_000;
|
|
19
27
|
/** Get the cache directory, respecting XDG_CACHE_HOME / LOCALAPPDATA. */
|
|
20
28
|
export function getCacheDir() {
|
|
21
29
|
if (process.platform === "win32") {
|
|
@@ -83,20 +91,44 @@ export async function downloadBinary(version) {
|
|
|
83
91
|
const downloadUrl = `https://github.com/${REPO}/releases/download/${tag}/${assetName}`;
|
|
84
92
|
const checksumUrl = `https://github.com/${REPO}/releases/download/${tag}/checksums.sha256`;
|
|
85
93
|
log(`Downloading AFT binary (${tag}) for ${platformKey}...`);
|
|
94
|
+
const lockPath = join(versionedCacheDir, ".download.lock");
|
|
95
|
+
let releaseLock = null;
|
|
96
|
+
let binaryController = null;
|
|
97
|
+
let checksumController = null;
|
|
98
|
+
let binaryTimeout = null;
|
|
99
|
+
let checksumTimeout = null;
|
|
100
|
+
const tmpPath = `${binaryPath}.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`;
|
|
86
101
|
try {
|
|
87
|
-
// Ensure versioned cache directory exists
|
|
102
|
+
// Ensure versioned cache directory exists before taking the per-version lock.
|
|
88
103
|
if (!existsSync(versionedCacheDir)) {
|
|
89
104
|
mkdirSync(versionedCacheDir, { recursive: true });
|
|
90
105
|
}
|
|
106
|
+
releaseLock = await acquireDownloadLock(lockPath);
|
|
107
|
+
// Another process may have completed the same version while we waited.
|
|
108
|
+
if (existsSync(binaryPath)) {
|
|
109
|
+
return binaryPath;
|
|
110
|
+
}
|
|
91
111
|
// Download binary and checksum file in parallel
|
|
112
|
+
binaryController = new AbortController();
|
|
113
|
+
checksumController = new AbortController();
|
|
114
|
+
const activeBinaryController = binaryController;
|
|
115
|
+
const activeChecksumController = checksumController;
|
|
116
|
+
binaryTimeout = setTimeout(() => activeBinaryController.abort(), DOWNLOAD_TIMEOUT_MS);
|
|
117
|
+
checksumTimeout = setTimeout(() => activeChecksumController.abort(), DOWNLOAD_TIMEOUT_MS);
|
|
92
118
|
const [binaryResponse, checksumResponse] = await Promise.all([
|
|
93
|
-
fetch(downloadUrl, { redirect: "follow" }),
|
|
94
|
-
fetch(checksumUrl, { redirect: "follow" }),
|
|
119
|
+
fetch(downloadUrl, { redirect: "follow", signal: activeBinaryController.signal }),
|
|
120
|
+
fetch(checksumUrl, { redirect: "follow", signal: activeChecksumController.signal }),
|
|
95
121
|
]);
|
|
96
122
|
if (!binaryResponse.ok) {
|
|
97
123
|
throw new Error(`HTTP ${binaryResponse.status}: ${binaryResponse.statusText} (${downloadUrl})`);
|
|
98
124
|
}
|
|
99
|
-
|
|
125
|
+
if (!binaryResponse.body) {
|
|
126
|
+
throw new Error(`Download response for ${assetName} had no body`);
|
|
127
|
+
}
|
|
128
|
+
const advertised = Number.parseInt(binaryResponse.headers.get("content-length") ?? "", 10);
|
|
129
|
+
if (Number.isFinite(advertised) && advertised > MAX_DOWNLOAD_BYTES) {
|
|
130
|
+
throw new Error(`Content-Length ${advertised} exceeds max ${MAX_DOWNLOAD_BYTES}`);
|
|
131
|
+
}
|
|
100
132
|
// Verify checksum - MANDATORY for security
|
|
101
133
|
if (!checksumResponse.ok) {
|
|
102
134
|
warn(`Checksum verification failed: no checksums.sha256 found for ${tag}. ` +
|
|
@@ -104,29 +136,44 @@ export async function downloadBinary(version) {
|
|
|
104
136
|
return null;
|
|
105
137
|
}
|
|
106
138
|
const checksumText = await checksumResponse.text();
|
|
139
|
+
clearTimeout(checksumTimeout);
|
|
140
|
+
checksumTimeout = null;
|
|
107
141
|
const expectedHash = parseChecksumForAsset(checksumText, assetName);
|
|
108
142
|
if (!expectedHash) {
|
|
109
143
|
warn(`Checksum verification failed: checksums.sha256 found but no entry for ${assetName}. ` +
|
|
110
144
|
"Binary download aborted for security reasons.");
|
|
111
145
|
return null;
|
|
112
146
|
}
|
|
113
|
-
const
|
|
114
|
-
|
|
147
|
+
const hash = createHash("sha256");
|
|
148
|
+
let bytesWritten = 0;
|
|
149
|
+
const guard = new TransformStream({
|
|
150
|
+
transform(chunk, controller) {
|
|
151
|
+
bytesWritten += chunk.byteLength;
|
|
152
|
+
if (bytesWritten > MAX_DOWNLOAD_BYTES) {
|
|
153
|
+
controller.error(new Error(`download exceeded ${MAX_DOWNLOAD_BYTES} bytes after streaming (server lied about size or sent unbounded body)`));
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
hash.update(chunk);
|
|
157
|
+
controller.enqueue(chunk);
|
|
158
|
+
},
|
|
159
|
+
});
|
|
160
|
+
const guarded = binaryResponse.body.pipeThrough(guard);
|
|
161
|
+
// biome-ignore lint/suspicious/noExplicitAny: ReadableStream→Node stream conversion
|
|
162
|
+
const nodeStream = Readable.fromWeb(guarded);
|
|
163
|
+
await pipeline(nodeStream, createWriteStream(tmpPath), { signal: binaryController.signal });
|
|
164
|
+
clearTimeout(binaryTimeout);
|
|
165
|
+
binaryTimeout = null;
|
|
166
|
+
const actualHash = hash.digest("hex");
|
|
115
167
|
if (actualHash !== expectedHash) {
|
|
116
168
|
throw new Error(`Checksum mismatch for ${assetName}: expected ${expectedHash}, got ${actualHash}. ` +
|
|
117
169
|
"The binary may have been tampered with.");
|
|
118
170
|
}
|
|
119
171
|
log(`Checksum verified (SHA-256: ${actualHash.slice(0, 16)}...)`);
|
|
120
|
-
// Write to a temp file first, then rename (atomic-ish)
|
|
121
|
-
const tmpPath = `${binaryPath}.tmp`;
|
|
122
|
-
const { writeFileSync } = await import("node:fs");
|
|
123
|
-
writeFileSync(tmpPath, Buffer.from(arrayBuffer));
|
|
124
172
|
// Make executable
|
|
125
173
|
if (process.platform !== "win32") {
|
|
126
174
|
chmodSync(tmpPath, 0o755);
|
|
127
175
|
}
|
|
128
176
|
// Atomic rename
|
|
129
|
-
const { renameSync } = await import("node:fs");
|
|
130
177
|
renameSync(tmpPath, binaryPath);
|
|
131
178
|
log(`AFT binary ready at ${binaryPath}`);
|
|
132
179
|
return binaryPath;
|
|
@@ -135,7 +182,6 @@ export async function downloadBinary(version) {
|
|
|
135
182
|
const msg = err instanceof Error ? err.message : String(err);
|
|
136
183
|
error(`Failed to download AFT binary: ${msg}`);
|
|
137
184
|
// Clean up partial download
|
|
138
|
-
const tmpPath = `${binaryPath}.tmp`;
|
|
139
185
|
if (existsSync(tmpPath)) {
|
|
140
186
|
try {
|
|
141
187
|
unlinkSync(tmpPath);
|
|
@@ -146,6 +192,17 @@ export async function downloadBinary(version) {
|
|
|
146
192
|
}
|
|
147
193
|
return null;
|
|
148
194
|
}
|
|
195
|
+
finally {
|
|
196
|
+
if (binaryTimeout) {
|
|
197
|
+
binaryController?.abort();
|
|
198
|
+
clearTimeout(binaryTimeout);
|
|
199
|
+
}
|
|
200
|
+
if (checksumTimeout) {
|
|
201
|
+
checksumController?.abort();
|
|
202
|
+
clearTimeout(checksumTimeout);
|
|
203
|
+
}
|
|
204
|
+
releaseLock?.();
|
|
205
|
+
}
|
|
149
206
|
}
|
|
150
207
|
/**
|
|
151
208
|
* Ensure the AFT binary is available: check cache, then download if needed.
|
|
@@ -176,6 +233,47 @@ export async function ensureBinary(version) {
|
|
|
176
233
|
log("No cached binary found, downloading latest...");
|
|
177
234
|
return downloadBinary();
|
|
178
235
|
}
|
|
236
|
+
async function acquireDownloadLock(lockPath) {
|
|
237
|
+
const startedAt = Date.now();
|
|
238
|
+
while (true) {
|
|
239
|
+
try {
|
|
240
|
+
const fd = openSync(lockPath, "wx");
|
|
241
|
+
return () => {
|
|
242
|
+
try {
|
|
243
|
+
closeSync(fd);
|
|
244
|
+
}
|
|
245
|
+
catch {
|
|
246
|
+
// already closed — ignore
|
|
247
|
+
}
|
|
248
|
+
try {
|
|
249
|
+
rmSync(lockPath, { force: true });
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
// best-effort lock cleanup
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
catch (err) {
|
|
257
|
+
const code = err.code;
|
|
258
|
+
if (code !== "EEXIST")
|
|
259
|
+
throw err;
|
|
260
|
+
try {
|
|
261
|
+
const ageMs = Date.now() - statSync(lockPath).mtimeMs;
|
|
262
|
+
if (ageMs > DOWNLOAD_LOCK_STALE_MS) {
|
|
263
|
+
rmSync(lockPath, { force: true });
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
catch {
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
if (Date.now() - startedAt > DOWNLOAD_LOCK_TIMEOUT_MS) {
|
|
271
|
+
throw new Error(`Timed out waiting for download lock: ${lockPath}`);
|
|
272
|
+
}
|
|
273
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
179
277
|
/**
|
|
180
278
|
* Parse a checksums.sha256 file (GNU coreutils format) and return the hash
|
|
181
279
|
* for the given asset name, or null if not found.
|
|
@@ -197,9 +295,12 @@ function parseChecksumForAsset(checksumText, assetName) {
|
|
|
197
295
|
}
|
|
198
296
|
/** Fetch the latest release tag from GitHub API. */
|
|
199
297
|
async function fetchLatestTag() {
|
|
298
|
+
const controller = new AbortController();
|
|
299
|
+
const timeout = setTimeout(() => controller.abort(), LATEST_TAG_TIMEOUT_MS);
|
|
200
300
|
try {
|
|
201
301
|
const response = await fetch(`https://api.github.com/repos/${REPO}/releases/latest`, {
|
|
202
302
|
headers: { Accept: "application/vnd.github.v3+json" },
|
|
303
|
+
signal: controller.signal,
|
|
203
304
|
});
|
|
204
305
|
if (!response.ok)
|
|
205
306
|
return null;
|
|
@@ -209,5 +310,8 @@ async function fetchLatestTag() {
|
|
|
209
310
|
catch {
|
|
210
311
|
return null;
|
|
211
312
|
}
|
|
313
|
+
finally {
|
|
314
|
+
clearTimeout(timeout);
|
|
315
|
+
}
|
|
212
316
|
}
|
|
213
317
|
//# sourceMappingURL=downloader.js.map
|
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,
|
|
1
|
+
{"version":3,"file":"downloader.js","sourceRoot":"","sources":["../src/downloader.ts"],"names":[],"mappings":"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"}
|
package/dist/pool.d.ts
CHANGED
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
import { BinaryBridge, type BridgeOptions } from "./bridge.js";
|
|
2
2
|
import type { Logger } from "./logger.js";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
* that resolves to the user's home directory.
|
|
4
|
+
* Historical error class — kept for backwards-compatible imports.
|
|
6
5
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
6
|
+
* **No longer thrown by `BridgePool.getBridge()`.** Prior versions refused
|
|
7
|
+
* to spawn a bridge when `project_root` resolved to `$HOME`, but that was
|
|
8
|
+
* too restrictive: legitimate migration tasks (e.g. shell config sweeps,
|
|
9
|
+
* dotfile maintenance) need to operate from `$HOME` directly. The Rust
|
|
10
|
+
* `handle_configure` now auto-disables heavy subsystems
|
|
11
|
+
* (`search_index`, `semantic_search`) and records `degraded_reasons:
|
|
12
|
+
* ["home_root"]` on the status snapshot, so the bridge spawns fast,
|
|
13
|
+
* `read`/`write`/`edit`/`bash` work, and the sidebar / `/aft-status`
|
|
14
|
+
* surfaces the degraded state. See `crates/aft/src/commands/configure.rs`
|
|
15
|
+
* for the full reasoning.
|
|
13
16
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
+
* Plugins still skip *eager* configure on `$HOME` (Desktop launches from
|
|
18
|
+
* `~` shouldn't auto-warm a bridge no one asked for), but lazy configure
|
|
19
|
+
* on the first real tool call works in degraded mode.
|
|
17
20
|
*/
|
|
18
21
|
export declare class HomeProjectRootError extends Error {
|
|
19
22
|
readonly projectRoot: string;
|
package/dist/pool.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAW,MAAM,aAAa,CAAC;AAMnD
|
|
1
|
+
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAW,MAAM,aAAa,CAAC;AAMnD;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;aACjB,WAAW,EAAE,MAAM;gBAAnB,WAAW,EAAE,MAAM;CAQhD;AAiBD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAIlE;AAOD,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,UAAU;IACrB,iEAAiE;IACjE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;IACxD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA0B;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,YAAY,CAA+C;gBAGjE,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,WAAgB,EACzB,eAAe,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAyB/C;;;;;;;;;OASG;IACH,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAQhE;;;;;;;OAOG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY;IA4B5C,wEAAwE;IACxE,OAAO,CAAC,OAAO;IAWf,yDAAyD;IACzD,OAAO,CAAC,QAAQ;IAiBhB,wDAAwD;IAClD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAU/B;;;OAGG;IACG,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBrD,OAAO,CAAC,GAAG;IAcX,OAAO,CAAC,KAAK;IAcb;;;;;;;;;OASG;IACH,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAQvD,4CAA4C;IAC5C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;;;;;OAQG;IACH,uBAAuB,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAG7D"}
|
package/dist/pool.js
CHANGED
|
@@ -6,19 +6,22 @@ const DEFAULT_IDLE_TIMEOUT_MS = Infinity; // keep alive as long as the host is r
|
|
|
6
6
|
const DEFAULT_MAX_POOL_SIZE = 8;
|
|
7
7
|
const CLEANUP_INTERVAL_MS = 60 * 1000; // check every minute
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
10
|
-
* that resolves to the user's home directory.
|
|
9
|
+
* Historical error class — kept for backwards-compatible imports.
|
|
11
10
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
11
|
+
* **No longer thrown by `BridgePool.getBridge()`.** Prior versions refused
|
|
12
|
+
* to spawn a bridge when `project_root` resolved to `$HOME`, but that was
|
|
13
|
+
* too restrictive: legitimate migration tasks (e.g. shell config sweeps,
|
|
14
|
+
* dotfile maintenance) need to operate from `$HOME` directly. The Rust
|
|
15
|
+
* `handle_configure` now auto-disables heavy subsystems
|
|
16
|
+
* (`search_index`, `semantic_search`) and records `degraded_reasons:
|
|
17
|
+
* ["home_root"]` on the status snapshot, so the bridge spawns fast,
|
|
18
|
+
* `read`/`write`/`edit`/`bash` work, and the sidebar / `/aft-status`
|
|
19
|
+
* surfaces the degraded state. See `crates/aft/src/commands/configure.rs`
|
|
20
|
+
* for the full reasoning.
|
|
18
21
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
+
* Plugins still skip *eager* configure on `$HOME` (Desktop launches from
|
|
23
|
+
* `~` shouldn't auto-warm a bridge no one asked for), but lazy configure
|
|
24
|
+
* on the first real tool call works in degraded mode.
|
|
22
25
|
*/
|
|
23
26
|
export class HomeProjectRootError extends Error {
|
|
24
27
|
projectRoot;
|
|
@@ -97,6 +100,8 @@ export class BridgePool {
|
|
|
97
100
|
onConfigureWarnings: options.onConfigureWarnings,
|
|
98
101
|
onBashCompletion: options.onBashCompletion,
|
|
99
102
|
onBashLongRunning: options.onBashLongRunning,
|
|
103
|
+
errorPrefix: options.errorPrefix,
|
|
104
|
+
logger: options.logger,
|
|
100
105
|
};
|
|
101
106
|
this.configOverrides = configOverrides;
|
|
102
107
|
// Skip cleanup timer when idle timeout is Infinity (no-op) to avoid wasted cycles
|
|
@@ -133,16 +138,13 @@ export class BridgePool {
|
|
|
133
138
|
*/
|
|
134
139
|
getBridge(projectRoot) {
|
|
135
140
|
const key = normalizeKey(projectRoot);
|
|
136
|
-
//
|
|
137
|
-
//
|
|
138
|
-
//
|
|
139
|
-
//
|
|
140
|
-
//
|
|
141
|
-
//
|
|
142
|
-
//
|
|
143
|
-
if (isHomeDirectoryRoot(key)) {
|
|
144
|
-
throw new HomeProjectRootError(key);
|
|
145
|
-
}
|
|
141
|
+
// `$HOME`-rooted spawns are no longer refused here. The Rust
|
|
142
|
+
// `handle_configure` auto-disables heavy subsystems (search_index,
|
|
143
|
+
// semantic_search) for `$HOME` and records the state on the status
|
|
144
|
+
// snapshot. Plugins still skip *eager* configure on `$HOME` (Desktop
|
|
145
|
+
// launches from `~` shouldn't auto-warm a bridge no one asked for),
|
|
146
|
+
// but lazy configure on the first real tool call now works in
|
|
147
|
+
// degraded mode — see HomeProjectRootError doc-comment above.
|
|
146
148
|
const existing = this.bridges.get(key);
|
|
147
149
|
if (existing) {
|
|
148
150
|
existing.lastUsed = Date.now();
|
|
@@ -204,26 +206,41 @@ export class BridgePool {
|
|
|
204
206
|
async replaceBinary(newPath) {
|
|
205
207
|
this.binaryPath = newPath;
|
|
206
208
|
// Clear the pool so next getBridge() creates fresh bridges with the new binary.
|
|
207
|
-
//
|
|
208
|
-
//
|
|
209
|
-
//
|
|
210
|
-
|
|
209
|
+
// Do NOT call shutdown() here: when replaceBinary() is invoked from a bridge's
|
|
210
|
+
// onVersionMismatch callback, shutdown() marks that in-flight bridge as
|
|
211
|
+
// shutting down before BinaryBridge.replaceCurrentBinary() can restart it,
|
|
212
|
+
// breaking the transparent retry path. Existing bridge processes are left to
|
|
213
|
+
// finish their current calls; the current bridge owns its coordinated restart
|
|
214
|
+
// after the callback returns.
|
|
211
215
|
this.bridges.clear();
|
|
212
|
-
await Promise.allSettled(shutdowns);
|
|
213
216
|
this.log(`Binary path updated to ${newPath}. All bridges cleared — next calls will use the new binary.`);
|
|
214
217
|
return newPath;
|
|
215
218
|
}
|
|
216
219
|
log(message, meta) {
|
|
217
220
|
const logger = this.logger ?? getActiveLogger();
|
|
218
|
-
if (logger)
|
|
219
|
-
|
|
221
|
+
if (logger) {
|
|
222
|
+
try {
|
|
223
|
+
logger.log(message, meta);
|
|
224
|
+
}
|
|
225
|
+
catch (err) {
|
|
226
|
+
console.error(`[aft-bridge] ERROR: pool logger log threw: ${err instanceof Error ? err.message : String(err)}`);
|
|
227
|
+
console.error(`[aft-bridge] ${message}`);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
220
230
|
else
|
|
221
231
|
log(message, meta);
|
|
222
232
|
}
|
|
223
233
|
error(message, meta) {
|
|
224
234
|
const logger = this.logger ?? getActiveLogger();
|
|
225
|
-
if (logger)
|
|
226
|
-
|
|
235
|
+
if (logger) {
|
|
236
|
+
try {
|
|
237
|
+
logger.error(message, meta);
|
|
238
|
+
}
|
|
239
|
+
catch (err) {
|
|
240
|
+
console.error(`[aft-bridge] ERROR: pool logger error threw: ${err instanceof Error ? err.message : String(err)}`);
|
|
241
|
+
console.error(`[aft-bridge] ERROR: ${message}`);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
227
244
|
else
|
|
228
245
|
error(message, meta);
|
|
229
246
|
}
|
package/dist/pool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAsB,MAAM,aAAa,CAAC;AAG/D,MAAM,uBAAuB,GAAG,QAAQ,CAAC,CAAC,4CAA4C;AACtF,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAChC,MAAM,mBAAmB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,qBAAqB;AAE5D
|
|
1
|
+
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"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"}
|
package/dist/resolver.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAWA;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgBnE;AAgFD;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CACzB,QAAQ,GAAE,MAAyB,EACnC,IAAI,GAAE,MAAqB,GAC1B,MAAM,CAgBR;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA0EtE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,UAAU,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiC1E"}
|
package/dist/resolver.js
CHANGED
|
@@ -4,7 +4,7 @@ import { createRequire } from "node:module";
|
|
|
4
4
|
import { homedir } from "node:os";
|
|
5
5
|
import { join } from "node:path";
|
|
6
6
|
import { log, warn } from "./active-logger.js";
|
|
7
|
-
import { ensureBinary, getCacheDir
|
|
7
|
+
import { ensureBinary, getCacheDir } from "./downloader.js";
|
|
8
8
|
import { PLATFORM_ARCH_MAP } from "./platform.js";
|
|
9
9
|
/**
|
|
10
10
|
* Read the version string from an `aft` binary by invoking it with
|
|
@@ -52,12 +52,17 @@ function copyToVersionedCache(npmBinaryPath, knownVersion) {
|
|
|
52
52
|
const versionedDir = join(cacheDir, tag);
|
|
53
53
|
const ext = process.platform === "win32" ? ".exe" : "";
|
|
54
54
|
const cachedPath = join(versionedDir, `aft${ext}`);
|
|
55
|
-
// Already cached
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
// Already cached. Probe before trusting the directory label; stale or
|
|
56
|
+
// corrupted cache entries must not shadow PATH/cargo fallback forever.
|
|
57
|
+
if (existsSync(cachedPath)) {
|
|
58
|
+
const cachedVersion = readBinaryVersion(cachedPath);
|
|
59
|
+
if (cachedVersion === version)
|
|
60
|
+
return cachedPath;
|
|
61
|
+
warn(`Cached binary at ${cachedPath} reports ${cachedVersion ?? "no version"}, expected ${version}; refreshing from npm package`);
|
|
62
|
+
}
|
|
58
63
|
// Copy to versioned cache
|
|
59
64
|
mkdirSync(versionedDir, { recursive: true });
|
|
60
|
-
const tmpPath = `${cachedPath}.tmp`;
|
|
65
|
+
const tmpPath = `${cachedPath}.${process.pid}.${Date.now()}.tmp`;
|
|
61
66
|
copyFileSync(npmBinaryPath, tmpPath);
|
|
62
67
|
if (process.platform !== "win32") {
|
|
63
68
|
chmodSync(tmpPath, 0o755);
|
|
@@ -71,6 +76,32 @@ function copyToVersionedCache(npmBinaryPath, knownVersion) {
|
|
|
71
76
|
return null;
|
|
72
77
|
}
|
|
73
78
|
}
|
|
79
|
+
function normalizeBareVersion(version) {
|
|
80
|
+
return version.startsWith("v") ? version.slice(1) : version;
|
|
81
|
+
}
|
|
82
|
+
function homeDirFromEnv(env) {
|
|
83
|
+
return (process.platform === "win32" ? env.USERPROFILE || env.HOME : env.HOME) || homedir();
|
|
84
|
+
}
|
|
85
|
+
function cacheDirFromEnv(env) {
|
|
86
|
+
if (process.platform === "win32") {
|
|
87
|
+
const base = env.LOCALAPPDATA || env.APPDATA || join(homeDirFromEnv(env), "AppData", "Local");
|
|
88
|
+
return join(base, "aft", "bin");
|
|
89
|
+
}
|
|
90
|
+
const base = env.XDG_CACHE_HOME || join(homeDirFromEnv(env), ".cache");
|
|
91
|
+
return join(base, "aft", "bin");
|
|
92
|
+
}
|
|
93
|
+
function cachedBinaryPathFromEnv(version, env, ext) {
|
|
94
|
+
const binaryPath = join(cacheDirFromEnv(env), version, `aft${ext}`);
|
|
95
|
+
return existsSync(binaryPath) ? binaryPath : null;
|
|
96
|
+
}
|
|
97
|
+
function isExpectedCachedBinary(binaryPath, expectedVersion) {
|
|
98
|
+
const expected = normalizeBareVersion(expectedVersion);
|
|
99
|
+
const actual = readBinaryVersion(binaryPath);
|
|
100
|
+
if (actual === expected)
|
|
101
|
+
return true;
|
|
102
|
+
warn(`Cached binary at ${binaryPath} reports ${actual ?? "no version"}, expected ${expected}; skipping cache candidate`);
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
74
105
|
/**
|
|
75
106
|
* Map the current `process.platform` and `process.arch` to the npm platform
|
|
76
107
|
* package suffix (e.g. `"darwin-arm64"`, `"linux-x64"`).
|
|
@@ -109,6 +140,7 @@ export function platformKey(platform = process.platform, arch = process.arch) {
|
|
|
109
140
|
*/
|
|
110
141
|
export function findBinarySync(expectedVersion) {
|
|
111
142
|
const ext = process.platform === "win32" ? ".exe" : "";
|
|
143
|
+
const env = { ...process.env };
|
|
112
144
|
// 1. Check versioned cache for the requested version (or this package's own
|
|
113
145
|
// version as a fallback so direct callers without a host still benefit from
|
|
114
146
|
// the cache).
|
|
@@ -124,8 +156,8 @@ export function findBinarySync(expectedVersion) {
|
|
|
124
156
|
})();
|
|
125
157
|
if (pluginVersion) {
|
|
126
158
|
const tag = pluginVersion.startsWith("v") ? pluginVersion : `v${pluginVersion}`;
|
|
127
|
-
const versionCached =
|
|
128
|
-
if (versionCached)
|
|
159
|
+
const versionCached = cachedBinaryPathFromEnv(tag, env, ext);
|
|
160
|
+
if (versionCached && isExpectedCachedBinary(versionCached, pluginVersion))
|
|
129
161
|
return versionCached;
|
|
130
162
|
}
|
|
131
163
|
// 2. Check npm platform package — copy to versioned cache to avoid
|
|
@@ -144,11 +176,14 @@ export function findBinarySync(expectedVersion) {
|
|
|
144
176
|
const resolved = req.resolve(packageBin);
|
|
145
177
|
if (existsSync(resolved)) {
|
|
146
178
|
const npmVersion = readBinaryVersion(resolved);
|
|
147
|
-
if (
|
|
179
|
+
if (npmVersion === null) {
|
|
180
|
+
warn(`npm platform package binary at ${resolved} did not report a version; skipping (continuing to PATH lookup)`);
|
|
181
|
+
}
|
|
182
|
+
else if (pluginVersion && npmVersion !== normalizeBareVersion(pluginVersion)) {
|
|
148
183
|
warn(`npm platform package binary v${npmVersion} does not match plugin v${pluginVersion}; skipping (continuing to PATH lookup)`);
|
|
149
184
|
}
|
|
150
185
|
else {
|
|
151
|
-
const copied = copyToVersionedCache(resolved, npmVersion
|
|
186
|
+
const copied = copyToVersionedCache(resolved, npmVersion);
|
|
152
187
|
return copied ?? resolved;
|
|
153
188
|
}
|
|
154
189
|
}
|
|
@@ -161,6 +196,7 @@ export function findBinarySync(expectedVersion) {
|
|
|
161
196
|
const whichCmd = process.platform === "win32" ? "where aft" : "which aft";
|
|
162
197
|
const result = execSync(whichCmd, {
|
|
163
198
|
encoding: "utf-8",
|
|
199
|
+
env,
|
|
164
200
|
stdio: ["pipe", "pipe", "pipe"],
|
|
165
201
|
}).trim();
|
|
166
202
|
if (result)
|
|
@@ -170,7 +206,7 @@ export function findBinarySync(expectedVersion) {
|
|
|
170
206
|
// not in PATH
|
|
171
207
|
}
|
|
172
208
|
// 4. Check ~/.cargo/bin/aft
|
|
173
|
-
const cargoPath = join(
|
|
209
|
+
const cargoPath = join(homeDirFromEnv(env), ".cargo", "bin", `aft${ext}`);
|
|
174
210
|
if (existsSync(cargoPath))
|
|
175
211
|
return cargoPath;
|
|
176
212
|
return null;
|
package/dist/resolver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"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"}
|