tokentracker-cli 0.80.0 → 0.80.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.
Files changed (71) hide show
  1. package/dashboard/dist/assets/{AchievementBadge-D9jOMhlD.js → AchievementBadge-D617bvS9.js} +1 -1
  2. package/dashboard/dist/assets/{AchievementsPage-DuswZa4g.js → AchievementsPage-mzE76Ah9.js} +2 -2
  3. package/dashboard/dist/assets/{AchievementsSection-BJPeE1Uq.js → AchievementsSection-8CYGBoPJ.js} +1 -1
  4. package/dashboard/dist/assets/{BadgeDetailModal-nNPIsy6i.js → BadgeDetailModal-DM3veVmW.js} +1 -1
  5. package/dashboard/dist/assets/{Card-VENq8eEp.js → Card-DWONuizy.js} +1 -1
  6. package/dashboard/dist/assets/{ClawdAnimated-Cq7TW0vv.js → ClawdAnimated-CGQXyWuH.js} +1 -1
  7. package/dashboard/dist/assets/{CommunityStatsModal-y2VftQuq.js → CommunityStatsModal-B5yDmJ0o.js} +1 -1
  8. package/dashboard/dist/assets/{ConfirmModal-CWgnJ4hm.js → ConfirmModal-d4wpsMPW.js} +1 -1
  9. package/dashboard/dist/assets/{Controls-BUQ_iZZq.js → Controls-CMSqknaB.js} +1 -1
  10. package/dashboard/dist/assets/{DashboardPage-WkiygMmq.js → DashboardPage-Cw6lmVSg.js} +1 -1
  11. package/dashboard/dist/assets/{DevicePage-Dh3XDtNx.js → DevicePage-CsPSjSLH.js} +1 -1
  12. package/dashboard/dist/assets/{DialogClose-KTFU_B3F.js → DialogClose-Cbs-z783.js} +1 -1
  13. package/dashboard/dist/assets/DialogDescription-B0fmBJxQ.js +1 -0
  14. package/dashboard/dist/assets/{DialogTitle-bza2pIek.js → DialogTitle-C4mJiIQW.js} +1 -1
  15. package/dashboard/dist/assets/{FadeIn-Dm3FVNfr.js → FadeIn-xOJwCmZ8.js} +1 -1
  16. package/dashboard/dist/assets/{HeaderGithubStar-CbSElzLt.js → HeaderGithubStar-oRz4rfC8.js} +1 -1
  17. package/dashboard/dist/assets/{IpCheckPage-BDON7VCU.js → IpCheckPage-CTwL-Zmz.js} +1 -1
  18. package/dashboard/dist/assets/{LandingPage-Ck3CwZrt.js → LandingPage-CqYJ3sZh.js} +1 -1
  19. package/dashboard/dist/assets/{LeaderboardAvatar-GVUy0Ynq.js → LeaderboardAvatar-CuF6Kzkj.js} +1 -1
  20. package/dashboard/dist/assets/{LeaderboardPage-C19Rkt44.js → LeaderboardPage-BvOPIj-b.js} +2 -2
  21. package/dashboard/dist/assets/{LeaderboardProfileModal-QcEq_o6E.js → LeaderboardProfileModal-DVXuKkRN.js} +3 -3
  22. package/dashboard/dist/assets/{LeaderboardProfilePage-pFhI6292.js → LeaderboardProfilePage-RE1CPqzM.js} +1 -1
  23. package/dashboard/dist/assets/{LimitsPage-ChV3Qezd.js → LimitsPage-BovkRgac.js} +1 -1
  24. package/dashboard/dist/assets/{LocalOnlyNotice-ALvpjznF.js → LocalOnlyNotice-CTFFU_ip.js} +1 -1
  25. package/dashboard/dist/assets/{LoginPage-CL-QrJxU.js → LoginPage-mguBCTBZ.js} +1 -1
  26. package/dashboard/dist/assets/{PetPage-DSuvdGgd.js → PetPage-C5KLH6Fm.js} +1 -1
  27. package/dashboard/dist/assets/{PopoverPopup-jSDQ87Bi.js → PopoverPopup-CLDh5yIk.js} +1 -1
  28. package/dashboard/dist/assets/{ResetPasswordPage-Dk2IDAJq.js → ResetPasswordPage-DnhgHQrV.js} +1 -1
  29. package/dashboard/dist/assets/{Select-Cz6WTj7D.js → Select-DPSaPIlz.js} +1 -1
  30. package/dashboard/dist/assets/{SelectItemText-BZyRjWCM.js → SelectItemText-jIBbXpqi.js} +1 -1
  31. package/dashboard/dist/assets/{SettingsPage-CANz8HMM.js → SettingsPage-BK0IqSjg.js} +1 -1
  32. package/dashboard/dist/assets/{SkillsPage-WZkQG_83.js → SkillsPage-BQNoMpL2.js} +1 -1
  33. package/dashboard/dist/assets/{WidgetsPage-BEyJ62NV.js → WidgetsPage-308d8icu.js} +1 -1
  34. package/dashboard/dist/assets/{WrappedPage-Ck_dOx_w.js → WrappedPage-T720sQ9S.js} +1 -1
  35. package/dashboard/dist/assets/{agent-logos-DpjHiAbZ.js → agent-logos-Blo5C96d.js} +1 -1
  36. package/dashboard/dist/assets/{arrow-up-right-C4iYPBtK.js → arrow-up-right-DKz2Ua6U.js} +1 -1
  37. package/dashboard/dist/assets/check-fF6lQGN-.js +1 -0
  38. package/dashboard/dist/assets/{copy-CHJ-38K6.js → copy-DcUFG0PD.js} +1 -1
  39. package/dashboard/dist/assets/{download-BSeG8u17.js → download-CNK1wtxV.js} +1 -1
  40. package/dashboard/dist/assets/{flame-DeHwKcE-.js → flame-BEhJZRaZ.js} +1 -1
  41. package/dashboard/dist/assets/{format-tokens-B-MJYJyp.js → format-tokens-Bsfbd8nj.js} +1 -1
  42. package/dashboard/dist/assets/{info-DA_0xr_o.js → info-DRJLv-aV.js} +1 -1
  43. package/dashboard/dist/assets/{link-2-noUH83Lc.js → link-2-C0GdaANY.js} +1 -1
  44. package/dashboard/dist/assets/{loader-circle-wL7KZtm0.js → loader-circle-F9ymYeor.js} +1 -1
  45. package/dashboard/dist/assets/{main-BHfJDFcu.js → main-CThKxvKx.js} +2 -2
  46. package/dashboard/dist/assets/{provider-display-DxIClOGM.js → provider-display-D4NdFjHN.js} +1 -1
  47. package/dashboard/dist/assets/{trash-2-B8TPUmxZ.js → trash-2-D9vulGMW.js} +1 -1
  48. package/dashboard/dist/assets/{use-community-stats-CXD3MRRE.js → use-community-stats-BU4dXEOM.js} +1 -1
  49. package/dashboard/dist/assets/{use-limits-display-prefs-C2pJVYTn.js → use-limits-display-prefs-Bx2VJhwl.js} +1 -1
  50. package/dashboard/dist/assets/{use-native-settings-BeOBLEZa.js → use-native-settings-BSXaxaTC.js} +1 -1
  51. package/dashboard/dist/assets/{use-ordered-list-kAtW8pJm.js → use-ordered-list-OA0HwwEL.js} +1 -1
  52. package/dashboard/dist/assets/{use-quality-per-dollar-pref-CFZUZM3S.js → use-quality-per-dollar-pref-Bqooc4FA.js} +1 -1
  53. package/dashboard/dist/assets/{use-transform-B9YwpyKi.js → use-transform-CZ9FdRGw.js} +1 -1
  54. package/dashboard/dist/assets/{use-usage-limits-DSX5iKPE.js → use-usage-limits-Ct_A4wTr.js} +1 -1
  55. package/dashboard/dist/assets/{useCurrency-CKg5K4Nj.js → useCurrency-D4bvdaFB.js} +1 -1
  56. package/dashboard/dist/assets/{useScrollLock-DyyY_Vyt.js → useScrollLock-ZsWO-GoL.js} +1 -1
  57. package/dashboard/dist/assets/useTokenFormat-B3huMEws.js +1 -0
  58. package/dashboard/dist/assets/{zap-B69x9NCT.js → zap-C9Mp-GNU.js} +1 -1
  59. package/dashboard/dist/index.html +1 -1
  60. package/dashboard/dist/share.html +1 -1
  61. package/package.json +1 -1
  62. package/src/commands/init.js +596 -6
  63. package/src/commands/sync.js +16 -1
  64. package/src/lib/codex-config.js +135 -40
  65. package/src/lib/codex-context-breakdown.js +123 -43
  66. package/src/lib/codex-rollout-parser.js +329 -32
  67. package/src/lib/pricing/seed-snapshot.json +1 -1
  68. package/src/lib/rollout.js +167 -8
  69. package/dashboard/dist/assets/DialogDescription-DIra288n.js +0 -1
  70. package/dashboard/dist/assets/check-BkPUxPZV.js +0 -1
  71. package/dashboard/dist/assets/useTokenFormat-FfTjEH_m.js +0 -1
@@ -1232,10 +1232,12 @@ function spawnDetached(argv) {
1232
1232
  } catch (_) {}
1233
1233
  }
1234
1234
 
1235
- function resolveMaybeHome(p) {
1235
+ function resolveMaybeHome(p, baseDir = null) {
1236
1236
  if (typeof p !== 'string') return null;
1237
1237
  if (p.startsWith('~/')) return path.join(home, p.slice(2));
1238
- return path.resolve(p);
1238
+ if (p.startsWith('~\\\\')) return path.join(home, p.slice(2));
1239
+ if (path.isAbsolute(p)) return p;
1240
+ return path.resolve(baseDir || process.cwd(), p);
1239
1241
  }
1240
1242
 
1241
1243
  function isSelfNotify(cmd) {
@@ -1266,14 +1268,15 @@ function isSelfNotifyPath(resolved) {
1266
1268
 
1267
1269
  function shouldChainNotify(cmd) {
1268
1270
  if (!Array.isArray(cmd) || cmd.length === 0) return false;
1269
- return isRunnableCommand(cmd[0]);
1271
+ if (!isRunnableCommand(cmd[0])) return false;
1272
+ return hasRunnableInterpreterTarget(cmd);
1270
1273
  }
1271
1274
 
1272
- function isRunnableCommand(command) {
1275
+ function isRunnableCommand(command, baseDir = null) {
1273
1276
  if (typeof command !== 'string' || command.length === 0) return false;
1274
- const explicitPath = command.startsWith('~/') || command.includes('/');
1277
+ const explicitPath = isExplicitPath(command);
1275
1278
  if (!explicitPath) return true;
1276
- const resolved = resolveMaybeHome(command);
1279
+ const resolved = resolveMaybeHome(command, baseDir);
1277
1280
  if (!resolved) return false;
1278
1281
  try {
1279
1282
  fs.accessSync(resolved, fs.constants.X_OK);
@@ -1283,6 +1286,593 @@ function isRunnableCommand(command) {
1283
1286
  }
1284
1287
  }
1285
1288
 
1289
+ function hasRunnableInterpreterTarget(cmd) {
1290
+ const normalized = normalizeInterpreterCommand(cmd);
1291
+ const interpreterCmd = normalized?.cmd;
1292
+ if (!interpreterCmd || interpreterCmd.length === 0) return false;
1293
+ const targetIndex = findInterpreterTargetIndex(interpreterCmd);
1294
+ if (targetIndex == null) {
1295
+ const command = interpreterCmd[0];
1296
+ if (!isExplicitPath(command)) return true;
1297
+ return isRunnableCommand(command, normalized.cwd);
1298
+ }
1299
+ if (targetIndex === -2) return true;
1300
+ if (targetIndex === -1) return false;
1301
+ const target = interpreterCmd[targetIndex];
1302
+ if (!isExplicitPath(target)) return false;
1303
+ const targetCwd = isBunCommand(interpreterCmd[0])
1304
+ ? findBunScriptCwd(interpreterCmd, 1, normalized.cwd)
1305
+ : normalized.cwd;
1306
+ return isReadablePath(target, targetCwd);
1307
+ }
1308
+
1309
+ function normalizeInterpreterCommand(cmd) {
1310
+ if (!isEnvCommand(cmd[0])) return { cmd, cwd: null };
1311
+ return extractEnvCommand(cmd);
1312
+ }
1313
+
1314
+ function findInterpreterTargetIndex(cmd) {
1315
+ const command = cmd[0];
1316
+ if (isNodeCommand(command)) {
1317
+ return findNodeLikeScriptIndex(cmd, 1);
1318
+ }
1319
+ if (isBunCommand(command)) {
1320
+ return findBunScriptIndex(cmd, 1);
1321
+ }
1322
+ if (isDenoCommand(command)) {
1323
+ return findDenoScriptIndex(cmd, 1);
1324
+ }
1325
+ return null;
1326
+ }
1327
+
1328
+ function isEnvCommand(command) {
1329
+ const base = commandBase(command);
1330
+ return base === 'env';
1331
+ }
1332
+
1333
+ function extractEnvCommand(cmd) {
1334
+ return normalizeEnvArgs(cmd.slice(1));
1335
+ }
1336
+
1337
+ function normalizeEnvArgs(args, cwd = null) {
1338
+ for (let i = 0; i < args.length; i++) {
1339
+ const arg = args[i];
1340
+ if (typeof arg !== 'string' || arg.length === 0) return null;
1341
+ if (arg === '-' || arg === '--ignore-environment' || isEnvValuelessShortOption(arg)) continue;
1342
+ if (arg === '--') return normalizeEnvCommandOperands(args.slice(i + 1), cwd);
1343
+ if (arg === '-S' || arg === '--split-string') {
1344
+ const split = splitEnvString(args[i + 1]);
1345
+ if (!split) return null;
1346
+ return normalizeEnvArgs(split.concat(args.slice(i + 2)), cwd);
1347
+ }
1348
+ if (arg.startsWith('--split-string=')) {
1349
+ const split = splitEnvString(arg.slice('--split-string='.length));
1350
+ if (!split) return null;
1351
+ return normalizeEnvArgs(split.concat(args.slice(i + 1)), cwd);
1352
+ }
1353
+ if (arg === '-u' || arg === '--unset') {
1354
+ i += 1;
1355
+ continue;
1356
+ }
1357
+ if (arg.startsWith('--unset=')) continue;
1358
+ if (arg === '-C' || arg === '--chdir') {
1359
+ const next = args[i + 1];
1360
+ if (typeof next !== 'string' || next.length === 0) return null;
1361
+ cwd = resolveMaybeHome(next, cwd);
1362
+ i += 1;
1363
+ continue;
1364
+ }
1365
+ if (arg.startsWith('--chdir=')) {
1366
+ const dir = arg.slice('--chdir='.length);
1367
+ if (dir.length === 0) return null;
1368
+ cwd = resolveMaybeHome(dir, cwd);
1369
+ continue;
1370
+ }
1371
+ if (isEnvValueOption(arg)) {
1372
+ i += 1;
1373
+ continue;
1374
+ }
1375
+ if (isEnvInlineValueOption(arg)) continue;
1376
+ if (arg.startsWith('-')) return null;
1377
+ if (/^[A-Za-z_][A-Za-z0-9_]*=/.test(arg)) continue;
1378
+ return { cmd: args.slice(i), cwd };
1379
+ }
1380
+ return null;
1381
+ }
1382
+
1383
+ function normalizeEnvCommandOperands(args, cwd) {
1384
+ for (let i = 0; i < args.length; i++) {
1385
+ const arg = args[i];
1386
+ if (typeof arg !== 'string' || arg.length === 0) return null;
1387
+ if (/^[A-Za-z_][A-Za-z0-9_]*=/.test(arg)) continue;
1388
+ if (arg.startsWith('-')) return null;
1389
+ return { cmd: args.slice(i), cwd };
1390
+ }
1391
+ return null;
1392
+ }
1393
+
1394
+ function isEnvValuelessShortOption(arg) {
1395
+ return /^-[0iv]+$/.test(arg);
1396
+ }
1397
+
1398
+ function isEnvValueOption(arg) {
1399
+ return arg === '-P' || arg === '--path';
1400
+ }
1401
+
1402
+ function isEnvInlineValueOption(arg) {
1403
+ return (
1404
+ arg.startsWith('--path=')
1405
+ );
1406
+ }
1407
+
1408
+ function splitEnvString(value) {
1409
+ if (typeof value !== 'string' || value.length === 0) return null;
1410
+ const parts = [];
1411
+ let current = '';
1412
+ let quote = null;
1413
+ let escaped = false;
1414
+ for (let i = 0; i < value.length; i++) {
1415
+ const ch = value[i];
1416
+ if (escaped) {
1417
+ current += ch;
1418
+ escaped = false;
1419
+ continue;
1420
+ }
1421
+ if (ch === '\\\\' && quote !== "'") {
1422
+ escaped = true;
1423
+ continue;
1424
+ }
1425
+ if (quote) {
1426
+ if (ch === quote) quote = null;
1427
+ else current += ch;
1428
+ continue;
1429
+ }
1430
+ if (ch === '"' || ch === "'") {
1431
+ quote = ch;
1432
+ continue;
1433
+ }
1434
+ if (/\\s/.test(ch)) {
1435
+ if (current.length > 0) {
1436
+ parts.push(current);
1437
+ current = '';
1438
+ }
1439
+ continue;
1440
+ }
1441
+ current += ch;
1442
+ }
1443
+ if (escaped || quote) return null;
1444
+ if (current.length > 0) parts.push(current);
1445
+ return parts.length > 0 ? parts : null;
1446
+ }
1447
+
1448
+ function isNodeCommand(command) {
1449
+ const base = commandBase(command);
1450
+ return base === 'node';
1451
+ }
1452
+
1453
+ function isBunCommand(command) {
1454
+ const base = commandBase(command);
1455
+ return base === 'bun';
1456
+ }
1457
+
1458
+ function isDenoCommand(command) {
1459
+ const base = commandBase(command);
1460
+ return base === 'deno';
1461
+ }
1462
+
1463
+ function commandBase(command) {
1464
+ if (typeof command !== 'string' || command.length === 0) return '';
1465
+ const posixBase = path.basename(command);
1466
+ const winBase = path.win32.basename(command);
1467
+ const base = winBase.length < posixBase.length ? winBase : posixBase;
1468
+ return base.replace(/\\.exe$/i, '').toLowerCase();
1469
+ }
1470
+
1471
+ function findNodeLikeScriptIndex(cmd, startIndex) {
1472
+ for (let i = startIndex; i < cmd.length; i++) {
1473
+ const arg = cmd[i];
1474
+ if (typeof arg !== 'string' || arg.length === 0) return -1;
1475
+ if (arg === '-e' || arg === '--eval' || arg === '-p' || arg === '--print') return -2;
1476
+ if (arg.startsWith('--eval=') || arg.startsWith('--print=')) return -2;
1477
+ if (isNodeLikeOptionWithValue(arg)) {
1478
+ i += 1;
1479
+ continue;
1480
+ }
1481
+ if (hasInlineNodeLikeOptionValue(arg)) continue;
1482
+ if (isNodeLikeValuelessOption(arg)) continue;
1483
+ if (arg.startsWith('-')) return -1;
1484
+ return i;
1485
+ }
1486
+ return -1;
1487
+ }
1488
+
1489
+ function findBunScriptIndex(cmd, startIndex) {
1490
+ for (let i = startIndex; i < cmd.length; i++) {
1491
+ const arg = cmd[i];
1492
+ if (typeof arg !== 'string' || arg.length === 0) return -1;
1493
+ if (arg === '-e' || arg === '--eval' || arg === '-p' || arg === '--print') return -2;
1494
+ if (arg.startsWith('--eval=') || arg.startsWith('--print=')) return -2;
1495
+ if (isBunOptionWithValue(arg)) {
1496
+ i += 1;
1497
+ continue;
1498
+ }
1499
+ if (hasInlineBunOptionValue(arg)) continue;
1500
+ if (isBunValuelessOption(arg)) continue;
1501
+ if (arg === 'run') {
1502
+ return findScriptAfterSubcommand(cmd, i + 1, 'bun');
1503
+ }
1504
+ if (arg.startsWith('-')) return -1;
1505
+ return i;
1506
+ }
1507
+ return -1;
1508
+ }
1509
+
1510
+ function findBunScriptCwd(cmd, startIndex, baseDir = null) {
1511
+ let cwd = baseDir;
1512
+ for (let i = startIndex; i < cmd.length; i++) {
1513
+ const arg = cmd[i];
1514
+ if (typeof arg !== 'string' || arg.length === 0) return cwd;
1515
+ if (arg === '--cwd') {
1516
+ const next = cmd[i + 1];
1517
+ if (typeof next !== 'string' || next.length === 0) return cwd;
1518
+ cwd = resolveMaybeHome(next, cwd);
1519
+ i += 1;
1520
+ continue;
1521
+ }
1522
+ if (arg.startsWith('--cwd=')) {
1523
+ const next = arg.slice('--cwd='.length);
1524
+ if (next.length === 0) return cwd;
1525
+ cwd = resolveMaybeHome(next, cwd);
1526
+ continue;
1527
+ }
1528
+ if (arg === '-e' || arg === '--eval' || arg === '-p' || arg === '--print') return cwd;
1529
+ if (arg.startsWith('--eval=') || arg.startsWith('--print=')) return cwd;
1530
+ if (isBunOptionWithValue(arg)) {
1531
+ i += 1;
1532
+ continue;
1533
+ }
1534
+ if (hasInlineBunOptionValue(arg)) continue;
1535
+ if (isBunValuelessOption(arg)) continue;
1536
+ if (arg === 'run') return findBunScriptCwd(cmd, i + 1, cwd);
1537
+ return cwd;
1538
+ }
1539
+ return cwd;
1540
+ }
1541
+
1542
+ function findDenoScriptIndex(cmd, startIndex) {
1543
+ for (let i = startIndex; i < cmd.length; i++) {
1544
+ const arg = cmd[i];
1545
+ if (typeof arg !== 'string' || arg.length === 0) return -1;
1546
+ if (arg === 'eval') return -2;
1547
+ if (arg === 'run' || arg === 'test' || arg === 'bench' || arg === 'check') {
1548
+ return findScriptAfterSubcommand(cmd, i + 1, 'deno');
1549
+ }
1550
+ if (isDenoOptionWithValue(arg)) {
1551
+ i += 1;
1552
+ continue;
1553
+ }
1554
+ if (hasInlineDenoOptionValue(arg)) continue;
1555
+ if (isDenoValuelessOption(arg)) continue;
1556
+ if (arg.startsWith('-')) return -1;
1557
+ return i;
1558
+ }
1559
+ return -1;
1560
+ }
1561
+
1562
+ function findScriptAfterSubcommand(cmd, startIndex, runtime) {
1563
+ for (let i = startIndex; i < cmd.length; i++) {
1564
+ const arg = cmd[i];
1565
+ if (typeof arg !== 'string' || arg.length === 0) return -1;
1566
+ if (runtime === 'bun' && isBunOptionWithValue(arg)) {
1567
+ i += 1;
1568
+ continue;
1569
+ }
1570
+ if (runtime === 'deno' && isDenoOptionWithValue(arg)) {
1571
+ i += 1;
1572
+ continue;
1573
+ }
1574
+ if (runtime === 'bun' && hasInlineBunOptionValue(arg)) continue;
1575
+ if (runtime === 'deno' && hasInlineDenoOptionValue(arg)) continue;
1576
+ if (runtime === 'bun' && isBunValuelessOption(arg)) continue;
1577
+ if (runtime === 'deno' && isDenoValuelessOption(arg)) continue;
1578
+ if (arg.startsWith('-')) return -1;
1579
+ return i;
1580
+ }
1581
+ return -1;
1582
+ }
1583
+
1584
+ function isNodeLikeOptionWithValue(arg) {
1585
+ return (
1586
+ arg === '-C' ||
1587
+ arg === '-r' ||
1588
+ arg === '--conditions' ||
1589
+ arg === '--debug-port' ||
1590
+ arg === '--disable-warning' ||
1591
+ arg === '--env-file' ||
1592
+ arg === '--env-file-if-exists' ||
1593
+ arg === '--experimental-config-file' ||
1594
+ arg === '--experimental-loader' ||
1595
+ arg === '--import' ||
1596
+ arg === '--inspect-publish-uid' ||
1597
+ arg === '--loader' ||
1598
+ arg === '--localstorage-file' ||
1599
+ arg === '--require'
1600
+ );
1601
+ }
1602
+
1603
+ function hasInlineNodeLikeOptionValue(arg) {
1604
+ return (
1605
+ arg.startsWith('--conditions=') ||
1606
+ arg.startsWith('--debug-port=') ||
1607
+ arg.startsWith('--disable-warning=') ||
1608
+ arg.startsWith('--env-file=') ||
1609
+ arg.startsWith('--env-file-if-exists=') ||
1610
+ arg.startsWith('--experimental-config-file=') ||
1611
+ arg.startsWith('--experimental-loader=') ||
1612
+ arg.startsWith('--import=') ||
1613
+ arg.startsWith('--inspect-publish-uid=') ||
1614
+ arg.startsWith('--loader=') ||
1615
+ arg.startsWith('--localstorage-file=') ||
1616
+ arg.startsWith('--require=')
1617
+ );
1618
+ }
1619
+
1620
+ function isNodeLikeValuelessOption(arg) {
1621
+ return (
1622
+ arg === '-' ||
1623
+ arg === '-c' ||
1624
+ arg === '--' ||
1625
+ arg === '--check' ||
1626
+ arg === '--cpu-prof' ||
1627
+ arg === '--enable-source-maps' ||
1628
+ arg === '--expose-gc' ||
1629
+ arg === '--inspect' ||
1630
+ arg === '--inspect-brk' ||
1631
+ arg === '--inspect-wait' ||
1632
+ arg === '--no-deprecation' ||
1633
+ arg === '--no-warnings' ||
1634
+ arg === '--preserve-symlinks' ||
1635
+ arg === '--preserve-symlinks-main' ||
1636
+ arg === '--throw-deprecation' ||
1637
+ arg === '--trace-deprecation' ||
1638
+ arg === '--trace-warnings'
1639
+ );
1640
+ }
1641
+
1642
+ function isBunOptionWithValue(arg) {
1643
+ return (
1644
+ arg === '-c' ||
1645
+ arg === '-d' ||
1646
+ arg === '-F' ||
1647
+ arg === '-l' ||
1648
+ arg === '-r' ||
1649
+ arg === '--config' ||
1650
+ arg === '--conditions' ||
1651
+ arg === '--console-depth' ||
1652
+ arg === '--cpu-prof-dir' ||
1653
+ arg === '--cpu-prof-interval' ||
1654
+ arg === '--cpu-prof-name' ||
1655
+ arg === '--cwd' ||
1656
+ arg === '--define' ||
1657
+ arg === '--dns-result-order' ||
1658
+ arg === '--drop' ||
1659
+ arg === '--elide-lines' ||
1660
+ arg === '--env-file' ||
1661
+ arg === '--extension-order' ||
1662
+ arg === '--feature' ||
1663
+ arg === '--fetch-preconnect' ||
1664
+ arg === '--filter' ||
1665
+ arg === '--import' ||
1666
+ arg === '--inspect' ||
1667
+ arg === '--inspect-brk' ||
1668
+ arg === '--inspect-wait' ||
1669
+ arg === '--install' ||
1670
+ arg === '--jsx-factory' ||
1671
+ arg === '--jsx-fragment' ||
1672
+ arg === '--jsx-import-source' ||
1673
+ arg === '--jsx-runtime' ||
1674
+ arg === '--loader' ||
1675
+ arg === '--main-fields' ||
1676
+ arg === '--max-http-header-size' ||
1677
+ arg === '--port' ||
1678
+ arg === '--preload' ||
1679
+ arg === '--require' ||
1680
+ arg === '--shell' ||
1681
+ arg === '--title' ||
1682
+ arg === '--tsconfig-override' ||
1683
+ arg === '--unhandled-rejections' ||
1684
+ arg === '--user-agent'
1685
+ );
1686
+ }
1687
+
1688
+ function hasInlineBunOptionValue(arg) {
1689
+ return (
1690
+ arg.startsWith('--config=') ||
1691
+ arg.startsWith('--conditions=') ||
1692
+ arg.startsWith('--console-depth=') ||
1693
+ arg.startsWith('--cpu-prof-dir=') ||
1694
+ arg.startsWith('--cpu-prof-interval=') ||
1695
+ arg.startsWith('--cpu-prof-name=') ||
1696
+ arg.startsWith('--cwd=') ||
1697
+ arg.startsWith('--define=') ||
1698
+ arg.startsWith('--dns-result-order=') ||
1699
+ arg.startsWith('--drop=') ||
1700
+ arg.startsWith('--elide-lines=') ||
1701
+ arg.startsWith('--env-file=') ||
1702
+ arg.startsWith('--extension-order=') ||
1703
+ arg.startsWith('--feature=') ||
1704
+ arg.startsWith('--fetch-preconnect=') ||
1705
+ arg.startsWith('--filter=') ||
1706
+ arg.startsWith('--import=') ||
1707
+ arg.startsWith('--inspect=') ||
1708
+ arg.startsWith('--inspect-brk=') ||
1709
+ arg.startsWith('--inspect-wait=') ||
1710
+ arg.startsWith('--install=') ||
1711
+ arg.startsWith('--jsx-factory=') ||
1712
+ arg.startsWith('--jsx-fragment=') ||
1713
+ arg.startsWith('--jsx-import-source=') ||
1714
+ arg.startsWith('--jsx-runtime=') ||
1715
+ arg.startsWith('--loader=') ||
1716
+ arg.startsWith('--main-fields=') ||
1717
+ arg.startsWith('--max-http-header-size=') ||
1718
+ arg.startsWith('--port=') ||
1719
+ arg.startsWith('--preload=') ||
1720
+ arg.startsWith('--require=') ||
1721
+ arg.startsWith('--shell=') ||
1722
+ arg.startsWith('--title=') ||
1723
+ arg.startsWith('--tsconfig-override=') ||
1724
+ arg.startsWith('--unhandled-rejections=') ||
1725
+ arg.startsWith('--user-agent=')
1726
+ );
1727
+ }
1728
+
1729
+ function isBunValuelessOption(arg) {
1730
+ return (
1731
+ arg === '-b' ||
1732
+ arg === '-i' ||
1733
+ arg === '--bun' ||
1734
+ arg === '--cpu-prof' ||
1735
+ arg === '--cpu-prof-md' ||
1736
+ arg === '--expose-gc' ||
1737
+ arg === '--heap-prof' ||
1738
+ arg === '--heap-prof-md' ||
1739
+ arg === '--hot' ||
1740
+ arg === '--if-present' ||
1741
+ arg === '--ignore-dce-annotations' ||
1742
+ arg === '--jsx-side-effects' ||
1743
+ arg === '--no-addons' ||
1744
+ arg === '--no-clear-screen' ||
1745
+ arg === '--no-deprecation' ||
1746
+ arg === '--no-env-file' ||
1747
+ arg === '--no-exit-on-error' ||
1748
+ arg === '--no-install' ||
1749
+ arg === '--no-macros' ||
1750
+ arg === '--parallel' ||
1751
+ arg === '--prefer-latest' ||
1752
+ arg === '--prefer-offline' ||
1753
+ arg === '--preserve-symlinks' ||
1754
+ arg === '--preserve-symlinks-main' ||
1755
+ arg === '--redis-preconnect' ||
1756
+ arg === '--sequential' ||
1757
+ arg === '--silent' ||
1758
+ arg === '--smol' ||
1759
+ arg === '--sql-preconnect' ||
1760
+ arg === '--throw-deprecation' ||
1761
+ arg === '--use-bundled-ca' ||
1762
+ arg === '--use-openssl-ca' ||
1763
+ arg === '--use-system-ca' ||
1764
+ arg === '--watch' ||
1765
+ arg === '--workspaces' ||
1766
+ arg === '--zero-fill-buffers'
1767
+ );
1768
+ }
1769
+
1770
+ function isDenoOptionWithValue(arg) {
1771
+ return (
1772
+ arg === '-c' ||
1773
+ arg === '--cert' ||
1774
+ arg === '--conditions' ||
1775
+ arg === '--config' ||
1776
+ arg === '--cpu-prof-dir' ||
1777
+ arg === '--cpu-prof-interval' ||
1778
+ arg === '--cpu-prof-name' ||
1779
+ arg === '--ext' ||
1780
+ arg === '--import-map' ||
1781
+ arg === '--location' ||
1782
+ arg === '--lock' ||
1783
+ arg === '--minimum-dependency-age' ||
1784
+ arg === '--preload' ||
1785
+ arg === '--require' ||
1786
+ arg === '--seed'
1787
+ );
1788
+ }
1789
+
1790
+ function hasInlineDenoOptionValue(arg) {
1791
+ return (
1792
+ arg.startsWith('--cert=') ||
1793
+ arg.startsWith('--conditions=') ||
1794
+ arg.startsWith('--config=') ||
1795
+ arg.startsWith('--coverage=') ||
1796
+ arg.startsWith('--cpu-prof-dir=') ||
1797
+ arg.startsWith('--cpu-prof-interval=') ||
1798
+ arg.startsWith('--cpu-prof-name=') ||
1799
+ arg.startsWith('--env-file=') ||
1800
+ arg.startsWith('--ext=') ||
1801
+ arg.startsWith('--import-map=') ||
1802
+ arg.startsWith('--location=') ||
1803
+ arg.startsWith('--lock=') ||
1804
+ arg.startsWith('--minimum-dependency-age=') ||
1805
+ arg.startsWith('--node-modules-dir=') ||
1806
+ arg.startsWith('--preload=') ||
1807
+ arg.startsWith('--require=') ||
1808
+ arg.startsWith('--seed=') ||
1809
+ arg.startsWith('--vendor=') ||
1810
+ arg.startsWith('--v8-flags=') ||
1811
+ /^--(allow|deny|ignore)-[A-Za-z-]+=/.test(arg) ||
1812
+ arg.startsWith('--permission-set=') ||
1813
+ arg.startsWith('--reload=') ||
1814
+ arg.startsWith('--tunnel=') ||
1815
+ arg.startsWith('--watch=') ||
1816
+ arg.startsWith('--watch-exclude=') ||
1817
+ arg.startsWith('--watch-hmr=')
1818
+ );
1819
+ }
1820
+
1821
+ function isDenoValuelessOption(arg) {
1822
+ return (
1823
+ arg === '-A' ||
1824
+ arg === '-P' ||
1825
+ arg === '-q' ||
1826
+ arg === '-r' ||
1827
+ arg === '-t' ||
1828
+ arg === '--allow-all' ||
1829
+ arg === '--cached-only' ||
1830
+ arg === '--coverage' ||
1831
+ arg === '--cpu-prof' ||
1832
+ arg === '--cpu-prof-flamegraph' ||
1833
+ arg === '--cpu-prof-md' ||
1834
+ arg === '--env-file' ||
1835
+ arg === '--frozen' ||
1836
+ arg === '--no-check' ||
1837
+ arg === '--no-clear-screen' ||
1838
+ arg === '--no-code-cache' ||
1839
+ arg === '--no-config' ||
1840
+ arg === '--no-lock' ||
1841
+ arg === '--no-npm' ||
1842
+ arg === '--no-prompt' ||
1843
+ arg === '--no-remote' ||
1844
+ arg === '--node-modules-dir' ||
1845
+ arg === '--quiet' ||
1846
+ arg === '--reload' ||
1847
+ arg === '--tunnel' ||
1848
+ arg === '--unstable' ||
1849
+ arg === '--v8-flags' ||
1850
+ arg === '--vendor' ||
1851
+ arg === '--watch' ||
1852
+ arg === '--watch-exclude' ||
1853
+ arg === '--watch-hmr' ||
1854
+ /^-[RWINESA]$/.test(arg) ||
1855
+ /^--(allow|deny|ignore)-[A-Za-z-]+$/.test(arg) ||
1856
+ arg === '--permission-set'
1857
+ );
1858
+ }
1859
+
1860
+ function isReadablePath(target, baseDir = null) {
1861
+ const resolved = resolveMaybeHome(target, baseDir);
1862
+ if (!resolved) return false;
1863
+ try {
1864
+ fs.accessSync(resolved, fs.constants.R_OK);
1865
+ return true;
1866
+ } catch (_) {
1867
+ return false;
1868
+ }
1869
+ }
1870
+
1871
+ function isExplicitPath(value) {
1872
+ if (typeof value !== 'string' || value.length === 0) return false;
1873
+ return value.startsWith('~/') || value.startsWith('~\\\\') || value.includes('/') || value.includes('\\\\') || /^[A-Za-z]:/.test(value);
1874
+ }
1875
+
1286
1876
  function containsSequence(haystack, needle) {
1287
1877
  if (!Array.isArray(haystack) || !Array.isArray(needle) || needle.length === 0) return false;
1288
1878
  if (needle.length > haystack.length) return false;
@@ -285,8 +285,10 @@ function mergeCopilotAppDbStates(primary = {}, alias = {}) {
285
285
  return { ...primary, ...newer, sessionTotals };
286
286
  }
287
287
 
288
- async function cmdSync(argv) {
288
+ async function cmdSync(argv, context = {}) {
289
289
  const opts = parseArgs(argv);
290
+ const diagnostics = context && typeof context === "object" ? context.diagnostics : null;
291
+ const syncDiagnostics = diagnostics && typeof diagnostics === "object" ? diagnostics : null;
290
292
  const home = os.homedir();
291
293
  const { trackerDir } = await resolveTrackerPaths({ home });
292
294
 
@@ -454,6 +456,7 @@ async function cmdSync(argv) {
454
456
  cursors,
455
457
  projectEnabled: true,
456
458
  auditDue: codexColdAuditDue,
459
+ diagnostics: syncDiagnostics,
457
460
  })
458
461
  : { rolloutFiles, skipped: 0 };
459
462
  const rolloutFilesForParse = codexColdFilter.rolloutFiles;
@@ -476,6 +479,7 @@ async function cmdSync(argv) {
476
479
  cursors,
477
480
  queuePath,
478
481
  projectQueuePath,
482
+ diagnostics: syncDiagnostics,
479
483
  onProgress: (p) => {
480
484
  if (!progress?.enabled) return;
481
485
  const pct = p.total > 0 ? p.index / p.total : 1;
@@ -1848,6 +1852,12 @@ async function cmdSync(argv) {
1848
1852
 
1849
1853
  cursors.updatedAt = new Date().toISOString();
1850
1854
  await writeJson(cursorsPath, cursors);
1855
+ if (syncDiagnostics) {
1856
+ const cursorStat = await fs.stat(cursorsPath);
1857
+ syncDiagnostics.cursor_commits = Number(syncDiagnostics.cursor_commits || 0) + 1;
1858
+ syncDiagnostics.cursor_bytes = Number(syncDiagnostics.cursor_bytes || 0) + cursorStat.size;
1859
+ syncDiagnostics.cursor_path = cursorsPath;
1860
+ }
1851
1861
  if (grokHookSignalConsumed && grokHookSignalPath) {
1852
1862
  await fs.unlink(grokHookSignalPath).catch(() => {});
1853
1863
  }
@@ -3114,6 +3124,11 @@ async function migrateRolloutCumulativeDeltaBuckets({ cursors, queuePath, rollou
3114
3124
  delete cursors.files[filePath];
3115
3125
  }
3116
3126
  }
3127
+ // The migration clears Codex buckets and reparses the discovered corpus from
3128
+ // byte zero. Persisted event keys belong to the cleared buckets, so retaining
3129
+ // them can suppress the rebuild when a moved session still has an old path
3130
+ // cursor. Rebuild the hash inventory together with the buckets.
3131
+ cursors.codexHashes = [];
3117
3132
 
3118
3133
  const buckets = cursors.hourly?.buckets;
3119
3134
  const retractions = [];