#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Claude Code 用量本地读取 —— 只读 claude-statusline 生产的用量快照,**不发任何网络请求**。 生产者/消费者模式:生产者 = 打过补丁的 claude-statusline(见其仓库 bin/statusline.sh 的 「Usage snapshot for external consumers」段),它把每次从 Claude Code stdin 拿到的**权威实时**额度 落盘到 config.USAGE_LOCAL_PATH(默认 ~/.claude/usage-snapshot.json);本模块作为消费者读取。 结构含 five_hour / seven_day,各有 utilization(已用百分比) 与 resets_at(ISO 重置时间,供上层算 「时间已流逝%」做 pace 对比)。活跃使用时快照几乎持续刷新、准确;空闲时停在最后一次。 文件缺失/损坏时抛错 → 上层回退占位 "--"。 """ import json import config def get_usage() -> dict: """读取本地 statusline 用量缓存并返回(含 five_hour / seven_day)。缺失/损坏时抛出。""" with open(config.USAGE_LOCAL_PATH, encoding="utf-8") as f: data = json.load(f) if "five_hour" not in data: raise RuntimeError(f"用量缓存缺 five_hour 字段:{config.USAGE_LOCAL_PATH}") return data if __name__ == "__main__": d = get_usage() for k in ("five_hour", "seven_day"): s = d.get(k) or {} print(k, "util=", s.get("utilization"), "resets_at=", s.get("resets_at"))