@cortexkit/aft-bridge 0.39.4 → 0.40.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.
- package/dist/bash-format.d.ts +0 -1
- package/dist/bash-format.d.ts.map +1 -1
- package/dist/bash-format.js +0 -3
- package/dist/bash-format.js.map +1 -1
- package/dist/bash-hints.js +97 -9
- package/dist/bash-hints.js.map +1 -1
- package/dist/bridge.d.ts +7 -1
- package/dist/bridge.d.ts.map +1 -1
- package/dist/bridge.js +39 -42
- package/dist/bridge.js.map +1 -1
- package/dist/coerce.d.ts +39 -0
- package/dist/coerce.d.ts.map +1 -1
- package/dist/coerce.js +82 -0
- package/dist/coerce.js.map +1 -1
- package/dist/command-timeouts.d.ts.map +1 -1
- package/dist/command-timeouts.js +1 -0
- package/dist/command-timeouts.js.map +1 -1
- package/dist/config-tiers.d.ts +19 -0
- package/dist/config-tiers.d.ts.map +1 -0
- package/dist/config-tiers.js +45 -0
- package/dist/config-tiers.js.map +1 -0
- package/dist/index.d.ts +10 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -5
- package/dist/index.js.map +1 -1
- package/dist/migration.d.ts +27 -0
- package/dist/migration.d.ts.map +1 -1
- package/dist/migration.js +384 -2
- package/dist/migration.js.map +1 -1
- package/dist/onnx-runtime.d.ts +4 -6
- package/dist/onnx-runtime.d.ts.map +1 -1
- package/dist/onnx-runtime.js +13 -15
- package/dist/onnx-runtime.js.map +1 -1
- package/dist/paths.d.ts +17 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +52 -1
- package/dist/paths.js.map +1 -1
- package/dist/pool.d.ts.map +1 -1
- package/dist/pool.js +15 -16
- package/dist/pool.js.map +1 -1
- package/dist/project-identity.d.ts +30 -0
- package/dist/project-identity.d.ts.map +1 -0
- package/dist/project-identity.js +69 -0
- package/dist/project-identity.js.map +1 -0
- package/package.json +1 -1
- package/dist/pipe-strip.d.ts +0 -7
- package/dist/pipe-strip.d.ts.map +0 -1
- package/dist/pipe-strip.js +0 -688
- package/dist/pipe-strip.js.map +0 -1
package/dist/migration.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { spawnSync } from "node:child_process";
|
|
2
|
-
import { existsSync, mkdirSync } from "node:fs";
|
|
2
|
+
import { closeSync, existsSync, mkdirSync, openSync, readFileSync, renameSync, rmSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
3
3
|
import { homedir, tmpdir } from "node:os";
|
|
4
|
-
import { dirname, join } from "node:path";
|
|
4
|
+
import { basename, dirname, join, resolve } from "node:path";
|
|
5
5
|
import { resolveHarnessStoragePath } from "./paths.js";
|
|
6
6
|
import { findBinary } from "./resolver.js";
|
|
7
7
|
let spawnSyncForMigration = spawnSync;
|
|
@@ -38,6 +38,388 @@ export function resolveLegacyStorageRoot(harness) {
|
|
|
38
38
|
export function resolveCortexKitStorageRoot() {
|
|
39
39
|
return join(dataHome(), "cortexkit", "aft");
|
|
40
40
|
}
|
|
41
|
+
function stripJsoncForParse(input) {
|
|
42
|
+
let out = "";
|
|
43
|
+
let inString = false;
|
|
44
|
+
let escaped = false;
|
|
45
|
+
for (let i = 0; i < input.length; i++) {
|
|
46
|
+
const ch = input[i];
|
|
47
|
+
const next = input[i + 1];
|
|
48
|
+
if (inString) {
|
|
49
|
+
out += ch;
|
|
50
|
+
if (escaped) {
|
|
51
|
+
escaped = false;
|
|
52
|
+
}
|
|
53
|
+
else if (ch === "\\") {
|
|
54
|
+
escaped = true;
|
|
55
|
+
}
|
|
56
|
+
else if (ch === '"') {
|
|
57
|
+
inString = false;
|
|
58
|
+
}
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (ch === '"') {
|
|
62
|
+
inString = true;
|
|
63
|
+
out += ch;
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
if (ch === "/" && next === "/") {
|
|
67
|
+
while (i < input.length && input[i] !== "\n")
|
|
68
|
+
i++;
|
|
69
|
+
out += "\n";
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (ch === "/" && next === "*") {
|
|
73
|
+
i += 2;
|
|
74
|
+
while (i < input.length && !(input[i] === "*" && input[i + 1] === "/"))
|
|
75
|
+
i++;
|
|
76
|
+
i++;
|
|
77
|
+
out += " ";
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
out += ch;
|
|
81
|
+
}
|
|
82
|
+
let withoutTrailingCommas = "";
|
|
83
|
+
inString = false;
|
|
84
|
+
escaped = false;
|
|
85
|
+
for (let i = 0; i < out.length; i++) {
|
|
86
|
+
const ch = out[i];
|
|
87
|
+
if (inString) {
|
|
88
|
+
withoutTrailingCommas += ch;
|
|
89
|
+
if (escaped) {
|
|
90
|
+
escaped = false;
|
|
91
|
+
}
|
|
92
|
+
else if (ch === "\\") {
|
|
93
|
+
escaped = true;
|
|
94
|
+
}
|
|
95
|
+
else if (ch === '"') {
|
|
96
|
+
inString = false;
|
|
97
|
+
}
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
if (ch === '"') {
|
|
101
|
+
inString = true;
|
|
102
|
+
withoutTrailingCommas += ch;
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (ch === ",") {
|
|
106
|
+
let j = i + 1;
|
|
107
|
+
while (j < out.length && /\s/.test(out[j]))
|
|
108
|
+
j++;
|
|
109
|
+
if (out[j] === "}" || out[j] === "]")
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
withoutTrailingCommas += ch;
|
|
113
|
+
}
|
|
114
|
+
return withoutTrailingCommas;
|
|
115
|
+
}
|
|
116
|
+
function sortJson(value) {
|
|
117
|
+
if (Array.isArray(value))
|
|
118
|
+
return value.map(sortJson);
|
|
119
|
+
if (value && typeof value === "object") {
|
|
120
|
+
const sorted = {};
|
|
121
|
+
for (const key of Object.keys(value).sort()) {
|
|
122
|
+
sorted[key] = sortJson(value[key]);
|
|
123
|
+
}
|
|
124
|
+
return sorted;
|
|
125
|
+
}
|
|
126
|
+
return value;
|
|
127
|
+
}
|
|
128
|
+
function normalizedJsoncSemantics(content) {
|
|
129
|
+
return JSON.stringify(sortJson(JSON.parse(stripJsoncForParse(content))));
|
|
130
|
+
}
|
|
131
|
+
function fileSemanticsMatch(a, b) {
|
|
132
|
+
try {
|
|
133
|
+
return normalizedJsoncSemantics(a) === normalizedJsoncSemantics(b);
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return a === b;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
function sleepSync(ms) {
|
|
140
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
|
|
141
|
+
}
|
|
142
|
+
function acquireConfigMigrationLock(lockDir) {
|
|
143
|
+
const deadline = Date.now() + 30_000;
|
|
144
|
+
while (true) {
|
|
145
|
+
try {
|
|
146
|
+
mkdirSync(lockDir, { recursive: false });
|
|
147
|
+
return () => {
|
|
148
|
+
try {
|
|
149
|
+
rmSync(lockDir, { recursive: true, force: true });
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
// best-effort lock cleanup
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
catch (err) {
|
|
157
|
+
const code = err?.code;
|
|
158
|
+
if (code !== "EEXIST")
|
|
159
|
+
throw err;
|
|
160
|
+
try {
|
|
161
|
+
const ageMs = Date.now() - statSync(lockDir).mtimeMs;
|
|
162
|
+
if (ageMs > 60_000) {
|
|
163
|
+
rmSync(lockDir, { recursive: true, force: true });
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
// If the lock disappeared between mkdir attempts, retry immediately.
|
|
169
|
+
}
|
|
170
|
+
if (Date.now() >= deadline) {
|
|
171
|
+
throw new Error(`timed out waiting for config migration lock ${lockDir}`);
|
|
172
|
+
}
|
|
173
|
+
sleepSync(25);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
function atomicCopyConfigFile(sourcePath, targetPath) {
|
|
178
|
+
mkdirSync(dirname(targetPath), { recursive: true });
|
|
179
|
+
const tmpPath = join(dirname(targetPath), `.${basename(targetPath)}.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`);
|
|
180
|
+
let fd = null;
|
|
181
|
+
try {
|
|
182
|
+
fd = openSync(tmpPath, "wx", 0o600);
|
|
183
|
+
writeFileSync(fd, readFileSync(sourcePath));
|
|
184
|
+
closeSync(fd);
|
|
185
|
+
fd = null;
|
|
186
|
+
renameSync(tmpPath, targetPath);
|
|
187
|
+
}
|
|
188
|
+
catch (err) {
|
|
189
|
+
if (fd !== null) {
|
|
190
|
+
try {
|
|
191
|
+
closeSync(fd);
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
// best-effort close before cleanup
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
try {
|
|
198
|
+
unlinkSync(tmpPath);
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
// best-effort temp cleanup
|
|
202
|
+
}
|
|
203
|
+
throw err;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
function atomicWriteConfigFile(targetPath, content) {
|
|
207
|
+
mkdirSync(dirname(targetPath), { recursive: true });
|
|
208
|
+
const tmpPath = join(dirname(targetPath), `.${basename(targetPath)}.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`);
|
|
209
|
+
let fd = null;
|
|
210
|
+
try {
|
|
211
|
+
fd = openSync(tmpPath, "wx", 0o600);
|
|
212
|
+
writeFileSync(fd, content);
|
|
213
|
+
closeSync(fd);
|
|
214
|
+
fd = null;
|
|
215
|
+
renameSync(tmpPath, targetPath);
|
|
216
|
+
}
|
|
217
|
+
catch (err) {
|
|
218
|
+
if (fd !== null) {
|
|
219
|
+
try {
|
|
220
|
+
closeSync(fd);
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
// best-effort close before cleanup
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
try {
|
|
227
|
+
unlinkSync(tmpPath);
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
// best-effort temp cleanup
|
|
231
|
+
}
|
|
232
|
+
throw err;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
const MOVED_MARKER_SUFFIX = ".MOVED_READPLEASE";
|
|
236
|
+
function nonClobberingSidecarPath(desiredPath) {
|
|
237
|
+
if (!existsSync(desiredPath))
|
|
238
|
+
return desiredPath;
|
|
239
|
+
for (let index = 1; index < Number.MAX_SAFE_INTEGER; index++) {
|
|
240
|
+
const candidate = `${desiredPath}.${index}`;
|
|
241
|
+
if (!existsSync(candidate))
|
|
242
|
+
return candidate;
|
|
243
|
+
}
|
|
244
|
+
throw new Error(`could not find available preservation sidecar path for ${desiredPath}`);
|
|
245
|
+
}
|
|
246
|
+
function movedMarkerContent(targetPath, originalName, originalContent) {
|
|
247
|
+
const header = [
|
|
248
|
+
"// AFT configuration moved.",
|
|
249
|
+
"//",
|
|
250
|
+
"// AFT now reads its configuration from one shared CortexKit location",
|
|
251
|
+
"// instead of a per-agent path. The settings that were in this file have",
|
|
252
|
+
"// been moved to:",
|
|
253
|
+
"//",
|
|
254
|
+
`// ${targetPath}`,
|
|
255
|
+
"//",
|
|
256
|
+
"// Edit that file to change AFT settings. This location is no longer read",
|
|
257
|
+
"// by AFT.",
|
|
258
|
+
"//",
|
|
259
|
+
`// To undo, rename this file back to "${originalName}" (and remove the`,
|
|
260
|
+
"// CortexKit copy above if you want this location to take precedence).",
|
|
261
|
+
"//",
|
|
262
|
+
"// Your original settings are preserved below for reference.",
|
|
263
|
+
"",
|
|
264
|
+
"",
|
|
265
|
+
].join("\n");
|
|
266
|
+
return `${header}${originalContent}`;
|
|
267
|
+
}
|
|
268
|
+
// After the live config is safely at the CortexKit target, rename each legacy
|
|
269
|
+
// source aside to a "<name>.MOVED_READPLEASE" marker so a user editing the old
|
|
270
|
+
// path notices it is no longer read (a copy-in-place leaves a silent stale-edit
|
|
271
|
+
// trap). The marker preserves the original settings and documents how to undo.
|
|
272
|
+
// A failure here is non-fatal: the content is already at the target, so we warn
|
|
273
|
+
// and leave the legacy file in place rather than failing the migration.
|
|
274
|
+
function markLegacySourcesMovedAside(sources, targetPath, logger) {
|
|
275
|
+
const warnings = [];
|
|
276
|
+
const info = logger?.info ?? logger?.log;
|
|
277
|
+
for (const source of sources) {
|
|
278
|
+
const desiredMarkerPath = `${source.path}${MOVED_MARKER_SUFFIX}`;
|
|
279
|
+
const markerPath = nonClobberingSidecarPath(desiredMarkerPath);
|
|
280
|
+
try {
|
|
281
|
+
const original = readFileSync(source.path, "utf-8");
|
|
282
|
+
if (markerPath !== desiredMarkerPath) {
|
|
283
|
+
logger?.warn?.(`Preserving existing legacy AFT marker ${desiredMarkerPath}; writing new marker to ${markerPath}`);
|
|
284
|
+
}
|
|
285
|
+
atomicWriteConfigFile(markerPath, movedMarkerContent(targetPath, basename(source.path), original));
|
|
286
|
+
unlinkSync(source.path);
|
|
287
|
+
info?.(`Moved legacy AFT config ${source.path} aside to ${markerPath}; AFT now reads ${targetPath}`);
|
|
288
|
+
}
|
|
289
|
+
catch (err) {
|
|
290
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
291
|
+
warnings.push(`AFT could not move legacy config ${source.path} aside (${msg}); it is now stale and ignored. Delete it manually — AFT reads ${targetPath}.`);
|
|
292
|
+
logger?.warn?.(`Could not move legacy AFT config ${source.path} aside (${msg}); AFT reads ${targetPath}`);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
return warnings;
|
|
296
|
+
}
|
|
297
|
+
const PRESERVED_OLD_SUFFIX = "_OLD";
|
|
298
|
+
function preservedOldContent(losingHarness, winningHarness, targetPath, originalContent) {
|
|
299
|
+
const winnerLine = winningHarness
|
|
300
|
+
? `// configs differed, so ${winningHarness}'s config won (first harness to run the`
|
|
301
|
+
: "// configs differed, so the config that was migrated first won and is the";
|
|
302
|
+
const header = [
|
|
303
|
+
`// AFT config from ${losingHarness} — preserved, NOT read.`,
|
|
304
|
+
"//",
|
|
305
|
+
"// AFT now reads one shared config for all harnesses. Your OpenCode and Pi",
|
|
306
|
+
winnerLine,
|
|
307
|
+
winningHarness ? "// migration) and is now the active config at:" : "// active config at:",
|
|
308
|
+
"//",
|
|
309
|
+
`// ${targetPath}`,
|
|
310
|
+
"//",
|
|
311
|
+
`// This file holds ${losingHarness}'s previous settings. Merge anything you`,
|
|
312
|
+
"// want to keep into the active config above, then delete this file. AFT does",
|
|
313
|
+
"// not read this path.",
|
|
314
|
+
"",
|
|
315
|
+
"",
|
|
316
|
+
].join("\n");
|
|
317
|
+
return `${header}${originalContent}`;
|
|
318
|
+
}
|
|
319
|
+
// When two harnesses have DIFFERENT legacy configs, the operating harness's
|
|
320
|
+
// config wins (becomes the shared target) and the other's is preserved beside
|
|
321
|
+
// the target as `<target>.<harness>_OLD` so the user can merge it. This replaces
|
|
322
|
+
// the old refuse-and-write-nothing behavior, which dropped the plugin to default
|
|
323
|
+
// config and could wipe a fingerprint-keyed semantic index. `winningHarness` is
|
|
324
|
+
// undefined when the target already existed (we don't know which harness wrote
|
|
325
|
+
// it first), in which case the message describes the existing shared config.
|
|
326
|
+
function preserveDifferingSourceAsOld(source, winningHarness, targetPath, logger) {
|
|
327
|
+
const losingHarness = source.harness ?? "pi";
|
|
328
|
+
const desiredOldPath = `${targetPath}.${losingHarness}${PRESERVED_OLD_SUFFIX}`;
|
|
329
|
+
const oldPath = nonClobberingSidecarPath(desiredOldPath);
|
|
330
|
+
try {
|
|
331
|
+
if (oldPath !== desiredOldPath) {
|
|
332
|
+
logger?.warn?.(`Preserving existing ${losingHarness} config sidecar ${desiredOldPath}; writing new preserved config to ${oldPath}`);
|
|
333
|
+
}
|
|
334
|
+
atomicWriteConfigFile(oldPath, preservedOldContent(losingHarness, winningHarness, targetPath, source.content));
|
|
335
|
+
}
|
|
336
|
+
catch (err) {
|
|
337
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
338
|
+
logger?.warn?.(`Could not preserve ${losingHarness} config as ${oldPath} (${msg})`);
|
|
339
|
+
}
|
|
340
|
+
const usingDesc = winningHarness ? `${winningHarness}'s config` : "the existing shared config";
|
|
341
|
+
return (`AFT found different OpenCode and Pi configs during config unification. ` +
|
|
342
|
+
`Using ${usingDesc} at ${targetPath}; preserved ${losingHarness}'s previous ` +
|
|
343
|
+
`config at ${oldPath} — merge any settings you want to keep, then delete it.`);
|
|
344
|
+
}
|
|
345
|
+
function visibleConfigMigrationWarning(scope, targetPath, paths, reason) {
|
|
346
|
+
const uniquePaths = [...new Set([targetPath, ...paths])];
|
|
347
|
+
return (`AFT ${scope} config migration refused: ${reason}. ` +
|
|
348
|
+
`Legacy and CortexKit config paths collapse to one file, but AFT will not overwrite or merge them automatically. ` +
|
|
349
|
+
`Please consolidate manually into ${targetPath}. Paths: ${uniquePaths.join(" ; ")}`);
|
|
350
|
+
}
|
|
351
|
+
export function migrateAftConfigFile(opts) {
|
|
352
|
+
const warnings = [];
|
|
353
|
+
// A legacy source path can resolve to the SAME file as the CortexKit target
|
|
354
|
+
// (e.g. OPENCODE_CONFIG_DIR pointed at ~/.config/cortexkit, so the legacy
|
|
355
|
+
// `<opencode-config>/aft.jsonc` IS `~/.config/cortexkit/aft.jsonc`). That file
|
|
356
|
+
// is the live, already-migrated config — never a legacy source to copy from,
|
|
357
|
+
// preserve, or (critically) `unlinkSync` aside. Dropping it here prevents the
|
|
358
|
+
// active config from being deleted, which would fall the plugin back to
|
|
359
|
+
// defaults and wipe the fingerprint-keyed semantic index (the MC incident).
|
|
360
|
+
const resolvedTarget = resolve(opts.targetPath);
|
|
361
|
+
const existingSources = opts.legacySources.filter((source) => existsSync(source.path) && resolve(source.path) !== resolvedTarget);
|
|
362
|
+
const info = opts.logger?.info ?? opts.logger?.log;
|
|
363
|
+
if (existingSources.length === 0) {
|
|
364
|
+
return { migrated: false, conflict: false, targetPath: opts.targetPath, warnings };
|
|
365
|
+
}
|
|
366
|
+
mkdirSync(dirname(opts.targetPath), { recursive: true });
|
|
367
|
+
const release = acquireConfigMigrationLock(`${opts.targetPath}.lock`);
|
|
368
|
+
try {
|
|
369
|
+
const sources = existingSources.map((source) => ({
|
|
370
|
+
...source,
|
|
371
|
+
content: readFileSync(source.path, "utf-8"),
|
|
372
|
+
}));
|
|
373
|
+
// Target already exists: first-opened wins permanently. We never overwrite
|
|
374
|
+
// it (whichever harness migrated first owns the shared config). Any legacy
|
|
375
|
+
// source that DIFFERS from it is preserved beside the target as
|
|
376
|
+
// `<target>.<harness>_OLD` for manual merge; matching ones are just cleared.
|
|
377
|
+
if (existsSync(opts.targetPath)) {
|
|
378
|
+
const targetContent = readFileSync(opts.targetPath, "utf-8");
|
|
379
|
+
for (const source of sources) {
|
|
380
|
+
if (fileSemanticsMatch(source.content, targetContent))
|
|
381
|
+
continue;
|
|
382
|
+
warnings.push(preserveDifferingSourceAsOld(source, undefined, opts.targetPath, opts.logger));
|
|
383
|
+
}
|
|
384
|
+
info?.(`AFT ${opts.scope} config already present at ${opts.targetPath}; reconciled ${sources.length} legacy source(s)`);
|
|
385
|
+
warnings.push(...markLegacySourcesMovedAside(sources, opts.targetPath, opts.logger));
|
|
386
|
+
return { migrated: false, conflict: false, targetPath: opts.targetPath, warnings };
|
|
387
|
+
}
|
|
388
|
+
// Target does not exist yet. Pick the winner: the operating harness's source
|
|
389
|
+
// if present, else the first source by list order (back-compat for callers
|
|
390
|
+
// that don't pass operatingHarness). The winner's config becomes the shared
|
|
391
|
+
// target; any OTHER source that differs is preserved as `<target>.<harness>_OLD`.
|
|
392
|
+
const winner = (opts.operatingHarness
|
|
393
|
+
? sources.find((source) => source.harness === opts.operatingHarness)
|
|
394
|
+
: undefined) ?? sources[0];
|
|
395
|
+
atomicCopyConfigFile(winner.path, opts.targetPath);
|
|
396
|
+
info?.(`Migrated AFT ${opts.scope} config from ${winner.path} to ${opts.targetPath}`);
|
|
397
|
+
for (const source of sources) {
|
|
398
|
+
if (source.path === winner.path)
|
|
399
|
+
continue;
|
|
400
|
+
if (fileSemanticsMatch(source.content, winner.content))
|
|
401
|
+
continue;
|
|
402
|
+
warnings.push(preserveDifferingSourceAsOld(source, winner.harness, opts.targetPath, opts.logger));
|
|
403
|
+
}
|
|
404
|
+
warnings.push(...markLegacySourcesMovedAside(sources, opts.targetPath, opts.logger));
|
|
405
|
+
return {
|
|
406
|
+
migrated: true,
|
|
407
|
+
conflict: false,
|
|
408
|
+
sourcePath: winner.path,
|
|
409
|
+
targetPath: opts.targetPath,
|
|
410
|
+
warnings,
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
catch (err) {
|
|
414
|
+
const message = visibleConfigMigrationWarning(opts.scope, opts.targetPath, existingSources.map((source) => source.path), `migration failed (${err instanceof Error ? err.message : String(err)})`);
|
|
415
|
+
warnings.push(message);
|
|
416
|
+
opts.logger?.warn?.(message);
|
|
417
|
+
return { migrated: false, conflict: true, targetPath: opts.targetPath, warnings };
|
|
418
|
+
}
|
|
419
|
+
finally {
|
|
420
|
+
release();
|
|
421
|
+
}
|
|
422
|
+
}
|
|
41
423
|
function tail(value) {
|
|
42
424
|
if (!value)
|
|
43
425
|
return "";
|
package/dist/migration.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../src/migration.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../src/migration.ts"],"names":[],"mappings":"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"}
|
package/dist/onnx-runtime.d.ts
CHANGED
|
@@ -4,12 +4,10 @@
|
|
|
4
4
|
* Downloads the CPU-only ONNX Runtime from Microsoft's GitHub releases.
|
|
5
5
|
* The library is cached in the storage directory alongside semantic index data.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* Phase A through Phase E. This rewrite brings ONNX onto the same security
|
|
12
|
-
* floor:
|
|
7
|
+
* Security hardening: an earlier implementation used `curl` with no size cap,
|
|
8
|
+
* no archive containment validation, no install lock, and no integrity
|
|
9
|
+
* verification — an install path that bypassed every defense the LSP GitHub
|
|
10
|
+
* installer already had. This brings ONNX onto the same security floor:
|
|
13
11
|
*
|
|
14
12
|
* - Streaming size cap via fetch + ReadableStream transformer (`MAX_DOWNLOAD_BYTES`).
|
|
15
13
|
* - Streaming SHA-256 of the downloaded archive, persisted in `.aft-onnx-installed`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onnx-runtime.d.ts","sourceRoot":"","sources":["../src/onnx-runtime.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"onnx-runtime.d.ts","sourceRoot":"","sources":["../src/onnx-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAIH,OAAO,EAGL,YAAY,EAeb,MAAM,SAAS,CAAC;AA4BjB,wFAAwF;AACxF,UAAU,eAAe;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,KAAK,GAAG,KAAK,CAAC;CAC5B;AAkED,4DAA4D;AAC5D,wBAAgB,0BAA0B,IAAI,OAAO,CAEpD;AAED,6EAA6E;AAC7E,wBAAgB,oBAAoB,IAAI,MAAM,CAQ7C;AAED;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiGlF;AAED;;;;;;GAMG;AACH,iBAAS,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CA8C9D;AAED,iBAAS,gCAAgC,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAW9D;AAED,iBAAS,4BAA4B,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAG/E;AAiBD,iBAAS,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO9D;AA0BD;;;;;;;;GAQG;AACH,iBAAS,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAyCzE;AAED,iBAAS,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAMzD;AA8BD,iBAAS,2BAA2B,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAQnF;AAED,iBAAS,qBAAqB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAyG9D;AA0PD,iBAAS,iBAAiB,CACxB,IAAI,EAAE,eAAe,EACrB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EAAE,EACnB,QAAQ,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,EACjD,QAAQ,GAAE,OAAO,YAA2B,GAC3C,IAAI,CA6DN;AAwFD;;;;;GAKG;AACH,iBAAS,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAgD9C;AAED,iBAAS,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAgC3C;AAoCD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAS3D;AAED;;;;GAIG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;CAgBpB,CAAC"}
|
package/dist/onnx-runtime.js
CHANGED
|
@@ -4,12 +4,10 @@
|
|
|
4
4
|
* Downloads the CPU-only ONNX Runtime from Microsoft's GitHub releases.
|
|
5
5
|
* The library is cached in the storage directory alongside semantic index data.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* Phase A through Phase E. This rewrite brings ONNX onto the same security
|
|
12
|
-
* floor:
|
|
7
|
+
* Security hardening: an earlier implementation used `curl` with no size cap,
|
|
8
|
+
* no archive containment validation, no install lock, and no integrity
|
|
9
|
+
* verification — an install path that bypassed every defense the LSP GitHub
|
|
10
|
+
* installer already had. This brings ONNX onto the same security floor:
|
|
13
11
|
*
|
|
14
12
|
* - Streaming size cap via fetch + ReadableStream transformer (`MAX_DOWNLOAD_BYTES`).
|
|
15
13
|
* - Streaming SHA-256 of the downloaded archive, persisted in `.aft-onnx-installed`.
|
|
@@ -41,7 +39,7 @@ import { error, log, warn } from "./active-logger.js";
|
|
|
41
39
|
import { PLATFORM_ARCH_MAP } from "./platform.js";
|
|
42
40
|
const ORT_VERSION = "1.24.4";
|
|
43
41
|
const ORT_REPO = "microsoft/onnxruntime";
|
|
44
|
-
//
|
|
42
|
+
// Streaming + extraction size caps.
|
|
45
43
|
//
|
|
46
44
|
// ONNX Runtime archives are around 60–80 MB on most platforms and 250 MB
|
|
47
45
|
// extracted (Windows ships extra debug binaries). 256 MB and 1 GiB give
|
|
@@ -155,7 +153,7 @@ export async function ensureOnnxRuntime(storageDir) {
|
|
|
155
153
|
const resolvedOrtDir = resolveCachedOnnxRuntimeDir(ortVersionDir, libName);
|
|
156
154
|
const libPath = join(resolvedOrtDir, libName);
|
|
157
155
|
if (existsSync(libPath)) {
|
|
158
|
-
//
|
|
156
|
+
// TOFU: if we recorded a hash for this version,
|
|
159
157
|
// verify the library still matches. A mismatch means tampering or
|
|
160
158
|
// partial install corruption. Refuse to use it and let the caller
|
|
161
159
|
// either retry the download (after the user clears the cache) or
|
|
@@ -200,7 +198,7 @@ export async function ensureOnnxRuntime(storageDir) {
|
|
|
200
198
|
warn(`ONNX Runtime auto-download not available for ${process.platform}/${process.arch}. Install manually: ${getManualInstallHint()}`);
|
|
201
199
|
return null;
|
|
202
200
|
}
|
|
203
|
-
//
|
|
201
|
+
// Serialize concurrent installs.
|
|
204
202
|
//
|
|
205
203
|
// Two AFT plugin instances starting at the same time would otherwise both
|
|
206
204
|
// download and extract into overlapping temp dirs and clobber each other.
|
|
@@ -607,7 +605,7 @@ async function downloadFileWithCap(url, destPath) {
|
|
|
607
605
|
* Validate that every file/dir under `stagingRoot` is contained inside it
|
|
608
606
|
* AND that the total extracted bytes do not exceed `MAX_EXTRACT_BYTES`.
|
|
609
607
|
*
|
|
610
|
-
*
|
|
608
|
+
* zip-slip + symlink containment + decompression-bomb
|
|
611
609
|
* defense. tar and unzip both can produce paths like `../../etc/passwd`;
|
|
612
610
|
* Windows tar.exe and unzip can also produce symlinks that point outside
|
|
613
611
|
* the destination. We walk the tree post-extraction and reject anything
|
|
@@ -668,9 +666,9 @@ async function downloadOnnxRuntime(info, targetDir) {
|
|
|
668
666
|
try {
|
|
669
667
|
mkdirSync(tmpDir, { recursive: true });
|
|
670
668
|
const archivePath = join(tmpDir, `onnxruntime.${info.archiveType}`);
|
|
671
|
-
//
|
|
669
|
+
// Download with a streaming size cap.
|
|
672
670
|
await downloadFileWithCap(url, archivePath);
|
|
673
|
-
//
|
|
671
|
+
// Hash the archive for TOFU.
|
|
674
672
|
const archiveSha256 = sha256File(archivePath);
|
|
675
673
|
log(`ONNX Runtime archive sha256=${archiveSha256}`);
|
|
676
674
|
// Extract.
|
|
@@ -691,7 +689,7 @@ async function downloadOnnxRuntime(info, targetDir) {
|
|
|
691
689
|
catch {
|
|
692
690
|
// ignore
|
|
693
691
|
}
|
|
694
|
-
//
|
|
692
|
+
// Containment + size-bomb check.
|
|
695
693
|
validateExtractedTree(tmpDir);
|
|
696
694
|
// Find and copy the library file.
|
|
697
695
|
const extractedDir = join(tmpDir, info.assetName, "lib");
|
|
@@ -726,7 +724,7 @@ async function downloadOnnxRuntime(info, targetDir) {
|
|
|
726
724
|
}
|
|
727
725
|
}
|
|
728
726
|
copyOnnxLibraries(info, extractedDir, targetDir, realFiles, symlinks);
|
|
729
|
-
//
|
|
727
|
+
// Persist version + archive sha256 for TOFU on
|
|
730
728
|
// future sessions. Hash the actual main library file (not the
|
|
731
729
|
// archive) because that's what we'll re-hash on the next ensure call.
|
|
732
730
|
const libPath = join(targetDir, info.libName);
|
|
@@ -826,7 +824,7 @@ function copyOnnxLibraries(info, extractedDir, targetDir, realFiles, symlinks, c
|
|
|
826
824
|
}
|
|
827
825
|
async function extractZipArchive(archivePath, destinationDir) {
|
|
828
826
|
if (process.platform === "win32") {
|
|
829
|
-
//
|
|
827
|
+
// Avoid PowerShell. Even via execFileSync, PowerShell
|
|
830
828
|
// applies its own quoting rules to `$args[N]` lookups that could allow
|
|
831
829
|
// attacker-controlled fragments to escape into command interpretation.
|
|
832
830
|
// tar.exe ships in System32 on Windows 10 build 17063+ — execFileSync
|