pulse-line 1.0.5 → 1.0.6

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.
Files changed (64) hide show
  1. package/.claude-plugin/marketplace.json +10 -2
  2. package/.claude-plugin/plugin.json +11 -3
  3. package/README.md +266 -266
  4. package/dist/src/cli.js +22 -3
  5. package/dist/src/cli.js.map +1 -1
  6. package/dist/src/config/loader.js +5 -2
  7. package/dist/src/config/loader.js.map +1 -1
  8. package/dist/src/config/migrate-config.js +0 -3
  9. package/dist/src/config/migrate-config.js.map +1 -1
  10. package/dist/src/extractors/cost.js +1 -1
  11. package/dist/src/extractors/cost.js.map +1 -1
  12. package/dist/src/extractors/index.d.ts +1 -1
  13. package/dist/src/extractors/index.js +4 -1
  14. package/dist/src/extractors/index.js.map +1 -1
  15. package/dist/src/extractors/mcp.d.ts +1 -1
  16. package/dist/src/extractors/mcp.js +3 -2
  17. package/dist/src/extractors/mcp.js.map +1 -1
  18. package/dist/src/extractors/output-style.d.ts +2 -5
  19. package/dist/src/extractors/output-style.js.map +1 -1
  20. package/dist/src/extractors/rules.js +9 -4
  21. package/dist/src/extractors/rules.js.map +1 -1
  22. package/dist/src/extractors/third-party-api.d.ts +26 -0
  23. package/dist/src/extractors/third-party-api.js +89 -35
  24. package/dist/src/extractors/third-party-api.js.map +1 -1
  25. package/dist/src/extractors/tool-timeline.d.ts +1 -1
  26. package/dist/src/extractors/tool-timeline.js +1 -2
  27. package/dist/src/extractors/tool-timeline.js.map +1 -1
  28. package/dist/src/formatters/progress-bar.js +0 -2
  29. package/dist/src/formatters/progress-bar.js.map +1 -1
  30. package/dist/src/index.js +13 -8
  31. package/dist/src/index.js.map +1 -1
  32. package/dist/src/parser/stdin-parser.js +16 -11
  33. package/dist/src/parser/stdin-parser.js.map +1 -1
  34. package/dist/src/tool-timeline/cache.js +26 -10
  35. package/dist/src/tool-timeline/cache.js.map +1 -1
  36. package/dist/src/types/pulse-config.js +14 -14
  37. package/dist/src/types/pulse-config.js.map +1 -1
  38. package/dist/src/utils/cache.js +31 -4
  39. package/dist/src/utils/cache.js.map +1 -1
  40. package/dist/src/utils/claude-settings-env.d.ts +3 -0
  41. package/dist/src/utils/claude-settings-env.js +11 -0
  42. package/dist/src/utils/claude-settings-env.js.map +1 -1
  43. package/dist/src/utils/logger.d.ts +0 -8
  44. package/dist/src/utils/logger.js +0 -42
  45. package/dist/src/utils/logger.js.map +1 -1
  46. package/dist/src/utils/model-display-env.js +3 -3
  47. package/dist/src/utils/model-display-env.js.map +1 -1
  48. package/dist/src/utils/terminal-width.d.ts +2 -0
  49. package/dist/src/utils/terminal-width.js +10 -1
  50. package/dist/src/utils/terminal-width.js.map +1 -1
  51. package/dist/test/extractors.test.js +3 -2
  52. package/dist/test/extractors.test.js.map +1 -1
  53. package/dist/test/rules.test.js +9 -5
  54. package/dist/test/rules.test.js.map +1 -1
  55. package/dist/test/terminal-width.test.js +3 -0
  56. package/dist/test/terminal-width.test.js.map +1 -1
  57. package/dist/test/tool-timeline-render.test.js +4 -4
  58. package/dist/test/tool-timeline-render.test.js.map +1 -1
  59. package/package.json +4 -2
  60. package/scripts/sync-versions.js +49 -0
  61. package/dist/src/themes/icon-provider.d.ts +0 -2
  62. package/dist/src/themes/icon-provider.js +0 -10
  63. package/dist/src/themes/icon-provider.js.map +0 -1
  64. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -6,7 +6,7 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "A highly customizable status bar for Claude Code — 15 modules, 5 themes, i18n (zh/en), third-party API monitoring, and more",
9
- "version": "1.0.0"
9
+ "version": "1.0.6"
10
10
  },
11
11
  "plugins": [
12
12
  {
@@ -14,7 +14,15 @@
14
14
  "source": "./",
15
15
  "description": "Real-time status bar showing model, context usage, git branch, cache, MCP status, account usage, turns, thinking, and more. Supports 5 themes, i18n (Chinese/English), and third-party API monitoring for Zhipu, DeepSeek, and MiniMax.",
16
16
  "category": "monitoring",
17
- "tags": ["statusline", "status-bar", "monitoring", "pulse-line", "claude-code", "i18n", "themes"]
17
+ "tags": [
18
+ "statusline",
19
+ "status-bar",
20
+ "monitoring",
21
+ "pulse-line",
22
+ "claude-code",
23
+ "i18n",
24
+ "themes"
25
+ ]
18
26
  }
19
27
  ]
20
28
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pulse-line",
3
- "version": "1.0.0",
3
+ "version": "1.0.6",
4
4
  "description": "A highly customizable status bar plugin for Claude Code with multi-theme support, i18n, and real-time monitoring",
5
5
  "author": {
6
6
  "name": "knqiufan",
@@ -9,7 +9,14 @@
9
9
  "homepage": "https://github.com/knqiufan/pulse-line",
10
10
  "repository": "https://github.com/knqiufan/pulse-line",
11
11
  "license": "MIT",
12
- "keywords": ["claude-code", "statusline", "status-bar", "monitoring", "productivity", "pulse-line"],
12
+ "keywords": [
13
+ "claude-code",
14
+ "statusline",
15
+ "status-bar",
16
+ "monitoring",
17
+ "productivity",
18
+ "pulse-line"
19
+ ],
13
20
  "commands": [
14
21
  "./commands/install.md",
15
22
  "./commands/theme.md",
@@ -24,5 +31,6 @@
24
31
  "./commands/debug.md",
25
32
  "./commands/uninstall.md"
26
33
  ],
27
- "skills": "./skills/"
34
+ "skills": "./skills/",
35
+ "hooks": "./hooks/hooks.json"
28
36
  }
package/README.md CHANGED
@@ -1,266 +1,266 @@
1
- <div align="center">
2
-
3
- # Pulse Line
4
-
5
- **一个高度可定制的 [Claude Code](https://docs.anthropic.com/en/docs/claude-code) 状态栏插件**
6
-
7
- 支持多主题、国际化和实时监控
8
-
9
- [![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
10
- [![Node.js](https://img.shields.io/badge/node-%3E%3D18-green.svg)](https://nodejs.org/)
11
- [![npm](https://img.shields.io/npm/v/pulse-line.svg)](https://www.npmjs.com/package/pulse-line)
12
-
13
- **中文** | [English](README_EN.md)
14
-
15
- </div>
16
-
17
- ---
18
-
19
- ## 特性
20
-
21
- - **17 个模块** — 当前模型、Git 分支、上下文使用率、缓存、MCP 状态、账户用量、轮次、思考模式、规则统计、工具分析等
22
- - **5 个内置主题** — Dark、Light、Cyberpunk、Forest、Ocean
23
- - **国际化支持** — 中/英文切换
24
- - **第三方 API 监控** — 智谱 (GLM)、DeepSeek、MiniMax 账户余额和配额
25
- - **自适应布局** — 自定义模块顺序,按终端宽度自动换行,可配置每行模块数上限和分隔符
26
- - **13 个斜杠命令** — 在 Claude Code 中直接管理
27
-
28
- ## 快速开始
29
-
30
- ### 方式一:Plugin Marketplace(推荐)
31
-
32
- 在 Claude Code 中执行:
33
-
34
- ```
35
- /plugin marketplace add knqiufan/pulse-line
36
- /plugin install pulse-line
37
- ```
38
-
39
- 安装完成后,**重启 Claude Code**,插件会在下次会话启动时自动配置状态栏。
40
-
41
- ### 方式二:一键命令安装
42
-
43
- ```bash
44
- npx -y pulse-line@latest install
45
- ```
46
-
47
- 这条命令会自动完成所有配置,执行后重启 Claude Code 即可。
48
-
49
- > **注意**:此方式会自动尝试注册插件。如果你还需要 `/pulse-line:*` 斜杠命令,请在 Claude Code 中额外执行:
50
- > ```
51
- > /plugin marketplace add knqiufan/pulse-line
52
- > /plugin install pulse-line
53
- > ```
54
-
55
- ### 方式三:全局安装
56
-
57
- ```bash
58
- npm install -g pulse-line
59
- pulse-line install
60
- ```
61
-
62
- > **提示**:也可以直接让 Claude Code 帮你安装——在对话中告诉它"帮我安装 pulse-line 状态栏",它会自动完成配置。
63
-
64
- ## 命令一览
65
-
66
- ### 斜杠命令(Claude Code 内使用)
67
-
68
- | 命令 | 说明 |
69
- |------|------|
70
- | `/pulse-line:install` | 初始化配置 |
71
- | `/pulse-line:theme <name>` | 切换主题 |
72
- | `/pulse-line:themes` | 列出可用主题 |
73
- | `/pulse-line:enable <module>` | 启用模块 |
74
- | `/pulse-line:disable <module>` | 禁用模块 |
75
- | `/pulse-line:language <zh\|en>` | 切换显示语言 |
76
- | `/pulse-line:config` | 在编辑器中打开配置 |
77
- | `/pulse-line:reload` | 重新加载配置 |
78
- | `/pulse-line:clear-cache` | 清除缓存 |
79
- | `/pulse-line:timeline` | 调试/导出已采集的工具分析数据 |
80
- | `/pulse-line:rules` | 查看/管理项目规则文件 |
81
- | `/pulse-line:debug` | 切换调试模式 |
82
- | `/pulse-line:uninstall` | 卸载配置 |
83
-
84
- ### CLI 命令(终端中使用)
85
-
86
- ```bash
87
- pulse-line theme cyberpunk # 切换主题
88
- pulse-line language zh # 切换为中文
89
- pulse-line enable thinking # 启用模块
90
- pulse-line disable cost # 禁用模块
91
- pulse-line clear-cache # 清除缓存
92
- pulse-line timeline --last 20 # 查看最近工具调用
93
- pulse-line rules list # 列出项目规则文件
94
- pulse-line rules pattern add "docs/**/*.md" # 添加包含模式
95
- ```
96
-
97
- ## 模块列表
98
-
99
- | 模块 | ID | 默认状态 | 说明 |
100
- |------|----|----------|------|
101
- | 当前模型 | `model` | ✅ 开启 | 当前 AI 模型名称 |
102
- | Git 分支 | `git` | ✅ 开启 | 分支名及领先/落后数 |
103
- | 工作区 | `workspace` | ✅ 开启 | 当前项目名 |
104
- | 上下文使用率 | `context` | ✅ 开启 | 上下文窗口使用率(含进度条) |
105
- | 缓存 | `cacheRatio` | ✅ 开启 | 缓存 token 数量(K/M 格式) |
106
- | MCP | `mcpStatus` | ✅ 开启 | 活跃 MCP 服务器数量 |
107
- | 账户用量 | `accountUsage` | ✅ 开启 | 第三方 API 配额和余额 |
108
- | 轮次 | `turns` | ✅ 开启 | 对话轮次 |
109
- | 思考模式 | `thinking` | ✅ 开启 | 扩展思考状态 |
110
- | 费用 | `cost` | ❌ 关闭 | 会话费用(美元) |
111
- | 时长 | `duration` | ❌ 关闭 | 会话持续时间 |
112
- | 限速 | `rateLimits` | ❌ 关闭 | Anthropic API 限速(5h 窗口) |
113
- | 配额 | `weeklyQuota` | ❌ 关闭 | Anthropic API 周配额 |
114
- | 输出风格 | `outputStyle` | ❌ 关闭 | 当前输出风格 |
115
- | 第三方 API | `thirdPartyApi` | ❌ 关闭 | 异步 API 供应商查询 |
116
- | 规则 | `rules` | ✅ 开启 | 项目规则/Skill 文件数量统计,显示规则与 Skill 明细 |
117
- | 工具分析 | `toolTimeline` | ❌ 关闭 | 独立工具调用统计分析面板,包含最近调用 |
118
-
119
- ## 配置
120
-
121
- 配置文件位于 `~/.claude/pulse/config.json`,可通过 `pulse-line config` 打开编辑。
122
-
123
- ```json
124
- {
125
- "theme": "dark",
126
- "language": "zh",
127
- "iconSet": "text",
128
- "separator": " │ ",
129
- "padding": 1,
130
- "maxPerLine": 5,
131
- "modules": {
132
- "model": { "enabled": true, "order": 1, "icon": "[当前模型]" },
133
- "git": { "enabled": true, "order": 2, "icon": "[Git 分支]" },
134
- "workspace": { "enabled": true, "order": 3, "icon": "[工作区]" },
135
- "context": { "enabled": true, "order": 4, "showBar": true, "barWidth": 12 },
136
- "rules": {
137
- "enabled": true,
138
- "order": 16,
139
- "icon": "[规则]",
140
- "includePatterns": [],
141
- "excludePatterns": []
142
- },
143
- "toolTimeline": {
144
- "enabled": false,
145
- "order": 17,
146
- "icon": "[工具]",
147
- "displayMode": "analytics-panel",
148
- "maxEvents": 100,
149
- "maxDisplayEvents": 5,
150
- "panelWidth": 59
151
- }
152
- },
153
- "advanced": {
154
- "debugMode": false,
155
- "cacheEnabled": true,
156
- "cacheTTL": 300
157
- }
158
- }
159
- ```
160
-
161
- ### 配置说明
162
-
163
- | 字段 | 类型 | 说明 |
164
- |------|------|------|
165
- | `theme` | string | 主题名称 |
166
- | `language` | `"zh"` \| `"en"` | 显示语言 |
167
- | `separator` | string | 模块间的分隔符 |
168
- | `padding` | number (0-10) | 分隔符两侧的空格数 |
169
- | `maxPerLine` | number (1-20) | 每行模块数上限,实际显示数量会按终端宽度自动调整 |
170
- | `iconSet` | `"text"` \| `"nerd"` | 图标模式,text 为 ASCII 安全字符 |
171
-
172
- ## 自适应布局
173
-
174
- Pulse Line 会在 Windows、macOS 和 Linux 上探测终端宽度,并在 Claude Code 截断状态栏之前自动把指标项换到下一行。`maxPerLine` 仍然作为每行模块数上限,实际每行显示几个模块会根据当前终端宽度动态调整。工具分析面板也会跟随终端宽度收窄显示。
175
-
176
- ## 工具分析
177
-
178
- 安装插件后,Pulse Line 会通过 Claude Code 的 `PostToolUse` / `PostToolUseFailure` / `SubagentStop` hook 记录工具调用摘要和子 agent 元数据到本地缓存,不上传任何遥测数据。启用 `toolTimeline` 后,主视图会在普通状态栏下方显示独立的工具分析面板,展示总工具调用数、当前 context token、主 agent / 子 agent 工具数、子 agent 名称、最耗时工具和最近 5 条调用。
179
-
180
- `timeline` 命令保留为调试和导出入口,不再作为主要查看方式:
181
-
182
- ```bash
183
- pulse-line enable toolTimeline
184
- pulse-line timeline
185
- pulse-line timeline --last 10
186
- pulse-line timeline --json
187
- pulse-line timeline clear
188
- ```
189
-
190
- ## 第三方 API 监控
191
-
192
- Pulse Line 支持监控第三方 API 供应商的账户余额和配额:
193
-
194
- | 供应商 | 环境变量 | 显示内容 |
195
- |--------|----------|----------|
196
- | 智谱 (GLM) | `ZHIPU_API_KEY`、`ZHIPU_BASE_URL` | 使用率 % 及倒计时 |
197
- | DeepSeek | `DEEPSEEK_API_KEY` | 余额(CNY) |
198
- | MiniMax | `MINIMAX_API_KEY`、`MINIMAX_GROUP_ID` | 使用率 % 及倒计时 |
199
-
200
- 供应商会从 Claude Code 设置中自动检测,也可手动配置 `accountUsage.providers` 数组。
201
-
202
- > **注意**:账户用量数据来源于第三方供应商 API,若官方未提供相关接口则无法显示。显示数据仅供参考,请以供应商官方后台为准。
203
-
204
- ## 主题预览
205
-
206
- | 主题 | 风格描述 |
207
- |------|----------|
208
- | `dark` | 蓝绿色系,专业沉稳 |
209
- | `light` | 明亮清爽,适合浅色终端 |
210
- | `cyberpunk` | 霓虹高对比,赛博朋克风 |
211
- | `forest` | 自然绿色系,大地色调 |
212
- | `ocean` | 深蓝色系,海洋质感 |
213
-
214
- ## 本地开发
215
-
216
- ```bash
217
- git clone https://github.com/knqiufan/pulse-line.git
218
- cd pulse-line
219
- npm install
220
- npm run build
221
- npm link
222
-
223
- # 在 Claude Code 中作为本地插件加载
224
- claude --plugin-dir /path/to/pulse-line
225
- ```
226
-
227
- ## 系统要求
228
-
229
- - Node.js >= 18.0.0
230
- - Claude Code CLI
231
-
232
- ## 常见问题
233
-
234
- <details>
235
- <summary><b>安装后状态栏不显示?</b></summary>
236
-
237
- 1. 确认 `~/.claude/settings.json` 中包含 `statusLine` 字段
238
- 2. 执行 `npx -y pulse-line@latest install` 重新配置
239
- 3. 重启 Claude Code
240
-
241
- </details>
242
-
243
- <details>
244
- <summary><b>图标显示为方块或乱码?</b></summary>
245
-
246
- 1. 确保 `config.json` 中 `iconSet` 为 `"text"`(默认值)
247
- 2. 如果使用了 Nerd Font,可设为 `"nerd"`
248
- 3. 执行 `pulse-line reload` 应用变更
249
-
250
- </details>
251
-
252
- <details>
253
- <summary><b>修改配置后没有生效?</b></summary>
254
-
255
- 1. 执行 `pulse-line reload`
256
- 2. 或重启 Claude Code
257
-
258
- </details>
259
-
260
- ## 贡献
261
-
262
- 欢迎提交 Issue 和 Pull Request!
263
-
264
- ## 许可证
265
-
266
- [MIT](LICENSE)
1
+ <div align="center">
2
+
3
+ # Pulse Line
4
+
5
+ **一个高度可定制的 [Claude Code](https://docs.anthropic.com/en/docs/claude-code) 状态栏插件**
6
+
7
+ 支持多主题、国际化和实时监控
8
+
9
+ [![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
10
+ [![Node.js](https://img.shields.io/badge/node-%3E%3D18-green.svg)](https://nodejs.org/)
11
+ [![npm](https://img.shields.io/npm/v/pulse-line.svg)](https://www.npmjs.com/package/pulse-line)
12
+
13
+ **中文** | [English](README_EN.md)
14
+
15
+ </div>
16
+
17
+ ---
18
+
19
+ ## 特性
20
+
21
+ - **17 个模块** — 当前模型、Git 分支、上下文使用率、缓存、MCP 状态、账户用量、轮次、思考模式、规则统计、工具分析等
22
+ - **5 个内置主题** — Dark、Light、Cyberpunk、Forest、Ocean
23
+ - **国际化支持** — 中/英文切换
24
+ - **第三方 API 监控** — 智谱 (GLM)、DeepSeek、MiniMax 账户余额和配额
25
+ - **自适应布局** — 自定义模块顺序,按终端宽度自动换行,可配置每行模块数上限和分隔符
26
+ - **13 个斜杠命令** — 在 Claude Code 中直接管理
27
+
28
+ ## 快速开始
29
+
30
+ ### 方式一:Plugin Marketplace(推荐)
31
+
32
+ 在 Claude Code 中执行:
33
+
34
+ ```
35
+ /plugin marketplace add knqiufan/pulse-line
36
+ /plugin install pulse-line
37
+ ```
38
+
39
+ 安装完成后,**重启 Claude Code**,插件会在下次会话启动时自动配置状态栏。
40
+
41
+ ### 方式二:一键命令安装
42
+
43
+ ```bash
44
+ npx -y pulse-line@latest install
45
+ ```
46
+
47
+ 这条命令会自动完成所有配置,执行后重启 Claude Code 即可。
48
+
49
+ > **注意**:此方式会自动尝试注册插件。如果你还需要 `/pulse-line:*` 斜杠命令,请在 Claude Code 中额外执行:
50
+ > ```
51
+ > /plugin marketplace add knqiufan/pulse-line
52
+ > /plugin install pulse-line
53
+ > ```
54
+
55
+ ### 方式三:全局安装
56
+
57
+ ```bash
58
+ npm install -g pulse-line
59
+ pulse-line install
60
+ ```
61
+
62
+ > **提示**:也可以直接让 Claude Code 帮你安装——在对话中告诉它"帮我安装 pulse-line 状态栏",它会自动完成配置。
63
+
64
+ ## 命令一览
65
+
66
+ ### 斜杠命令(Claude Code 内使用)
67
+
68
+ | 命令 | 说明 |
69
+ |------|------|
70
+ | `/pulse-line:install` | 初始化配置 |
71
+ | `/pulse-line:theme <name>` | 切换主题 |
72
+ | `/pulse-line:themes` | 列出可用主题 |
73
+ | `/pulse-line:enable <module>` | 启用模块 |
74
+ | `/pulse-line:disable <module>` | 禁用模块 |
75
+ | `/pulse-line:language <zh\|en>` | 切换显示语言 |
76
+ | `/pulse-line:config` | 在编辑器中打开配置 |
77
+ | `/pulse-line:reload` | 重新加载配置 |
78
+ | `/pulse-line:clear-cache` | 清除缓存 |
79
+ | `/pulse-line:timeline` | 调试/导出已采集的工具分析数据 |
80
+ | `/pulse-line:rules` | 查看/管理项目规则文件 |
81
+ | `/pulse-line:debug` | 切换调试模式 |
82
+ | `/pulse-line:uninstall` | 卸载配置 |
83
+
84
+ ### CLI 命令(终端中使用)
85
+
86
+ ```bash
87
+ pulse-line theme cyberpunk # 切换主题
88
+ pulse-line language zh # 切换为中文
89
+ pulse-line enable thinking # 启用模块
90
+ pulse-line disable cost # 禁用模块
91
+ pulse-line clear-cache # 清除缓存
92
+ pulse-line timeline --last 20 # 查看最近工具调用
93
+ pulse-line rules list # 列出项目规则文件
94
+ pulse-line rules pattern add "docs/**/*.md" # 添加包含模式
95
+ ```
96
+
97
+ ## 模块列表
98
+
99
+ | 模块 | ID | 默认状态 | 说明 |
100
+ |------|----|----------|------|
101
+ | 当前模型 | `model` | ✅ 开启 | 当前 AI 模型名称 |
102
+ | Git 分支 | `git` | ✅ 开启 | 分支名及领先/落后数 |
103
+ | 工作区 | `workspace` | ✅ 开启 | 当前项目名 |
104
+ | 上下文使用率 | `context` | ✅ 开启 | 上下文窗口使用率(含进度条) |
105
+ | 缓存 | `cacheRatio` | ✅ 开启 | 缓存 token 数量(K/M 格式) |
106
+ | MCP | `mcpStatus` | ✅ 开启 | 活跃 MCP 服务器数量 |
107
+ | 账户用量 | `accountUsage` | ✅ 开启 | 第三方 API 配额和余额 |
108
+ | 轮次 | `turns` | ✅ 开启 | 对话轮次 |
109
+ | 思考模式 | `thinking` | ✅ 开启 | 扩展思考状态 |
110
+ | 费用 | `cost` | ❌ 关闭 | 会话费用(美元) |
111
+ | 时长 | `duration` | ❌ 关闭 | 会话持续时间 |
112
+ | 限速 | `rateLimits` | ❌ 关闭 | Anthropic API 限速(5h 窗口) |
113
+ | 配额 | `weeklyQuota` | ❌ 关闭 | Anthropic API 周配额 |
114
+ | 输出风格 | `outputStyle` | ❌ 关闭 | 当前输出风格 |
115
+ | 第三方 API | `thirdPartyApi` | ❌ 关闭 | 异步 API 供应商查询 |
116
+ | 规则 | `rules` | ✅ 开启 | 项目规则/Skill 文件数量统计,显示规则与 Skill 明细 |
117
+ | 工具分析 | `toolTimeline` | ❌ 关闭 | 独立工具调用统计分析面板,包含最近调用 |
118
+
119
+ ## 配置
120
+
121
+ 配置文件位于 `~/.claude/pulse/config.json`,可通过 `pulse-line config` 打开编辑。
122
+
123
+ ```json
124
+ {
125
+ "theme": "dark",
126
+ "language": "zh",
127
+ "iconSet": "text",
128
+ "separator": " │ ",
129
+ "padding": 1,
130
+ "maxPerLine": 5,
131
+ "modules": {
132
+ "model": { "enabled": true, "order": 1, "icon": "[当前模型]" },
133
+ "git": { "enabled": true, "order": 2, "icon": "[Git 分支]" },
134
+ "workspace": { "enabled": true, "order": 3, "icon": "[工作区]" },
135
+ "context": { "enabled": true, "order": 4, "showBar": true, "barWidth": 12 },
136
+ "rules": {
137
+ "enabled": true,
138
+ "order": 16,
139
+ "icon": "[规则]",
140
+ "includePatterns": [],
141
+ "excludePatterns": []
142
+ },
143
+ "toolTimeline": {
144
+ "enabled": false,
145
+ "order": 17,
146
+ "icon": "[工具]",
147
+ "displayMode": "analytics-panel",
148
+ "maxEvents": 100,
149
+ "maxDisplayEvents": 5,
150
+ "panelWidth": 59
151
+ }
152
+ },
153
+ "advanced": {
154
+ "debugMode": false,
155
+ "cacheEnabled": true,
156
+ "cacheTTL": 300
157
+ }
158
+ }
159
+ ```
160
+
161
+ ### 配置说明
162
+
163
+ | 字段 | 类型 | 说明 |
164
+ |------|------|------|
165
+ | `theme` | string | 主题名称 |
166
+ | `language` | `"zh"` \| `"en"` | 显示语言 |
167
+ | `separator` | string | 模块间的分隔符 |
168
+ | `padding` | number (0-10) | 分隔符两侧的空格数 |
169
+ | `maxPerLine` | number (1-20) | 每行模块数上限,实际显示数量会按终端宽度自动调整 |
170
+ | `iconSet` | `"text"` \| `"nerd"` | 图标模式,text 为 ASCII 安全字符 |
171
+
172
+ ## 自适应布局
173
+
174
+ Pulse Line 会在 Windows、macOS 和 Linux 上探测终端宽度,并在 Claude Code 截断状态栏之前自动把指标项换到下一行。`maxPerLine` 仍然作为每行模块数上限,实际每行显示几个模块会根据当前终端宽度动态调整。工具分析面板也会跟随终端宽度收窄显示。
175
+
176
+ ## 工具分析
177
+
178
+ 安装插件后,Pulse Line 会通过 Claude Code 的 `PostToolUse` / `PostToolUseFailure` / `SubagentStop` hook 记录工具调用摘要和子 agent 元数据到本地缓存,不上传任何遥测数据。启用 `toolTimeline` 后,主视图会在普通状态栏下方显示独立的工具分析面板,展示总工具调用数、当前 context token、主 agent / 子 agent 工具数、子 agent 名称、最耗时工具和最近 5 条调用。
179
+
180
+ `timeline` 命令保留为调试和导出入口,不再作为主要查看方式:
181
+
182
+ ```bash
183
+ pulse-line enable toolTimeline
184
+ pulse-line timeline
185
+ pulse-line timeline --last 10
186
+ pulse-line timeline --json
187
+ pulse-line timeline clear
188
+ ```
189
+
190
+ ## 第三方 API 监控
191
+
192
+ Pulse Line 支持监控第三方 API 供应商的账户余额和配额:
193
+
194
+ | 供应商 | 环境变量 | 显示内容 |
195
+ |--------|----------|----------|
196
+ | 智谱 (GLM) | `ZHIPU_API_KEY`、`ZHIPU_BASE_URL` | 使用率 % 及倒计时 |
197
+ | DeepSeek | `DEEPSEEK_API_KEY` | 余额(CNY) |
198
+ | MiniMax | `MINIMAX_API_KEY`、`MINIMAX_GROUP_ID` | 使用率 % 及倒计时 |
199
+
200
+ 供应商会从 Claude Code 设置中自动检测,也可手动配置 `accountUsage.providers` 数组。
201
+
202
+ > **注意**:账户用量数据来源于第三方供应商 API,若官方未提供相关接口则无法显示。显示数据仅供参考,请以供应商官方后台为准。
203
+
204
+ ## 主题预览
205
+
206
+ | 主题 | 风格描述 |
207
+ |------|----------|
208
+ | `dark` | 蓝绿色系,专业沉稳 |
209
+ | `light` | 明亮清爽,适合浅色终端 |
210
+ | `cyberpunk` | 霓虹高对比,赛博朋克风 |
211
+ | `forest` | 自然绿色系,大地色调 |
212
+ | `ocean` | 深蓝色系,海洋质感 |
213
+
214
+ ## 本地开发
215
+
216
+ ```bash
217
+ git clone https://github.com/knqiufan/pulse-line.git
218
+ cd pulse-line
219
+ npm install
220
+ npm run build
221
+ npm link
222
+
223
+ # 在 Claude Code 中作为本地插件加载
224
+ claude --plugin-dir /path/to/pulse-line
225
+ ```
226
+
227
+ ## 系统要求
228
+
229
+ - Node.js >= 18.0.0
230
+ - Claude Code CLI
231
+
232
+ ## 常见问题
233
+
234
+ <details>
235
+ <summary><b>安装后状态栏不显示?</b></summary>
236
+
237
+ 1. 确认 `~/.claude/settings.json` 中包含 `statusLine` 字段
238
+ 2. 执行 `npx -y pulse-line@latest install` 重新配置
239
+ 3. 重启 Claude Code
240
+
241
+ </details>
242
+
243
+ <details>
244
+ <summary><b>图标显示为方块或乱码?</b></summary>
245
+
246
+ 1. 确保 `config.json` 中 `iconSet` 为 `"text"`(默认值)
247
+ 2. 如果使用了 Nerd Font,可设为 `"nerd"`
248
+ 3. 执行 `pulse-line reload` 应用变更
249
+
250
+ </details>
251
+
252
+ <details>
253
+ <summary><b>修改配置后没有生效?</b></summary>
254
+
255
+ 1. 执行 `pulse-line reload`
256
+ 2. 或重启 Claude Code
257
+
258
+ </details>
259
+
260
+ ## 贡献
261
+
262
+ 欢迎提交 Issue 和 Pull Request!
263
+
264
+ ## 许可证
265
+
266
+ [MIT](LICENSE)
package/dist/src/cli.js CHANGED
@@ -132,10 +132,20 @@ function renderTimelineTable(sessionId, events, stats) {
132
132
  }
133
133
  }
134
134
  const program = new commander_1.Command();
135
+ function readPackageVersion() {
136
+ try {
137
+ const pkgPath = path.resolve(__dirname, '..', '..', 'package.json');
138
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
139
+ return pkg.version || '0.0.0';
140
+ }
141
+ catch {
142
+ return '0.0.0';
143
+ }
144
+ }
135
145
  program
136
146
  .name('pulse-line')
137
147
  .description('Customizable status bar for Claude Code')
138
- .version('1.0.0');
148
+ .version(readPackageVersion());
139
149
  program
140
150
  .command('install')
141
151
  .description('Install pulse-line to Claude Code settings')
@@ -176,6 +186,9 @@ program
176
186
  console.log(' Run the following in Claude Code:');
177
187
  console.log(' /plugin marketplace add knqiufan/pulse-line');
178
188
  console.log(' /plugin install pulse-line');
189
+ console.log('\n⚠ Tool analytics (toolTimeline module) requires Claude Code');
190
+ console.log(' hooks to be registered. Install pulse-line as a plugin');
191
+ console.log(' (/plugin install pulse-line) for those features to work.');
179
192
  }
180
193
  }
181
194
  catch (err) {
@@ -227,9 +240,15 @@ program
227
240
  .description('Open config file in editor')
228
241
  .action(() => {
229
242
  const configPath = (0, loader_1.getConfigPath)();
230
- const editor = process.env.EDITOR || process.env.VISUAL || 'vi';
243
+ const editor = (process.env.EDITOR || process.env.VISUAL || 'vi').trim();
244
+ const [bin, ...args] = editor.split(/\s+/);
245
+ if (!bin) {
246
+ console.error('[ERROR] Editor command is empty');
247
+ console.error(`Config file: ${configPath}`);
248
+ process.exit(1);
249
+ }
231
250
  try {
232
- (0, child_process_1.execSync)(`${editor} "${configPath}"`, { stdio: 'inherit' });
251
+ (0, child_process_1.execFileSync)(bin, [...args, configPath], { stdio: 'inherit' });
233
252
  (0, cache_1.removeSessionCacheKey)('global', CONFIG_CACHE_KEY);
234
253
  console.log('[OK] Config saved');
235
254
  }