token-tracker 0.4.1__tar.gz → 0.4.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {token_tracker-0.4.1/src/token_tracker.egg-info → token_tracker-0.4.3}/PKG-INFO +62 -72
- token_tracker-0.4.3/README.md +180 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/pyproject.toml +1 -1
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker/analyzer/cost.py +83 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker/cli.py +4 -7
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker/config.py +4 -3
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker/i18n.py +4 -10
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker/ui/format.py +43 -14
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker/ui/heatmap.py +25 -26
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker/ui/status.py +2 -5
- {token_tracker-0.4.1 → token_tracker-0.4.3/src/token_tracker.egg-info}/PKG-INFO +62 -72
- {token_tracker-0.4.1 → token_tracker-0.4.3}/tests/test_aggregator.py +0 -11
- {token_tracker-0.4.1 → token_tracker-0.4.3}/tests/test_cost.py +118 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/tests/test_hooks.py +13 -38
- {token_tracker-0.4.1 → token_tracker-0.4.3}/tests/test_status.py +6 -8
- token_tracker-0.4.1/README.md +0 -190
- {token_tracker-0.4.1 → token_tracker-0.4.3}/LICENSE +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/setup.cfg +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker/__init__.py +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker/adapters/__init__.py +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker/adapters/claude.py +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker/adapters/codex.py +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker/adapters/rate_limits.py +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker/adapters/registry.py +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker/adapters/types.py +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker/adapters/util.py +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker/analyzer/__init__.py +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker/analyzer/aggregator.py +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker/analyzer/blocks.py +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker/hooks.py +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker/ui/__init__.py +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker/ui/console.py +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker/ui/panels.py +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker/ui/tables.py +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker/ui/theme.py +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker/ui/themes.py +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker/wizard.py +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker.egg-info/SOURCES.txt +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker.egg-info/dependency_links.txt +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker.egg-info/entry_points.txt +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker.egg-info/requires.txt +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/src/token_tracker.egg-info/top_level.txt +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/tests/test_blocks.py +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/tests/test_cli.py +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/tests/test_codex.py +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/tests/test_heatmap.py +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/tests/test_tables.py +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/tests/test_theme.py +0 -0
- {token_tracker-0.4.1 → token_tracker-0.4.3}/tests/test_util.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: token-tracker
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.3
|
|
4
4
|
Summary: Track token usage across local AI agents (Claude Code, Codex)
|
|
5
5
|
Author-email: stormzhang <stormzhang.dev@gmail.com>
|
|
6
6
|
License: MIT License
|
|
@@ -61,15 +61,32 @@ Dynamic: license-file
|
|
|
61
61
|
|
|
62
62
|
[English](README_EN.md)
|
|
63
63
|
|
|
64
|
+

|
|
65
|
+
|
|
66
|
+
## 功能亮点
|
|
67
|
+
|
|
68
|
+
- **多 Agent 统一追踪** — Claude Code + Codex 统一读取,多 Agent 按来源分组
|
|
69
|
+
- **状态栏集成** — Claude Code 用官方 StatusLine 接口;**Codex 业界首创伪 statusline 方案**(hook 注入两行真彩色状态栏,把官方未开放的能力在 Codex 里做了出来)
|
|
70
|
+
- **限额监控** — 实时 5h / 7d 配额百分比 + 重置倒计时
|
|
71
|
+
- **多维成本分析** — 会话 / 日 / 周 / 月多维报表,等效成本统计
|
|
72
|
+
- **定价识别** — litellm 在线定价 + 内置官方价双层兜底,覆盖 Claude / OpenAI / Gemini / Grok 及国产主流(Kimi / GLM / Qwen / 豆包 / DeepSeek / MiniMax / MiMo);新模型自动套用同系列定价、不静默归零
|
|
73
|
+
- **会话洞察** — 项目、模型、时长、消息数一览
|
|
74
|
+
- **多主题统一配色** — 6 套主题(Catppuccin 全家 + Nord + Dracula),CLI 报表 / CC 状态栏 / Codex 伪 statusline **三者同源**,`tt theme` 一键切换
|
|
75
|
+
- **零配置** — 自动检测已安装的 Agent,直接读取本地数据
|
|
76
|
+
- **隐私安全** — 数据纯本地存储,不采集、不上传
|
|
77
|
+
|
|
64
78
|
## StatusLine 状态栏
|
|
65
79
|
|
|
66
|
-
自动为 Claude Code 和 Codex
|
|
80
|
+
`tt setup` 自动为 Claude Code 和 Codex 配置状态栏,脚本更新时自动升级。
|
|
81
|
+
|
|
82
|
+
### Claude Code(官方接口)
|
|
67
83
|
|
|
68
|
-
|
|
84
|
+
基于 Claude Code 官方自定义 StatusLine 接口,**数据完全来自本地 Claude,无任何推测**。
|
|
69
85
|
|
|
70
86
|

|
|
71
87
|
|
|
72
|
-
|
|
88
|
+
<details>
|
|
89
|
+
<summary>四行布局字段详解</summary>
|
|
73
90
|
|
|
74
91
|
| 行 | 字段 | 说明 |
|
|
75
92
|
|----|------|------|
|
|
@@ -88,44 +105,38 @@ Dynamic: license-file
|
|
|
88
105
|
|
|
89
106
|
> 终端宽度不足时会自动降级:先隐藏重置倒计时,再将进度条简化为百分比数字。**API 模式**无订阅配额,第 2 行只显示 Ctx。
|
|
90
107
|
|
|
91
|
-
|
|
108
|
+
</details>
|
|
109
|
+
|
|
110
|
+
### Codex(伪 statusline,业界首创)
|
|
111
|
+
|
|
112
|
+
Codex 官方暂不支持自定义 StatusLine。Token Tracker 通过 hook 注入了一个**伪 statusline**——每次回答完成后,在回答尾部追加两行真彩色状态栏。**这是目前业界少见的把状态栏能力在 Codex 里做出来的实现方案**。
|
|
92
113
|
|
|
93
114
|

|
|
94
115
|
|
|
95
|
-
|
|
116
|
+
**两行布局**:
|
|
96
117
|
|
|
97
118
|
- **L1** `[项目](分支 +A -D) | Total: <会话累计 token> | Model: <模型 推理强度>` —— Total 橙、Model 红
|
|
98
119
|
- **L2** `Limit: 5h <进度条> % (reset <倒计时>) | 7d <进度条> % (reset <倒计时>) | <窗口> Ctx <进度条> %`
|
|
99
120
|
|
|
100
|
-
|
|
121
|
+
渲染 24-bit 真彩色、**不进模型上下文**(实测),**配色跟随当前主题**(与 CLI 报表 / CC 状态栏同源,`tt theme` 切换三者一起变)。`tt unsetup` 一并移除。
|
|
101
122
|
|
|
102
|
-
##
|
|
123
|
+
## 报表速览
|
|
103
124
|
|
|
104
|
-
`tt
|
|
105
|
-
- Last 12 months:橙色 Tokens / Cost / Sessions / Avg/Cost / 活跃天数 + 蓝色 单日峰值 / 当前·最长连续活跃天数
|
|
106
|
-
- This Month / This Week:橙色 Tokens / Cost / Avg/Cost / 活跃天数,**带环比**(↑/↓ 上月 / 上周)
|
|
125
|
+
`tt status` — 过去 5h 实时面板(合并概览 + 5h/7d 额度 + 近期会话)
|
|
107
126
|
|
|
108
|
-
|
|
127
|
+

|
|
109
128
|
|
|
110
|
-
|
|
129
|
+
`tt weekly` — 周报:本周分析卡片 + 每日趋势柱状图 + 周 / 项目 / 模型趋势
|
|
111
130
|
|
|
112
|
-

|
|
113
132
|
|
|
114
|
-
|
|
133
|
+
`tt monthly` — 月报:本月分析卡片 + 周柱状图 + 月趋势 + 项目 / 模型分布
|
|
115
134
|
|
|
116
|
-

|
|
117
136
|
|
|
118
|
-
|
|
137
|
+
`tt sessions` — 最近 20 条会话明细(按 cost 倒序,支持 `--sort` 改字段)
|
|
119
138
|
|
|
120
|
-
-
|
|
121
|
-
- **状态栏集成** — Claude Code statusLine + Codex status_line,首次运行自动配置,脚本更新自动升级
|
|
122
|
-
- **限额监控** — 实时 5h / 7d 配额百分比 + 重置倒计时
|
|
123
|
-
- **成本分析** — 按会话、日、周、月维度的等效成本统计,多 Agent 按来源分组展示
|
|
124
|
-
- **定价识别** — litellm 在线定价 + 内置官方价双层兜底;同系列新模型自动套用本档定价(含 Claude Fable 5 / Opus 4.8),全新系列缺价时明确提示,不静默按 $0 统计
|
|
125
|
-
- **会话洞察** — 项目、模型、时长、消息数一览
|
|
126
|
-
- **多主题统一配色** — 6 套主题(Catppuccin Mocha/Latte/Frappe/Macchiato + Nord + Dracula),CLI 报表、CC 状态栏与 Codex 伪 statusline **三者同源**;`tt theme` 一键切换 / 预览,暗 / 亮终端自动选 Catppuccin,首次运行交互向导引导选择,`TT_THEME` 可覆盖;终端不支持 truecolor 时自动降级到 256 色近似
|
|
127
|
-
- **零配置** — 自动检测已安装的 Agent,直接读取本地数据
|
|
128
|
-
- **隐私安全** — 数据纯本地存储,不采集、不上传任何用户信息,极轻量无后顾之忧
|
|
139
|
+

|
|
129
140
|
|
|
130
141
|
## 安装
|
|
131
142
|
|
|
@@ -136,38 +147,31 @@ curl -sSL https://raw.githubusercontent.com/stormzhang/token-tracker/main/instal
|
|
|
136
147
|
脚本自动选最优安装方式(uv / pipx / 私有 venv),绕开 PEP 668、不污染系统 Python。
|
|
137
148
|
|
|
138
149
|
> **升级**:重跑上面的命令即可(脚本幂等、自动升到最新)。
|
|
139
|
-
>
|
|
150
|
+
> **卸载**:`tt unsetup`
|
|
140
151
|
|
|
141
152
|
## 使用
|
|
142
153
|
|
|
143
154
|
```bash
|
|
144
155
|
tt setup # 交互配置向导(终端:上下键选语言 / 主题 / 各组件);非 tty 环境自动全装
|
|
145
|
-
tt # 过去一年 token 热力图 +
|
|
156
|
+
tt # 过去一年 token 热力图 + 顶部三段概览(= tt daily)
|
|
146
157
|
tt daily # 同上(tt 无参即进 daily)
|
|
147
|
-
tt status # 过去 5h
|
|
148
|
-
tt weekly #
|
|
149
|
-
tt monthly #
|
|
150
|
-
tt sessions # 最近 20
|
|
158
|
+
tt status # 过去 5h 实时面板
|
|
159
|
+
tt weekly # 周报
|
|
160
|
+
tt monthly # 月报
|
|
161
|
+
tt sessions # 最近 20 条会话明细(tt sessions <n> 改条数、--sort 改排序)
|
|
151
162
|
tt theme # 查看 / 切换配色主题(show / list / set / preview)
|
|
152
163
|
tt unsetup # 卸载并恢复安装前的配置
|
|
164
|
+
tt --version # 查看版本(-v / -V 同义)
|
|
153
165
|
```
|
|
154
166
|
|
|
155
167
|
> 💡 `tt daily` 是 GitHub 风格的 token 贡献热力图(深浅绿方格)。在 Claude Code 会话里输入 `!tt daily` 即可看到彩色热力图 —— 用户主动用 `!` 执行的命令,Claude Code 会渲染其 24-bit 真彩色输出。
|
|
156
168
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
第一次跑 `tt`(或通过 curl 一键安装脚本装完自动启动)会进入**交互式配置向导**,全程上下键选 + 回车确认:
|
|
160
|
-
|
|
161
|
-
1. **选语言** — 中文 / English(落 `~/.config/token-tracker/config.json`,之后所有命令跟随)
|
|
162
|
-
2. **选配色主题** — 6 套主题上下键选择,每个选项右侧内联色板预览
|
|
163
|
-
3. **启用 Codex 伪 statusline** — Yes/No,默认 Yes(仅检测到 Codex 时)
|
|
164
|
-
|
|
165
|
-
选完给一份键值对齐的配置总结 + 重启 / 下一步提示。CI / 非 tty 环境(Docker / 脚本)自动按默认全装:**语言跟随系统设置**(读系统语言、不被 CLI 的 `LANG` 误导)、主题 mocha、组件全开。装好后想改任何一项,再跑一次 `tt setup` 即可(终端里每次 `tt setup` 都进向导)。
|
|
166
|
-
|
|
167
|
-
### 配色主题
|
|
169
|
+
## 配色主题
|
|
168
170
|
|
|
169
171
|
内置 6 套主题,CLI 报表、CC 状态栏与 Codex 伪 statusline **统一同源**(切主题三者一起变):
|
|
170
172
|
|
|
173
|
+

|
|
174
|
+
|
|
171
175
|
| 主题 | 说明 |
|
|
172
176
|
|------|------|
|
|
173
177
|
| `mocha` / `latte` / `frappe` / `macchiato` | Catppuccin 全家(暗 / 亮终端自动选 mocha / latte) |
|
|
@@ -182,9 +186,20 @@ tt theme set nord # 切换主题(持久化 + 重烘焙状态栏)
|
|
|
182
186
|
tt monthly --theme nord # 任意报表临时换主题渲染(不持久化、不动状态栏,适合对比)
|
|
183
187
|
```
|
|
184
188
|
|
|
185
|
-
-
|
|
186
|
-
-
|
|
187
|
-
|
|
189
|
+
- 切换持久化到 `~/.config/token-tracker/config.json`;优先级 `--theme` 参数 > `TT_THEME` 环境变量 > 配置文件 > 自动。
|
|
190
|
+
- 终端支持 truecolor 用精确配色;不支持的(如 macOS 自带 Terminal.app)自动降级到 **256 色近似**。
|
|
191
|
+
|
|
192
|
+
## 高级
|
|
193
|
+
|
|
194
|
+
### 首次运行向导
|
|
195
|
+
|
|
196
|
+
第一次跑 `tt`(或在独立终端跑 `tt setup`)会进入**交互式配置向导**,全程上下键选 + 回车确认:
|
|
197
|
+
|
|
198
|
+
1. **选语言** — 中文 / English(落 `~/.config/token-tracker/config.json`)
|
|
199
|
+
2. **选配色主题** — 6 套主题上下键选择,每个选项右侧内联色板预览
|
|
200
|
+
3. **启用 Codex 伪 statusline** — Yes/No(仅检测到 Codex 时)
|
|
201
|
+
|
|
202
|
+
CI / 非 tty 环境(Docker / 脚本 / `curl|bash`)自动按默认全装:**语言跟随系统设置**、主题 mocha、组件全开。装好后想改任何一项,再跑一次 `tt setup` 即可。
|
|
188
203
|
|
|
189
204
|
### 报告排序
|
|
190
205
|
|
|
@@ -197,17 +212,6 @@ tt sessions --sort tokens --asc # 按 token 升序
|
|
|
197
212
|
|
|
198
213
|
可选排序字段:`tokens` / `cost` / `messages` / `time` / `input` / `output`
|
|
199
214
|
|
|
200
|
-
### Dashboard 快捷键
|
|
201
|
-
|
|
202
|
-
| 按键 | 功能 |
|
|
203
|
-
|------|------|
|
|
204
|
-
| `←` `→` | 切换 Agent |
|
|
205
|
-
| `↑` `↓` | 滚动内容 |
|
|
206
|
-
| `s` | 切换排序字段(时间 → Token → 等效成本 → 消息数) |
|
|
207
|
-
| `r` | 反转排序方向 |
|
|
208
|
-
| `+` / `-` | 调整会话显示条数(±10,最少 10 条) |
|
|
209
|
-
| `q` | 退出 |
|
|
210
|
-
|
|
211
215
|
## 数据来源
|
|
212
216
|
|
|
213
217
|
| Agent | 路径 | 格式 |
|
|
@@ -215,7 +219,7 @@ tt sessions --sort tokens --asc # 按 token 升序
|
|
|
215
219
|
| Claude Code | `~/.claude/projects/*/` | JSONL(逐消息用量) |
|
|
216
220
|
| Codex | `~/.codex/sessions/` | JSONL + SQLite |
|
|
217
221
|
|
|
218
|
-
路径跨平台:Windows 下 `~` 解析到 `%USERPROFILE
|
|
222
|
+
路径跨平台:Windows 下 `~` 解析到 `%USERPROFILE%`。设了 `CLAUDE_CONFIG_DIR` / `CODEX_HOME` 环境变量(官方支持的自定义目录)时自动跟随。
|
|
219
223
|
|
|
220
224
|
Token Tracker 对 Agent 数据**只读**,不做任何修改。
|
|
221
225
|
|
|
@@ -224,20 +228,6 @@ Token Tracker 对 Agent 数据**只读**,不做任何修改。
|
|
|
224
228
|
- Python 3.11+
|
|
225
229
|
- [Rich](https://github.com/Textualize/rich)(自动安装)
|
|
226
230
|
|
|
227
|
-
## 开发
|
|
228
|
-
|
|
229
|
-
```bash
|
|
230
|
-
git clone https://github.com/stormzhang/token-tracker && cd token-tracker
|
|
231
|
-
uv run --extra dev pytest # 运行测试
|
|
232
|
-
uv run --extra dev ruff check src tests # Lint
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
包采用标准 src layout(`src/token_tracker/`):发行名 `token-tracker`,导入名 `token_tracker`(0.4.0 起)。
|
|
236
|
-
|
|
237
|
-
## TODO
|
|
238
|
-
|
|
239
|
-
未来持续增加更多数据报表,多维度分析。
|
|
240
|
-
|
|
241
231
|
## License
|
|
242
232
|
|
|
243
233
|
Copyright (c) 2026 stormzhang. MIT License.
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# Token Tracker (tt)
|
|
2
|
+
|
|
3
|
+
本地 AI Agent Token 消耗追踪/分析工具,支持 **Claude Code** 和 **Codex** 。
|
|
4
|
+
|
|
5
|
+
自定义 StatusLine 状态栏 + CLI Dashboard,实时查看 token 用量、等效成本、限额状态。
|
|
6
|
+
|
|
7
|
+
  
|
|
8
|
+
|
|
9
|
+
[English](README_EN.md)
|
|
10
|
+
|
|
11
|
+

|
|
12
|
+
|
|
13
|
+
## 功能亮点
|
|
14
|
+
|
|
15
|
+
- **多 Agent 统一追踪** — Claude Code + Codex 统一读取,多 Agent 按来源分组
|
|
16
|
+
- **状态栏集成** — Claude Code 用官方 StatusLine 接口;**Codex 业界首创伪 statusline 方案**(hook 注入两行真彩色状态栏,把官方未开放的能力在 Codex 里做了出来)
|
|
17
|
+
- **限额监控** — 实时 5h / 7d 配额百分比 + 重置倒计时
|
|
18
|
+
- **多维成本分析** — 会话 / 日 / 周 / 月多维报表,等效成本统计
|
|
19
|
+
- **定价识别** — litellm 在线定价 + 内置官方价双层兜底,覆盖 Claude / OpenAI / Gemini / Grok 及国产主流(Kimi / GLM / Qwen / 豆包 / DeepSeek / MiniMax / MiMo);新模型自动套用同系列定价、不静默归零
|
|
20
|
+
- **会话洞察** — 项目、模型、时长、消息数一览
|
|
21
|
+
- **多主题统一配色** — 6 套主题(Catppuccin 全家 + Nord + Dracula),CLI 报表 / CC 状态栏 / Codex 伪 statusline **三者同源**,`tt theme` 一键切换
|
|
22
|
+
- **零配置** — 自动检测已安装的 Agent,直接读取本地数据
|
|
23
|
+
- **隐私安全** — 数据纯本地存储,不采集、不上传
|
|
24
|
+
|
|
25
|
+
## StatusLine 状态栏
|
|
26
|
+
|
|
27
|
+
`tt setup` 自动为 Claude Code 和 Codex 配置状态栏,脚本更新时自动升级。
|
|
28
|
+
|
|
29
|
+
### Claude Code(官方接口)
|
|
30
|
+
|
|
31
|
+
基于 Claude Code 官方自定义 StatusLine 接口,**数据完全来自本地 Claude,无任何推测**。
|
|
32
|
+
|
|
33
|
+

|
|
34
|
+
|
|
35
|
+
<details>
|
|
36
|
+
<summary>四行布局字段详解</summary>
|
|
37
|
+
|
|
38
|
+
| 行 | 字段 | 说明 |
|
|
39
|
+
|----|------|------|
|
|
40
|
+
| 1 | `[项目](分支 +12 -3)` | 项目名(加粗)+ Git 分支(未提交修改标 `*`),括号内附工作区相对 HEAD 的增删行数 |
|
|
41
|
+
| 1 | `Total: 1.2M` | 本次会话累计消耗 token(输入+输出+cache,解析 transcript 得出) |
|
|
42
|
+
| 1 | `Cost: $35.51` | 本次会话等效成本(Claude Code 自带,按官方计费,准确) |
|
|
43
|
+
| 1 | `Code: +208 -8` | 本会话 Claude 写 / 删的代码行数(`+` 绿 `-` 红,与 git 变动同配色) |
|
|
44
|
+
| 2 | `Limit: 5h: ██░ 31% (1h19m)` | 5 小时滑动窗口配额(仅订阅模式;括号内重置倒计时) |
|
|
45
|
+
| 2 | `7d: ██░ 11% (5d8h)` | 7 天滑动窗口配额 |
|
|
46
|
+
| 2 | `1.0M Ctx: ██░ 20%` | 上下文窗口总大小及已用占比 |
|
|
47
|
+
| 3 | `Tokens: in 392k, out 937, cache 388k` | **当前上下文窗口**的 token 构成(注意:非会话累计,会随 compact 变化) |
|
|
48
|
+
| 3 | `Out TPS: 60 tokens/s` | 本轮 output token 生成速度(含 thinking;空闲帧保留上次值) |
|
|
49
|
+
| 4 | `Model: Opus 4.8/xhigh/nofast` | 模型名 / reasoning 级别 / 是否 fast 模式 |
|
|
50
|
+
| 4 | `Duration: 1h33m` | 当前会话已持续时间 |
|
|
51
|
+
| 4 | `Remote: github` | 代码仓库 host(去顶级域) |
|
|
52
|
+
|
|
53
|
+
> 终端宽度不足时会自动降级:先隐藏重置倒计时,再将进度条简化为百分比数字。**API 模式**无订阅配额,第 2 行只显示 Ctx。
|
|
54
|
+
|
|
55
|
+
</details>
|
|
56
|
+
|
|
57
|
+
### Codex(伪 statusline,业界首创)
|
|
58
|
+
|
|
59
|
+
Codex 官方暂不支持自定义 StatusLine。Token Tracker 通过 hook 注入了一个**伪 statusline**——每次回答完成后,在回答尾部追加两行真彩色状态栏。**这是目前业界少见的把状态栏能力在 Codex 里做出来的实现方案**。
|
|
60
|
+
|
|
61
|
+

|
|
62
|
+
|
|
63
|
+
**两行布局**:
|
|
64
|
+
|
|
65
|
+
- **L1** `[项目](分支 +A -D) | Total: <会话累计 token> | Model: <模型 推理强度>` —— Total 橙、Model 红
|
|
66
|
+
- **L2** `Limit: 5h <进度条> % (reset <倒计时>) | 7d <进度条> % (reset <倒计时>) | <窗口> Ctx <进度条> %`
|
|
67
|
+
|
|
68
|
+
渲染 24-bit 真彩色、**不进模型上下文**(实测),**配色跟随当前主题**(与 CLI 报表 / CC 状态栏同源,`tt theme` 切换三者一起变)。`tt unsetup` 一并移除。
|
|
69
|
+
|
|
70
|
+
## 报表速览
|
|
71
|
+
|
|
72
|
+
`tt status` — 过去 5h 实时面板(合并概览 + 5h/7d 额度 + 近期会话)
|
|
73
|
+
|
|
74
|
+

|
|
75
|
+
|
|
76
|
+
`tt weekly` — 周报:本周分析卡片 + 每日趋势柱状图 + 周 / 项目 / 模型趋势
|
|
77
|
+
|
|
78
|
+

|
|
79
|
+
|
|
80
|
+
`tt monthly` — 月报:本月分析卡片 + 周柱状图 + 月趋势 + 项目 / 模型分布
|
|
81
|
+
|
|
82
|
+

|
|
83
|
+
|
|
84
|
+
`tt sessions` — 最近 20 条会话明细(按 cost 倒序,支持 `--sort` 改字段)
|
|
85
|
+
|
|
86
|
+

|
|
87
|
+
|
|
88
|
+
## 安装
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
curl -sSL https://raw.githubusercontent.com/stormzhang/token-tracker/main/install.sh | bash
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
脚本自动选最优安装方式(uv / pipx / 私有 venv),绕开 PEP 668、不污染系统 Python。
|
|
95
|
+
|
|
96
|
+
> **升级**:重跑上面的命令即可(脚本幂等、自动升到最新)。
|
|
97
|
+
> **卸载**:`tt unsetup`
|
|
98
|
+
|
|
99
|
+
## 使用
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
tt setup # 交互配置向导(终端:上下键选语言 / 主题 / 各组件);非 tty 环境自动全装
|
|
103
|
+
tt # 过去一年 token 热力图 + 顶部三段概览(= tt daily)
|
|
104
|
+
tt daily # 同上(tt 无参即进 daily)
|
|
105
|
+
tt status # 过去 5h 实时面板
|
|
106
|
+
tt weekly # 周报
|
|
107
|
+
tt monthly # 月报
|
|
108
|
+
tt sessions # 最近 20 条会话明细(tt sessions <n> 改条数、--sort 改排序)
|
|
109
|
+
tt theme # 查看 / 切换配色主题(show / list / set / preview)
|
|
110
|
+
tt unsetup # 卸载并恢复安装前的配置
|
|
111
|
+
tt --version # 查看版本(-v / -V 同义)
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
> 💡 `tt daily` 是 GitHub 风格的 token 贡献热力图(深浅绿方格)。在 Claude Code 会话里输入 `!tt daily` 即可看到彩色热力图 —— 用户主动用 `!` 执行的命令,Claude Code 会渲染其 24-bit 真彩色输出。
|
|
115
|
+
|
|
116
|
+
## 配色主题
|
|
117
|
+
|
|
118
|
+
内置 6 套主题,CLI 报表、CC 状态栏与 Codex 伪 statusline **统一同源**(切主题三者一起变):
|
|
119
|
+
|
|
120
|
+

|
|
121
|
+
|
|
122
|
+
| 主题 | 说明 |
|
|
123
|
+
|------|------|
|
|
124
|
+
| `mocha` / `latte` / `frappe` / `macchiato` | Catppuccin 全家(暗 / 亮终端自动选 mocha / latte) |
|
|
125
|
+
| `nord` | Nord |
|
|
126
|
+
| `dracula` | Dracula |
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
tt theme # 显示当前主题及来源
|
|
130
|
+
tt theme list # 列出全部主题 + 色块预览
|
|
131
|
+
tt theme preview nord # 预览某主题(CLI 样例 + 状态栏样例行)
|
|
132
|
+
tt theme set nord # 切换主题(持久化 + 重烘焙状态栏)
|
|
133
|
+
tt monthly --theme nord # 任意报表临时换主题渲染(不持久化、不动状态栏,适合对比)
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
- 切换持久化到 `~/.config/token-tracker/config.json`;优先级 `--theme` 参数 > `TT_THEME` 环境变量 > 配置文件 > 自动。
|
|
137
|
+
- 终端支持 truecolor 用精确配色;不支持的(如 macOS 自带 Terminal.app)自动降级到 **256 色近似**。
|
|
138
|
+
|
|
139
|
+
## 高级
|
|
140
|
+
|
|
141
|
+
### 首次运行向导
|
|
142
|
+
|
|
143
|
+
第一次跑 `tt`(或在独立终端跑 `tt setup`)会进入**交互式配置向导**,全程上下键选 + 回车确认:
|
|
144
|
+
|
|
145
|
+
1. **选语言** — 中文 / English(落 `~/.config/token-tracker/config.json`)
|
|
146
|
+
2. **选配色主题** — 6 套主题上下键选择,每个选项右侧内联色板预览
|
|
147
|
+
3. **启用 Codex 伪 statusline** — Yes/No(仅检测到 Codex 时)
|
|
148
|
+
|
|
149
|
+
CI / 非 tty 环境(Docker / 脚本 / `curl|bash`)自动按默认全装:**语言跟随系统设置**、主题 mocha、组件全开。装好后想改任何一项,再跑一次 `tt setup` 即可。
|
|
150
|
+
|
|
151
|
+
### 报告排序
|
|
152
|
+
|
|
153
|
+
所有报告命令支持 `--sort` 和 `--asc/--desc` 参数:
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
tt weekly --sort cost --desc # 按成本降序
|
|
157
|
+
tt sessions --sort tokens --asc # 按 token 升序
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
可选排序字段:`tokens` / `cost` / `messages` / `time` / `input` / `output`
|
|
161
|
+
|
|
162
|
+
## 数据来源
|
|
163
|
+
|
|
164
|
+
| Agent | 路径 | 格式 |
|
|
165
|
+
|-------|------|------|
|
|
166
|
+
| Claude Code | `~/.claude/projects/*/` | JSONL(逐消息用量) |
|
|
167
|
+
| Codex | `~/.codex/sessions/` | JSONL + SQLite |
|
|
168
|
+
|
|
169
|
+
路径跨平台:Windows 下 `~` 解析到 `%USERPROFILE%`。设了 `CLAUDE_CONFIG_DIR` / `CODEX_HOME` 环境变量(官方支持的自定义目录)时自动跟随。
|
|
170
|
+
|
|
171
|
+
Token Tracker 对 Agent 数据**只读**,不做任何修改。
|
|
172
|
+
|
|
173
|
+
## 环境要求
|
|
174
|
+
|
|
175
|
+
- Python 3.11+
|
|
176
|
+
- [Rich](https://github.com/Textualize/rich)(自动安装)
|
|
177
|
+
|
|
178
|
+
## License
|
|
179
|
+
|
|
180
|
+
Copyright (c) 2026 stormzhang. MIT License.
|
|
@@ -28,6 +28,21 @@ _FAMILY_FALLBACK = (
|
|
|
28
28
|
("claude-haiku", "claude-haiku-4-5-20251001"),
|
|
29
29
|
("claude-fable", "claude-fable-5"),
|
|
30
30
|
("codex-", "gpt-5.5"),
|
|
31
|
+
# 国产模型系列兜底:出新版本(如 GLM-4.8、Kimi K3)litellm 未收录时退回该系列最新已知价
|
|
32
|
+
("kimi", "kimi-k2.6"),
|
|
33
|
+
("moonshot-v", "moonshot-v1-128k"),
|
|
34
|
+
("glm-4", "glm-4.6"),
|
|
35
|
+
("qwen3-coder", "qwen3-coder-plus"),
|
|
36
|
+
("qwen3-max", "qwen-max"),
|
|
37
|
+
("doubao-seed", "doubao-seed-1-6"),
|
|
38
|
+
("doubao-1-5-pro", "doubao-1-5-pro-256k"),
|
|
39
|
+
("deepseek", "deepseek-v4-flash"),
|
|
40
|
+
("minimax", "MiniMax-M2"),
|
|
41
|
+
("mimo", "mimo-v2.5"),
|
|
42
|
+
# Grok:退役 slug 按官方路由兜底(grok-code-* → build-0.1;grok-4-fast/4.1-fast/grok-3 等 → grok-4.3)
|
|
43
|
+
("grok-code", "grok-build-0.1"),
|
|
44
|
+
("grok-4", "grok-4.3"),
|
|
45
|
+
("grok", "grok-4.3"),
|
|
31
46
|
)
|
|
32
47
|
|
|
33
48
|
# 解析不到定价的模型只提示一次,避免聚合时每条 entry 刷屏
|
|
@@ -195,6 +210,31 @@ _FABLE_PRICING = {
|
|
|
195
210
|
"cache_read_input_token_cost": 1.0e-6,
|
|
196
211
|
}
|
|
197
212
|
|
|
213
|
+
# 国产模型多以人民币计价,统一折 USD 入表,与 CC/Codex 同口径(2026-06 近似汇率)
|
|
214
|
+
_CNY_PER_USD = 7.1
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
def _cny(input_m: float, output_m: float, cache_read_m: float | None = None) -> dict:
|
|
218
|
+
"""人民币「元 / 百万 tokens」→ USD per token(÷汇率 ÷1e6)。国产模型按中国站人民币价折算。"""
|
|
219
|
+
info = {
|
|
220
|
+
"input_cost_per_token": input_m / _CNY_PER_USD * 1e-6,
|
|
221
|
+
"output_cost_per_token": output_m / _CNY_PER_USD * 1e-6,
|
|
222
|
+
}
|
|
223
|
+
if cache_read_m is not None:
|
|
224
|
+
info["cache_read_input_token_cost"] = cache_read_m / _CNY_PER_USD * 1e-6
|
|
225
|
+
return info
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
def _usd(input_m: float, output_m: float, cache_read_m: float | None = None) -> dict:
|
|
229
|
+
"""美元「$ / 百万 tokens」→ USD per token(÷1e6)。用于只有官方国际站 USD 价的模型。"""
|
|
230
|
+
info = {
|
|
231
|
+
"input_cost_per_token": input_m * 1e-6,
|
|
232
|
+
"output_cost_per_token": output_m * 1e-6,
|
|
233
|
+
}
|
|
234
|
+
if cache_read_m is not None:
|
|
235
|
+
info["cache_read_input_token_cost"] = cache_read_m * 1e-6
|
|
236
|
+
return info
|
|
237
|
+
|
|
198
238
|
|
|
199
239
|
def _fallback_pricing() -> dict:
|
|
200
240
|
return {
|
|
@@ -249,4 +289,47 @@ def _fallback_pricing() -> dict:
|
|
|
249
289
|
"output_cost_per_token": 6e-6,
|
|
250
290
|
"cache_read_input_token_cost": 0.375e-6,
|
|
251
291
|
},
|
|
292
|
+
# ---- 国产模型(2026-06 官方核实)。除 GLM 用 z.ai 国际站 USD 外,其余按各家中国站
|
|
293
|
+
# 人民币价 ÷7.1 折算;阶梯定价模型(Qwen3-Coder / Doubao)统一取 0-32K 基础档。----
|
|
294
|
+
# Kimi / Moonshot(platform.kimi.com 官方人民币价;老 kimi-k2-instruct 已 EOL,靠系列兜底)
|
|
295
|
+
"kimi-k2.7-code": _cny(6.5, 27, 1.3),
|
|
296
|
+
"kimi-k2.6": _cny(6.5, 27, 1.1),
|
|
297
|
+
"kimi-k2.5": _cny(4, 21, 0.7),
|
|
298
|
+
"moonshot-v1-8k": _cny(2, 10),
|
|
299
|
+
"moonshot-v1-32k": _cny(5, 20),
|
|
300
|
+
"moonshot-v1-128k": _cny(10, 30),
|
|
301
|
+
# 智谱 GLM(z.ai 国际站官方 USD;中国站按量完整价含缓存无法从官方 SPA 取得,国内口径可能偏高)
|
|
302
|
+
"glm-4.6": _usd(0.6, 2.2, 0.11),
|
|
303
|
+
"glm-4.5": _usd(0.6, 2.2, 0.11),
|
|
304
|
+
"glm-4.5-air": _usd(0.2, 1.1, 0.03),
|
|
305
|
+
"glm-4.7": _usd(0.6, 2.2, 0.11),
|
|
306
|
+
"glm-5": _usd(1.0, 3.2, 0.2),
|
|
307
|
+
# 阿里 Qwen(中国站百炼人民币价,0-32K 基础档)
|
|
308
|
+
"qwen3-coder-plus": _cny(4, 16, 0.4),
|
|
309
|
+
"qwen-max": _cny(2.5, 10),
|
|
310
|
+
"qwen-plus": _cny(0.8, 2),
|
|
311
|
+
# 火山方舟 Doubao(中国站人民币价,0-32K 基础档)
|
|
312
|
+
"doubao-seed-1-6": _cny(0.8, 8),
|
|
313
|
+
"doubao-seed-code": _cny(1.2, 8),
|
|
314
|
+
"doubao-1-5-pro-32k": _cny(0.8, 2, 0.16),
|
|
315
|
+
"doubao-1-5-pro-256k": _cny(5, 9),
|
|
316
|
+
# DeepSeek(官方中国站人民币价;chat/reasoner 现映射 V4-Flash,2026-07-24 弃用旧名)
|
|
317
|
+
"deepseek-v4-flash": _cny(1, 2, 0.02),
|
|
318
|
+
"deepseek-v4-pro": _cny(3, 6, 0.025),
|
|
319
|
+
"deepseek-chat": _cny(1, 2, 0.02),
|
|
320
|
+
"deepseek-reasoner": _cny(1, 2, 0.02),
|
|
321
|
+
# MiniMax(官方 USD,与中国站÷7 自洽;M2/M2.1/M2.5 同价 legacy)
|
|
322
|
+
"MiniMax-M2": _usd(0.3, 1.2, 0.03),
|
|
323
|
+
"MiniMax-M2.1": _usd(0.3, 1.2, 0.03),
|
|
324
|
+
"MiniMax-M2.5": _usd(0.3, 1.2, 0.03),
|
|
325
|
+
"MiniMax-M2.7": _usd(0.3, 1.2, 0.06),
|
|
326
|
+
"MiniMax-M3": _usd(0.3, 1.2, 0.06),
|
|
327
|
+
# 小米 MiMo(mimo.mi.com 官方中国站人民币价;与 DeepSeek 同价,V2.5-Pro 主攻 agentic 编程)
|
|
328
|
+
"mimo-v2.5-pro": _cny(3, 6, 0.025),
|
|
329
|
+
"mimo-v2.5": _cny(1, 2, 0.02),
|
|
330
|
+
# xAI Grok(docs.x.ai 官方 USD)。2026-05-15 退役潮:grok-4-fast/4.1-fast/grok-3 路由到 grok-4.3,
|
|
331
|
+
# grok-code-fast-1 退役为 grok-build-0.1 别名(退役 slug 靠 _FAMILY_FALLBACK 接住)。grok-4.3 取 ≤200K 默认档。
|
|
332
|
+
"grok-4.3": _usd(1.25, 2.5, 0.2),
|
|
333
|
+
"grok-build-0.1": _usd(1.0, 2.0, 0.2),
|
|
334
|
+
"grok-code-fast-1": _usd(1.0, 2.0, 0.2),
|
|
252
335
|
}
|
|
@@ -386,18 +386,15 @@ def main():
|
|
|
386
386
|
update_hook()
|
|
387
387
|
|
|
388
388
|
# 升级感知:新版若新增了值得重配的选项(SETUP_VERSION bump),老用户跑任意命令时
|
|
389
|
-
#
|
|
390
|
-
#
|
|
389
|
+
# 自动走一遍 setup——_run_setup_flow 内部分流:真终端弹 wizard、会话内 / 非 tty 静默
|
|
390
|
+
# _auto_setup 用默认值全装(语言跟随系统 / mocha / 组件全开)。两者最终都 save_setup_version(),
|
|
391
|
+
# 下次启动 setup_version 已是最新、不再触发。
|
|
391
392
|
if (
|
|
392
393
|
command not in ("setup", "unsetup")
|
|
393
394
|
and is_setup()
|
|
394
395
|
and config.setup_version() < config.SETUP_VERSION
|
|
395
396
|
):
|
|
396
|
-
|
|
397
|
-
from .wizard import run_wizard
|
|
398
|
-
run_wizard()
|
|
399
|
-
else:
|
|
400
|
-
get_console().print(f"[dim]{t('setup_outdated_hint')}[/dim]")
|
|
397
|
+
_run_setup_flow()
|
|
401
398
|
|
|
402
399
|
if command == "setup":
|
|
403
400
|
_run_setup_flow()
|
|
@@ -18,10 +18,11 @@ CONFIG_DIR = os.path.expanduser("~/.config/token-tracker")
|
|
|
18
18
|
CONFIG_PATH = os.path.join(CONFIG_DIR, "config.json")
|
|
19
19
|
SCHEMA_VERSION = 1
|
|
20
20
|
|
|
21
|
-
# 引导版本:每次新增"值得让老用户重新走一遍
|
|
22
|
-
# 老用户 config 里没这字段
|
|
21
|
+
# 引导版本:每次新增"值得让老用户重新走一遍 setup"的配置项时手动 +1(只能整数、一次 +1)。
|
|
22
|
+
# 老用户 config 里没这字段 / 旧版本号 < 当前 → 触发重新引导(真终端弹 wizard、非 tty 静默 _auto_setup)。
|
|
23
23
|
# 跟 SCHEMA_VERSION 解耦:那是数据格式版本,这是用户引导版本,bump 节奏完全不同。
|
|
24
|
-
|
|
24
|
+
# 2(0.4.2):强制所有现存用户(0.3.8/0.4.0=无字段=0、0.4.1=1,全 < 2)升级后重走一遍 setup。
|
|
25
|
+
SETUP_VERSION = 2
|
|
25
26
|
|
|
26
27
|
# 旧位置(独立 theme.json / lang.json),老用户首次读 config.json 不存在时自动合并迁移
|
|
27
28
|
_LEGACY_THEME_PATH = os.path.join(CONFIG_DIR, "theme.json")
|
|
@@ -50,7 +50,6 @@ _STRINGS = {
|
|
|
50
50
|
"col_cache_read": "Cache读取",
|
|
51
51
|
"model_breakdown": "模型分布",
|
|
52
52
|
"col_ratio": "占比",
|
|
53
|
-
"col_duration": "活跃/时长",
|
|
54
53
|
"daily_panel_title": "当日数据面板 (P90)",
|
|
55
54
|
"msg_unit": "{n} 条",
|
|
56
55
|
"session_msg": "会话: {sessions} 消息: {msgs}",
|
|
@@ -72,8 +71,7 @@ _STRINGS = {
|
|
|
72
71
|
"active_days": "活跃天数",
|
|
73
72
|
"weekday_grid": "周日,周一,周二,周三,周四,周五,周六", # 热力图左侧行标签(周日开头)
|
|
74
73
|
"month_short": "1月,2月,3月,4月,5月,6月,7月,8月,9月,10月,11月,12月", # 热力图月份表头
|
|
75
|
-
"unit_day": "天", #
|
|
76
|
-
"unit_hour": "小时", # 时长单位
|
|
74
|
+
"unit_day": "天", # 连续天数单位(daily streak)
|
|
77
75
|
# --- theme (cli.py) ---
|
|
78
76
|
"theme_current": "当前主题: {name}{src}",
|
|
79
77
|
"theme_src_env": "(来自环境变量 TT_THEME)",
|
|
@@ -100,9 +98,8 @@ _STRINGS = {
|
|
|
100
98
|
"wizard_signoff": "祝你使用愉快",
|
|
101
99
|
# --- hooks.py ---
|
|
102
100
|
"no_agent_install": "未检测到 Claude Code 或 Codex,请先安装其中之一",
|
|
103
|
-
"auto_setup_hint": "非交互环境,已按默认(语言跟随系统 / 主题 mocha /
|
|
101
|
+
"auto_setup_hint": "非交互环境,已按默认(语言跟随系统 / 主题 mocha / 组件全开)配置\n如需自定义请在终端运行 tt setup",
|
|
104
102
|
"first_setup": "首次使用,正在配置状态栏...",
|
|
105
|
-
"setup_outdated_hint": "检测到新版本新增了配置项;请在终端运行 tt setup 体验",
|
|
106
103
|
"cc_not_found": "未检测到 Claude Code,跳过",
|
|
107
104
|
"codex_not_found": "未检测到 Codex,跳过",
|
|
108
105
|
"sl_backup_replace": "检测到已有 statusLine,备份后替换",
|
|
@@ -168,7 +165,6 @@ _STRINGS = {
|
|
|
168
165
|
"col_cache_read": "Cache Read",
|
|
169
166
|
"model_breakdown": "Model Distribution",
|
|
170
167
|
"col_ratio": "Ratio",
|
|
171
|
-
"col_duration": "Active/Duration",
|
|
172
168
|
"daily_panel_title": "Daily Panel (P90)",
|
|
173
169
|
"msg_unit": "{n}",
|
|
174
170
|
"session_msg": "Sessions: {sessions} Messages: {msgs}",
|
|
@@ -190,8 +186,7 @@ _STRINGS = {
|
|
|
190
186
|
"active_days": "Active Days",
|
|
191
187
|
"weekday_grid": "Sun,Mon,Tue,Wed,Thu,Fri,Sat", # 热力图左侧行标签(Sun 开头)
|
|
192
188
|
"month_short": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", # 热力图月份表头
|
|
193
|
-
"unit_day": "d", #
|
|
194
|
-
"unit_hour": "h", # 时长单位
|
|
189
|
+
"unit_day": "d", # 连续天数单位(daily streak)
|
|
195
190
|
# --- theme (cli.py) ---
|
|
196
191
|
"theme_current": "Current theme: {name}{src}",
|
|
197
192
|
"theme_src_env": " (from env TT_THEME)",
|
|
@@ -218,9 +213,8 @@ _STRINGS = {
|
|
|
218
213
|
"wizard_signoff": "Enjoy!",
|
|
219
214
|
# --- hooks.py ---
|
|
220
215
|
"no_agent_install": "Claude Code or Codex not detected, please install one first",
|
|
221
|
-
"auto_setup_hint": "Non-interactive env — configured with defaults (language follows system / theme mocha / all components on)
|
|
216
|
+
"auto_setup_hint": "Non-interactive env — configured with defaults (language follows system / theme mocha / all components on)\nRun tt setup in a terminal to customize",
|
|
222
217
|
"first_setup": "First run, configuring status bar...",
|
|
223
|
-
"setup_outdated_hint": "New configuration options added in this release — run tt setup in a terminal to try them",
|
|
224
218
|
"cc_not_found": "Claude Code not detected, skipping",
|
|
225
219
|
"codex_not_found": "Codex not detected, skipping",
|
|
226
220
|
"sl_backup_replace": "Existing statusLine detected, backing up and replacing",
|