UNPKG

grix-connector

Version:

Connect local AI coding agents (Claude, Codex, Gemini, Qwen, DeepSeek, Cursor, OpenCode, Pi, OpenHuman, Reasonix) to the Grix scheduling platform. Also serves as an OpenClaw plugin for Grix channel transport.

2 lines (1 loc) 1.5 kB
import{createReadStream as g}from"node:fs";import{createInterface as T}from"node:readline";import{log as p}from"../../core/log/index.js";import{findRolloutFile as h}from"./rollout-locator.js";function k(){return{inputTokens:0,outputTokens:0,cacheReadInputTokens:0,cacheCreationInputTokens:0}}function d(t,e){t.inputTokens+=e.inputTokens,t.outputTokens+=e.outputTokens,t.cacheReadInputTokens+=e.cacheReadInputTokens,t.cacheCreationInputTokens+=e.cacheCreationInputTokens}async function C(t){const e=h(t);if(!e)return p.info("codex-usage-parser",`No rollout file found for thread ${t}`),null;p.info("codex-usage-parser",`Parsing session usage from ${e}`);const a=new Map,l=k();let i=0,c="unknown";try{const o=T({input:g(e,"utf8"),crlfDelay:1/0});for await(const s of o)if(s.trim())try{const n=JSON.parse(s);if(n.type==="turn_context"&&n.payload?.model&&(c=n.payload.model,i++),n.type==="event_msg"&&n.payload?.type==="token_count"){const r=n.payload?.info?.last_token_usage;if(!r)continue;const m=(r.input_tokens??0)-(r.cached_input_tokens??0),f={inputTokens:Math.max(0,m),outputTokens:r.output_tokens??0,cacheReadInputTokens:r.cached_input_tokens??0,cacheCreationInputTokens:0};d(l,f);let u=a.get(c);u||(u={turns:0,usage:k()},a.set(c,u)),u.turns++,d(u.usage,f)}}catch{}}catch(o){return p.error("codex-usage-parser",`Failed to parse rollout: ${o}`),null}return i===0?null:{models:[...a.entries()].map(([o,s])=>({model:o,turns:s.turns,total:s.usage})),total:l,turns:i}}export{C as parseCodexSessionUsage};