import json,os,glob,collections,datetime
ROOT=os.path.expanduser("~/.claude/projects"); UTC=datetime.timezone.utc
CARD=(4,5,8,.2,20)  # opus 5.5
best={}
for fp in glob.glob(os.path.join(ROOT,"**","*.jsonl"),recursive=True):
    proj=os.path.relpath(fp,ROOT).split(os.sep)[0]
    try: fh=open(fp,errors="replace")
    except OSError: continue
    with fh:
        for line in fh:
            if '"claude-opus-5-5"' not in line: continue
            try: d=json.loads(line)
            except: continue
            if d.get("type")!="assistant": continue
            m=d.get("message") or {}; u=m.get("usage")
            if not isinstance(u,dict) or m.get("model")!="claude-opus-5-5": continue
            mid=m.get("id") or d.get("requestId")
            if not mid: continue
            cc=u.get("cache_creation") or {}
            w5=cc.get("ephemeral_5m_input_tokens") or 0; w1=cc.get("ephemeral_1h_input_tokens") or 0
            tw=u.get("cache_creation_input_tokens",0) or 0
            if w5+w1==0 and tw: w5=tw
            r=dict(inp=u.get("input_tokens",0) or 0,w5=w5,w1=w1,rd=u.get("cache_read_input_tokens",0) or 0,
                   out=u.get("output_tokens",0) or 0,sess=d.get("sessionId"),proj=proj,
                   cwd=d.get("cwd",""),dt=d.get("timestamp",""))
            p=best.get(mid)
            if p is None or r["out"]>p["out"]: best[mid]=r
agg=collections.defaultdict(lambda: dict(cost=0.0,tok=0,out=0,n=0,cwd="",t0="",t1=""))
for r in best.values():
    a=agg[r["sess"]]
    a["cost"]+=(r["inp"]*CARD[0]+r["w5"]*CARD[1]+r["w1"]*CARD[2]+r["rd"]*CARD[3]+r["out"]*CARD[4])/1e6
    a["tok"]+=r["inp"]+r["w5"]+r["w1"]+r["rd"]; a["out"]+=r["out"]; a["n"]+=1
    a["cwd"]=r["cwd"]; a["t0"]=min(a["t0"] or r["dt"],r["dt"]); a["t1"]=max(a["t1"],r["dt"])
print(f"{'session':10s} {'$cost':>9s} {'in-tok':>13s} {'out-tok':>9s} {'n':>5s}  {'start':16s}  cwd")
for s,a in sorted(agg.items(),key=lambda x:-x[1]["cost"])[:14]:
    print(f"{str(s)[:8]:10s} {a['cost']:9,.2f} {a['tok']:13,} {a['out']:9,} {a['n']:5d}  {a['t0'][:16]:16s}  {a['cwd'][-52:]}")
print(f"\nTOTAL local Opus 5.5: ${sum(a['cost'] for a in agg.values()):,.2f} over {len(agg)} sessions")
print("\nrepo receipts for comparison:")
for n,c,t in [("courtyard a1",433.73,909_221_290),("courtyard a2",309.00,577_341_952),
              ("oasis a1",91.43,118_750_511),("jungle a2",34.98,64_775_446),
              ("sekiro max",93.87,300_767_777),("carve max",57.68,138_224_312),
              ("neon gunner",33.38,73_307_067),("cathedral",28.85,74_209_480)]:
    print(f"   {n:14s} ${c:8,.2f}  tokens {t:,}")
