fleetlens 0.12.2 → 0.12.3

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 (97) hide show
  1. package/app/apps/web/.next/BUILD_ID +1 -1
  2. package/app/apps/web/.next/build-manifest.json +3 -3
  3. package/app/apps/web/.next/prerender-manifest.json +3 -3
  4. package/app/apps/web/.next/server/app/_global-error.html +1 -1
  5. package/app/apps/web/.next/server/app/_global-error.rsc +1 -1
  6. package/app/apps/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  7. package/app/apps/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  8. package/app/apps/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  9. package/app/apps/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  10. package/app/apps/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  11. package/app/apps/web/.next/server/app/_not-found/page.js +1 -1
  12. package/app/apps/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  13. package/app/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  14. package/app/apps/web/.next/server/app/changelog/page.js +1 -1
  15. package/app/apps/web/.next/server/app/changelog/page.js.nft.json +1 -1
  16. package/app/apps/web/.next/server/app/changelog/page_client-reference-manifest.js +1 -1
  17. package/app/apps/web/.next/server/app/day/[date]/page.js +1 -1
  18. package/app/apps/web/.next/server/app/day/[date]/page.js.nft.json +1 -1
  19. package/app/apps/web/.next/server/app/day/[date]/page_client-reference-manifest.js +1 -1
  20. package/app/apps/web/.next/server/app/day/page.js +1 -1
  21. package/app/apps/web/.next/server/app/day/page.js.nft.json +1 -1
  22. package/app/apps/web/.next/server/app/day/page_client-reference-manifest.js +1 -1
  23. package/app/apps/web/.next/server/app/digest/[date]/page.js +1 -1
  24. package/app/apps/web/.next/server/app/digest/[date]/page.js.nft.json +1 -1
  25. package/app/apps/web/.next/server/app/digest/[date]/page_client-reference-manifest.js +1 -1
  26. package/app/apps/web/.next/server/app/digest/page.js +1 -1
  27. package/app/apps/web/.next/server/app/digest/page.js.nft.json +1 -1
  28. package/app/apps/web/.next/server/app/digest/page_client-reference-manifest.js +1 -1
  29. package/app/apps/web/.next/server/app/insights/[key]/page.js +1 -1
  30. package/app/apps/web/.next/server/app/insights/[key]/page.js.nft.json +1 -1
  31. package/app/apps/web/.next/server/app/insights/[key]/page_client-reference-manifest.js +1 -1
  32. package/app/apps/web/.next/server/app/insights/page.js +1 -1
  33. package/app/apps/web/.next/server/app/insights/page.js.nft.json +1 -1
  34. package/app/apps/web/.next/server/app/insights/page_client-reference-manifest.js +1 -1
  35. package/app/apps/web/.next/server/app/page.js +1 -1
  36. package/app/apps/web/.next/server/app/page.js.nft.json +1 -1
  37. package/app/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
  38. package/app/apps/web/.next/server/app/parallelism/page.js +1 -1
  39. package/app/apps/web/.next/server/app/parallelism/page.js.nft.json +1 -1
  40. package/app/apps/web/.next/server/app/parallelism/page_client-reference-manifest.js +1 -1
  41. package/app/apps/web/.next/server/app/print/[key]/page.js +1 -1
  42. package/app/apps/web/.next/server/app/print/[key]/page.js.nft.json +1 -1
  43. package/app/apps/web/.next/server/app/print/[key]/page_client-reference-manifest.js +1 -1
  44. package/app/apps/web/.next/server/app/projects/[slug]/page.js +1 -1
  45. package/app/apps/web/.next/server/app/projects/[slug]/page.js.nft.json +1 -1
  46. package/app/apps/web/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  47. package/app/apps/web/.next/server/app/projects/page.js +1 -1
  48. package/app/apps/web/.next/server/app/projects/page.js.nft.json +1 -1
  49. package/app/apps/web/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  50. package/app/apps/web/.next/server/app/runs/page.js +1 -1
  51. package/app/apps/web/.next/server/app/runs/page.js.nft.json +1 -1
  52. package/app/apps/web/.next/server/app/runs/page_client-reference-manifest.js +1 -1
  53. package/app/apps/web/.next/server/app/sessions/[id]/page.js +1 -1
  54. package/app/apps/web/.next/server/app/sessions/[id]/page.js.nft.json +1 -1
  55. package/app/apps/web/.next/server/app/sessions/[id]/page_client-reference-manifest.js +1 -1
  56. package/app/apps/web/.next/server/app/sessions/page.js +1 -1
  57. package/app/apps/web/.next/server/app/sessions/page.js.nft.json +1 -1
  58. package/app/apps/web/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  59. package/app/apps/web/.next/server/app/settings/page.js +1 -1
  60. package/app/apps/web/.next/server/app/settings/page.js.nft.json +1 -1
  61. package/app/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  62. package/app/apps/web/.next/server/app/team/page.js +1 -1
  63. package/app/apps/web/.next/server/app/team/page.js.nft.json +1 -1
  64. package/app/apps/web/.next/server/app/team/page_client-reference-manifest.js +1 -1
  65. package/app/apps/web/.next/server/app/usage/page.js +1 -1
  66. package/app/apps/web/.next/server/app/usage/page.js.nft.json +1 -1
  67. package/app/apps/web/.next/server/app/usage/page_client-reference-manifest.js +1 -1
  68. package/app/apps/web/.next/server/chunks/packages_0c-sz9n._.js +1 -1
  69. package/app/apps/web/.next/server/chunks/packages_0wywuu.._.js +1 -1
  70. package/app/apps/web/.next/server/chunks/packages_parser_dist_06d9se1._.js +1 -1
  71. package/app/apps/web/.next/server/chunks/packages_parser_dist_10ihc3~._.js +1 -1
  72. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0exckd4._.js +1 -1
  73. package/app/apps/web/.next/server/chunks/ssr/_0xu2pvc._.js +1 -1
  74. package/app/apps/web/.next/server/chunks/ssr/apps_web_components_0txtsv5._.js +1 -1
  75. package/app/apps/web/.next/server/chunks/ssr/apps_web_lib_changelog_ts_0n7_p1d._.js +1 -1
  76. package/app/apps/web/.next/server/chunks/ssr/apps_web_lib_changelog_ts_0nb5_-s._.js +1 -1
  77. package/app/apps/web/.next/server/chunks/ssr/packages_parser_dist_0mx_509._.js +3 -0
  78. package/app/apps/web/.next/server/middleware-build-manifest.js +3 -3
  79. package/app/apps/web/.next/server/middleware-manifest.json +5 -5
  80. package/app/apps/web/.next/server/pages/500.html +1 -1
  81. package/app/apps/web/.next/server/server-reference-manifest.js +1 -1
  82. package/app/apps/web/.next/server/server-reference-manifest.json +1 -1
  83. package/app/apps/web/.next/static/chunks/0htgc_hr1bw67.js +1 -0
  84. package/app/apps/web/.next/static/chunks/{0~e7pnd7ot84w.js → 0lziv8y_6yp5w.js} +1 -1
  85. package/app/apps/web/app/layout.tsx +14 -6
  86. package/app/apps/web/components/live-sessions-widget.tsx +1 -1
  87. package/app/apps/web/lib/changelog-data.generated.ts +1 -1
  88. package/app/apps/web/package.json +1 -1
  89. package/app/apps/web/tsconfig.tsbuildinfo +1 -1
  90. package/dist/daemon-worker.js +29 -17
  91. package/dist/index.js +88 -53
  92. package/package.json +1 -1
  93. package/app/apps/web/.next/server/chunks/ssr/packages_parser_dist_12.endt._.js +0 -3
  94. package/app/apps/web/.next/static/chunks/0a~ro-n30brjy.js +0 -1
  95. /package/app/apps/web/.next/static/{NVjCMw2mlLqMATkilYzT7 → 7kQ9mNICnVHhf4-LmSGcy}/_buildManifest.js +0 -0
  96. /package/app/apps/web/.next/static/{NVjCMw2mlLqMATkilYzT7 → 7kQ9mNICnVHhf4-LmSGcy}/_clientMiddlewareManifest.js +0 -0
  97. /package/app/apps/web/.next/static/{NVjCMw2mlLqMATkilYzT7 → 7kQ9mNICnVHhf4-LmSGcy}/_ssgManifest.js +0 -0
@@ -1824,6 +1824,14 @@ function foldWorkflowAgentTime(activeSegments, spans) {
1824
1824
  const airTimeMs = merged.reduce((n, s) => n + (s.endMs - s.startMs), 0);
1825
1825
  return { activeSegments: merged, airTimeMs };
1826
1826
  }
1827
+ async function applySubagentUsage(meta, rawLines, f) {
1828
+ const sessionId = sessionIdFromFileName(f.fileName);
1829
+ const projectDirPath = path.dirname(f.fullPath);
1830
+ const fallbackDay = meta.firstTimestamp ? toLocalDay(Date.parse(meta.firstTimestamp)) : void 0;
1831
+ const { usage, perDay: perDayTokens } = await computeSessionUsageWithSubagents(rawLines, projectDirPath, sessionId, fallbackDay);
1832
+ meta.totalUsage = usage;
1833
+ meta.dailyBreakdown = mergeDailyTokens(meta.dailyBreakdown, perDayTokens, usage);
1834
+ }
1827
1835
  async function getCachedMeta(f) {
1828
1836
  const cached = metaCache.get(f.fullPath);
1829
1837
  if (cached && cached.mtimeMs === f.mtimeMs && cached.sizeBytes === f.sizeBytes) {
@@ -1832,12 +1840,9 @@ async function getCachedMeta(f) {
1832
1840
  try {
1833
1841
  const rawLines = await readJsonlFile(f.fullPath);
1834
1842
  const { meta } = parseTranscript(rawLines);
1843
+ await applySubagentUsage(meta, rawLines, f);
1835
1844
  const sessionId = sessionIdFromFileName(f.fileName);
1836
1845
  const projectDirPath = path.dirname(f.fullPath);
1837
- const fallbackDay = meta.firstTimestamp ? toLocalDay(Date.parse(meta.firstTimestamp)) : void 0;
1838
- const { usage, perDay: perDayTokens } = await computeSessionUsageWithSubagents(rawLines, projectDirPath, sessionId, fallbackDay);
1839
- meta.totalUsage = usage;
1840
- meta.dailyBreakdown = mergeDailyTokens(meta.dailyBreakdown, perDayTokens, usage);
1841
1846
  const wf = await scanWorkflowAggregate(projectDirPath, sessionId);
1842
1847
  const full = {
1843
1848
  ...meta,
@@ -1863,6 +1868,7 @@ async function getCachedDetail(f) {
1863
1868
  const rawLines = await readJsonlFile(f.fullPath);
1864
1869
  const { meta, events } = parseTranscript(rawLines);
1865
1870
  const sessionId = sessionIdFromFileName(f.fileName);
1871
+ await applySubagentUsage(meta, rawLines, f);
1866
1872
  const wf = await scanWorkflowAggregate(path.dirname(f.fullPath), sessionId);
1867
1873
  const detail = {
1868
1874
  ...meta,
@@ -5361,6 +5367,20 @@ init_fs();
5361
5367
  import { readFileSync as readFileSync4, readdirSync, writeFileSync as writeFileSync2, renameSync, chmodSync, mkdirSync as mkdirSync3, existsSync as existsSync2 } from "node:fs";
5362
5368
  import { dirname as dirname2, join as join3 } from "node:path";
5363
5369
  var digestsDirCached = null;
5370
+ function parseDigestFile(path7, expectedVersion) {
5371
+ try {
5372
+ const parsed = JSON.parse(readFileSync4(path7, "utf8"));
5373
+ if (!parsed || typeof parsed !== "object")
5374
+ return null;
5375
+ if (parsed.version !== expectedVersion)
5376
+ return null;
5377
+ if (!Array.isArray(parsed.shipped))
5378
+ return null;
5379
+ return parsed;
5380
+ } catch {
5381
+ return null;
5382
+ }
5383
+ }
5364
5384
  function digestsDir() {
5365
5385
  if (digestsDirCached)
5366
5386
  return digestsDirCached;
@@ -5391,11 +5411,7 @@ function readDayDigest(date) {
5391
5411
  const p = dayDigestPath(date);
5392
5412
  if (!existsSync2(p))
5393
5413
  return null;
5394
- try {
5395
- return JSON.parse(readFileSync4(p, "utf8"));
5396
- } catch {
5397
- return null;
5398
- }
5414
+ return parseDigestFile(p, CURRENT_DAY_DIGEST_SCHEMA_VERSION);
5399
5415
  }
5400
5416
  var TODAY_TTL_MS = 10 * 60 * 1e3;
5401
5417
  var todayCache = null;
@@ -5428,11 +5444,7 @@ function readWeekDigest(monday) {
5428
5444
  const p = weekDigestPath(monday);
5429
5445
  if (!existsSync2(p))
5430
5446
  return null;
5431
- try {
5432
- return JSON.parse(readFileSync4(p, "utf8"));
5433
- } catch {
5434
- return null;
5435
- }
5447
+ return parseDigestFile(p, CURRENT_WEEK_DIGEST_SCHEMA_VERSION);
5436
5448
  }
5437
5449
  var CURRENT_WEEK_TTL_MS = 10 * 60 * 1e3;
5438
5450
  var currentWeekCache = null;
@@ -15146,14 +15158,14 @@ async function getUpdateAvailability() {
15146
15158
  if (isDevMode()) return null;
15147
15159
  const latest = await fetchLatestVersion();
15148
15160
  if (latest === null) return {
15149
- current: "0.12.2",
15161
+ current: "0.12.3",
15150
15162
  latest: null,
15151
15163
  updateAvailable: false
15152
15164
  };
15153
15165
  return {
15154
- current: "0.12.2",
15166
+ current: "0.12.3",
15155
15167
  latest,
15156
- updateAvailable: shouldUpdate("0.12.2", latest)
15168
+ updateAvailable: shouldUpdate("0.12.3", latest)
15157
15169
  };
15158
15170
  }
15159
15171
 
package/dist/index.js CHANGED
@@ -1849,6 +1849,14 @@ function foldWorkflowAgentTime(activeSegments, spans) {
1849
1849
  const airTimeMs = merged.reduce((n, s) => n + (s.endMs - s.startMs), 0);
1850
1850
  return { activeSegments: merged, airTimeMs };
1851
1851
  }
1852
+ async function applySubagentUsage(meta, rawLines, f) {
1853
+ const sessionId = sessionIdFromFileName(f.fileName);
1854
+ const projectDirPath = path.dirname(f.fullPath);
1855
+ const fallbackDay = meta.firstTimestamp ? toLocalDay(Date.parse(meta.firstTimestamp)) : void 0;
1856
+ const { usage: usage2, perDay: perDayTokens } = await computeSessionUsageWithSubagents(rawLines, projectDirPath, sessionId, fallbackDay);
1857
+ meta.totalUsage = usage2;
1858
+ meta.dailyBreakdown = mergeDailyTokens(meta.dailyBreakdown, perDayTokens, usage2);
1859
+ }
1852
1860
  async function getCachedMeta(f) {
1853
1861
  const cached = metaCache.get(f.fullPath);
1854
1862
  if (cached && cached.mtimeMs === f.mtimeMs && cached.sizeBytes === f.sizeBytes) {
@@ -1857,12 +1865,9 @@ async function getCachedMeta(f) {
1857
1865
  try {
1858
1866
  const rawLines = await readJsonlFile(f.fullPath);
1859
1867
  const { meta } = parseTranscript(rawLines);
1868
+ await applySubagentUsage(meta, rawLines, f);
1860
1869
  const sessionId = sessionIdFromFileName(f.fileName);
1861
1870
  const projectDirPath = path.dirname(f.fullPath);
1862
- const fallbackDay = meta.firstTimestamp ? toLocalDay(Date.parse(meta.firstTimestamp)) : void 0;
1863
- const { usage: usage2, perDay: perDayTokens } = await computeSessionUsageWithSubagents(rawLines, projectDirPath, sessionId, fallbackDay);
1864
- meta.totalUsage = usage2;
1865
- meta.dailyBreakdown = mergeDailyTokens(meta.dailyBreakdown, perDayTokens, usage2);
1866
1871
  const wf = await scanWorkflowAggregate(projectDirPath, sessionId);
1867
1872
  const full = {
1868
1873
  ...meta,
@@ -1888,6 +1893,7 @@ async function getCachedDetail(f) {
1888
1893
  const rawLines = await readJsonlFile(f.fullPath);
1889
1894
  const { meta, events } = parseTranscript(rawLines);
1890
1895
  const sessionId = sessionIdFromFileName(f.fileName);
1896
+ await applySubagentUsage(meta, rawLines, f);
1891
1897
  const wf = await scanWorkflowAggregate(path.dirname(f.fullPath), sessionId);
1892
1898
  const detail = {
1893
1899
  ...meta,
@@ -4501,23 +4507,36 @@ function getServerStatus() {
4501
4507
  return { running: false };
4502
4508
  }
4503
4509
  function isServerStale(status2) {
4504
- return status2.running === true && status2.version !== "0.12.2";
4510
+ return status2.running === true && status2.version !== "0.12.3";
4505
4511
  }
4506
4512
  async function ensureCurrentServer(opts = {}) {
4507
4513
  const status2 = getServerStatus();
4508
4514
  if (status2.running && !isServerStale(status2)) {
4509
4515
  return { pid: status2.pid, port: status2.port, restarted: false };
4510
4516
  }
4511
- let previousVersion;
4512
- let port = opts.port;
4513
- if (status2.running) {
4514
- previousVersion = status2.version;
4515
- port = port ?? status2.port;
4516
- stopServer();
4517
- await waitForPortFree(port, 5e3);
4517
+ if (!status2.running) {
4518
+ const result = await startServer({ port: opts.port });
4519
+ return { ...result, restarted: false };
4520
+ }
4521
+ const previousVersion = status2.version;
4522
+ const oldPid = status2.pid;
4523
+ const port = opts.port ?? status2.port;
4524
+ stopServer();
4525
+ await waitForPortFree(port, 5e3);
4526
+ if (await checkPort(port)) {
4527
+ try {
4528
+ process.kill(oldPid, "SIGKILL");
4529
+ } catch {
4530
+ }
4531
+ await waitForPortFree(port, 3e3);
4532
+ }
4533
+ try {
4534
+ const result = await startServer({ port });
4535
+ return { ...result, restarted: true, previousVersion };
4536
+ } catch (err) {
4537
+ if (isProcessAlive(oldPid)) writePid(PID_FILE, oldPid, port, previousVersion);
4538
+ throw err;
4518
4539
  }
4519
- const result = await startServer({ port });
4520
- return { ...result, restarted: status2.running, previousVersion };
4521
4540
  }
4522
4541
  async function startServer(opts = {}) {
4523
4542
  const port = opts.port ?? (parseInt(process.env.CCLENS_PORT ?? "", 10) || DEFAULT_PORT);
@@ -4544,7 +4563,7 @@ async function startServer(opts = {}) {
4544
4563
  });
4545
4564
  child.unref();
4546
4565
  const pid = child.pid;
4547
- writePid(PID_FILE, pid, port, "0.12.2");
4566
+ writePid(PID_FILE, pid, port, "0.12.3");
4548
4567
  await waitForHealth(`http://localhost:${port}`, 1e4);
4549
4568
  return { pid, port };
4550
4569
  }
@@ -4904,9 +4923,9 @@ Installed: ${PACKAGE_NAME}@${verify.installedVersion} at ${verify.installedPath
4904
4923
  console.warn(
4905
4924
  ` \u2022 reinstall in the correct Node env: 'npm install -g ${PACKAGE_NAME}@latest'`
4906
4925
  );
4907
- } else if (verify.installedVersion !== "0.12.2") {
4926
+ } else if (verify.installedVersion !== "0.12.3") {
4908
4927
  console.log(
4909
- ` \u2192 This process is still running ${"0.12.2"}. Next invocation will use ${verify.installedVersion}.`
4928
+ ` \u2192 This process is still running ${"0.12.3"}. Next invocation will use ${verify.installedVersion}.`
4910
4929
  );
4911
4930
  }
4912
4931
  }
@@ -4941,14 +4960,14 @@ async function getUpdateAvailability() {
4941
4960
  if (isDevMode()) return null;
4942
4961
  const latest = await fetchLatestVersion();
4943
4962
  if (latest === null) return {
4944
- current: "0.12.2",
4963
+ current: "0.12.3",
4945
4964
  latest: null,
4946
4965
  updateAvailable: false
4947
4966
  };
4948
4967
  return {
4949
- current: "0.12.2",
4968
+ current: "0.12.3",
4950
4969
  latest,
4951
- updateAvailable: shouldUpdate("0.12.2", latest)
4970
+ updateAvailable: shouldUpdate("0.12.3", latest)
4952
4971
  };
4953
4972
  }
4954
4973
  async function checkForUpdate() {
@@ -5038,7 +5057,7 @@ async function restartServices(state) {
5038
5057
  }
5039
5058
  async function forceUpdate() {
5040
5059
  const latest = await fetchLatestVersion();
5041
- const current = "0.12.2";
5060
+ const current = "0.12.3";
5042
5061
  if (latest === null) {
5043
5062
  console.error("Could not reach npm registry. Check your network.");
5044
5063
  process.exit(1);
@@ -5182,7 +5201,7 @@ async function status() {
5182
5201
  console.log(`Server: running on ${url} (PID ${server.pid}, v${ver})`);
5183
5202
  if (isServerStale(server)) {
5184
5203
  console.log(
5185
- ` \u26A0 serving stale ${ver} (CLI is ${"0.12.2"}) \u2014 run 'fleetlens start' to restart on the current version`
5204
+ ` \u26A0 serving stale ${ver} (CLI is ${"0.12.3"}) \u2014 run 'fleetlens start' to restart on the current version`
5186
5205
  );
5187
5206
  }
5188
5207
  } else {
@@ -5531,9 +5550,9 @@ var init_pricing = __esm({
5531
5550
  function fmtNum(n) {
5532
5551
  return n.toLocaleString("en-US");
5533
5552
  }
5534
- function fmtCost(cost) {
5553
+ function fmtCost(cost, partial = false) {
5535
5554
  if (cost === null) return "\u2014";
5536
- return `$${cost.toFixed(2)}`;
5555
+ return `${partial ? "\u2265" : ""}$${cost.toFixed(2)}`;
5537
5556
  }
5538
5557
  function pad(s, width, align = "right") {
5539
5558
  if (align === "left") return s.padEnd(width);
@@ -5556,9 +5575,9 @@ function renderTable(rows, title) {
5556
5575
  ].join(" ");
5557
5576
  lines.push(`${DIM2}${header}${RESET2}`);
5558
5577
  lines.push(`${DIM2}${"\u2500".repeat(header.length)}${RESET2}`);
5559
- let hasUnknownCost = false;
5578
+ let costIncomplete = false;
5560
5579
  for (const r of rows) {
5561
- if (r.cost === null) hasUnknownCost = true;
5580
+ if (r.cost === null || r.costPartial) costIncomplete = true;
5562
5581
  lines.push([
5563
5582
  pad(r.date, 12, "left"),
5564
5583
  pad(r.models, 20, "left"),
@@ -5567,7 +5586,7 @@ function renderTable(rows, title) {
5567
5586
  pad(fmtNum(r.cacheCreate), 14),
5568
5587
  pad(fmtNum(r.cacheRead), 14),
5569
5588
  pad(fmtNum(r.totalTokens), 14),
5570
- pad(fmtCost(r.cost), 12)
5589
+ pad(fmtCost(r.cost, r.costPartial), 12)
5571
5590
  ].join(" "));
5572
5591
  }
5573
5592
  const totals = rows.reduce(
@@ -5577,9 +5596,10 @@ function renderTable(rows, title) {
5577
5596
  cacheCreate: acc.cacheCreate + r.cacheCreate,
5578
5597
  cacheRead: acc.cacheRead + r.cacheRead,
5579
5598
  totalTokens: acc.totalTokens + r.totalTokens,
5580
- cost: r.cost !== null && acc.cost !== null ? acc.cost + r.cost : acc.cost
5599
+ cost: acc.cost + (r.cost ?? 0),
5600
+ anyCost: acc.anyCost || r.cost !== null
5581
5601
  }),
5582
- { input: 0, output: 0, cacheCreate: 0, cacheRead: 0, totalTokens: 0, cost: 0 }
5602
+ { input: 0, output: 0, cacheCreate: 0, cacheRead: 0, totalTokens: 0, cost: 0, anyCost: false }
5583
5603
  );
5584
5604
  lines.push(`${DIM2}${"\u2500".repeat(header.length)}${RESET2}`);
5585
5605
  lines.push(
@@ -5591,12 +5611,14 @@ function renderTable(rows, title) {
5591
5611
  pad(fmtNum(totals.cacheCreate), 14),
5592
5612
  pad(fmtNum(totals.cacheRead), 14),
5593
5613
  pad(fmtNum(totals.totalTokens), 14),
5594
- pad(fmtCost(totals.cost), 12)
5614
+ pad(totals.anyCost ? fmtCost(totals.cost, costIncomplete) : fmtCost(null), 12)
5595
5615
  ].join(" ")}${RESET2}`
5596
5616
  );
5597
- if (hasUnknownCost) {
5617
+ if (costIncomplete) {
5598
5618
  lines.push("");
5599
- lines.push(`${DIM2} Note: some models had unknown pricing (shown as \u2014)${RESET2}`);
5619
+ lines.push(
5620
+ `${DIM2} Cost covers priced usage only \u2014 "\u2014" = no priced sessions that day, "\u2265" = lower bound (some sessions had unknown pricing).${RESET2}`
5621
+ );
5600
5622
  }
5601
5623
  lines.push("");
5602
5624
  return lines.join("\n");
@@ -5649,6 +5671,9 @@ async function printStats(sinceDate) {
5649
5671
  console.log(` ${todaySessions} sessions today \xB7 ${serverLine}`);
5650
5672
  console.log("");
5651
5673
  }
5674
+ function displayModel(raw) {
5675
+ return raw.replace(/-\d{8}$/, "").replace(/^claude-/, "");
5676
+ }
5652
5677
  function aggregateByDay(sessions) {
5653
5678
  const byDay = /* @__PURE__ */ new Map();
5654
5679
  for (const s of sessions) {
@@ -5656,12 +5681,14 @@ function aggregateByDay(sessions) {
5656
5681
  if (!byDay.has(day2)) byDay.set(day2, { sessions: [], models: /* @__PURE__ */ new Set() });
5657
5682
  const bucket = byDay.get(day2);
5658
5683
  bucket.sessions.push(s);
5659
- if (s.model) bucket.models.add(s.model.replace(/-\d{8}$/, ""));
5684
+ if (s.model) bucket.models.add(displayModel(s.model));
5660
5685
  }
5661
5686
  const sorted = [...byDay.entries()].sort((a, b) => b[0].localeCompare(a[0]));
5662
5687
  return sorted.map(([date, { sessions: sessions2, models }]) => {
5663
5688
  const usage2 = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };
5664
5689
  let cost = 0;
5690
+ let anyPriced = false;
5691
+ let anyUnpriced = false;
5665
5692
  for (const s of sessions2) {
5666
5693
  usage2.input += s.totalUsage.input;
5667
5694
  usage2.output += s.totalUsage.output;
@@ -5669,11 +5696,15 @@ function aggregateByDay(sessions) {
5669
5696
  usage2.cacheWrite += s.totalUsage.cacheWrite;
5670
5697
  if (s.model) {
5671
5698
  const c = estimateCost(s.model, s.totalUsage);
5672
- if (c !== null && cost !== null) cost += c;
5673
- else cost = null;
5699
+ if (c !== null) {
5700
+ cost += c;
5701
+ anyPriced = true;
5702
+ } else {
5703
+ anyUnpriced = true;
5704
+ }
5674
5705
  }
5675
5706
  }
5676
- const modelNames = [...models].map((m) => m.replace("claude-", "").replace(/-\d+$/, "")).join(", ");
5707
+ const modelNames = [...models].join(", ");
5677
5708
  return {
5678
5709
  date,
5679
5710
  models: modelNames || "\u2014",
@@ -5682,7 +5713,8 @@ function aggregateByDay(sessions) {
5682
5713
  cacheCreate: usage2.cacheWrite,
5683
5714
  cacheRead: usage2.cacheRead,
5684
5715
  totalTokens: usage2.input + usage2.output + usage2.cacheRead + usage2.cacheWrite,
5685
- cost
5716
+ cost: anyPriced ? cost : null,
5717
+ costPartial: anyPriced && anyUnpriced
5686
5718
  };
5687
5719
  });
5688
5720
  }
@@ -6507,6 +6539,20 @@ var init_dist2 = __esm({
6507
6539
  // ../entries/dist/digest-fs.js
6508
6540
  import { readFileSync as readFileSync7, readdirSync, writeFileSync as writeFileSync3, renameSync, chmodSync, mkdirSync as mkdirSync4, existsSync as existsSync5 } from "node:fs";
6509
6541
  import { dirname as dirname6, join as join6 } from "node:path";
6542
+ function parseDigestFile(path7, expectedVersion) {
6543
+ try {
6544
+ const parsed = JSON.parse(readFileSync7(path7, "utf8"));
6545
+ if (!parsed || typeof parsed !== "object")
6546
+ return null;
6547
+ if (parsed.version !== expectedVersion)
6548
+ return null;
6549
+ if (!Array.isArray(parsed.shipped))
6550
+ return null;
6551
+ return parsed;
6552
+ } catch {
6553
+ return null;
6554
+ }
6555
+ }
6510
6556
  function digestsDir() {
6511
6557
  if (digestsDirCached)
6512
6558
  return digestsDirCached;
@@ -6546,11 +6592,7 @@ function readDayDigest(date) {
6546
6592
  const p = dayDigestPath(date);
6547
6593
  if (!existsSync5(p))
6548
6594
  return null;
6549
- try {
6550
- return JSON.parse(readFileSync7(p, "utf8"));
6551
- } catch {
6552
- return null;
6553
- }
6595
+ return parseDigestFile(p, CURRENT_DAY_DIGEST_SCHEMA_VERSION);
6554
6596
  }
6555
6597
  function getTodayDigestFromCache(date, nowMs) {
6556
6598
  if (!todayCache)
@@ -6586,11 +6628,7 @@ function readWeekDigest(monday) {
6586
6628
  const p = weekDigestPath(monday);
6587
6629
  if (!existsSync5(p))
6588
6630
  return null;
6589
- try {
6590
- return JSON.parse(readFileSync7(p, "utf8"));
6591
- } catch {
6592
- return null;
6593
- }
6631
+ return parseDigestFile(p, CURRENT_WEEK_DIGEST_SCHEMA_VERSION);
6594
6632
  }
6595
6633
  function listWeekDigestKeys() {
6596
6634
  const dir = join6(digestsDir(), "week");
@@ -6627,11 +6665,7 @@ function readMonthDigest(yearMonth) {
6627
6665
  const p = monthDigestPath(yearMonth);
6628
6666
  if (!existsSync5(p))
6629
6667
  return null;
6630
- try {
6631
- return JSON.parse(readFileSync7(p, "utf8"));
6632
- } catch {
6633
- return null;
6634
- }
6668
+ return parseDigestFile(p, CURRENT_MONTH_DIGEST_SCHEMA_VERSION);
6635
6669
  }
6636
6670
  function listMonthDigestKeys() {
6637
6671
  const dir = join6(digestsDir(), "month");
@@ -6656,6 +6690,7 @@ var init_digest_fs = __esm({
6656
6690
  "../entries/dist/digest-fs.js"() {
6657
6691
  "use strict";
6658
6692
  init_fs();
6693
+ init_types();
6659
6694
  digestsDirCached = null;
6660
6695
  TODAY_TTL_MS = 10 * 60 * 1e3;
6661
6696
  todayCache = null;
@@ -17659,7 +17694,7 @@ async function main() {
17659
17694
  case "version":
17660
17695
  case "--version":
17661
17696
  case "-v":
17662
- console.log(`fleetlens ${"0.12.2"}`);
17697
+ console.log(`fleetlens ${"0.12.3"}`);
17663
17698
  break;
17664
17699
  case "help":
17665
17700
  case "--help":
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fleetlens",
3
- "version": "0.12.2",
3
+ "version": "0.12.3",
4
4
  "description": "fleetlens — local-only dashboard and usage tracker for Claude Code sessions and agent fleets",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -1,3 +0,0 @@
1
- module.exports=[30375,a=>{"use strict";let b={kind:"claude-code",displayName:"Claude Code",shortLabel:"Claude",accentColor:"var(--af-accent)",iconChar:"✦"},c={kind:"codex",displayName:"Codex (OpenAI)",shortLabel:"Codex",accentColor:"rgb(16, 163, 127)",iconChar:"◆"},d={kind:"gemini",displayName:"Gemini CLI",shortLabel:"Gemini",accentColor:"rgb(124, 92, 246)",iconChar:"✺"},e={kind:"antigravity",displayName:"Antigravity",shortLabel:"Agy",accentColor:"rgb(236, 72, 153)",iconChar:"⏃"},f={kind:"cowork",displayName:"Cowork",shortLabel:"Cowork",accentColor:"rgb(217, 119, 87)",iconChar:"⌘"},g=[b,c,d,e,f],h=new Set(g.map(a=>a.kind));a.s(["ANTIGRAVITY_METADATA",0,e,"CLAUDE_CODE_METADATA",0,b,"CODEX_METADATA",0,c,"COWORK_METADATA",0,f,"GEMINI_METADATA",0,d,"agentMetadata",0,g,"getAgentMetadata",0,function(a){return g.find(b=>b.kind===a)},"isAgentKind",0,function(a){return"string"==typeof a&&h.has(a)}])},10687,79053,a=>{"use strict";let b={sonnet:{input:3,output:15,cacheRead:.3,cache_1h:3.75,cache_5m:3.75},opus:{input:5,output:25,cacheRead:.5,cache_1h:6.25,cache_5m:6.25},haiku:{input:1,output:5,cacheRead:.1,cache_1h:1.25,cache_5m:1.25}};function c(a,b,c){let d=0;for(;d<c;){let e=d+c>>>1;a[e]<b?d=e+1:c=e}return d}function d(a,b,d){if(d<=b)return 0;let e=a.ts.length,f=c(a.ts,b,e),g=c(a.ts,d,e);return a.cum[g]-a.cum[f]}a.s(["RATE_PER_PCT_5H",0,{pro:.2,"pro-max":.4,"pro-max-20x":2,custom:2},"RATE_PER_PCT_7D",0,{pro:1.2,"pro-max":2.4,"pro-max-20x":12,custom:12},"buildSpendIndex",0,function(a){let c=a.map(a=>({e:a,t:Date.parse(a.ts)})).filter(a=>!Number.isNaN(a.t)).sort((a,b)=>a.t-b.t),d=new Float64Array(c.length),e=new Float64Array(c.length+1),f=0;for(let a=0;a<c.length;a++)d[a]=c[a].t,e[a]=f,f+=function(a){let c=b[a.family];return(a.input*c.input+a.output*c.output+a.cacheRead*c.cacheRead+a.cache_1h*c.cache_1h+a.cache_5m*c.cache_5m)/1e6}(c[a].e);return e[c.length]=f,{ts:d,cum:e}},"collectSnapPairRates",0,function(a,b,c){let e=c?.minTravelPct??1,f=c?.minDollars??1,g=c?.maxGapMs??864e5,h=[];for(let[c,i]of a)for(let a=1;a<i.length;a++){let j=i[a-1],k=i[a],l=k.ts-j.ts,m=k.pct-j.pct;if(l<=0||l>g||m<e)continue;let n=d(b,j.ts,k.ts);n<f||h.push({cycleEndMs:c,rate:n/m,travel:m,dollars:n,gapMs:l})}return h},"groupSnapsByCycle",0,function(a,b){let c=new Map;for(let d of a){if(!d.captured_at)continue;let a=b(d);if(!a?.resets_at||"number"!=typeof a.utilization)continue;let e=Date.parse(d.captured_at),f=Date.parse(a.resets_at);if(Number.isNaN(e)||Number.isNaN(f))continue;let g=36e5*Math.round(f/36e5),h=c.get(g)??[];h.push({ts:e,pct:a.utilization}),c.set(g,h)}for(let a of c.values())a.sort((a,b)=>a.ts-b.ts);return c},"modelFamily",0,function(a){let b=(a??"").toLowerCase();return b&&"<synthetic>"!==b?b.includes("haiku")?"haiku":b.includes("opus")?"opus":b.includes("sonnet")?"sonnet":null:null},"predictAnchored",0,function(a,b,c,e,f,g){let h=e-36e5*f;if(c<=0&&(c=1),0===b.length)return Math.max(0,d(a,h,g)/c);let i=-1;for(let a=0;a<b.length;a++)if(b[a].ts<=g)i=a;else break;if(i>=0&&i+1<b.length){let c=b[i],e=b[i+1];if(e.pct===c.pct)return c.pct;let f=d(a,c.ts,e.ts);if(f<=0){let a=(g-c.ts)/(e.ts-c.ts);return c.pct+(e.pct-c.pct)*a}let h=d(a,c.ts,g);return c.pct+(e.pct-c.pct)*(h/f)}if(i>=0){let e=b[i];return e.pct+d(a,e.ts,g)/c}let j=b[0];if(g<=h)return 0;let k=d(a,h,j.ts);if(k<=0){let a=(g-h)/(j.ts-h);return j.pct*a}let l=d(a,h,g);return j.pct*(l/k)},"userSoloRate",0,function(a,b=.9){if(a.length<3)return null;let c=a.map(a=>a.rate).sort((a,b)=>a-b),d=Math.min(Math.floor(c.length*b),c.length-1);return c[d]}],10687);let e=[/<system_instruction\b[^>]*>[\s\S]*?<\/system_instruction>\s*/gi],f=["<command-name>","<local-command-stdout>","<local-command-caveat>","<task-notification>","Base directory for this skill:"];function g(a){if(!a)return a;let b=a;for(let a of e)b=b.replace(a,"");return b.trim()}a.s(["isFrameworkInjectedUserInput",0,function(a){if(!a)return!1;let b=g(a);if(!b)return!0;for(let a of f)if(b.startsWith(a))return!0;return!1},"stripFrameworkBoilerplate",0,g],79053)},48024,a=>{"use strict";let b={input:0,output:0,cacheRead:0,cacheWrite:0};function c(a){let b=new Date(a),c=b.getFullYear(),d=String(b.getMonth()+1).padStart(2,"0"),e=String(b.getDate()).padStart(2,"0");return`${c}-${d}-${e}`}let d=["/.claude/worktrees/","/.worktrees/","/claude/worktrees/"],e=/\/conductor\/workspaces\/[^/]+\/([^/]+)(?:\/|$)/;function f(a){for(let b of d){let c=a.lastIndexOf(b);if(c>=0)return{idx:c,marker:b}}return null}function g(a){let b=e.exec(a);if(!b)return null;let c=b[1],d=+!!b[0].endsWith("/");return{canonicalEndIdx:b.index+b[0].length-c.length-1-d,workspaceName:c}}let h="/.superset/worktrees/",i=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;function j(a){let b=a.indexOf(h);if(b<0)return null;let c=a.slice(b+h.length).split("/").filter(Boolean);if(0===c.length)return null;let d=i.test(c[0])?c[1]??c[0]:c[0];return{canonical:a.slice(0,b)+h+d,workspaceName:d}}function k(a){let b=a.replace(/\/{2,}/g,"/"),c=f(b);if(c)return b.slice(0,c.idx);let d=g(b);if(d)return b.slice(0,d.canonicalEndIdx);let e=j(b);return e?e.canonical:b}function l(a){let b=a.replace(/\/{2,}/g,"/"),c=f(b);if(c){let a=b.slice(c.idx+c.marker.length),d=a.indexOf("/");return d>=0?a.slice(0,d):a}let d=g(b);if(d)return d.workspaceName;let e=j(b);return e?e.workspaceName:null}function m(a){let b=k(a),c=b.replace(/\/+$/,"").split("/").filter(Boolean);return c[c.length-1]||b}function n(a){return{date:a,sessions:0,toolCalls:0,turns:0,tokens:{...b},durationMs:0,airTimeMs:0,peakParallelism:0}}let o=/gh\s+pr\s+create\b/i,p=/#(\d+)/,q=/--title\s+["']([^"']+)["']/;function r(a){let c={sessionCount:a.length,totalDurationMs:0,totalAirTimeMs:0,totalTokens:{...b},totalToolCalls:0,totalTurns:0,avgTurnsPerSession:0,avgDurationMs:0,totalLinesAdded:0,totalLinesRemoved:0,totalFilesEdited:0};for(let b of a)c.totalDurationMs+=b.durationMs??0,c.totalAirTimeMs+=b.airTimeMs??b.durationMs??0,c.totalTokens.input+=b.totalUsage.input,c.totalTokens.output+=b.totalUsage.output,c.totalTokens.cacheRead+=b.totalUsage.cacheRead,c.totalTokens.cacheWrite+=b.totalUsage.cacheWrite,c.totalToolCalls+=b.toolCallCount??0,c.totalTurns+=b.turnCount??0,c.totalLinesAdded+=b.linesAdded??0,c.totalLinesRemoved+=b.linesRemoved??0,c.totalFilesEdited+=b.filesEdited??0;return a.length>0&&(c.avgTurnsPerSession=c.totalTurns/a.length,c.avgDurationMs=c.totalDurationMs/a.length),c}function s(a,b){let c=b.minDurationMs??6e4,d=b.mergeGapMs??6e5,e=b.minActive??2,f=[];for(let b of a)for(let a of b.segments)a.endMs<=a.startMs||(f.push({ms:a.startMs,delta:1,sessionId:b.id}),f.push({ms:a.endMs,delta:-1,sessionId:b.id}));f.sort((a,b)=>a.ms-b.ms||b.delta-a.delta);let g=new Map,h=[],i=null;for(let a of f){if(1===a.delta)g.set(a.sessionId,(g.get(a.sessionId)??0)+1);else{let b=(g.get(a.sessionId)??0)-1;b<=0?g.delete(a.sessionId):g.set(a.sessionId,b)}let b=g.size;if(b>=e)if(i)for(let c of(i.endMs=a.ms,b>i.peak&&(i.peak=b),g.keys()))i.sessionIds.add(c);else i={startMs:a.ms,endMs:a.ms,peak:b,sessionIds:new Set(g.keys())};else i&&(i.endMs=a.ms,h.push(i),i=null)}i&&h.push(i);let j=h.filter(a=>a.endMs-a.startMs>=c),k=[];for(let a of j){let b=k[k.length-1];if(b&&a.startMs-b.endMs<=d)for(let c of(b.endMs=a.endMs,a.peak>b.peak&&(b.peak=a.peak),a.sessionIds))b.sessionIds.add(c);else k.push({startMs:a.startMs,endMs:a.endMs,peak:a.peak,sessionIds:new Set(a.sessionIds)})}let l=new Map;for(let b of a)l.set(b.id,b.projectDir);return k.map(a=>{let b=Array.from(new Set(Array.from(a.sessionIds).map(a=>l.get(a)).filter(a=>!!a)));return{startMs:a.startMs,endMs:a.endMs,peak:a.peak,sessionIds:Array.from(a.sessionIds),projectDirs:b,crossProject:b.length>1}})}a.s(["buildGanttDay",0,function(a,b){let[c,d,e]=b.split("-").map(Number),f=new Date(c,d-1,e).getTime(),g=new Date(c,d-1,e+1).getTime(),h=[];for(let b of a){let a=(function(a,b=18e4){let c=a.filter(a=>a.timestamp).map(a=>Date.parse(a.timestamp)).filter(a=>!Number.isNaN(a)).sort((a,b)=>a-b);if(0===c.length)return[];let d=[],e=c[0],f=c[0];for(let a=1;a<c.length;a++){let g=c[a];g-f>b&&(d.push({startMs:e,endMs:f}),e=g),f=g}return d.push({startMs:e,endMs:f}),d})(b.events).filter(a=>a.endMs>f&&a.startMs<g).map(a=>({startMs:Math.max(a.startMs,f),endMs:Math.min(a.endMs,g)}));if(0===a.length)continue;let c=Math.min(...a.map(a=>a.startMs)),d=Math.max(...a.map(a=>a.endMs)),e=a.reduce((a,b)=>a+(b.endMs-b.startMs),0);h.push({id:b.id,agent:b.agent,projectName:b.projectName,projectDir:b.projectDir,firstUserPreview:b.firstUserPreview,lastAgentPreview:b.lastAgentPreview,model:b.model,segments:a,startMs:c,endMs:d,activeMs:e,totalUsage:b.totalUsage})}h.sort((a,b)=>a.startMs-b.startMs);let i=[];for(let a of h)for(let b of a.segments)i.push({ms:b.startMs,delta:1}),i.push({ms:b.endMs,delta:-1});i.sort((a,b)=>a.ms-b.ms||b.delta-a.delta);let j=0,k=0;for(let a of i)(j+=a.delta)>k&&(k=j);return{date:b,sessions:h,dayStartMs:f,dayEndMs:g,peakActiveParallelism:k}},"canonicalProjectName",0,k,"computeBurstsFromSessions",0,function(a,b={}){let c=[];for(let b of a)b.activeSegments&&0!==b.activeSegments.length&&c.push({id:b.id,projectDir:b.projectDir,segments:b.activeSegments});return s(c,b)},"computeParallelismBursts",0,function(a,b={}){return s(a.sessions,b)},"dailyActivity",0,function(a){let b,d;if(0===a.length)return[];let e=new Map,f=a=>{(!b||a<b)&&(b=a),(!d||a>d)&&(d=a);let c=e.get(a)??n(a);return e.set(a,c),c};for(let b of a){let a=function(a){if(!a.firstTimestamp)return;let b=Date.parse(a.firstTimestamp);if(!Number.isNaN(b))return c(b)}(b);if(b.dailyBreakdown&&b.dailyBreakdown.length>0){for(let a of b.dailyBreakdown){let b=f(a.day);b.toolCalls+=a.toolCalls,b.turns+=a.turns,b.tokens.input+=a.tokens.input,b.tokens.output+=a.tokens.output,b.tokens.cacheRead+=a.tokens.cacheRead,b.tokens.cacheWrite+=a.tokens.cacheWrite}a&&(f(a).durationMs+=b.durationMs??0)}else if(a){let c=f(a);c.toolCalls+=b.toolCallCount??0,c.turns+=b.turnCount??0,c.tokens.input+=b.totalUsage.input,c.tokens.output+=b.totalUsage.output,c.tokens.cacheRead+=b.totalUsage.cacheRead,c.tokens.cacheWrite+=b.totalUsage.cacheWrite,c.durationMs+=b.durationMs??0}let d=new Set,e=b.activeSegments;if(e&&e.length>0)for(let a of e){let b=a.startMs;for(;b<a.endMs;){let e=c(b);d.add(e);let g=new Date(b);g.setHours(24,0,0,0);let h=Math.min(g.getTime(),a.endMs);f(e).airTimeMs+=h-b,b=h}}else a&&(d.add(a),f(a).airTimeMs+=b.airTimeMs??0);if(b.dailyBreakdown)for(let a of b.dailyBreakdown)d.add(a.day);for(let a of d)f(a).sessions++}let g=b&&d?function(a,b){let[d,e,f]=a.split("-").map(Number),[g,h,i]=b.split("-").map(Number),j=new Date(d,e-1,f),k=new Date(g,h-1,i),l=[];for(let a=new Date(j);a<=k;a.setDate(a.getDate()+1))l.push(c(a.getTime()));return l}(b,d):[],h=[];for(let a of g)h.push(e.get(a)??n(a));let i=function(a){let b=[];for(let c of a)for(let a of c.activeSegments&&c.activeSegments.length>0?c.activeSegments:c.firstTimestamp&&c.lastTimestamp?(()=>{let a=Date.parse(c.firstTimestamp),b=Date.parse(c.lastTimestamp);return Number.isNaN(a)||Number.isNaN(b)||b<a?[]:[{startMs:a,endMs:b}]})():[])b.push({ms:a.startMs,delta:1,sessionId:c.id}),b.push({ms:a.endMs,delta:-1,sessionId:c.id});b.sort((a,b)=>a.ms-b.ms||b.delta-a.delta);let c=new Map,d=[];for(let a of b){if(1===a.delta)c.set(a.sessionId,(c.get(a.sessionId)??0)+1);else{let b=(c.get(a.sessionId)??0)-1;b<=0?c.delete(a.sessionId):c.set(a.sessionId,b)}d.push({atMs:a.ms,active:c.size,sessions:Array.from(c.keys()).slice(0,10)})}return d}(a),j=new Map;for(let a of i){let b=c(a.atMs),d=j.get(b)??0;a.active>d&&j.set(b,a.active)}for(let a of h)a.peakParallelism=j.get(a.date)??0;return h},"detectPrMarkers",0,function(a){let b=[],c=a.durationMs??0;for(let d of a.events){if("tool-call"!==d.role||"Bash"!==d.toolName)continue;let e=d.blocks.find(a=>a&&"type"in a&&"tool_use"===a.type);if(!e||"tool_use"!==e.type)continue;let f=e.input,g="string"==typeof f?.command?f.command:"";if(!o.test(g))continue;let h=g.match(q),i=g.match(p);b.push({sessionId:a.id,timestamp:d.timestamp??a.firstTimestamp??"",tOffsetMs:d.tOffsetMs,positionInSession:c>0&&void 0!==d.tOffsetMs?Math.min(1,Math.max(0,d.tOffsetMs/c)):void 0,command:g.slice(0,300),prNumber:i?Number(i[1]):void 0,title:h?.[1]})}return b},"groupByProject",0,function(a){let b=new Map;for(let c of a){let a=m(c.projectName),d=b.get(a);d||(d={projectDir:a,projectName:a,sessions:[],rawProjectDirs:[],worktreeCount:0,metrics:r([]),perAgent:[],lastActiveMs:void 0},b.set(a,d)),d.sessions.push(c),d.rawProjectDirs.includes(c.projectDir)||d.rawProjectDirs.push(c.projectDir);let e=c.lastTimestamp?Date.parse(c.lastTimestamp):void 0;e&&(!d.lastActiveMs||e>d.lastActiveMs)&&(d.lastActiveMs=e)}for(let a of b.values()){a.metrics=r(a.sessions);let b=new Set;for(let c of a.sessions){let a=l(c.projectName);a&&b.add(a)}a.worktreeCount=b.size;let c=new Map;for(let b of a.sessions){let a=b.agent??"claude-code",d=c.get(a);d||(d={agent:a,sessions:0},c.set(a,d)),d.sessions+=1}a.perAgent=Array.from(c.values()).sort((a,b)=>b.sessions-a.sessions)}return Array.from(b.values()).sort((a,b)=>(b.lastActiveMs??0)-(a.lastActiveMs??0))},"highLevelMetrics",0,r,"projectRepoName",0,m,"sessionAirTimeMs",0,function(a,b=18e4){let c=0;for(let d of a)void 0!==d.gapMs&&d.gapMs<=b&&(c+=d.gapMs);return c},"summarizeBursts",0,function(a){let b=0,d=0,e=0,f=new Set;for(let g of a)g.peak>b&&(b=g.peak),d+=g.endMs-g.startMs,g.crossProject&&e++,f.add(c(g.startMs));return{peakConcurrent:b,totalParallelMs:d,burstCount:a.length,crossProjectBurstCount:e,activeDayCount:f.size}},"toLocalDay",0,c,"worktreeName",0,l])},23895,88522,43847,a=>{"use strict";let b;a.s(["agentSources",()=>aU,"cclensHome",()=>aS,"cclensPath",()=>aT,"getAnySession",()=>aW,"listAllSessions",()=>aV,"loadCalibrationCurve",()=>aZ],23895);var c=a.i(2157),d=a.i(60526),e=a.i(50227),f=a.i(30375),g=a.i(10687),h=a.i(79053),i=a.i(48024);let j={input:0,output:0,cacheRead:0,cacheWrite:0};function k(a,b=200){let c=a.replace(/<[^>]+>/g,"").replace(/\s+/g," ").trim();return c.length>b?c.slice(0,b-1)+"…":c}let l=/^\s*<teammate-message\s+teammate_id="([^"]+)"[^>]*>([\s\S]*?)<\/teammate-message>/;function m(a){let b=a.match(l);if(!b)return;let c=b[1],d=b[2].trim(),e="message";if(d.startsWith("{"))try{let a=JSON.parse(d);"idle_notification"===a.type?e="idle-notification":"shutdown_request"===a.type?e="shutdown-request":"shutdown_approved"===a.type?e="shutdown-approved":"task_assignment"===a.type?e="task-assignment":"teammate_terminated"===a.type&&(e="teammate-terminated")}catch{}return{teammateId:c,body:d,kind:e}}function n(a){if(!a||"object"!=typeof a)return;let b=a=>"number"==typeof a?a:0;return{input:b(a.input_tokens),output:b(a.output_tokens),cacheRead:b(a.cache_read_input_tokens),cacheWrite:b(a.cache_creation_input_tokens)}}function o(a){let b,c,d,e,f,g,l,o,p,q=[];for(let b=0;b<a.length;b++){let c=function(a,b){if(!a||"object"!=typeof a)return null;let c=String(a.type??""),d=a.uuid,e=a.parentUuid??null,f=a.timestamp;if("assistant"===c){let g,h,i,j=a.message??{},l=j.content??[],m=n(j.usage),o=j.model,p=a.requestId,q=j.id,r=j.stop_reason,s=l[0],t="agent";return s?.type==="thinking"?(t="agent-thinking",g="[thinking] "+k(s.thinking,140)):s?.type==="tool_use"?(t="tool-call",h=s.name,i=s.id,g=`${s.name} `+k(JSON.stringify(s.input??{}),100)):g=s?.type==="text"?k(s.text,200):`<assistant:${s?.type??"empty"}>`,{index:b,uuid:d,parentUuid:e,timestamp:f,role:t,rawType:c,preview:g,blocks:l,usage:m,model:o,requestId:p,messageId:q,stopReason:r,toolName:h,toolUseId:i,raw:a}}if("user"===c){let g=(a.message??{}).content;if("string"==typeof g){let i=(0,h.stripFrameworkBoilerplate)(g),j=m(i);return{index:b,uuid:d,parentUuid:e,timestamp:f,role:"user",rawType:c,preview:k(i,200),blocks:i?[{type:"text",text:i}]:[],raw:a,teammateMessage:j}}if(Array.isArray(g)){let i=g[0];if(i?.type==="tool_result")return{index:b,uuid:d,parentUuid:e,timestamp:f,role:"tool-result",rawType:c,preview:k("string"==typeof i.content?i.content:JSON.stringify(i.content),200),blocks:g,toolUseId:i.tool_use_id,toolResult:a.toolUseResult,raw:a};let j=g.find(a=>a?.type==="text"),l=j?(0,h.stripFrameworkBoilerplate)(j.text):"",n=j?g.map(a=>a===j?{type:"text",text:l}:a):g,o=l?m(l):void 0;return{index:b,uuid:d,parentUuid:e,timestamp:f,role:"user",rawType:c,preview:l?k(l,200):k(JSON.stringify(g),200),blocks:n,raw:a,teammateMessage:o}}}if("attachment"===c){let g=a.attachment??{},h=String(g.type??"attachment"),i=`<attachment: ${h}>`;return"string"==typeof g.content&&g.content.length>0?i=`[${h}] `+k(g.content,140):Array.isArray(g.addedNames)&&(i=`[${h}] +${g.addedNames.length} names`),{index:b,uuid:d,parentUuid:e,timestamp:f,role:"system",rawType:c,preview:i,blocks:[{type:"text",text:JSON.stringify(g,null,2)}],attachmentType:h,raw:a}}return{index:b,uuid:d,parentUuid:e,timestamp:f,role:"meta",rawType:c||"unknown",preview:`${c}: ${k(JSON.stringify(a),140)}`,blocks:[{type:"text",text:JSON.stringify(a,null,2)}],raw:a}}(a[b],b);c&&q.push(c)}let r=q.map(a=>a.timestamp?Date.parse(a.timestamp):void 0).filter(a=>"number"==typeof a&&!Number.isNaN(a)),s=r.length?Math.min(...r):void 0,t=r.length?Math.max(...r):void 0,u=void 0!==s?new Date(s).toISOString():void 0,v=void 0!==t?new Date(t).toISOString():void 0;for(let a of q){if(!a.timestamp)continue;let b=Date.parse(a.timestamp);Number.isNaN(b)||void 0!==s&&(a.tOffsetMs=Math.max(0,b-s))}let w=q.filter(a=>{let b;return a.timestamp&&("user"===(b=a.role)||"agent"===b||"agent-thinking"===b||"tool-call"===b||"tool-result"===b)}).map(a=>({e:a,ms:Date.parse(a.timestamp)})).filter(a=>!Number.isNaN(a.ms)).sort((a,b)=>a.ms-b.ms);for(let a=1;a<w.length;a++)w[a].e.gapMs=Math.max(0,w[a].ms-w[a-1].ms);let x=q.filter(a=>a.timestamp).map(a=>Date.parse(a.timestamp)).filter(a=>!Number.isNaN(a)).sort((a,b)=>a-b),y=[],z=0;if(x.length>0){let a=x[0],b=x[0];for(let c=1;c<x.length;c++){let d=x[c],e=d-b;e>18e4?(y.push({startMs:a,endMs:b}),a=d):e>0&&(z+=e),b=d}y.push({startMs:a,endMs:b})}let A=new Map,B=[];for(let a of q){if(!a.timestamp)continue;let b=Date.parse(a.timestamp);if(!Number.isNaN(b)){if("assistant"===a.rawType&&a.usage&&a.messageId){let c=A.get(a.messageId);c?(c.siblings.push(a),b<c.ms&&(c.rep=a,c.ms=b)):A.set(a.messageId,{rep:a,ms:b,siblings:[a]})}else if("system"===a.rawType){let c=a.raw;if(c?.subtype!=="compact_boundary")continue;let d=c.compactMetadata??{};B.push({ms:b,trigger:"manual"===d.trigger?"manual":"auto",preTokens:"number"==typeof d.preTokens?d.preTokens:0})}}}let C=[...A.values()].sort((a,b)=>a.ms-b.ms);B.sort((a,b)=>a.ms-b.ms);let D=0,E=0,F=(a,b)=>{for(let c of a.siblings)c.coldResume=b;D++,E+=b.writeTokens},G=new Set;for(let a of B){let b,c=C.find(b=>b.ms>a.ms&&(b.rep.usage?.cacheWrite??0)>=1e3);if(!c)continue;for(let c=C.length-1;c>=0;c--)if(C[c].ms<=a.ms){b=C[c].ms;break}let d=c.rep.usage,e=d.cacheWrite+d.cacheRead;F(c,{trigger:"compact",gapMs:void 0!==b?c.ms-b:0,writeTokens:d.cacheWrite,writeRatio:e>0?d.cacheWrite/e:0,compact:{trigger:a.trigger,preTokens:a.preTokens}}),G.add(c.rep.messageId)}for(let a=1;a<C.length;a++){let b=C[a-1],c=C[a];if(G.has(c.rep.messageId))continue;let d=c.rep.usage,e=d.cacheWrite+d.cacheRead,f=e>0?d.cacheWrite/e:0,g=c.ms-b.ms;g>3e5&&d.cacheWrite>=1e3&&f>=.3&&F(c,{trigger:"idle",gapMs:g,writeTokens:d.cacheWrite,writeRatio:f})}let H={...j},I=new Set,J="",K=!1,L=!1,M=0,N=0,O=0,P=0,Q=new Set,R=new Map,S=void 0!==s?(0,i.toLocalDay)(s):void 0,T=a=>{let b;if(a){let c=Date.parse(a);Number.isNaN(c)||(b=(0,i.toLocalDay)(c))}if(!(b=b??S))return;let c=R.get(b);return c||(c={toolCalls:0,turns:0,tokens:{...j}},R.set(b,c)),c};for(let a of q){if("tool-call"===a.role){M++;let b=T(a.timestamp);b&&b.toolCalls++;let c=a.blocks.find(a=>a&&"tool_use"===a.type);if(c){let a=c.input??{};if("TeamCreate"===c.name&&(K=!0),"SendMessage"===c.name){let b="string"==typeof a.to?a.to:"";b&&"team-lead"!==b&&(L=!0)}let b="string"==typeof a.file_path?a.file_path:void 0;if("Edit"===c.name&&b){Q.add(b);let c="string"==typeof a.old_string?a.old_string:"",d="string"==typeof a.new_string?a.new_string:"",e=c?c.split("\n").length:0,f=d?d.split("\n").length:0;O+=Math.max(0,f-e),P+=Math.max(0,e-f)}else if("Write"===c.name&&b){Q.add(b);let c="string"==typeof a.content?a.content:"";O+=c?c.split("\n").length:0}}}if("user"===a.role){let b=function(a){let b=a?.content;if("string"==typeof b)return b;if(Array.isArray(b)){for(let a of b)if(a&&"object"==typeof a&&"text"===a.type&&"string"==typeof a.text)return a.text}return""}(a.raw?.message),c=(0,h.isFrameworkInjectedUserInput)(b),d=void 0!==a.teammateMessage&&!g;if(!c&&!d){l||(l=a.teammateMessage?a.teammateMessage.body:a.preview),N++;let b=T(a.timestamp);b&&b.turns++,p=a.preview}}"agent"===a.role&&(o=a.preview)}for(let h of a)if(h&&"object"==typeof h&&("string"!=typeof h.sessionId||J||(J=h.sessionId),"string"!=typeof h.cwd||c||(c=h.cwd),"string"!=typeof h.gitBranch||d||(d=h.gitBranch),"string"!=typeof h.entrypoint||e||(e=h.entrypoint),"string"!=typeof h.teamName||f||(f=h.teamName),"string"!=typeof h.agentName||g||(g=h.agentName),"assistant"===h.type)){let a=h.message;if(a){"string"!=typeof a.model||b||(b=a.model);let c="string"==typeof a.id?a.id:void 0,d="string"==typeof h.requestId?h.requestId:void 0,e=null!=c?`${c}:${d??""}`:void 0;if(e&&I.has(e))continue;e&&I.add(e);let f=n(a.usage);if(f){H.input+=f.input,H.output+=f.output,H.cacheRead+=f.cacheRead,H.cacheWrite+=f.cacheWrite;let a=T("string"==typeof h.timestamp?h.timestamp:void 0);a&&(a.tokens.input+=f.input,a.tokens.output+=f.output,a.tokens.cacheRead+=f.cacheRead,a.tokens.cacheWrite+=f.cacheWrite)}}}return{events:q,meta:{sessionId:J,firstTimestamp:u,lastTimestamp:v,durationMs:void 0!==s&&void 0!==t?t-s:void 0,eventCount:q.length,model:b,cwd:c,gitBranch:d,entrypoint:e,totalUsage:H,status:"idle",firstUserPreview:l,lastUserPreview:p,lastAgentPreview:o,toolCallCount:M,turnCount:N,dailyBreakdown:Array.from(R.entries()).map(([a,b])=>({day:a,toolCalls:b.toolCalls,turns:b.turns,tokens:b.tokens})).sort((a,b)=>a.day.localeCompare(b.day)),airTimeMs:z,activeSegments:y,linesAdded:O,linesRemoved:P,filesEdited:Q.size,coldResumeCount:D,cacheRebuildTokens:E,teamName:f,agentName:g,isTeamLead:void 0!==f&&void 0===g&&(K||L)}}}let p=e.default.join(d.default.homedir(),".claude","projects");function q(a){return a.startsWith("-")?"/"+a.slice(1).replace(/-/g,"/"):a}let r=e.default.join(d.default.homedir(),".cclens","runtime").replace(/[/.]/g,"-");async function s(a){let b=await c.promises.readFile(a,"utf8"),d=[];for(let a of b.split("\n")){let b=a.trim();if(b)try{d.push(JSON.parse(b))}catch{}}return d}function t(a){return a.replace(/\.jsonl$/i,"")}let u=new Map,v=new Map,w=new Map,x=null;async function y(a=p){let b;if(x&&x.root===a&&Date.now()-x.capturedAtMs<1e3)return x.files;try{b=await c.promises.readdir(a,{withFileTypes:!0})}catch{return[]}let d=b.filter(a=>a.isDirectory()&&a.name!==r).map(a=>a.name),f=(await Promise.all(d.map(async b=>{let d,f=e.default.join(a,b);try{d=await c.promises.readdir(f)}catch{return[]}let g=d.filter(a=>a.endsWith(".jsonl"));return(await Promise.all(g.map(async a=>{let d=e.default.join(f,a);try{let e=await c.promises.stat(d);return{projectDir:b,fileName:a,fullPath:d,mtimeMs:e.mtimeMs,sizeBytes:e.size}}catch{return null}}))).filter(a=>null!==a)}))).flat();return x={files:f,capturedAtMs:Date.now(),root:a},f}async function z(a=p){let b=await y(a),c=(await Promise.all(b.map(async a=>{let b,c=w.get(a.fullPath);if(c&&c.mtimeMs===a.mtimeMs&&c.sizeBytes===a.sizeBytes)return c.events;try{b=await s(a.fullPath)}catch{return[]}let d=new Map;for(let c of b){if(!c||"object"!=typeof c||"assistant"!==c.type)continue;let b="string"==typeof c.timestamp?c.timestamp:void 0;if(!b)continue;let e=c.message;if(!e)continue;let f=e.usage;if(!f)continue;let h=(0,g.modelFamily)("string"==typeof e.model?e.model:void 0);if(null===h)continue;let i="string"==typeof e.id?e.id:`__noid_${a.fullPath}_${b}`,j=f.cache_creation??{},k=a=>"number"==typeof a?a:0;d.set(i,{ts:b,family:h,input:k(f.input_tokens),output:k(f.output_tokens),cacheRead:k(f.cache_read_input_tokens),cache_1h:k(j.ephemeral_1h_input_tokens),cache_5m:k(j.ephemeral_5m_input_tokens)})}let e=Array.from(d.values());return w.set(a.fullPath,{events:e,mtimeMs:a.mtimeMs,sizeBytes:a.sizeBytes}),e}))).flat();return c.sort((a,b)=>a.ts.localeCompare(b.ts)),c}let A={input:0,output:0,cacheRead:0,cacheWrite:0};function B(a,b,c,d,e){for(let f of a){if(!f||"object"!=typeof f||"assistant"!==f.type)continue;let a=f.message;if(!a)continue;let g="string"==typeof a.id?a.id:void 0,h="string"==typeof f.requestId?f.requestId:void 0,j=null!=g&&null!=h?`${g}:${h}`:void 0;if(j&&b.has(j))continue;j&&b.add(j);let k=a.usage;if(k){let a=a=>"number"==typeof a?a:0,b=a(k.input_tokens),g=a(k.output_tokens),h=a(k.cache_read_input_tokens),j=a(k.cache_creation_input_tokens);if(c.input+=b,c.output+=g,c.cacheRead+=h,c.cacheWrite+=j,d){let a,c="string"==typeof f.timestamp?f.timestamp:void 0;if(c){let b=Date.parse(c);Number.isNaN(b)||(a=(0,i.toLocalDay)(b))}if(a=a??e){let c=d.get(a);c||(c={...A},d.set(a,c)),c.input+=b,c.output+=g,c.cacheRead+=h,c.cacheWrite+=j}}}}}async function C(a,b,d,f){let g,h={...A},i=new Set,j=new Map;B(a,i,h,j,f);let k=e.default.join(b,d,"subagents");try{g=await c.promises.readdir(k)}catch{return{usage:h,perDay:j}}let l=g.filter(a=>a.endsWith(".jsonl"));return 0===l.length||await Promise.all(l.map(async a=>{try{let b=await s(e.default.join(k,a));B(b,i,h,j,f)}catch{}})),{usage:h,perDay:j}}async function D(a,b){let d,f=e.default.join(a,b,"workflows");try{d=await c.promises.readdir(f)}catch{return{workflowCount:0,spawnedAgentCount:0,spans:[]}}let g=d.filter(a=>a.startsWith("wf_")&&a.endsWith(".json"));if(0===g.length)return{workflowCount:0,spawnedAgentCount:0,spans:[]};let h=0,i=[];return{workflowCount:(await Promise.all(g.map(async a=>{try{let b=JSON.parse(await c.promises.readFile(e.default.join(f,a),"utf8"));return"number"==typeof b.agentCount&&(h+=b.agentCount),"number"==typeof b.startTime&&"number"==typeof b.durationMs&&b.durationMs>0&&i.push({startMs:b.startTime,endMs:b.startTime+b.durationMs}),!0}catch{return!1}}))).filter(Boolean).length,spawnedAgentCount:h,spans:i}}function E(a,b){if(0===b.length)return{};let c=[...a??[],...b].filter(a=>a.endMs>a.startMs).sort((a,b)=>a.startMs-b.startMs);if(0===c.length)return{};let d=[{...c[0]}];for(let a=1;a<c.length;a++){let b=c[a],e=d[d.length-1];b.startMs<=e.endMs?e.endMs=Math.max(e.endMs,b.endMs):d.push({...b})}let e=d.reduce((a,b)=>a+(b.endMs-b.startMs),0);return{activeSegments:d,airTimeMs:e}}async function F(a){let b=u.get(a.fullPath);if(b&&b.mtimeMs===a.mtimeMs&&b.sizeBytes===a.sizeBytes)return b.meta;try{let b=await s(a.fullPath),{meta:c}=o(b),d=t(a.fileName),f=e.default.dirname(a.fullPath),g=c.firstTimestamp?(0,i.toLocalDay)(Date.parse(c.firstTimestamp)):void 0,{usage:h,perDay:j}=await C(b,f,d,g);c.totalUsage=h,c.dailyBreakdown=function(a,b,c){let d=new Map((a??[]).map(a=>[a.day,a])),e=[...new Set([...d.keys(),...b.keys()])].sort((a,b)=>a.localeCompare(b)).map(a=>({day:a,toolCalls:d.get(a)?.toolCalls??0,turns:d.get(a)?.turns??0,tokens:{...b.get(a)??A}}));if(e.length>0){let a=e.reduce((a,b)=>({input:a.input+b.tokens.input,output:a.output+b.tokens.output,cacheRead:a.cacheRead+b.tokens.cacheRead,cacheWrite:a.cacheWrite+b.tokens.cacheWrite}),{...A}),b=e[0].tokens;b.input+=c.input-a.input,b.output+=c.output-a.output,b.cacheRead+=c.cacheRead-a.cacheRead,b.cacheWrite+=c.cacheWrite-a.cacheWrite}return e}(c.dailyBreakdown,j,h);let k=await D(f,d),l={...c,id:d,filePath:a.fullPath,projectDir:a.projectDir,projectName:c.cwd??q(a.projectDir),...k.workflowCount>0?{workflowCount:k.workflowCount,spawnedAgentCount:k.spawnedAgentCount}:{},...E(c.activeSegments,k.spans)};return u.set(a.fullPath,{meta:l,mtimeMs:a.mtimeMs,sizeBytes:a.sizeBytes}),l}catch{return null}}async function G(a){let b=v.get(a.fullPath);if(b&&b.mtimeMs===a.mtimeMs&&b.sizeBytes===a.sizeBytes)return b.detail;try{let b=await s(a.fullPath),{meta:c,events:d}=o(b),f=t(a.fileName),g=await D(e.default.dirname(a.fullPath),f),h={...c,id:f,filePath:a.fullPath,projectDir:a.projectDir,projectName:c.cwd??q(a.projectDir),events:d,...g.workflowCount>0?{workflowCount:g.workflowCount,spawnedAgentCount:g.spawnedAgentCount}:{},...E(c.activeSegments,g.spans)};v.set(a.fullPath,{detail:h,mtimeMs:a.mtimeMs,sizeBytes:a.sizeBytes});let i={...h};return delete i.events,u.set(a.fullPath,{meta:i,mtimeMs:a.mtimeMs,sizeBytes:a.sizeBytes}),h}catch{return null}}async function H(a={}){let{root:b=p,limit:c=500,projectDir:d}=a,e=await y(b);d&&(e=e.filter(a=>a.projectDir===d)),e.sort((a,b)=>b.mtimeMs-a.mtimeMs);let f=e.slice(0,c);return(await Promise.all(f.map(a=>F(a)))).filter(a=>null!==a)}async function I(a,b={}){let{root:c=p}=b,d=(await y(c)).find(b=>t(b.fileName)===a);if(!d)return null;let f=await G(d);if(!f)return f;let g=f.firstTimestamp?Date.parse(f.firstTimestamp):void 0,h=e.default.join(e.default.dirname(d.fullPath),t(d.fileName),"subagents"),i=e.default.join(e.default.dirname(d.fullPath),t(d.fileName),"workflows"),[j,k]=await Promise.all([J(h,g,f.events),K(i,g,f.events)]),l=k.reduce((a,b)=>a+b.agentCount,0);return{...f,subagents:j,workflows:k,...k.length>0?{workflowCount:k.length,spawnedAgentCount:l}:{}}}async function J(a,b,d){let f;try{f=await c.promises.readdir(a)}catch{return[]}let g=new Map,h=[];for(let a of d)if("tool-call"===a.role&&"Agent"===a.toolName)for(let b of a.blocks){if(b?.type!=="tool_use"||"Agent"!==b.name)continue;let c=b.input??{},d="string"==typeof c.description?c.description:void 0,e=a.timestamp?Date.parse(a.timestamp):void 0,f={toolUseId:b.id,parentUuid:a.uuid??"",runInBackground:!0===c.run_in_background,prompt:"string"==typeof c.prompt?c.prompt:void 0,tsMs:e};d&&g.set(d,f),void 0!==e&&h.push(f)}h.sort((a,b)=>(a.tsMs??0)-(b.tsMs??0));let i=f.filter(a=>a.startsWith("agent-")&&a.endsWith(".jsonl"));return(await Promise.all(i.map(async d=>{let f,i=d.replace(/^agent-/,"").replace(/\.jsonl$/,""),j=e.default.join(a,d),k=e.default.join(a,`agent-${i}.meta.json`),l={};try{let a=await c.promises.readFile(k,"utf8");l=JSON.parse(a)}catch{}try{f=await s(j)}catch{return null}let m=function(a){let b,c,d,e,f,g={...A},h=new Set,i=0,j=0,k=0,l=new Map;for(let m of a){if(!m||"object"!=typeof m)continue;i++;let a="string"==typeof m.timestamp?Date.parse(m.timestamp):NaN;if(!Number.isNaN(a)&&((void 0===b||a<b)&&(b=a),(void 0===c||a>c)&&(c=a)),void 0===f&&"user"===m.type&&(null===m.parentUuid||void 0===m.parentUuid)){let a=m.message,b=a?.content;if("string"==typeof b)f=b;else if(Array.isArray(b)){let a=b.find(a=>a&&"object"==typeof a&&"text"===a.type);a?.text&&(f=a.text)}}if("assistant"===m.type){let a=m.message;if(!a)continue;e||"string"!=typeof a.model||(e=a.model);let b="string"==typeof a.id?a.id:void 0,c="string"==typeof m.requestId?m.requestId:void 0,f=null!=b&&null!=c?`${b}:${c}`:void 0,i=!f||!h.has(f);if(f&&i&&h.add(f),i){j++;let b=a.usage;if(b){let a=a=>"number"==typeof a?a:0;g.input+=a(b.input_tokens),g.output+=a(b.output_tokens),g.cacheRead+=a(b.cache_read_input_tokens),g.cacheWrite+=a(b.cache_creation_input_tokens)}}let n=a.content;if(Array.isArray(n))for(let a of n)a&&"object"==typeof a&&("text"===a.type&&"string"==typeof a.text?d=a.text:"tool_use"===a.type&&"string"==typeof a.name&&(k++,l.set(a.name,(l.get(a.name)??0)+1)))}}let m=Array.from(l.entries()).map(([a,b])=>({name:a,count:b})).sort((a,b)=>b.count-a.count);return{startMs:b,endMs:c,totalUsage:g,eventCount:i,finalPreview:void 0!==d?d.replace(/\s+/g," ").trim().slice(0,240):void 0,finalText:d,model:e,toolCalls:m,toolCallCount:k,assistantMessageCount:j,initialPrompt:f}}(f),n=l.description&&l.description.trim().length>0?l.description:void 0,o=n?g.get(n):function(a){let b;if(void 0===a)return;let c=1/0;for(let d of h){if(void 0===d.tsMs)continue;let e=Math.abs(a-d.tsMs);e<c&&e<=2e3&&(b=d,c=e)}return b}(m.startMs),p=n??(m.initialPrompt?m.initialPrompt.replace(/\s+/g," ").trim().slice(0,80):"(no description)"),q=o?.prompt??m.initialPrompt,r=void 0!==b&&void 0!==m.startMs?Math.max(0,m.startMs-b):void 0,t=void 0!==b&&void 0!==m.endMs?Math.max(0,m.endMs-b):void 0,u=void 0!==m.startMs&&void 0!==m.endMs?m.endMs-m.startMs:void 0;return{agentId:i,agentType:l.agentType??"unknown",description:p,startMs:m.startMs,endMs:m.endMs,durationMs:u,startTOffsetMs:r,endTOffsetMs:t,eventCount:m.eventCount,totalUsage:m.totalUsage,parentUuid:o?.parentUuid,parentToolUseId:o?.toolUseId,runInBackground:o?.runInBackground,prompt:q,finalPreview:m.finalPreview,finalText:m.finalText,model:m.model,toolCalls:m.toolCalls,toolCallCount:m.toolCallCount,assistantMessageCount:m.assistantMessageCount}}))).filter(a=>null!==a).sort((a,b)=>(a.startMs??0)-(b.startMs??0))}async function K(a,b,d){let f;try{f=await c.promises.readdir(a)}catch{return[]}let g=f.filter(a=>a.startsWith("wf_")&&a.endsWith(".json"));if(0===g.length)return[];let h=[];for(let a of d){if("tool-call"!==a.role||"Workflow"!==a.toolName)continue;let b=a.timestamp?Date.parse(a.timestamp):NaN;if(!Number.isNaN(b))for(let c of a.blocks)c?.type==="tool_use"&&"Workflow"===c.name&&h.push({toolUseId:c.id,parentUuid:a.uuid??"",tsMs:b})}h.sort((a,b)=>a.tsMs-b.tsMs);let i=a=>"number"==typeof a?a:void 0,j=a=>"string"==typeof a&&a.length>0?a:void 0;return(await Promise.all(g.map(async d=>{let f;try{f=JSON.parse(await c.promises.readFile(e.default.join(a,d),"utf8"))}catch{return null}let g=j(f.runId)??d.replace(/\.json$/,""),k=i(f.startTime),l=i(f.durationMs),m=void 0!==k&&void 0!==l?k+l:void 0,n=void 0!==b&&void 0!==k?Math.max(0,k-b):void 0,o=void 0!==b&&void 0!==m?Math.max(0,m-b):void 0,p=Array.isArray(f.phases)?f.phases.filter(a=>!!a&&"object"==typeof a&&"string"==typeof a.title).map(a=>({title:a.title,detail:j(a.detail)})):[],q=Array.isArray(f.logs)?f.logs.filter(a=>"string"==typeof a):[],r=(a,b)=>{let c=j(a);return void 0===c?void 0:c.length>b?c.slice(0,b)+"…":c},s=(Array.isArray(f.workflowProgress)?f.workflowProgress:[]).filter(a=>!!a&&"object"==typeof a&&"workflow_agent"===a.type).map(a=>({index:i(a.index)??0,label:j(a.label)??"(agent)",phaseIndex:i(a.phaseIndex),phaseTitle:j(a.phaseTitle),agentId:j(a.agentId),model:j(a.model),state:j(a.state),startedAt:i(a.startedAt),durationMs:i(a.durationMs),tokens:i(a.tokens),toolCalls:i(a.toolCalls),lastToolSummary:r(a.lastToolSummary,200),promptPreview:r(a.promptPreview,600),resultPreview:r(a.resultPreview,600)})).sort((a,b)=>a.index-b.index),t=(a=>{let b,c;if(void 0===a||0===h.length)return;let d=1/0,e=1/0;for(let f of h){let g=Math.abs(a-f.tsMs);!(g>6e4)&&(g<e&&(c=f,e=g),f.tsMs<=a&&g<d&&(b=f,d=g))}return b??c})(k);return{runId:g,name:j(f.workflowName)??g,description:j(f.summary),status:j(f.status)??"unknown",agentCount:i(f.agentCount)??0,toolCallCount:i(f.totalToolCalls)??0,totalTokens:i(f.totalTokens)??0,durationMs:l,startMs:k,endMs:m,startTOffsetMs:n,endTOffsetMs:o,model:j(f.defaultModel),phases:p,logs:q,agents:s,parentToolUseId:t?.toolUseId,parentUuid:t?.parentUuid}}))).filter(a=>null!==a).sort((a,b)=>(a.startMs??0)-(b.startMs??0))}async function L(a=p){let b=await y(a),c=new Map;for(let a of b){let b=c.get(a.projectDir)??{count:0,lastActiveMs:0};b.count++,a.mtimeMs>b.lastActiveMs&&(b.lastActiveMs=a.mtimeMs),c.set(a.projectDir,b)}let d=a=>{for(let[,b]of u.entries())if(b.meta.projectDir===a&&b.meta.cwd)return b.meta.cwd},e=new Map;for(let[a,{count:b,lastActiveMs:f}]of c){let c=d(a)??q(a),g=(0,i.projectRepoName)(c),h=(0,i.worktreeName)(c),j=e.get(g)??{canonicalName:g,count:0,lastActiveMs:0,worktreeBranches:new Set};j.count+=b,f>j.lastActiveMs&&(j.lastActiveMs=f),h&&j.worktreeBranches.add(h),e.set(g,j)}return Array.from(e.values()).map(a=>({projectDir:a.canonicalName,projectName:a.canonicalName,sessionCount:a.count,lastActiveMs:a.lastActiveMs,worktreeCount:a.worktreeBranches.size})).sort((a,b)=>b.lastActiveMs-a.lastActiveMs)}async function M(a,b={}){let{root:c=p}=b,d=await H({root:c}),e=d.find(b=>b.sessionId===a);if(!e||!e.teamName)return null;let f=e.teamName,g=d.filter(a=>a.teamName===f&&!a.filePath.includes("/subagents/")),h=await Promise.all(g.map(a=>I(a.sessionId,{root:c}))),i=new Map;g.forEach((a,b)=>{let c=h[b];c&&i.set(a.sessionId,c)});let j=(function(a,b){let c=new Map;for(let b of a){if(!b.teamName)continue;let a=c.get(b.teamName)??[];a.push(b),c.set(b.teamName,a)}let d=[];for(let[a,e]of c){let c=function(a,b,c){let d,e=b.filter(a=>a.isTeamLead);if(0===e.length)return null;for(let a of e){let b=c.get(a.sessionId);if(b&&function(a){for(let b of a)if("tool-call"===b.role&&"TeamCreate"===b.toolName)return!0;return!1}(b.events)){d=a;break}}d||(d=[...e].sort((a,b)=>Date.parse(a.firstTimestamp??"")-Date.parse(b.firstTimestamp??""))[0]);let f=new Map;for(let a of b)f.set(a.sessionId,a.agentName);let g=b.filter(a=>a.sessionId!==d.sessionId).sort((a,b)=>Date.parse(a.firstTimestamp??"")-Date.parse(b.firstTimestamp??"")),h=new Map;for(let a of g)a.agentName&&h.set(a.agentName,a.sessionId);let i=[];for(let a of b){let b=c.get(a.sessionId);if(!b)continue;let e=a.sessionId,f=a.agentName??"team-lead";for(let a of b.events){let b=function(a){if("tool-call"!==a.role||"SendMessage"!==a.toolName)return null;for(let b of a.blocks){if(!b||"object"!=typeof b||"tool_use"!==b.type)continue;let a=b.input??{},c="string"==typeof a.to?a.to:"",d="string"==typeof a.message?a.message:"";if(!c)break;return{to:c,body:d}}return null}(a);if(!b)continue;let c=b.to,g="team-lead"===c?d.sessionId:h.get(c)??"";i.push({tsMs:a.timestamp?Date.parse(a.timestamp):0,fromSessionId:e,fromTeammateId:f,toSessionId:g,toTeammateId:c,body:b.body,kind:"message"})}}i.sort((a,b)=>a.tsMs-b.tsMs);let j=[];for(let a of b)a.firstTimestamp&&j.push(Date.parse(a.firstTimestamp)),a.lastTimestamp&&j.push(Date.parse(a.lastTimestamp));let k=j.length?Math.min(...j):0,l=j.length?Math.max(...j):0;return{teamName:a,leadSessionId:d.sessionId,memberSessionIds:g.map(a=>a.sessionId),agentNameBySessionId:f,messages:i,firstEventMs:k,lastEventMs:l}}(a,e,b);c&&d.push(c)}return d})(g,i).find(a=>a.teamName===f);return j?{view:j,details:i}:null}async function N(a,b={}){let{root:c=p}=b,d=await H({root:c}),e=d.find(b=>b.sessionId===a);if(!e||!e.teamName||!e.agentName||e.isTeamLead)return null;let f=d.filter(a=>a.teamName===e.teamName&&a.isTeamLead&&!a.filePath.includes("/subagents/"));return 0===f.length?null:{leadSessionId:f[0].sessionId,teamName:e.teamName,agentName:e.agentName}}let O={...f.CLAUDE_CODE_METADATA,defaultRoot:p,async listSessions(a){let b=await H(a);for(let a of b)a.agent||(a.agent="claude-code");return b},async getSession(a,b){let c=await I(a,b);return c&&!c.agent&&(c.agent="claude-code"),c}};a.s(["DEFAULT_ROOT",0,p,"claudeCodeSource",0,O,"findTeamLead",0,N,"listProjects",0,L,"loadCalibrationEvents",0,z,"loadTeamForSession",0,M,"walkJsonlFiles",0,y],88522);let P=e.default.join(d.default.homedir(),".codex","sessions"),Q=/^rollout-(\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2})-([0-9a-f-]+)\.jsonl$/;async function R(a){return c.promises.readdir(a).catch(()=>[])}async function S(a){let b=[];for(let d of(await R(a))){if(!/^\d{4}$/.test(d))continue;let f=e.default.join(a,d);for(let a of(await R(f))){if(!/^\d{2}$/.test(a))continue;let d=e.default.join(f,a);for(let a of(await R(d))){if(!/^\d{2}$/.test(a))continue;let f=e.default.join(d,a);for(let a of(await R(f))){let d=Q.exec(a);if(!d)continue;let g=e.default.join(f,a),h=await c.promises.stat(g).catch(()=>null);h&&b.push({filePath:g,sessionId:d[2],mtimeMs:h.mtimeMs,sizeBytes:h.size})}}}}return b}async function T(a){let b=await c.promises.readFile(a,"utf8"),d=[];for(let a of b.split("\n")){let b=a.trim();if(b)try{d.push(JSON.parse(b))}catch{}}return d}function U(a){return a.replace(/\s+/g," ").trim().slice(0,200)}function V(a,b){let c,d,e,f,g,j,k,l=[],m={input:0,output:0,cacheRead:0,cacheWrite:0},n=0,o=0,p=[],q=0;for(let a of b){if("object"!=typeof a||null===a)continue;let b="string"==typeof a.timestamp?a.timestamp:void 0;if(b){c||(c=b),d=b;let a=Date.parse(b);Number.isFinite(a)&&p.push(a)}let i="string"==typeof a.type?a.type:"",s=a.payload??{},t="string"==typeof s.type?s.type:"";if("session_meta"===i){"string"==typeof s.cwd&&(e=s.cwd);continue}if("turn_context"===i){"string"==typeof s.cwd&&(e=s.cwd),"string"==typeof s.model&&(f=s.model);continue}if("event_msg"===i&&"token_count"===t){let a=s.info??null,b=a?.total_token_usage??null;b&&(m.input=W(b.input_tokens)??m.input,m.output=W(b.output_tokens)??m.output,m.cacheRead=W(b.cached_input_tokens)??m.cacheRead);continue}if("event_msg"===i&&"user_message"===t){let c="string"==typeof s.message?s.message:"",d=U(c),e=(0,h.isFrameworkInjectedUserInput)(c);c&&!e&&(g||(g=d),j=d,o+=1),l.push({index:q++,timestamp:b,role:"user",rawType:"event_msg/user_message",preview:d,blocks:c?[{type:"text",text:c}]:[],raw:a});continue}if("event_msg"===i&&"agent_message"===t){let c="string"==typeof s.message?s.message:"",d=U(c);c&&(k=d),l.push({index:q++,timestamp:b,role:"agent",rawType:"event_msg/agent_message",preview:d,blocks:c?[{type:"text",text:c}]:[],model:f,raw:a});continue}if("response_item"===i&&"reasoning"===t){let c=(s.summary??[]).map(a=>"string"==typeof a.text?a.text:"").join("\n").trim();l.push({index:q++,timestamp:b,role:"agent-thinking",rawType:"response_item/reasoning",preview:U(c),blocks:c?[{type:"thinking",thinking:c}]:[],model:f,raw:a});continue}if("response_item"===i&&"message"===t&&"assistant"===s.role){let c=(s.content??[]).map(a=>"string"==typeof a.text?a.text:"").join("\n").trim(),d=U(c);c&&(k=d),l.push({index:q++,timestamp:b,role:"agent",rawType:"response_item/message",preview:d,blocks:c?[{type:"text",text:c}]:[],model:f,raw:a});continue}if("response_item"===i&&"function_call"===t){var r;let c="string"==typeof s.name?s.name:"(unknown)",d="string"==typeof s.call_id?s.call_id:void 0,e="string"==typeof s.arguments?s.arguments:"",g=function(a){if(!a)return null;try{return JSON.parse(a)}catch{return a}}(e);n+=1,l.push({index:q++,timestamp:b,role:"tool-call",rawType:"response_item/function_call",preview:`${c}(${(r=e).length<=80?r:r.slice(0,79)+"…"})`,blocks:[{type:"tool_use",id:d??`codex-${q}`,name:c,input:g}],toolName:c,toolUseId:d,model:f,raw:a});continue}if("response_item"===i&&"function_call_output"===t){let c="string"==typeof s.call_id?s.call_id:void 0,d="string"==typeof s.output?s.output:"",e=/process exited with code [1-9]/i.test(d);l.push({index:q++,timestamp:b,role:"tool-result",rawType:"response_item/function_call_output",preview:U(d),blocks:[{type:"tool_result",tool_use_id:c??"",content:d,is_error:e}],toolUseId:c,toolResult:d,raw:a});continue}l.push({index:q++,timestamp:b,role:"meta",rawType:t?`${i}/${t}`:i,preview:"",blocks:[],raw:a})}if(m.input>0||m.output>0){let b=-1;for(let a=l.length-1;a>=0;a--){let c=l[a].role;if("agent"===c||"agent-thinking"===c||"tool-call"===c){b=a;break}}if(b>=0){let c=l[b];c.messageId=`codex-${a.sessionId}-total`,c.usage={input:m.input,output:m.output,cacheRead:m.cacheRead,cacheWrite:0}}}let s=c?Date.parse(c):void 0;if(void 0!==s&&Number.isFinite(s)){let a;for(let b of l){if(!b.timestamp)continue;let c=Date.parse(b.timestamp);Number.isFinite(c)&&(b.tOffsetMs=Math.max(0,c-s),void 0!==a&&(b.gapMs=Math.max(0,c-a)),a=c)}}let t=function(a){if(0===a.length)return[];let b=[...a].sort((a,b)=>a-b),c=[],d=b[0],e=b[0];for(let a=1;a<b.length;a++)b[a]-e>18e4&&(c.push({startMs:d,endMs:e}),d=b[a]),e=b[a];return c.push({startMs:d,endMs:e}),c}(p),u=t.reduce((a,b)=>a+(b.endMs-b.startMs),0),v=c&&d?Date.parse(d)-Date.parse(c):void 0,w=e?(0,i.canonicalProjectName)(e):"(unknown)",x=e?e.replace(/^\//,"-").replace(/\//g,"-"):"(unknown)";return{meta:{agent:"codex",id:a.sessionId,filePath:a.filePath,projectName:w,projectDir:x,sessionId:a.sessionId,firstTimestamp:c,lastTimestamp:d,durationMs:v&&Number.isFinite(v)?v:void 0,eventCount:l.length,model:f,cwd:e,totalUsage:m,status:"idle",firstUserPreview:g,lastUserPreview:j,lastAgentPreview:k,toolCallCount:n,turnCount:o,airTimeMs:u,activeSegments:t},events:l}}function W(a){return"number"==typeof a&&Number.isFinite(a)?a:void 0}let X=new Map,Y=new Map;async function Z(a={}){let b=a.root??P,c=await S(b),d=[];for(let a of c){let b=X.get(a.filePath);if(b&&b.mtimeMs===a.mtimeMs&&b.sizeBytes===a.sizeBytes){d.push(b.meta);continue}try{let b=await T(a.filePath),{meta:c}=V(a,b);X.set(a.filePath,{meta:c,mtimeMs:a.mtimeMs,sizeBytes:a.sizeBytes}),d.push(c)}catch{}}return(d.sort((a,b)=>(b.firstTimestamp??"").localeCompare(a.firstTimestamp??"")),void 0!==a.limit)?d.slice(0,a.limit):d}async function $(a,b={}){let c=b.root??P,d=(await S(c)).find(b=>b.sessionId===a);if(!d)return null;let e=Y.get(d.filePath);if(e&&e.mtimeMs===d.mtimeMs&&e.sizeBytes===d.sizeBytes)return e.detail;let f=await T(d.filePath),{meta:g,events:h}=V(d,f),i={...g,events:h};return Y.set(d.filePath,{detail:i,mtimeMs:d.mtimeMs,sizeBytes:d.sizeBytes}),i}async function _(a={}){let b=a.root??P,c=await S(b);if(0===c.length)return null;for(let a of(c.sort((a,b)=>b.mtimeMs-a.mtimeMs),c)){let b=await T(a.filePath);for(let c=b.length-1;c>=0;c--){let d=b[c];if("object"!=typeof d||null===d||"event_msg"!==d.type)continue;let e=d.payload??{};if("token_count"!==e.type)continue;let f=e.rate_limits??null;if(!f)continue;let g=f.primary??null,h=f.secondary??null,i=W(g?.used_percent),j=W(h?.used_percent),k=W(g?.resets_at),l=W(h?.resets_at),m="string"==typeof f.plan_type?f.plan_type:null;return{five_hour:{utilization:i??null,resets_at:void 0!==k?new Date(1e3*k).toISOString():null},seven_day:{utilization:j??null,resets_at:void 0!==l?new Date(1e3*l).toISOString():null},plan_type:m,source_path:a.filePath}}}return null}let aa=e.default.join(d.default.homedir(),".gemini","tmp"),ab=e.default.join(d.default.homedir(),".gemini","projects.json"),ac=/^session-.+\.(jsonl|json)$/;async function ad(a){return c.promises.readdir(a).catch(()=>[])}async function ae(a){let b=[];for(let d of(await ad(a))){let f=e.default.join(a,d,"chats");for(let a of(await ad(f))){if(!ac.test(a))continue;let g=e.default.join(f,a),h=await c.promises.stat(g).catch(()=>null);if(!h||!h.isFile())continue;let i=a.replace(/\.(jsonl|json)$/,"").split("-").pop()??a;b.push({filePath:g,slug:d,filenameId:i,format:a.endsWith(".jsonl")?"jsonl":"legacy-json",mtimeMs:h.mtimeMs,sizeBytes:h.size})}}return b}let af=null;async function ag(){let a,b=await c.promises.stat(ab).catch(()=>null);if(!b)return new Map;if(af&&af.mtimeMs===b.mtimeMs)return af.slugToCwd;let d=await c.promises.readFile(ab,"utf8").catch(()=>"");try{a=JSON.parse(d)}catch{a={}}let e=new Map;for(let[b,c]of Object.entries(a.projects??{}))"string"==typeof c&&e.set(c,b);return af={mtimeMs:b.mtimeMs,slugToCwd:e},e}function ah(a){return!!a&&"object"==typeof a&&"string"==typeof a.id&&"string"==typeof a.type}async function ai(a){let b=await c.promises.readFile(a.filePath,"utf8");if("legacy-json"===a.format){let a;try{a=JSON.parse(b)}catch{return{meta:{},messages:[]}}return{meta:{sessionId:"string"==typeof a.sessionId?a.sessionId:void 0,projectHash:"string"==typeof a.projectHash?a.projectHash:void 0,startTime:"string"==typeof a.startTime?a.startTime:void 0,lastUpdated:"string"==typeof a.lastUpdated?a.lastUpdated:void 0,summary:"string"==typeof a.summary?a.summary:void 0},messages:(Array.isArray(a.messages)?a.messages:[]).filter(ah)}}let d={},e=new Map,f=[];for(let a of b.split("\n")){let b,c=a.trim();if(c){var g,h;try{b=JSON.parse(c)}catch{continue}if((g=b)&&"object"==typeof g&&"$rewindTo"in g){let a=b.$rewindTo,c=f.indexOf(a);if(c>=0){for(let a of f.slice(c))e.delete(a);f.length=c}continue}if((h=b)&&"object"==typeof h&&"$set"in h){Object.assign(d,b.$set);continue}if(ah(b)){e.has(b.id)||f.push(b.id),e.set(b.id,b);continue}if("object"==typeof b&&null!==b){let a=b;"string"!=typeof a.sessionId||d.sessionId||(d.sessionId=a.sessionId,"string"==typeof a.projectHash&&(d.projectHash=a.projectHash),"string"==typeof a.startTime&&(d.startTime=a.startTime),"string"==typeof a.lastUpdated&&(d.lastUpdated=a.lastUpdated),"string"==typeof a.summary&&(d.summary=a.summary))}}}let i=[];for(let a of f){let b=e.get(a);b&&i.push(b)}return{meta:d,messages:i}}function aj(a){return a.replace(/\s+/g," ").trim().slice(0,200)}function ak(a){if(!a)return"";if("string"==typeof a)return a;let b=Array.isArray(a)?a:[a],c=[];for(let a of b){if(!a||"object"!=typeof a)continue;if("string"==typeof a.text){c.push(a.text);continue}let b=a.functionResponse;if(b){let a=b.response;"string"==typeof a?c.push(a):a&&"object"==typeof a&&("string"==typeof a.output?c.push(a.output):"string"==typeof a.error?c.push(`error: ${a.error}`):c.push(JSON.stringify(a)))}}return c.join("\n")}async function al(a){let b,c,d,e,f,g,{meta:j,messages:k}=await ai(a),l=(await ag()).get(a.slug),m=[],n={input:0,output:0,cacheRead:0,cacheWrite:0},o=0,p=0,q=[],r=0;function s(a){if(m.push(a),a.timestamp&&"meta"!==a.role){b||(b=a.timestamp),c=a.timestamp;let d=Date.parse(a.timestamp);Number.isFinite(d)&&q.push(d)}}for(let a of k){let b=a.timestamp;if("user"===a.type){let c=ak(a.displayContent??a.content),d=aj(c),g=(0,h.isFrameworkInjectedUserInput)(c);c&&!g&&(e||(e=d),f=d,p+=1),s({index:r++,timestamp:b,role:"user",rawType:"gemini/user",preview:d,blocks:c?[{type:"text",text:c}]:[],messageId:a.id,raw:a});continue}if("gemini"===a.type){let c;"string"==typeof a.model&&(d=a.model);let e=ak(a.content),f=aj(e);if(e&&(g=f),a.tokens){let b=a.tokens,d={input:b.input??0,output:b.output??0,cacheRead:b.cached??0,cacheWrite:0};c=d,n.input+=d.input,n.output+=d.output,n.cacheRead+=d.cacheRead}for(let c of a.thoughts??[]){let a=[c.subject,c.description].filter(Boolean).join(": ");a&&s({index:r++,timestamp:c.timestamp??b,role:"agent-thinking",rawType:"gemini/thought",preview:aj(a),blocks:[{type:"thinking",thinking:a}],model:d,raw:c})}for(let g of(e?s({index:r++,timestamp:b,role:"agent",rawType:"gemini/agent",preview:f,blocks:[{type:"text",text:e}],messageId:a.id,model:d,usage:c,raw:a}):c&&s({index:r++,timestamp:b,role:"agent",rawType:"gemini/agent",preview:"",blocks:[],messageId:a.id,model:d,usage:c,raw:a}),a.toolCalls??[])){o+=1;let a=g.args?JSON.stringify(g.args):"";s({index:r++,timestamp:g.timestamp??b,role:"tool-call",rawType:"gemini/tool_call",preview:`${g.name}(${a.length<=80?a:a.slice(0,79)+"…"})`,blocks:[{type:"tool_use",id:g.id,name:g.name,input:g.args??{}}],toolName:g.name,toolUseId:g.id,model:d,raw:g});let c=(g.status??"").toLowerCase();if("success"===c||"error"===c||"cancelled"===c){let a=ak(g.result);s({index:r++,timestamp:g.timestamp??b,role:"tool-result",rawType:"gemini/tool_result",preview:aj(a),blocks:[{type:"tool_result",tool_use_id:g.id,content:a,is_error:"error"===c||"cancelled"===c}],toolUseId:g.id,toolResult:a,raw:g})}}continue}if("info"===a.type||"warning"===a.type||"error"===a.type){let c=ak(a.content);s({index:r++,timestamp:b,role:"meta",rawType:`gemini/${a.type}`,preview:aj(c),blocks:c?[{type:"text",text:c}]:[],raw:a});continue}}let t=b?Date.parse(b):void 0;if(void 0!==t&&Number.isFinite(t)){let a;for(let b of m){if(!b.timestamp)continue;let c=Date.parse(b.timestamp);Number.isFinite(c)&&(b.tOffsetMs=Math.max(0,c-t),void 0!==a&&(b.gapMs=Math.max(0,c-a)),a=c)}}let u=function(a){if(0===a.length)return[];let b=[...a].sort((a,b)=>a-b),c=[],d=b[0],e=b[0];for(let a=1;a<b.length;a++)b[a]-e>18e4&&(c.push({startMs:d,endMs:e}),d=b[a]),e=b[a];return c.push({startMs:d,endMs:e}),c}(q),v=u.reduce((a,b)=>a+(b.endMs-b.startMs),0),w=b&&c?Date.parse(c)-Date.parse(b):void 0,x=j.sessionId??a.filenameId,y=l?(0,i.canonicalProjectName)(l):a.slug,z=l?l.replace(/^\//,"-").replace(/\//g,"-"):a.slug;return{meta:{agent:"gemini",id:x,filePath:a.filePath,projectName:y,projectDir:z,sessionId:x,firstTimestamp:b,lastTimestamp:c,durationMs:w&&Number.isFinite(w)?w:void 0,eventCount:m.length,model:d,cwd:l,totalUsage:n,status:"idle",firstUserPreview:e,lastUserPreview:f,lastAgentPreview:g,toolCallCount:o,turnCount:p,airTimeMs:v,activeSegments:u},events:m}}let am=new Map,an=new Map;async function ao(a={}){let b=a.root??aa,c=await ae(b),d=[];for(let a of c){let b=am.get(a.filePath);if(b&&b.mtimeMs===a.mtimeMs&&b.sizeBytes===a.sizeBytes){d.push(b.meta);continue}try{let{meta:b}=await al(a);am.set(a.filePath,{meta:b,mtimeMs:a.mtimeMs,sizeBytes:a.sizeBytes}),d.push(b)}catch{}}return(d.sort((a,b)=>(b.firstTimestamp??"").localeCompare(a.firstTimestamp??"")),void 0!==a.limit)?d.slice(0,a.limit):d}async function ap(a,b={}){let c,d=b.root??aa,e=await ae(d);for(let b of e)if(b.filenameId===a||a.startsWith(b.filenameId)){c=b;break}if(!c)for(let b of e){let{meta:d}=await al(b).catch(()=>({meta:{id:""}}));if(d.id===a){c=b;break}}if(!c)return null;let f=an.get(c.filePath);if(f&&f.mtimeMs===c.mtimeMs&&f.sizeBytes===c.sizeBytes)return f.detail;let{meta:g,events:h}=await al(c),i={...g,events:h};return an.set(c.filePath,{detail:i,mtimeMs:c.mtimeMs,sizeBytes:c.sizeBytes}),i}let aq=e.default.join(d.default.homedir(),".gemini","antigravity-cli");async function ar(a){return c.promises.readdir(a).catch(()=>[])}let as=null;async function at(a){let b=e.default.join(a,"history.jsonl"),d=await c.promises.stat(b).catch(()=>null);if(!d)return new Map;if(as&&as.mtimeMs===d.mtimeMs)return as.slugToCwd;let f=await c.promises.readFile(b,"utf8").catch(()=>""),g=new Map;for(let a of f.split("\n")){let b=a.trim();if(b)try{let a=JSON.parse(b);a.conversationId&&a.workspace&&g.set(a.conversationId,a.workspace)}catch{}}return as={mtimeMs:d.mtimeMs,slugToCwd:g},g}async function au(a){let b=await at(a),d=[],f=e.default.join(a,"brain");for(let a of(await ar(f))){let g=e.default.join(f,a,".system_generated","logs","transcript.jsonl"),h=await c.promises.stat(g).catch(()=>null);h&&h.isFile()&&d.push({filePath:g,conversationId:a,cwd:b.get(a),mtimeMs:h.mtimeMs,sizeBytes:h.size})}return d}function av(a){return a.replace(/\s+/g," ").trim().slice(0,200)}async function aw(a){let b,d,e,f,g,j,k=await c.promises.readFile(a.filePath,"utf8"),l=[],m=0,n=0,o=[],p=0;function q(a){if(l.push(a),a.timestamp&&"meta"!==a.role){b||(b=a.timestamp),d=a.timestamp;let c=Date.parse(a.timestamp);Number.isFinite(c)&&o.push(c)}}let r=[],s=[],t=new Map;for(let a of k.split("\n")){let b=a.trim();if(b)try{let a=JSON.parse(b),c=a.step_index;"number"==typeof c?t.has(c)?s[t.get(c)]=a:(t.set(c,s.length),s.push(a)):s.push(a)}catch{}}for(let a of s){let b=a.created_at||a.timestamp;if("USER_INPUT"===a.type){if("string"==typeof a.content){let b=a.content.match(/Model Selection` from .*? to (.*?)\.\s*No need to/);if(b){let a=b[1].trim();e=a=a.replace(/\s*\(.*?\)\s*$/,"").trim()}else{let b=a.content.match(/Model Selection` from .*? to ([^\n]+)/);if(b){let a=b[1].trim();a.endsWith(".")&&(a=a.slice(0,-1).trim()),e=a=a.replace(/\s*\(.*?\)\s*$/,"").trim()}}}let c=a.content||"",d=c.match(/<USER_REQUEST>([\s\S]*?)<\/USER_REQUEST>/);d&&(c=d[1].trim());let i=av(c),j=(0,h.isFrameworkInjectedUserInput)(c);c&&!j&&(f||(f=i),g=i,n+=1),q({index:p++,timestamp:b,role:"user",rawType:"antigravity/user",preview:i,blocks:c?[{type:"text",text:c}]:[],messageId:a.step_index?.toString(),raw:a});continue}if("PLANNER_RESPONSE"===a.type){let c=a.thinking,d=a.content;if(c&&q({index:p++,timestamp:b,role:"agent-thinking",rawType:"antigravity/thought",preview:av(c),blocks:[{type:"thinking",thinking:c}],model:e,raw:a}),d){let c=av(d);j=c,q({index:p++,timestamp:b,role:"agent",rawType:"antigravity/agent",preview:c,blocks:[{type:"text",text:d}],messageId:a.step_index?.toString(),model:e,raw:a})}let f=a.tool_calls||[];for(let c=0;c<f.length;c++){let d=f[c];m+=1;let g=`tool-${a.step_index}-${c}`,h=d.args?JSON.stringify(d.args):"";r.push({id:g,name:d.name}),q({index:p++,timestamp:b,role:"tool-call",rawType:"antigravity/tool_call",preview:`${d.name}(${h.length<=80?h:h.slice(0,79)+"…"})`,blocks:[{type:"tool_use",id:g,name:d.name,input:d.args||{}}],toolName:d.name,toolUseId:g,model:e,raw:d})}continue}if("MODEL"===a.source&&"PLANNER_RESPONSE"!==a.type&&"ERROR_MESSAGE"!==a.type&&r.length>0){let c=r.shift(),d=c?c.id:`tool-${a.step_index}-unknown`,e="string"==typeof a.content?a.content:JSON.stringify(a.content||""),f="ERROR"===a.status||"FAILED"===a.status||"CANCELED"===a.status||!!a.error;q({index:p++,timestamp:b,role:"tool-result",rawType:"antigravity/tool_result",preview:av(e),blocks:[{type:"tool_result",tool_use_id:d,content:e,is_error:f}],toolUseId:d,toolResult:e,raw:a});continue}let c=a.content||a.error||"";q({index:p++,timestamp:b,role:"meta",rawType:`antigravity/${a.type?.toLowerCase()||"unknown"}`,preview:av(c),blocks:c?[{type:"text",text:c}]:[],raw:a})}let u=b?Date.parse(b):void 0;if(void 0!==u&&Number.isFinite(u)){let a;for(let b of l){if(!b.timestamp)continue;let c=Date.parse(b.timestamp);Number.isFinite(c)&&(b.tOffsetMs=Math.max(0,c-u),void 0!==a&&(b.gapMs=Math.max(0,c-a)),a=c)}}let v=function(a){if(0===a.length)return[];let b=[...a].sort((a,b)=>a-b),c=[],d=b[0],e=b[0];for(let a=1;a<b.length;a++)b[a]-e>18e4&&(c.push({startMs:d,endMs:e}),d=b[a]),e=b[a];return c.push({startMs:d,endMs:e}),c}(o),w=v.reduce((a,b)=>a+(b.endMs-b.startMs),0),x=b&&d?Date.parse(d)-Date.parse(b):void 0,y=a.conversationId,z=a.cwd,A=z?(0,i.canonicalProjectName)(z):a.conversationId,B=z?z.replace(/^\//,"-").replace(/\//g,"-"):a.conversationId;return{meta:{agent:"antigravity",id:y,filePath:a.filePath,projectName:A,projectDir:B,sessionId:y,firstTimestamp:b,lastTimestamp:d,durationMs:x&&Number.isFinite(x)?x:void 0,eventCount:l.length,model:e,cwd:z,totalUsage:{input:0,output:0,cacheRead:0,cacheWrite:0},status:"idle",firstUserPreview:f,lastUserPreview:g,lastAgentPreview:j,toolCallCount:m,turnCount:n,airTimeMs:w,activeSegments:v},events:l}}let ax=new Map,ay=new Map;async function az(a={}){let b=a.root??aq,c=await au(b),d=[];for(let a of c){let b=ax.get(a.filePath);if(b&&b.mtimeMs===a.mtimeMs&&b.sizeBytes===a.sizeBytes&&b.cwd===a.cwd){d.push(b.meta);continue}try{let{meta:b}=await aw(a);ax.set(a.filePath,{meta:b,mtimeMs:a.mtimeMs,sizeBytes:a.sizeBytes,cwd:a.cwd}),d.push(b)}catch{}}return(d.sort((a,b)=>(b.firstTimestamp??"").localeCompare(a.firstTimestamp??"")),void 0!==a.limit)?d.slice(0,a.limit):d}async function aA(a,b={}){let c,d=b.root??aq;for(let b of(await au(d)))if(b.conversationId===a){c=b;break}if(!c)return null;let e=ay.get(c.filePath);if(e&&e.mtimeMs===c.mtimeMs&&e.sizeBytes===c.sizeBytes&&e.cwd===c.cwd)return e.detail;let{meta:f,events:g}=await aw(c),h={...f,events:g};return ay.set(c.filePath,{detail:h,mtimeMs:c.mtimeMs,sizeBytes:c.sizeBytes,cwd:c.cwd}),h}let aB=(b=d.default.homedir(),e.default.join(b,".config","Claude","local-agent-mode-sessions")),aC=/^local_[0-9a-f-]+$/;async function aD(a){return c.promises.readdir(a).catch(()=>[])}async function aE(a){let b=await c.promises.stat(a).catch(()=>null);return b?b.mtimeMs:0}async function aF(a){let b=[];for(let d of(await aD(a))){let f=e.default.join(a,d);for(let a of(await aD(f))){let d=e.default.join(f,a),g=await aE(e.default.join(d,"spaces.json"));for(let a of(await aD(d))){if(!aC.test(a))continue;let f=e.default.join(d,a,"audit.jsonl"),h=await c.promises.stat(f).catch(()=>null);if(!h||!h.isFile()||0===h.size)continue;let i=e.default.join(d,`${a}.json`),j=await aE(i);b.push({sessionId:a,auditPath:f,metaPath:i,workspaceDir:d,auditMtimeMs:h.mtimeMs,auditSize:h.size,metaMtimeMs:j,spacesMtimeMs:g})}}}return b}let aG=new Map;async function aH(a){let b=e.default.join(a,"spaces.json"),d=await c.promises.stat(b).catch(()=>null);if(!d)return new Map;let f=aG.get(a);if(f&&f.mtimeMs===d.mtimeMs)return f.spaceIdToPath;let g=await c.promises.readFile(b,"utf8").catch(()=>""),h=new Map;try{for(let a of JSON.parse(g).spaces??[]){let b="string"==typeof a.id?a.id:void 0,c=(Array.isArray(a.folders)?a.folders:[])[0],d="string"==typeof c?.path?c.path:void 0;b&&d&&h.set(b,d)}}catch{}return aG.set(a,{mtimeMs:d.mtimeMs,spaceIdToPath:h}),h}async function aI(a){let b=await c.promises.readFile(a,"utf8").catch(()=>"");if(!b)return{};try{let a=JSON.parse(b);return{spaceId:"string"==typeof a.spaceId?a.spaceId:void 0,userSelectedFolders:Array.isArray(a.userSelectedFolders)?a.userSelectedFolders.filter(a=>"string"==typeof a):void 0,cwd:"string"==typeof a.cwd?a.cwd:void 0,model:"string"==typeof a.model?a.model:void 0,title:"string"==typeof a.title?a.title:void 0,createdAt:"number"==typeof a.createdAt?a.createdAt:void 0,lastActivityAt:"number"==typeof a.lastActivityAt?a.lastActivityAt:void 0}}catch{return{}}}async function aJ(a){let b=await c.promises.readFile(a,"utf8"),d=[];for(let a of b.split("\n")){let b=a.trim();if(b)try{d.push(JSON.parse(b))}catch{}}return d}async function aK(a){let b,[c,d,e]=await Promise.all([aJ(a.auditPath),aI(a.metaPath),aH(a.workspaceDir)]),{meta:f,events:g}=o(c),{projectName:h,projectDir:j,cwd:k}=(d.spaceId&&(b=e.get(d.spaceId)),!b&&d.userSelectedFolders&&d.userSelectedFolders.length>0&&(b=d.userSelectedFolders[0]),b)?{projectName:(0,i.canonicalProjectName)(b),projectDir:b.replace(/^\//,"-").replace(/\//g,"-"),cwd:b}:{projectName:"cowork:unspaced",projectDir:"cowork-unspaced"};return{meta:{...f,agent:"cowork",id:a.sessionId,sessionId:a.sessionId,filePath:a.auditPath,projectName:h,projectDir:j,cwd:k??f.cwd,model:f.model??d.model},events:g}}function aL(a){return{auditMtimeMs:a.auditMtimeMs,auditSize:a.auditSize,metaMtimeMs:a.metaMtimeMs,spacesMtimeMs:a.spacesMtimeMs}}function aM(a,b){return a.auditMtimeMs===b.auditMtimeMs&&a.auditSize===b.auditSize&&a.metaMtimeMs===b.metaMtimeMs&&a.spacesMtimeMs===b.spacesMtimeMs}let aN=new Map,aO=new Map;async function aP(a={}){let b=a.root??aB,c=await aF(b),d=[];for(let a of c){let b=aL(a),c=aN.get(a.auditPath);if(c&&aM(c.key,b)){d.push(c.meta);continue}try{let{meta:c}=await aK(a);aN.set(a.auditPath,{meta:c,key:b}),d.push(c)}catch{}}return(d.sort((a,b)=>(b.firstTimestamp??"").localeCompare(a.firstTimestamp??"")),void 0!==a.limit)?d.slice(0,a.limit):d}async function aQ(a,b={}){let c=b.root??aB,d=(await aF(c)).find(b=>b.sessionId===a);if(!d)return null;let e=aL(d),f=aO.get(d.auditPath);if(f&&aM(f.key,e))return f.detail;let{meta:g,events:h}=await aK(d),i={...g,events:h};return aO.set(d.auditPath,{detail:i,key:e}),i}function aR(a){let b=a??aS();try{return JSON.parse((0,c.readFileSync)((0,e.join)(b,"team.json"),"utf8"))}catch{return null}}function aS(){return process.env.CCLENS_HOME||e.default.join(d.default.homedir(),".cclens")}function aT(...a){return e.default.join(aS(),...a)}a.s(["readTeamConfig",()=>aR],43847);let aU=[O,{...f.CODEX_METADATA,defaultRoot:P,listSessions:async a=>Z(a),getSession:async a=>$(a),async usagePoller(){let a=await _();return a?{captured_at:new Date().toISOString(),agent:"codex",five_hour:a.five_hour,seven_day:a.seven_day}:null}},{...f.GEMINI_METADATA,defaultRoot:aa,listSessions:async a=>ao(a),getSession:async a=>ap(a)},{...f.ANTIGRAVITY_METADATA,defaultRoot:aq,listSessions:async a=>az(a),getSession:async a=>aA(a)},{...f.COWORK_METADATA,defaultRoot:aB,listSessions:async a=>aP(a),getSession:async a=>aQ(a)}];async function aV(a={}){let b=await Promise.all(aU.map(b=>b.listSessions(a))),c=[];for(let a of b)c.push(...a);return(c.sort((a,b)=>(b.firstTimestamp??"").localeCompare(a.firstTimestamp??"")),void 0!==a.limit)?c.slice(0,a.limit):c}async function aW(a){for(let b of aU){let c=await b.getSession(a);if(c)return c}return null}async function aX(){let a;try{a=await c.promises.readFile(aT("usage.jsonl"),"utf8")}catch{return[]}let b=[];for(let c of a.split("\n")){let a=c.trim();if(a)try{let c=JSON.parse(a);if(!c.captured_at||(c.agent??"claude-code")!=="claude-code")continue;b.push(c)}catch{}}return b.sort((a,b)=>(a.captured_at??"").localeCompare(b.captured_at??"")),b}function aY(a,b,c){if(0===b.length)return null;for(let[d,e]of b)if(d>=a&&e>a){let b=e,d=36e5*c;for(;b-d>a;)b-=d;return b}let d=b[b.length-1][1],e=36e5*c;for(;d<a;)d+=e;return d}async function aZ(a="pro-max-20x",b=p,c=30){let[d,e]=await Promise.all([z(b),aX()]);return function(a,b,c="pro-max-20x",d=30){if(0===b.length||0===a.length)return null;let e=(0,g.buildSpendIndex)(a),f=g.RATE_PER_PCT_7D[c],h=g.RATE_PER_PCT_5H[c],i=(0,g.groupSnapsByCycle)(b,a=>a.five_hour),j=(0,g.groupSnapsByCycle)(b,a=>a.seven_day),k=(0,g.collectSnapPairRates)(j,e,{minTravelPct:1,minDollars:10,maxGapMs:864e5}),l=(0,g.collectSnapPairRates)(i,e,{minTravelPct:1,minDollars:1,maxGapMs:72e5}),m=(0,g.userSoloRate)(k,.9)??f,n=(0,g.userSoloRate)(l,.9)??h,o=new Set(k.map(a=>a.cycleEndMs)).size,p=new Set(l.map(a=>a.cycleEndMs)).size,q=[],r=[];for(let a of b){let b=Date.parse(a.captured_at);if(!Number.isNaN(b)){if(a.five_hour?.resets_at){let c=Date.parse(a.five_hour.resets_at);Number.isNaN(c)||q.push([b,c])}if(a.seven_day?.resets_at){let c=Date.parse(a.seven_day.resets_at);Number.isNaN(c)||r.push([b,c])}}}let s=new Map;for(let a of b){let b=Date.parse(a.captured_at);if(Number.isNaN(b))continue;let c=Math.floor(b/6e4);s.set(c,[a.five_hour?.utilization??null,a.seven_day?.utilization??null])}let t=Date.parse(b[0].captured_at),u=Date.parse(b[b.length-1].captured_at),v=Math.max(Date.parse(a[0].ts),t-12096e5),w=6e4*d,x=[],y=v;for(;y<=u;){let a=null,b=null;for(let c=0;c<d;c++){let d=Math.floor((y+6e4*c)/6e4),e=s.get(d);if(e){a=e[0],b=e[1];break}}let c=aY(y,q,5),f=aY(y,r,168),h=null!=c?36e5*Math.round(c/36e5):null,k=null!=f?36e5*Math.round(f/36e5):null,l=null!=h?i.get(h)??[]:[],o=null!=k?j.get(k)??[]:[],p=h??y+18e6,t=k??y+6048e5,u=(0,g.predictAnchored)(e,l,n,p,5,y),v=(0,g.predictAnchored)(e,o,m,t,168,y);x.push({ts:new Date(y).toISOString(),real_5h:a,pred_5h:Math.max(0,Math.min(200,u)),real_7d:b,pred_7d:Math.max(0,Math.min(200,v)),cycle_end_5h:null!=h?new Date(h).toISOString():null,cycle_end_7d:null!=k?new Date(k).toISOString():null}),y+=w}let z=k.length>=3?"user_calibrated":"tier_default";return{model:`anchored-${c}`,tier:c,rate_per_pct:m,rate_per_pct_5h:n,rate_per_pct_7d:m,rate_source_5h:l.length>=3?"user_calibrated":"tier_default",rate_source_7d:z,cycles_used_5h:p,cycles_used_7d:o,granularity_min:d,curve:x,first_snapshot_ts:b[0].captured_at??null,real_count:x.filter(a=>null!==a.real_7d).length,total_count:x.length}}(d,e,a,c)}}];
2
-
3
- //# sourceMappingURL=packages_parser_dist_12.endt._.js.map