diff --git a/docs/samples/claude-code/runcat-statusline.py b/docs/samples/claude-code/runcat-statusline.py index 46f40cc..187d1c8 100755 --- a/docs/samples/claude-code/runcat-statusline.py +++ b/docs/samples/claude-code/runcat-statusline.py @@ -11,8 +11,8 @@ "metrics": [ {"title": "Model", "formattedValue": "Opus 4.7"}, {"title": "Context", "formattedValue": "67%", "normalizedValue": 0.67}, - {"title": "5h", "formattedValue": "3%", "normalizedValue": 0.03}, - {"title": "7d", "formattedValue": "3%", "normalizedValue": 0.03} + {"title": "5h", "formattedValue": "3% (~14:30)", "normalizedValue": 0.03}, + {"title": "7d", "formattedValue": "3% (~7/22 03:00)", "normalizedValue": 0.03} ], "lastUpdatedDate": "2026-06-07T05:55:36Z" } @@ -28,10 +28,22 @@ OUT = Path(os.environ.get("RUNCAT_OUT_FILE", str(Path.home() / ".claude" / "runcat-usage.json"))) -def pct(title, value): +def pct(title, value, reset=None): if value is None: return None - return {"title": title, "formattedValue": f"{value:g}%", "normalizedValue": round(value / 100, 4)} + formatted = f"{value:g}%" + (f" ({reset})" if reset else "") + return {"title": title, "formattedValue": formatted, "normalizedValue": round(value / 100, 4)} + + +def format_reset(epoch_seconds): + if epoch_seconds is None: + return None + now = datetime.now().astimezone() + reset = datetime.fromtimestamp(epoch_seconds).astimezone() + hm = reset.strftime("%H:%M") + if reset.date() == now.date(): + return f"~{hm}" + return f"~{reset.month}/{reset.day} {hm}" try: @@ -46,6 +58,8 @@ def pct(title, value): rate_limits = payload.get("rate_limits") or {} five = (rate_limits.get("five_hour") or {}).get("used_percentage") seven = (rate_limits.get("seven_day") or {}).get("used_percentage") +five_reset = format_reset((rate_limits.get("five_hour") or {}).get("resets_at")) +seven_reset = format_reset((rate_limits.get("seven_day") or {}).get("resets_at")) snapshot = { "title": "Claude Code", @@ -53,8 +67,8 @@ def pct(title, value): "metrics": [m for m in [ {"title": "Model", "formattedValue": model}, pct("Context", ctx), - pct("5h", five), - pct("7d", seven), + pct("5h", five, five_reset), + pct("7d", seven, seven_reset), ] if m is not None], "lastUpdatedDate": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"), }