{"version":3,"file":"session-tokens.d.ts","sourceRoot":"","sources":["../../../src/shared/session-tokens.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAiB7C,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAyBxE","sourcesContent":["import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { TokenUsage } from \"./types.ts\";\n\nfunction findLatestSessionFile(sessionDir: string): string | null {\n\ttry {\n\t\tconst files = fs\n\t\t\t.readdirSync(sessionDir)\n\t\t\t.filter((f) => f.endsWith(\".jsonl\"))\n\t\t\t.map((f) => path.join(sessionDir, f));\n\t\tif (files.length === 0) return null;\n\t\tfiles.sort((a, b) => fs.statSync(b).mtimeMs - fs.statSync(a).mtimeMs);\n\t\treturn files[0] ?? null;\n\t} catch {\n\t\t// Session token lookup is optional metadata.\n\t\treturn null;\n\t}\n}\n\nexport function parseSessionTokens(sessionDir: string): TokenUsage | null {\n\tconst sessionFile = findLatestSessionFile(sessionDir);\n\tif (!sessionFile) return null;\n\ttry {\n\t\tconst content = fs.readFileSync(sessionFile, \"utf-8\");\n\t\tlet input = 0;\n\t\tlet output = 0;\n\t\tfor (const line of content.split(\"\\n\")) {\n\t\t\tif (!line.trim()) continue;\n\t\t\ttry {\n\t\t\t\tconst entry = JSON.parse(line);\n\t\t\t\tconst usage = entry.usage ?? entry.message?.usage;\n\t\t\t\tif (usage) {\n\t\t\t\t\tinput += usage.inputTokens ?? usage.input ?? 0;\n\t\t\t\t\toutput += usage.outputTokens ?? usage.output ?? 0;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Ignore malformed lines while scanning usage entries.\n\t\t\t}\n\t\t}\n\t\treturn { input, output, total: input + output };\n\t} catch {\n\t\t// Usage extraction should not fail the run.\n\t\treturn null;\n\t}\n}\n"]}