ccus-cli 0.1.0
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.
- package/LICENSE +21 -0
- package/README.md +178 -0
- package/dist/cli.js +555 -0
- package/dist/lib/aggregate-dashboard.js +749 -0
- package/dist/lib/aggregate.js +168 -0
- package/dist/lib/claude.js +199 -0
- package/dist/lib/dashboard.js +394 -0
- package/dist/lib/debug.js +61 -0
- package/dist/lib/export.js +275 -0
- package/dist/lib/git.js +39 -0
- package/dist/lib/install.js +73 -0
- package/dist/lib/io.js +16 -0
- package/dist/lib/open.js +26 -0
- package/dist/lib/paths.js +56 -0
- package/dist/lib/payload.js +219 -0
- package/dist/lib/storage.js +217 -0
- package/dist/lib/time.js +154 -0
- package/dist/types.js +3 -0
- package/package.json +35 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 ccus-cli contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# ccus
|
|
2
|
+
|
|
3
|
+
一个本地优先的 Claude Code statusline 使用率采集 CLI:
|
|
4
|
+
|
|
5
|
+
- `ccus install`:自动把 statusLine 命令写进 Claude Code 的 `settings.json`,省去手动改配置。
|
|
6
|
+
- `ccus statusline emit`:读取 Claude Code statusline 通过 `stdin` 传入的 JSON,输出 statusline 文本,并写入本地日志。
|
|
7
|
+
- `ccus dashboard serve`:直接启动本地 Web 页面,不用先手动生成 HTML 文件。
|
|
8
|
+
- `ccus export`:默认导出当前周数据包,里面同时包含原始事件和按天维度的周汇总。
|
|
9
|
+
- `ccus aggregate`:读取一个目录里的多人 export bundle json,输出明细、按天、按周三个 CSV。
|
|
10
|
+
- `ccus aggregate serve`:同样以 bundle 目录为输入,启动本地多人 dashboard 页面,不落地任何文件。
|
|
11
|
+
|
|
12
|
+
> **支持范围**:`ccus statusline emit` 依赖 Claude Code 的 statusLine 机制(从 `stdin` 读 JSON、向 `stdout` 回一行文本),**只在命令行版 Claude Code(CLI / 终端)里生效**。
|
|
13
|
+
>
|
|
14
|
+
> Claude **桌面版** 和 **VS Code 插件** 都不支持 statusLine,因此不会调用 `ccus statusline emit`,也就采集不到使用率数据。
|
|
15
|
+
|
|
16
|
+
## 安装
|
|
17
|
+
|
|
18
|
+
全局安装(statusline 每次渲染都会调用,推荐全局装好,避免 `npx` 的启动开销):
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install -g ccus-cli
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
安装后 PATH 上即可使用 `ccus` 命令。一次性命令(如 `dashboard` / `export`)也可以用 `npx`:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npx ccus-cli export
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
要求 Node.js >= 20。
|
|
31
|
+
|
|
32
|
+
## 快速开始
|
|
33
|
+
|
|
34
|
+
全局安装后,一条命令把 statusline 接进 Claude Code:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
ccus install
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
然后照常使用 Claude Code,statusline 会显示 5 小时额度使用率(`5h`)、7 天额度使用率(`7d`)和 context window 占用百分比(`ctx`),原始 payload 也会落到本地日志,供后续 dashboard / export 使用。
|
|
41
|
+
|
|
42
|
+
攒了一段时间数据后,最常用的几条命令:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
ccus export # 导出当前周数据包(this-week)
|
|
46
|
+
ccus export lw # 导出上一整周(last-week,周一到周日)
|
|
47
|
+
ccus export tw # 导出本周(等价于默认 ccus export)
|
|
48
|
+
|
|
49
|
+
ccus dashboard serve # 启动本地页面,看自己的 5 小时使用率趋势
|
|
50
|
+
|
|
51
|
+
ccus aggregate --input-dir ./team-exports # 多人的数据汇总,可以导出 detail.csv、daily.csv、weekly.csv 三个维度的文件
|
|
52
|
+
ccus aggregate serve --input-dir ./team-exports #直接打开一个看板
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 一键安装(推荐)
|
|
56
|
+
|
|
57
|
+
不想手动改配置时,直接运行:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
ccus install
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
行为:
|
|
64
|
+
|
|
65
|
+
- 默认写入 `~/.claude/settings.json`(可用 `--settings PATH` 覆盖;遵循 `CCUS_CLAUDE_DATA_DIR`)
|
|
66
|
+
- 默认写入的命令是 `ccus statusline emit`(需要先全局安装,让 PATH 上能找到 `ccus`)
|
|
67
|
+
- 只覆盖 `statusLine` 字段(保留其下已有的 `padding` 等键),其它顶层设置原样保留
|
|
68
|
+
- 已存在且命令一致时显示 `already configured`,被替换时会回显旧命令
|
|
69
|
+
- `settings.json` 无法解析为 JSON 时直接报错,不会覆盖文件
|
|
70
|
+
- `--command CMD` 可完全自定义命令;`--data-dir PATH` 会在默认命令后追加 `--data-dir`,让采样落到指定目录
|
|
71
|
+
|
|
72
|
+
### 手动配置
|
|
73
|
+
|
|
74
|
+
也可以手动在 `settings.json` 里写:
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"statusLine": {
|
|
79
|
+
"type": "command",
|
|
80
|
+
"command": "ccus statusline emit"
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## 常用命令
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
ccus install
|
|
89
|
+
ccus install --settings ~/.claude/settings.json
|
|
90
|
+
ccus statusline emit
|
|
91
|
+
ccus dashboard build --range today --out ./ccus-dashboard.html
|
|
92
|
+
ccus dashboard open --range today
|
|
93
|
+
ccus dashboard serve --range today --open
|
|
94
|
+
ccus export
|
|
95
|
+
ccus export --range today
|
|
96
|
+
ccus export --range last-week
|
|
97
|
+
ccus export lw # 位置参数简写,等价于 --range last-week
|
|
98
|
+
ccus export tw # 等价于 --range this-week
|
|
99
|
+
ccus export --out ./alice_export_2026-05-26_to_2026-06-01.json
|
|
100
|
+
ccus aggregate --input-dir ./team-exports --out-dir ./team-report
|
|
101
|
+
ccus aggregate serve --input-dir ./team-exports
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
`serve` 会启动一个本地 HTTP 服务,默认监听 `127.0.0.1` 上的随机端口,并在每次请求时实时读取最新日志生成页面。
|
|
105
|
+
|
|
106
|
+
其中:
|
|
107
|
+
|
|
108
|
+
- `5 小时使用量百分比` 是 **展示指标**,来自 Claude 自身字段 `rate_limits.five_hour.used_percentage`
|
|
109
|
+
- `--range today / this-week / last-week / 24h` 是 **你要查看的采样历史时间窗口**(`last-week` 指上一个完整周一到周日)
|
|
110
|
+
- statusline 日志本身主要保存 `rawPayload` 与外部补充字段;默认导出时会同时保留原始事件,并额外汇总 `~/.claude/projects/**/*.jsonl` 中的会话 usage
|
|
111
|
+
|
|
112
|
+
## 导出
|
|
113
|
+
|
|
114
|
+
- 默认导出 `this-week`;如需导出上一个完整周(周一到周日),用 `--range last-week`,或位置参数简写 `ccus export lw`(`tw` = 本周)
|
|
115
|
+
- 默认输出一个 `json` 数据包,里面同时包含 `rawEvents`、`weeklySummary`、`dailySummaries`
|
|
116
|
+
- 当前导出 bundle / weeklySummary 的 `schemaVersion` 为 `6`,用于标识已使用 `fiveHourLatestUsagePct`、`fiveHourPeakUsagePct`、`sevenDayLatestUsagePct`、`sevenDayPeakUsagePct` 字段的新导出契约
|
|
117
|
+
- 默认文件名会带 git email 的帐号名前缀和起止日期,例如:`alice_export_2026-05-26_to_2026-06-01.json`
|
|
118
|
+
- `userMessageCount` 来自 `~/.claude/projects/**/*.jsonl` 的非 meta `type:user` 事件
|
|
119
|
+
- `apiRequestCount` 与 token 指标来自 `~/.claude/projects/**/*.jsonl` 中带 `message.usage` 的 `type:assistant` 事件
|
|
120
|
+
- `dailySummaries` 会按每天输出消息数、请求数、token 和当天 statusline usage 摘要
|
|
121
|
+
- 不再支持其它导出格式
|
|
122
|
+
|
|
123
|
+
## 多人汇总
|
|
124
|
+
|
|
125
|
+
- 输入目录放很多通过 `ccus export` 导出的 bundle `.json` 文件
|
|
126
|
+
- `aggregate` 目前只接受 `schemaVersion: 6` 的 bundle;旧导出请先用当前版本重新 `ccus export`
|
|
127
|
+
- `ccus aggregate --input-dir DIR --out-dir DIR`
|
|
128
|
+
- 输出三个文件:
|
|
129
|
+
- `detail.csv`:来自每个 bundle 的 `rawEvents`,`contextUsedM` / `contextMaxM` 为单条事件的 context window token;另附带 `inputTokensM` / `outputTokensM` / `cacheReadInputTokensM`(按 `date` 取自当天 `dailySummaries` 的日总量,同一天多行会重复,不能按行求和)
|
|
130
|
+
- `daily.csv`:直接来自每个 bundle 的 `dailySummaries`
|
|
131
|
+
- `weekly.csv`:直接来自每个 bundle 的 `weeklySummary`
|
|
132
|
+
- CSV 里所有以 token 计的列(context 与 in/out/cache)都以百万(M)为单位(原始值除以 1,000,000),列名统一带 `M` 后缀;`contextWindowPct` 仍是百分比
|
|
133
|
+
- 想直接查看团队多人 dashboard,可以用 `ccus aggregate serve --input-dir DIR [--port 0] [--host 127.0.0.1]`:默认监听 `127.0.0.1` 上的随机端口,启动后会自动用系统默认浏览器打开,每次请求实时读取目录里的 bundle,不写入任何文件
|
|
134
|
+
|
|
135
|
+
## 调试
|
|
136
|
+
|
|
137
|
+
出问题时(比如 statusline 不出数据、导出/聚合结果不对),可以打开详细日志:
|
|
138
|
+
|
|
139
|
+
- 给任意命令加 `--verbose`(或 `--debug` / `-v`),例如 `ccus export --verbose`、`ccus aggregate --input-dir DIR --verbose`
|
|
140
|
+
- 或设置环境变量 `CCUS_DEBUG=1`,对 Claude Code 自动调用的 `ccus statusline emit` 尤其方便(无法临时加参数时)
|
|
141
|
+
|
|
142
|
+
注意:
|
|
143
|
+
|
|
144
|
+
- 调试日志一律输出到 **stderr**,stdout 仍然只输出正常结果(statusline 单行文本 / 文件路径),所以加上 `--verbose` 不会破坏 statusline 渲染
|
|
145
|
+
- 平时 `ccus statusline emit` 即使内部出错也会静默降级输出兜底文本;开启调试后会把真正的错误堆栈打到 stderr,便于定位
|
|
146
|
+
|
|
147
|
+
## 默认数据目录
|
|
148
|
+
|
|
149
|
+
- Windows: `%LOCALAPPDATA%\\ccus`
|
|
150
|
+
- macOS: `~/Library/Application Support/ccus`
|
|
151
|
+
- Linux: `$XDG_DATA_HOME/ccus` 或 `~/.local/share/ccus`
|
|
152
|
+
|
|
153
|
+
## 当前日志记录字段
|
|
154
|
+
|
|
155
|
+
- `timestamp`
|
|
156
|
+
- `gitUserName`
|
|
157
|
+
- `gitUserEmail`
|
|
158
|
+
- `schemaVersion`
|
|
159
|
+
- `rawPayload`
|
|
160
|
+
|
|
161
|
+
## 开发
|
|
162
|
+
|
|
163
|
+
从源码构建:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
npm install
|
|
167
|
+
npm run build
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
测试:
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
npm run test:src # 直接跑 TypeScript 源码测试(tsx)
|
|
174
|
+
npm run build # 编译到 dist
|
|
175
|
+
npm test # 跑编译后的测试
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
发布到 npm 时只包含运行时产物(`dist` 下的 `cli.js`、`lib/**/*.js`、`types.js`)与 `README.md`、`package.json`;源码、测试、sourcemap、内部文档不会被打包。
|