gm-qwen 2.0.972 → 2.0.973
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/bin/bootstrap.js +17 -33
- package/gm.json +1 -1
- package/package.json +1 -1
package/bin/bootstrap.js
CHANGED
|
@@ -345,58 +345,42 @@ async function bootstrap(opts) {
|
|
|
345
345
|
const partialPath = `${finalPath}.partial`;
|
|
346
346
|
|
|
347
347
|
if (fs.existsSync(finalPath) && fs.existsSync(okSentinel)) {
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
348
|
+
if (expectedSha) {
|
|
349
|
+
const actualSha = sha256OfFileSync(finalPath);
|
|
350
|
+
if (actualSha === expectedSha) {
|
|
351
|
+
if (!opts.silent) log(`decision: hit reason: sha-match v${version} (${finalPath})`);
|
|
352
|
+
return finalPath;
|
|
353
|
+
}
|
|
354
|
+
log(`decision: fetch reason: cache-hit-sha-mismatch (dir=v${version} expected ${expectedSha.slice(0,12)}… got ${(actualSha||'').slice(0,12)}…)`);
|
|
351
355
|
writeBootstrapError({
|
|
352
356
|
expected_version: version,
|
|
353
|
-
cached_version:
|
|
354
|
-
error_phase: 'cache-hit-
|
|
355
|
-
error_message: `cached binary at ${finalPath}
|
|
357
|
+
cached_version: null,
|
|
358
|
+
error_phase: 'cache-hit-sha-mismatch',
|
|
359
|
+
error_message: `cached binary at ${finalPath} sha=${actualSha} but manifest expects ${expectedSha}`,
|
|
356
360
|
});
|
|
357
361
|
try { fs.unlinkSync(finalPath); } catch (_) {}
|
|
358
362
|
try { fs.unlinkSync(okSentinel); } catch (_) {}
|
|
359
363
|
} else {
|
|
360
|
-
if (!opts.silent) log(`
|
|
361
|
-
proactiveKillForNewInstall(version, finalPath);
|
|
362
|
-
pruneOldVersions(root, version, readRtkVersion(wrapperDir));
|
|
364
|
+
if (!opts.silent) log(`decision: hit reason: sentinel+no-sha-manifest (${finalPath})`);
|
|
363
365
|
return finalPath;
|
|
364
366
|
}
|
|
365
367
|
}
|
|
366
368
|
|
|
367
369
|
if (healIfShaMatches(finalPath, expectedSha, okSentinel, partialPath, 'plugkit')) {
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
writeBootstrapError({
|
|
372
|
-
expected_version: version,
|
|
373
|
-
cached_version: actualVersion,
|
|
374
|
-
error_phase: 'cache-heal-pin-mismatch',
|
|
375
|
-
error_message: `healed binary at ${finalPath} reports --version=${actualVersion} but cache dir pins v${version}`,
|
|
376
|
-
});
|
|
377
|
-
try { fs.unlinkSync(finalPath); } catch (_) {}
|
|
378
|
-
try { fs.unlinkSync(okSentinel); } catch (_) {}
|
|
379
|
-
} else {
|
|
380
|
-
if (!opts.silent) log(`cache heal (sha match): ${finalPath}${actualVersion ? ` (matches pin v${version})` : ''}`);
|
|
381
|
-
proactiveKillForNewInstall(version, finalPath);
|
|
382
|
-
pruneOldVersions(root, version, readRtkVersion(wrapperDir));
|
|
383
|
-
spawnDetachedRtkFetch(wrapperDir);
|
|
384
|
-
return finalPath;
|
|
385
|
-
}
|
|
370
|
+
if (!opts.silent) log(`decision: heal reason: sha-match (${finalPath})`);
|
|
371
|
+
spawnDetachedRtkFetch(wrapperDir);
|
|
372
|
+
return finalPath;
|
|
386
373
|
}
|
|
387
374
|
|
|
388
375
|
const lockPath = path.join(verDir, '.lock');
|
|
389
376
|
acquireLock(lockPath);
|
|
390
377
|
try {
|
|
391
378
|
if (fs.existsSync(finalPath) && fs.existsSync(okSentinel)) {
|
|
392
|
-
|
|
393
|
-
pruneOldVersions(root, version, readRtkVersion(wrapperDir));
|
|
379
|
+
log(`decision: hit reason: lock-race-resolved (${finalPath})`);
|
|
394
380
|
return finalPath;
|
|
395
381
|
}
|
|
396
382
|
if (healIfShaMatches(finalPath, expectedSha, okSentinel, partialPath, 'plugkit')) {
|
|
397
|
-
log(`
|
|
398
|
-
proactiveKillForNewInstall(version, finalPath);
|
|
399
|
-
pruneOldVersions(root, version, readRtkVersion(wrapperDir));
|
|
383
|
+
log(`decision: heal reason: sha-match-under-lock (${finalPath})`);
|
|
400
384
|
spawnDetachedRtkFetch(wrapperDir);
|
|
401
385
|
return finalPath;
|
|
402
386
|
}
|
|
@@ -453,7 +437,7 @@ async function bootstrap(opts) {
|
|
|
453
437
|
}
|
|
454
438
|
|
|
455
439
|
fs.writeFileSync(okSentinel, new Date().toISOString());
|
|
456
|
-
log(`
|
|
440
|
+
log(`decision: fetch reason: install-complete (${finalPath})`);
|
|
457
441
|
obsEvent('bootstrap', 'install.done', { path: finalPath, version, kind: 'plugkit' });
|
|
458
442
|
proactiveKillForNewInstall(version, finalPath);
|
|
459
443
|
pruneOldVersions(root, version, readRtkVersion(wrapperDir));
|
package/gm.json
CHANGED