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.
- package/app/apps/web/.next/BUILD_ID +1 -1
- package/app/apps/web/.next/build-manifest.json +3 -3
- package/app/apps/web/.next/prerender-manifest.json +3 -3
- package/app/apps/web/.next/server/app/_global-error.html +1 -1
- package/app/apps/web/.next/server/app/_global-error.rsc +1 -1
- package/app/apps/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/app/apps/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/apps/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/apps/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/app/apps/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/apps/web/.next/server/app/_not-found/page.js +1 -1
- package/app/apps/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/changelog/page.js +1 -1
- package/app/apps/web/.next/server/app/changelog/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/changelog/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/day/[date]/page.js +1 -1
- package/app/apps/web/.next/server/app/day/[date]/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/day/[date]/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/day/page.js +1 -1
- package/app/apps/web/.next/server/app/day/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/day/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/digest/[date]/page.js +1 -1
- package/app/apps/web/.next/server/app/digest/[date]/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/digest/[date]/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/digest/page.js +1 -1
- package/app/apps/web/.next/server/app/digest/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/digest/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/insights/[key]/page.js +1 -1
- package/app/apps/web/.next/server/app/insights/[key]/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/insights/[key]/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/insights/page.js +1 -1
- package/app/apps/web/.next/server/app/insights/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/insights/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/page.js +1 -1
- package/app/apps/web/.next/server/app/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/parallelism/page.js +1 -1
- package/app/apps/web/.next/server/app/parallelism/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/parallelism/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/print/[key]/page.js +1 -1
- package/app/apps/web/.next/server/app/print/[key]/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/print/[key]/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/projects/[slug]/page.js +1 -1
- package/app/apps/web/.next/server/app/projects/[slug]/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/projects/page.js +1 -1
- package/app/apps/web/.next/server/app/projects/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/runs/page.js +1 -1
- package/app/apps/web/.next/server/app/runs/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/runs/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/sessions/[id]/page.js +1 -1
- package/app/apps/web/.next/server/app/sessions/[id]/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/sessions/[id]/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/sessions/page.js +1 -1
- package/app/apps/web/.next/server/app/sessions/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/settings/page.js +1 -1
- package/app/apps/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/team/page.js +1 -1
- package/app/apps/web/.next/server/app/team/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/team/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/usage/page.js +1 -1
- package/app/apps/web/.next/server/app/usage/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/usage/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/chunks/packages_0c-sz9n._.js +1 -1
- package/app/apps/web/.next/server/chunks/packages_0wywuu.._.js +1 -1
- package/app/apps/web/.next/server/chunks/packages_parser_dist_06d9se1._.js +1 -1
- package/app/apps/web/.next/server/chunks/packages_parser_dist_10ihc3~._.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0exckd4._.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/_0xu2pvc._.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/apps_web_components_0txtsv5._.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/apps_web_lib_changelog_ts_0n7_p1d._.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/apps_web_lib_changelog_ts_0nb5_-s._.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/packages_parser_dist_0mx_509._.js +3 -0
- package/app/apps/web/.next/server/middleware-build-manifest.js +3 -3
- package/app/apps/web/.next/server/middleware-manifest.json +5 -5
- package/app/apps/web/.next/server/pages/500.html +1 -1
- package/app/apps/web/.next/server/server-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/server-reference-manifest.json +1 -1
- package/app/apps/web/.next/static/chunks/0htgc_hr1bw67.js +1 -0
- package/app/apps/web/.next/static/chunks/{0~e7pnd7ot84w.js → 0lziv8y_6yp5w.js} +1 -1
- package/app/apps/web/app/layout.tsx +14 -6
- package/app/apps/web/components/live-sessions-widget.tsx +1 -1
- package/app/apps/web/lib/changelog-data.generated.ts +1 -1
- package/app/apps/web/package.json +1 -1
- package/app/apps/web/tsconfig.tsbuildinfo +1 -1
- package/dist/daemon-worker.js +29 -17
- package/dist/index.js +88 -53
- package/package.json +1 -1
- package/app/apps/web/.next/server/chunks/ssr/packages_parser_dist_12.endt._.js +0 -3
- package/app/apps/web/.next/static/chunks/0a~ro-n30brjy.js +0 -1
- /package/app/apps/web/.next/static/{NVjCMw2mlLqMATkilYzT7 → 7kQ9mNICnVHhf4-LmSGcy}/_buildManifest.js +0 -0
- /package/app/apps/web/.next/static/{NVjCMw2mlLqMATkilYzT7 → 7kQ9mNICnVHhf4-LmSGcy}/_clientMiddlewareManifest.js +0 -0
- /package/app/apps/web/.next/static/{NVjCMw2mlLqMATkilYzT7 → 7kQ9mNICnVHhf4-LmSGcy}/_ssgManifest.js +0 -0
package/dist/daemon-worker.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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.
|
|
15161
|
+
current: "0.12.3",
|
|
15150
15162
|
latest: null,
|
|
15151
15163
|
updateAvailable: false
|
|
15152
15164
|
};
|
|
15153
15165
|
return {
|
|
15154
|
-
current: "0.12.
|
|
15166
|
+
current: "0.12.3",
|
|
15155
15167
|
latest,
|
|
15156
|
-
updateAvailable: shouldUpdate("0.12.
|
|
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.
|
|
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
|
-
|
|
4512
|
-
|
|
4513
|
-
|
|
4514
|
-
|
|
4515
|
-
|
|
4516
|
-
|
|
4517
|
-
|
|
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.
|
|
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.
|
|
4926
|
+
} else if (verify.installedVersion !== "0.12.3") {
|
|
4908
4927
|
console.log(
|
|
4909
|
-
` \u2192 This process is still running ${"0.12.
|
|
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.
|
|
4963
|
+
current: "0.12.3",
|
|
4945
4964
|
latest: null,
|
|
4946
4965
|
updateAvailable: false
|
|
4947
4966
|
};
|
|
4948
4967
|
return {
|
|
4949
|
-
current: "0.12.
|
|
4968
|
+
current: "0.12.3",
|
|
4950
4969
|
latest,
|
|
4951
|
-
updateAvailable: shouldUpdate("0.12.
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|
5578
|
+
let costIncomplete = false;
|
|
5560
5579
|
for (const r of rows) {
|
|
5561
|
-
if (r.cost === null)
|
|
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:
|
|
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 (
|
|
5617
|
+
if (costIncomplete) {
|
|
5598
5618
|
lines.push("");
|
|
5599
|
-
lines.push(
|
|
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
|
|
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
|
|
5673
|
-
|
|
5699
|
+
if (c !== null) {
|
|
5700
|
+
cost += c;
|
|
5701
|
+
anyPriced = true;
|
|
5702
|
+
} else {
|
|
5703
|
+
anyUnpriced = true;
|
|
5704
|
+
}
|
|
5674
5705
|
}
|
|
5675
5706
|
}
|
|
5676
|
-
const modelNames = [...models].
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
17697
|
+
console.log(`fleetlens ${"0.12.3"}`);
|
|
17663
17698
|
break;
|
|
17664
17699
|
case "help":
|
|
17665
17700
|
case "--help":
|
package/package.json
CHANGED
|
@@ -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
|