@prestyj/core 5.25.0 → 5.25.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/{chunk-GDM5Q7SA.js → chunk-THUBQC6I.js} +101 -13
- package/dist/chunk-THUBQC6I.js.map +1 -0
- package/dist/index.cjs +108 -18
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +30 -4
- package/dist/index.d.ts +30 -4
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/model-registry.cjs +4 -2
- package/dist/model-registry.cjs.map +1 -1
- package/dist/model-registry.js +1 -1
- package/package.json +2 -2
- package/dist/chunk-GDM5Q7SA.js.map +0 -1
|
@@ -222,7 +222,7 @@ async function refreshKimiToken(refreshToken) {
|
|
|
222
222
|
|
|
223
223
|
// src/auth-storage.ts
|
|
224
224
|
import fs4 from "fs/promises";
|
|
225
|
-
import { readFileSync as
|
|
225
|
+
import { readFileSync as readFileSync3 } from "fs";
|
|
226
226
|
import crypto5 from "crypto";
|
|
227
227
|
|
|
228
228
|
// src/oauth/anthropic.ts
|
|
@@ -248,6 +248,7 @@ async function generatePKCE() {
|
|
|
248
248
|
|
|
249
249
|
// src/claude-code-version.ts
|
|
250
250
|
import fs2 from "fs/promises";
|
|
251
|
+
import { mkdirSync as mkdirSync2, readFileSync as readFileSync2, writeFileSync as writeFileSync2 } from "fs";
|
|
251
252
|
import path3 from "path";
|
|
252
253
|
|
|
253
254
|
// src/logger.ts
|
|
@@ -375,19 +376,41 @@ function closeLogger(opts) {
|
|
|
375
376
|
|
|
376
377
|
// src/claude-code-version.ts
|
|
377
378
|
var NPM_LATEST_URL = "https://registry.npmjs.org/@anthropic-ai/claude-code/latest";
|
|
378
|
-
var
|
|
379
|
+
var CACHE_FRESH_MS = 60 * 60 * 1e3;
|
|
380
|
+
var CACHE_HARD_MS = 24 * 60 * 60 * 1e3;
|
|
379
381
|
var FETCH_TIMEOUT_MS = 3e3;
|
|
380
|
-
var FALLBACK_VERSION = "2.1.
|
|
382
|
+
var FALLBACK_VERSION = "2.1.280";
|
|
381
383
|
var memoryCache = null;
|
|
382
384
|
var inflight = null;
|
|
385
|
+
var backgroundRefresh = null;
|
|
386
|
+
var versionFloor = null;
|
|
383
387
|
function cachePath() {
|
|
384
388
|
return path3.join(getAppPaths().agentDir, "claude-code-version.json");
|
|
385
389
|
}
|
|
390
|
+
function compareClaudeCodeVersions(a, b) {
|
|
391
|
+
const parse = (v) => v.split(".").map((part) => Number.parseInt(part, 10)).map((n) => Number.isFinite(n) ? n : 0);
|
|
392
|
+
const left = parse(a);
|
|
393
|
+
const right = parse(b);
|
|
394
|
+
for (let i = 0; i < Math.max(left.length, right.length); i += 1) {
|
|
395
|
+
const diff = (left[i] ?? 0) - (right[i] ?? 0);
|
|
396
|
+
if (diff !== 0) return diff;
|
|
397
|
+
}
|
|
398
|
+
return 0;
|
|
399
|
+
}
|
|
400
|
+
function applyFloor(version) {
|
|
401
|
+
if (!versionFloor) return version;
|
|
402
|
+
return compareClaudeCodeVersions(versionFloor, version) > 0 ? versionFloor : version;
|
|
403
|
+
}
|
|
386
404
|
async function readDiskCache() {
|
|
387
405
|
try {
|
|
388
406
|
const raw = await fs2.readFile(cachePath(), "utf-8");
|
|
389
407
|
const parsed = JSON.parse(raw);
|
|
390
408
|
if (typeof parsed.version === "string" && typeof parsed.fetchedAt === "number") {
|
|
409
|
+
if (typeof parsed.minVersion === "string") {
|
|
410
|
+
if (!versionFloor || compareClaudeCodeVersions(parsed.minVersion, versionFloor) > 0) {
|
|
411
|
+
versionFloor = parsed.minVersion;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
391
414
|
return parsed;
|
|
392
415
|
}
|
|
393
416
|
return null;
|
|
@@ -398,7 +421,11 @@ async function readDiskCache() {
|
|
|
398
421
|
async function writeDiskCache(data) {
|
|
399
422
|
try {
|
|
400
423
|
await fs2.mkdir(getAppPaths().agentDir, { recursive: true, mode: 448 });
|
|
401
|
-
await fs2.writeFile(
|
|
424
|
+
await fs2.writeFile(
|
|
425
|
+
cachePath(),
|
|
426
|
+
JSON.stringify({ ...data, ...versionFloor ? { minVersion: versionFloor } : {} }),
|
|
427
|
+
{ mode: 384 }
|
|
428
|
+
);
|
|
402
429
|
} catch (err) {
|
|
403
430
|
log(
|
|
404
431
|
"WARN",
|
|
@@ -424,6 +451,19 @@ async function fetchLatest() {
|
|
|
424
451
|
clearTimeout(timer);
|
|
425
452
|
}
|
|
426
453
|
}
|
|
454
|
+
function refreshInBackground() {
|
|
455
|
+
if (backgroundRefresh) return;
|
|
456
|
+
backgroundRefresh = (async () => {
|
|
457
|
+
const fetched = await fetchLatest();
|
|
458
|
+
if (fetched) {
|
|
459
|
+
await writeDiskCache({ version: fetched, fetchedAt: Date.now() });
|
|
460
|
+
memoryCache = { version: applyFloor(fetched), expiresAt: Date.now() + CACHE_FRESH_MS };
|
|
461
|
+
}
|
|
462
|
+
})().catch(() => {
|
|
463
|
+
}).finally(() => {
|
|
464
|
+
backgroundRefresh = null;
|
|
465
|
+
});
|
|
466
|
+
}
|
|
427
467
|
async function getClaudeCodeVersion() {
|
|
428
468
|
if (memoryCache && Date.now() < memoryCache.expiresAt) {
|
|
429
469
|
return memoryCache.version;
|
|
@@ -431,18 +471,26 @@ async function getClaudeCodeVersion() {
|
|
|
431
471
|
if (inflight) return inflight;
|
|
432
472
|
inflight = (async () => {
|
|
433
473
|
const disk = await readDiskCache();
|
|
434
|
-
const
|
|
435
|
-
if (disk &&
|
|
436
|
-
|
|
437
|
-
|
|
474
|
+
const age = disk ? Date.now() - disk.fetchedAt : Infinity;
|
|
475
|
+
if (disk && age < CACHE_FRESH_MS) {
|
|
476
|
+
const version = applyFloor(disk.version);
|
|
477
|
+
memoryCache = { version, expiresAt: Date.now() + CACHE_FRESH_MS };
|
|
478
|
+
return version;
|
|
479
|
+
}
|
|
480
|
+
if (disk && age < CACHE_HARD_MS) {
|
|
481
|
+
const version = applyFloor(disk.version);
|
|
482
|
+
memoryCache = { version, expiresAt: Date.now() + 5 * 60 * 1e3 };
|
|
483
|
+
refreshInBackground();
|
|
484
|
+
return version;
|
|
438
485
|
}
|
|
439
486
|
const fetched = await fetchLatest();
|
|
440
487
|
if (fetched) {
|
|
441
488
|
await writeDiskCache({ version: fetched, fetchedAt: Date.now() });
|
|
442
|
-
|
|
443
|
-
|
|
489
|
+
const version = applyFloor(fetched);
|
|
490
|
+
memoryCache = { version, expiresAt: Date.now() + CACHE_FRESH_MS };
|
|
491
|
+
return version;
|
|
444
492
|
}
|
|
445
|
-
const resolved = disk?.version ?? FALLBACK_VERSION;
|
|
493
|
+
const resolved = applyFloor(disk?.version ?? FALLBACK_VERSION);
|
|
446
494
|
memoryCache = { version: resolved, expiresAt: Date.now() + 5 * 60 * 1e3 };
|
|
447
495
|
log(
|
|
448
496
|
"WARN",
|
|
@@ -457,6 +505,44 @@ async function getClaudeCodeVersion() {
|
|
|
457
505
|
inflight = null;
|
|
458
506
|
}
|
|
459
507
|
}
|
|
508
|
+
var REQUIRED_VERSION_PATTERN = /version\s+(\d+(?:\.\d+)+)\s+or\s+newer\s+is\s+required/i;
|
|
509
|
+
function recordRequiredClaudeCodeVersion(message) {
|
|
510
|
+
const required = REQUIRED_VERSION_PATTERN.exec(message ?? "")?.[1];
|
|
511
|
+
if (!required) return null;
|
|
512
|
+
if (versionFloor && compareClaudeCodeVersions(required, versionFloor) <= 0) return versionFloor;
|
|
513
|
+
versionFloor = required;
|
|
514
|
+
memoryCache = null;
|
|
515
|
+
log(
|
|
516
|
+
"WARN",
|
|
517
|
+
"claude-code-version",
|
|
518
|
+
`Provider requires Claude Code >= ${required}; pinning User-Agent floor`
|
|
519
|
+
);
|
|
520
|
+
try {
|
|
521
|
+
const dir = getAppPaths().agentDir;
|
|
522
|
+
mkdirSync2(dir, { recursive: true, mode: 448 });
|
|
523
|
+
let existing = {};
|
|
524
|
+
try {
|
|
525
|
+
existing = JSON.parse(readFileSync2(cachePath(), "utf-8"));
|
|
526
|
+
} catch {
|
|
527
|
+
}
|
|
528
|
+
writeFileSync2(
|
|
529
|
+
cachePath(),
|
|
530
|
+
JSON.stringify({
|
|
531
|
+
version: existing.version ?? required,
|
|
532
|
+
fetchedAt: existing.fetchedAt ?? 0,
|
|
533
|
+
minVersion: required
|
|
534
|
+
}),
|
|
535
|
+
{ mode: 384 }
|
|
536
|
+
);
|
|
537
|
+
} catch (err) {
|
|
538
|
+
log(
|
|
539
|
+
"WARN",
|
|
540
|
+
"claude-code-version",
|
|
541
|
+
`Failed to persist required version: ${err instanceof Error ? err.message : String(err)}`
|
|
542
|
+
);
|
|
543
|
+
}
|
|
544
|
+
return required;
|
|
545
|
+
}
|
|
460
546
|
async function getClaudeCliUserAgent() {
|
|
461
547
|
const version = await getClaudeCodeVersion();
|
|
462
548
|
return `claude-cli/${version} (external, cli)`;
|
|
@@ -1444,7 +1530,7 @@ function activeBaseUrlEntry(data, provider) {
|
|
|
1444
1530
|
}
|
|
1445
1531
|
function readStoredBaseUrlSync(authFile, provider) {
|
|
1446
1532
|
try {
|
|
1447
|
-
const data = JSON.parse(
|
|
1533
|
+
const data = JSON.parse(readFileSync3(authFile, "utf-8"));
|
|
1448
1534
|
return activeBaseUrlEntry(data, provider)?.baseUrl;
|
|
1449
1535
|
} catch {
|
|
1450
1536
|
return void 0;
|
|
@@ -2613,7 +2699,9 @@ export {
|
|
|
2613
2699
|
log,
|
|
2614
2700
|
registerLogCleanup,
|
|
2615
2701
|
closeLogger,
|
|
2702
|
+
compareClaudeCodeVersions,
|
|
2616
2703
|
getClaudeCodeVersion,
|
|
2704
|
+
recordRequiredClaudeCodeVersion,
|
|
2617
2705
|
getClaudeCliUserAgent,
|
|
2618
2706
|
loginAnthropic,
|
|
2619
2707
|
refreshAnthropicToken,
|
|
@@ -2657,4 +2745,4 @@ export {
|
|
|
2657
2745
|
getSummaryModel,
|
|
2658
2746
|
getFastModel
|
|
2659
2747
|
};
|
|
2660
|
-
//# sourceMappingURL=chunk-
|
|
2748
|
+
//# sourceMappingURL=chunk-THUBQC6I.js.map
|