pulse-line 1.0.2 → 1.0.4

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 (90) hide show
  1. package/.claude-plugin/plugin.json +1 -0
  2. package/README.md +41 -5
  3. package/commands/disable.md +1 -1
  4. package/commands/enable.md +1 -1
  5. package/commands/timeline.md +31 -0
  6. package/dist/src/cli.js +215 -7
  7. package/dist/src/cli.js.map +1 -1
  8. package/dist/src/config/loader.js +5 -2
  9. package/dist/src/config/loader.js.map +1 -1
  10. package/dist/src/config/migrate-config.js +28 -1
  11. package/dist/src/config/migrate-config.js.map +1 -1
  12. package/dist/src/extractors/index.d.ts +2 -0
  13. package/dist/src/extractors/index.js +10 -1
  14. package/dist/src/extractors/index.js.map +1 -1
  15. package/dist/src/extractors/tool-timeline.d.ts +29 -0
  16. package/dist/src/extractors/tool-timeline.js +732 -0
  17. package/dist/src/extractors/tool-timeline.js.map +1 -0
  18. package/dist/src/formatters/index.d.ts +1 -1
  19. package/dist/src/formatters/index.js +2 -1
  20. package/dist/src/formatters/index.js.map +1 -1
  21. package/dist/src/formatters/layout.d.ts +2 -0
  22. package/dist/src/formatters/layout.js +69 -6
  23. package/dist/src/formatters/layout.js.map +1 -1
  24. package/dist/src/i18n/locales/en.js +14 -0
  25. package/dist/src/i18n/locales/en.js.map +1 -1
  26. package/dist/src/i18n/locales/zh.js +31 -17
  27. package/dist/src/i18n/locales/zh.js.map +1 -1
  28. package/dist/src/index.js +37 -2
  29. package/dist/src/index.js.map +1 -1
  30. package/dist/src/themes/builtin/cyberpunk.js +1 -0
  31. package/dist/src/themes/builtin/cyberpunk.js.map +1 -1
  32. package/dist/src/themes/builtin/dark.js +1 -0
  33. package/dist/src/themes/builtin/dark.js.map +1 -1
  34. package/dist/src/themes/builtin/forest.js +1 -0
  35. package/dist/src/themes/builtin/forest.js.map +1 -1
  36. package/dist/src/themes/builtin/light.js +1 -0
  37. package/dist/src/themes/builtin/light.js.map +1 -1
  38. package/dist/src/themes/builtin/ocean.js +1 -0
  39. package/dist/src/themes/builtin/ocean.js.map +1 -1
  40. package/dist/src/themes/icon-sets/nerd.d.ts +1 -0
  41. package/dist/src/themes/icon-sets/nerd.js +2 -1
  42. package/dist/src/themes/icon-sets/nerd.js.map +1 -1
  43. package/dist/src/themes/icon-sets/text.d.ts +1 -0
  44. package/dist/src/themes/icon-sets/text.js +2 -1
  45. package/dist/src/themes/icon-sets/text.js.map +1 -1
  46. package/dist/src/themes/index.js +1 -0
  47. package/dist/src/themes/index.js.map +1 -1
  48. package/dist/src/tool-timeline/cache.d.ts +17 -0
  49. package/dist/src/tool-timeline/cache.js +407 -0
  50. package/dist/src/tool-timeline/cache.js.map +1 -0
  51. package/dist/src/types/pulse-config.d.ts +17 -0
  52. package/dist/src/types/pulse-config.js +21 -2
  53. package/dist/src/types/pulse-config.js.map +1 -1
  54. package/dist/src/types/theme.d.ts +1 -0
  55. package/dist/src/types/tool-timeline.d.ts +101 -0
  56. package/dist/src/types/tool-timeline.js +3 -0
  57. package/dist/src/types/tool-timeline.js.map +1 -0
  58. package/dist/src/utils/cache.js +4 -1
  59. package/dist/src/utils/cache.js.map +1 -1
  60. package/dist/src/utils/display-sanitize.js +2 -1
  61. package/dist/src/utils/display-sanitize.js.map +1 -1
  62. package/dist/src/utils/terminal-width.d.ts +12 -0
  63. package/dist/src/utils/terminal-width.js +89 -0
  64. package/dist/src/utils/terminal-width.js.map +1 -0
  65. package/dist/test/formatters.test.js +40 -0
  66. package/dist/test/formatters.test.js.map +1 -1
  67. package/dist/test/migrate-config.test.js +38 -1
  68. package/dist/test/migrate-config.test.js.map +1 -1
  69. package/dist/test/terminal-width.test.d.ts +1 -0
  70. package/dist/test/terminal-width.test.js +98 -0
  71. package/dist/test/terminal-width.test.js.map +1 -0
  72. package/dist/test/themes.test.js +6 -1
  73. package/dist/test/themes.test.js.map +1 -1
  74. package/dist/test/tool-analytics-index.test.d.ts +1 -0
  75. package/dist/test/tool-analytics-index.test.js +163 -0
  76. package/dist/test/tool-analytics-index.test.js.map +1 -0
  77. package/dist/test/tool-timeline-cache.test.d.ts +1 -0
  78. package/dist/test/tool-timeline-cache.test.js +239 -0
  79. package/dist/test/tool-timeline-cache.test.js.map +1 -0
  80. package/dist/test/tool-timeline-cli.test.d.ts +1 -0
  81. package/dist/test/tool-timeline-cli.test.js +146 -0
  82. package/dist/test/tool-timeline-cli.test.js.map +1 -0
  83. package/dist/test/tool-timeline-normalize.test.d.ts +1 -0
  84. package/dist/test/tool-timeline-normalize.test.js +205 -0
  85. package/dist/test/tool-timeline-normalize.test.js.map +1 -0
  86. package/dist/test/tool-timeline-render.test.d.ts +1 -0
  87. package/dist/test/tool-timeline-render.test.js +243 -0
  88. package/dist/test/tool-timeline-render.test.js.map +1 -0
  89. package/hooks/hooks.json +36 -0
  90. package/package.json +1 -1
@@ -20,6 +20,7 @@
20
20
  "./commands/config.md",
21
21
  "./commands/reload.md",
22
22
  "./commands/clear-cache.md",
23
+ "./commands/timeline.md",
23
24
  "./commands/debug.md",
24
25
  "./commands/uninstall.md"
25
26
  ],
package/README.md CHANGED
@@ -18,12 +18,12 @@
18
18
 
19
19
  ## 特性
20
20
 
21
- - **15 个模块** — 当前模型、Git 分支、上下文使用率、缓存、MCP 状态、账户用量、轮次、思考模式等
21
+ - **16 个模块** — 当前模型、Git 分支、上下文使用率、缓存、MCP 状态、账户用量、轮次、思考模式、工具分析等
22
22
  - **5 个内置主题** — Dark、Light、Cyberpunk、Forest、Ocean
23
23
  - **国际化支持** — 中/英文切换
24
24
  - **第三方 API 监控** — 智谱 (GLM)、DeepSeek、MiniMax 账户余额和配额
25
- - **可配置布局**自定义模块顺序,每行显示数量可配置(默认 5),可自定义分隔符
26
- - **11 个斜杠命令** — 在 Claude Code 中直接管理
25
+ - **自适应布局**自定义模块顺序,按终端宽度自动换行,可配置每行模块数上限和分隔符
26
+ - **12 个斜杠命令** — 在 Claude Code 中直接管理
27
27
 
28
28
  ## 快速开始
29
29
 
@@ -46,6 +46,12 @@ npx -y pulse-line@latest install
46
46
 
47
47
  这条命令会自动完成所有配置,执行后重启 Claude Code 即可。
48
48
 
49
+ > **注意**:此方式会自动尝试注册插件。如果你还需要 `/pulse-line:*` 斜杠命令,请在 Claude Code 中额外执行:
50
+ > ```
51
+ > /plugin marketplace add knqiufan/pulse-line
52
+ > /plugin install pulse-line
53
+ > ```
54
+
49
55
  ### 方式三:全局安装
50
56
 
51
57
  ```bash
@@ -70,6 +76,7 @@ pulse-line install
70
76
  | `/pulse-line:config` | 在编辑器中打开配置 |
71
77
  | `/pulse-line:reload` | 重新加载配置 |
72
78
  | `/pulse-line:clear-cache` | 清除缓存 |
79
+ | `/pulse-line:timeline` | 调试/导出已采集的工具分析数据 |
73
80
  | `/pulse-line:debug` | 切换调试模式 |
74
81
  | `/pulse-line:uninstall` | 卸载配置 |
75
82
 
@@ -81,6 +88,7 @@ pulse-line language zh # 切换为中文
81
88
  pulse-line enable thinking # 启用模块
82
89
  pulse-line disable cost # 禁用模块
83
90
  pulse-line clear-cache # 清除缓存
91
+ pulse-line timeline --last 20 # 查看最近工具调用
84
92
  ```
85
93
 
86
94
  ## 模块列表
@@ -102,6 +110,7 @@ pulse-line clear-cache # 清除缓存
102
110
  | 配额 | `weeklyQuota` | ❌ 关闭 | Anthropic API 周配额 |
103
111
  | 输出风格 | `outputStyle` | ❌ 关闭 | 当前输出风格 |
104
112
  | 第三方 API | `thirdPartyApi` | ❌ 关闭 | 异步 API 供应商查询 |
113
+ | 工具分析 | `toolTimeline` | ❌ 关闭 | 独立工具调用统计分析面板,包含最近调用 |
105
114
 
106
115
  ## 配置
107
116
 
@@ -119,7 +128,16 @@ pulse-line clear-cache # 清除缓存
119
128
  "model": { "enabled": true, "order": 1, "icon": "[当前模型]" },
120
129
  "git": { "enabled": true, "order": 2, "icon": "[Git 分支]" },
121
130
  "workspace": { "enabled": true, "order": 3, "icon": "[工作区]" },
122
- "context": { "enabled": true, "order": 4, "showBar": true, "barWidth": 12 }
131
+ "context": { "enabled": true, "order": 4, "showBar": true, "barWidth": 12 },
132
+ "toolTimeline": {
133
+ "enabled": false,
134
+ "order": 16,
135
+ "icon": "[工具]",
136
+ "displayMode": "analytics-panel",
137
+ "maxEvents": 100,
138
+ "maxDisplayEvents": 5,
139
+ "panelWidth": 59
140
+ }
123
141
  },
124
142
  "advanced": {
125
143
  "debugMode": false,
@@ -137,9 +155,27 @@ pulse-line clear-cache # 清除缓存
137
155
  | `language` | `"zh"` \| `"en"` | 显示语言 |
138
156
  | `separator` | string | 模块间的分隔符 |
139
157
  | `padding` | number (0-10) | 分隔符两侧的空格数 |
140
- | `maxPerLine` | number (1-20) | 每行最多显示的模块数,默认 5 |
158
+ | `maxPerLine` | number (1-20) | 每行模块数上限,实际显示数量会按终端宽度自动调整 |
141
159
  | `iconSet` | `"text"` \| `"nerd"` | 图标模式,text 为 ASCII 安全字符 |
142
160
 
161
+ ## 自适应布局
162
+
163
+ Pulse Line 会在 Windows、macOS 和 Linux 上探测终端宽度,并在 Claude Code 截断状态栏之前自动把指标项换到下一行。`maxPerLine` 仍然作为每行模块数上限,实际每行显示几个模块会根据当前终端宽度动态调整。工具分析面板也会跟随终端宽度收窄显示。
164
+
165
+ ## 工具分析
166
+
167
+ 安装插件后,Pulse Line 会通过 Claude Code 的 `PostToolUse` / `PostToolUseFailure` / `SubagentStop` hook 记录工具调用摘要和子 agent 元数据到本地缓存,不上传任何遥测数据。启用 `toolTimeline` 后,主视图会在普通状态栏下方显示独立的工具分析面板,展示总工具调用数、当前 context token、主 agent / 子 agent 工具数、子 agent 名称、最耗时工具和最近 5 条调用。
168
+
169
+ `timeline` 命令保留为调试和导出入口,不再作为主要查看方式:
170
+
171
+ ```bash
172
+ pulse-line enable toolTimeline
173
+ pulse-line timeline
174
+ pulse-line timeline --last 10
175
+ pulse-line timeline --json
176
+ pulse-line timeline clear
177
+ ```
178
+
143
179
  ## 第三方 API 监控
144
180
 
145
181
  Pulse Line 支持监控第三方 API 供应商的账户余额和配额:
@@ -14,7 +14,7 @@ description: Disable a status bar module
14
14
 
15
15
  Disable a status bar module. Changes take effect immediately on the next status bar render.
16
16
 
17
- Available module IDs: `model`, `context`, `git`, `accountUsage`, `cost`, `duration`, `workspace`, `turns`, `cacheRatio`, `rateLimits`, `weeklyQuota`, `mcpStatus`, `thinking`, `outputStyle`, `thirdPartyApi`.
17
+ Available module IDs: `model`, `context`, `git`, `accountUsage`, `cost`, `duration`, `workspace`, `turns`, `cacheRatio`, `rateLimits`, `weeklyQuota`, `mcpStatus`, `thinking`, `outputStyle`, `thirdPartyApi`, `toolTimeline`.
18
18
 
19
19
  ## Instructions
20
20
 
@@ -14,7 +14,7 @@ description: Enable a status bar module
14
14
 
15
15
  Enable a status bar module. Changes take effect immediately on the next status bar render.
16
16
 
17
- Available module IDs: `model`, `context`, `git`, `accountUsage`, `cost`, `duration`, `workspace`, `turns`, `cacheRatio`, `rateLimits`, `weeklyQuota`, `mcpStatus`, `thinking`, `outputStyle`, `thirdPartyApi`.
17
+ Available module IDs: `model`, `context`, `git`, `accountUsage`, `cost`, `duration`, `workspace`, `turns`, `cacheRatio`, `rateLimits`, `weeklyQuota`, `mcpStatus`, `thinking`, `outputStyle`, `thirdPartyApi`, `toolTimeline`.
18
18
 
19
19
  ## Instructions
20
20
 
@@ -0,0 +1,31 @@
1
+ ---
2
+ description: Debug/export collected tool analytics data
3
+ ---
4
+
5
+ # Tool Analytics Debug
6
+
7
+ ## Command
8
+
9
+ ```
10
+ /pulse-line:timeline
11
+ ```
12
+
13
+ ## Description
14
+
15
+ Show recent Claude Code tool-call events collected by Pulse Line hooks. The main analytics view appears directly in the statusline as an independent panel when `toolTimeline` is enabled; this command is only for debugging, export, and cache cleanup.
16
+
17
+ ## Instructions
18
+
19
+ Run the following shell command:
20
+
21
+ ```bash
22
+ npx -y pulse-line@latest timeline
23
+ ```
24
+
25
+ Useful variants:
26
+
27
+ ```bash
28
+ npx -y pulse-line@latest timeline --last 10
29
+ npx -y pulse-line@latest timeline --json
30
+ npx -y pulse-line@latest timeline clear
31
+ ```
package/dist/src/cli.js CHANGED
@@ -40,14 +40,96 @@ const fs = __importStar(require("fs"));
40
40
  const path = __importStar(require("path"));
41
41
  const os = __importStar(require("os"));
42
42
  const loader_1 = require("./config/loader");
43
+ const pulse_config_1 = require("./types/pulse-config");
43
44
  const themes_1 = require("./themes");
44
45
  const cache_1 = require("./utils/cache");
45
46
  const i18n_1 = require("./i18n");
46
- const CONFIG_CACHE_KEY = 'pulse-config-v4';
47
+ const cache_2 = require("./tool-timeline/cache");
48
+ const tool_timeline_1 = require("./extractors/tool-timeline");
49
+ const CONFIG_CACHE_KEY = 'pulse-config-v6';
47
50
  function saveAndInvalidate(config) {
48
51
  (0, loader_1.saveConfig)(config);
49
52
  (0, cache_1.removeSessionCacheKey)('global', CONFIG_CACHE_KEY);
50
53
  }
54
+ function tryInstallPlugin() {
55
+ try {
56
+ (0, child_process_1.execSync)('claude plugin install pulse-line', {
57
+ stdio: 'pipe',
58
+ timeout: 15000
59
+ });
60
+ console.log('[OK] Plugin registered — slash commands (/pulse-line:*) are available');
61
+ return true;
62
+ }
63
+ catch {
64
+ return false;
65
+ }
66
+ }
67
+ function readStdinText() {
68
+ if (process.stdin.isTTY)
69
+ return '';
70
+ try {
71
+ return fs.readFileSync(0, 'utf8');
72
+ }
73
+ catch {
74
+ return '';
75
+ }
76
+ }
77
+ function readToolTimelineMaxEvents() {
78
+ try {
79
+ const configPath = (0, loader_1.getConfigPath)();
80
+ if (!fs.existsSync(configPath)) {
81
+ return pulse_config_1.DEFAULT_CONFIG.modules.toolTimeline.maxEvents || 100;
82
+ }
83
+ const raw = fs.readFileSync(configPath, 'utf8');
84
+ const parsed = JSON.parse(raw);
85
+ const maxEvents = parsed.modules?.toolTimeline?.maxEvents;
86
+ return typeof maxEvents === 'number' && Number.isFinite(maxEvents) && maxEvents > 0
87
+ ? Math.floor(maxEvents)
88
+ : pulse_config_1.DEFAULT_CONFIG.modules.toolTimeline.maxEvents || 100;
89
+ }
90
+ catch {
91
+ return pulse_config_1.DEFAULT_CONFIG.modules.toolTimeline.maxEvents || 100;
92
+ }
93
+ }
94
+ function isTimelineProvider(value) {
95
+ return value === 'claude-code' || value === 'codex';
96
+ }
97
+ function formatDurationCell(ms) {
98
+ if (ms === undefined)
99
+ return '-';
100
+ if (ms < 1000)
101
+ return `${Math.round(ms)}ms`;
102
+ const seconds = ms / 1000;
103
+ if (seconds < 60)
104
+ return seconds >= 10 ? `${Math.round(seconds)}s` : `${seconds.toFixed(1)}s`;
105
+ const minutes = Math.floor(seconds / 60);
106
+ const rest = Math.round(seconds % 60);
107
+ return `${minutes}m ${rest}s`;
108
+ }
109
+ function formatTimeCell(iso) {
110
+ const date = new Date(iso);
111
+ if (Number.isNaN(date.getTime()))
112
+ return '--:--:--';
113
+ return date.toLocaleTimeString('en-US', { hour12: false });
114
+ }
115
+ function renderTimelineTable(sessionId, events, stats) {
116
+ console.log(`Session: ${sessionId}`);
117
+ const avg = stats.avgDurationMs === undefined ? '-' : formatDurationCell(stats.avgDurationMs);
118
+ console.log(`Total: ${stats.total} Success: ${stats.success} Failure: ${stats.failure} Avg: ${avg}`);
119
+ console.log('');
120
+ console.log('Time Tool Status Duration Summary');
121
+ for (const event of events) {
122
+ const status = event.status === 'failure' ? 'ERR' : event.status === 'success' ? 'OK' : 'UNK';
123
+ const row = [
124
+ formatTimeCell(event.endedAt).padEnd(9),
125
+ event.displayName.slice(0, 10).padEnd(11),
126
+ status.padEnd(8),
127
+ formatDurationCell(event.durationMs).padEnd(9),
128
+ event.summary
129
+ ].join(' ');
130
+ console.log(row);
131
+ }
132
+ }
51
133
  const program = new commander_1.Command();
52
134
  program
53
135
  .name('pulse-line')
@@ -78,12 +160,22 @@ program
78
160
  fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n');
79
161
  console.log('[OK] statusLine.command configured in settings.json');
80
162
  }
81
- console.log('Config directory:', pulseDir);
82
- console.log('Edit config:', (0, loader_1.getConfigPath)());
163
+ console.log('[OK] Config directory:', pulseDir);
164
+ console.log('[OK] Config file:', (0, loader_1.getConfigPath)());
165
+ const hasPlugin = tryInstallPlugin();
166
+ console.log('\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
167
+ console.log(' Pulse Line installed successfully!');
168
+ console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
83
169
  console.log('\nNext steps:');
84
- console.log('1. Restart Claude Code');
85
- console.log('2. The status bar will appear automatically');
86
- console.log('3. Run "pulse-line theme <name>" to change theme');
170
+ console.log(' 1. Restart Claude Code');
171
+ console.log(' 2. The status bar will appear automatically');
172
+ console.log(' 3. Run "pulse-line theme <name>" to change theme');
173
+ if (!hasPlugin) {
174
+ console.log('\n💡 Want slash commands like /pulse-line:theme?');
175
+ console.log(' Run the following in Claude Code:');
176
+ console.log(' /plugin marketplace add knqiufan/pulse-line');
177
+ console.log(' /plugin install pulse-line');
178
+ }
87
179
  }
88
180
  catch (err) {
89
181
  console.error('[ERROR] Installation failed:', err instanceof Error ? err.message : err);
@@ -213,6 +305,121 @@ program
213
305
  console.log(` ${name.padEnd(12)} - ${theme.meta.description}`);
214
306
  });
215
307
  });
308
+ const hook = program
309
+ .command('hook')
310
+ .description('Internal hook commands');
311
+ hook
312
+ .command('collect-tool-event')
313
+ .description('Collect a tool timeline event from stdin')
314
+ .option('--provider <provider>', 'Runtime provider', 'claude-code')
315
+ .action((options) => {
316
+ try {
317
+ if (options.provider !== 'claude-code')
318
+ return;
319
+ const raw = readStdinText().trim();
320
+ if (!raw)
321
+ return;
322
+ let parsed;
323
+ try {
324
+ parsed = JSON.parse(raw);
325
+ }
326
+ catch {
327
+ return;
328
+ }
329
+ const event = (0, tool_timeline_1.normalizeClaudeToolHook)(parsed);
330
+ if (!event)
331
+ return;
332
+ (0, cache_2.appendToolTimelineEvent)(event, {
333
+ maxEvents: readToolTimelineMaxEvents()
334
+ });
335
+ }
336
+ catch {
337
+ // Hooks must not break Claude Code tool execution.
338
+ }
339
+ });
340
+ hook
341
+ .command('collect-subagent-event')
342
+ .description('Collect subagent metadata from stdin')
343
+ .option('--provider <provider>', 'Runtime provider', 'claude-code')
344
+ .action((options) => {
345
+ try {
346
+ if (options.provider !== 'claude-code')
347
+ return;
348
+ const raw = readStdinText().trim();
349
+ if (!raw)
350
+ return;
351
+ let parsed;
352
+ try {
353
+ parsed = JSON.parse(raw);
354
+ }
355
+ catch {
356
+ return;
357
+ }
358
+ const meta = (0, tool_timeline_1.normalizeClaudeSubagentStopHook)(parsed);
359
+ if (!meta)
360
+ return;
361
+ const sessionId = typeof parsed.session_id === 'string'
362
+ ? parsed.session_id
363
+ : '';
364
+ if (!sessionId)
365
+ return;
366
+ (0, cache_2.upsertToolTimelineAgentMeta)(sessionId, meta, 'claude-code');
367
+ }
368
+ catch {
369
+ // Hooks must not break Claude Code agent execution.
370
+ }
371
+ });
372
+ const timeline = program
373
+ .command('timeline')
374
+ .description('Show recent tool timeline events')
375
+ .option('--session <id>', 'Session id')
376
+ .option('--provider <provider>', 'Runtime provider', 'claude-code')
377
+ .option('--last <n>', 'Number of events to show', '20')
378
+ .option('--json', 'Print JSON');
379
+ timeline
380
+ .command('clear')
381
+ .description('Clear tool timeline cache')
382
+ .option('--session <id>', 'Session id')
383
+ .option('--provider <provider>', 'Runtime provider', 'claude-code')
384
+ .action((options) => {
385
+ const provider = isTimelineProvider(options.provider) ? options.provider : 'claude-code';
386
+ (0, cache_2.clearToolTimelineCache)(options.session, provider);
387
+ console.log('[OK] Tool timeline cache cleared');
388
+ });
389
+ timeline.action((options) => {
390
+ const provider = isTimelineProvider(options.provider) ? options.provider : 'claude-code';
391
+ const sessionId = options.session ||
392
+ (0, cache_2.listToolTimelineSessions)(provider)[0]?.sessionId;
393
+ const parsedLast = Number.parseInt(options.last, 10);
394
+ const last = Number.isFinite(parsedLast) && parsedLast > 0 ? parsedLast : 20;
395
+ if (!sessionId) {
396
+ if (options.json) {
397
+ console.log(JSON.stringify(null, null, 2));
398
+ }
399
+ else {
400
+ console.log('No tool timeline cache found');
401
+ }
402
+ return;
403
+ }
404
+ const cache = (0, cache_2.readToolTimelineCache)(sessionId, provider);
405
+ if (!cache) {
406
+ if (options.json) {
407
+ console.log(JSON.stringify(null, null, 2));
408
+ }
409
+ else {
410
+ console.log(`No tool timeline cache found for session: ${sessionId}`);
411
+ }
412
+ return;
413
+ }
414
+ const events = cache.events.slice(Math.max(0, cache.events.length - last));
415
+ const stats = (0, cache_2.computeToolTimelineStats)(events);
416
+ const analyticsStats = (0, cache_2.computeToolAnalyticsStats)(events, cache.agents);
417
+ if (options.json) {
418
+ console.log(JSON.stringify({ ...cache, events, stats, analyticsStats }, null, 2));
419
+ return;
420
+ }
421
+ renderTimelineTable(cache.sessionId, events, stats);
422
+ });
216
423
  program
217
424
  .command('language <lang>')
218
425
  .description('Switch display language (zh, en)')
@@ -240,7 +447,8 @@ program
240
447
  thinking: 'thinking',
241
448
  outputStyle: 'outputStyle',
242
449
  accountUsage: 'accountUsage',
243
- thirdPartyApi: 'thirdPartyApi'
450
+ thirdPartyApi: 'thirdPartyApi',
451
+ toolTimeline: 'toolTimeline'
244
452
  };
245
453
  for (const [modKey, labelKey] of Object.entries(moduleKeyMap)) {
246
454
  const mod = config.modules[modKey];
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
@@ -54,7 +54,7 @@ function persistIfMigrated(config, configPath, migrated) {
54
54
  }
55
55
  function loadConfig() {
56
56
  const configPath = getConfigPath();
57
- const cacheKey = 'pulse-config-v4';
57
+ const cacheKey = 'pulse-config-v6';
58
58
  const cached = (0, cache_1.loadSessionCache)('global', cacheKey);
59
59
  if (cached) {
60
60
  const migrated = (0, migrate_config_1.upgradePulseSchemaIfNeeded)(cached);
@@ -107,9 +107,12 @@ function saveConfig(config) {
107
107
  }
108
108
  }
109
109
  function getConfigPath() {
110
- return path.join(os.homedir(), '.claude', 'pulse', 'config.json');
110
+ return path.join(getPulseDir(), 'config.json');
111
111
  }
112
112
  function getPulseDir() {
113
+ const homeOverride = process.env.PULSE_HOME_OVERRIDE;
114
+ if (homeOverride)
115
+ return path.resolve(homeOverride);
113
116
  return path.join(os.homedir(), '.claude', 'pulse');
114
117
  }
115
118
  function deepMerge(target, source) {
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/config/loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/config/loader.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,8 @@
2
2
  // src/config/migrate-config.ts
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.upgradePulseSchemaIfNeeded = upgradePulseSchemaIfNeeded;
5
- const CURRENT_SCHEMA = 4;
5
+ const pulse_config_1 = require("../types/pulse-config");
6
+ const CURRENT_SCHEMA = 6;
6
7
  function upgradePulseSchemaIfNeeded(config) {
7
8
  const v = config.schemaVersion ?? 0;
8
9
  if (v >= CURRENT_SCHEMA)
@@ -16,7 +17,33 @@ function upgradePulseSchemaIfNeeded(config) {
16
17
  config.modules.model.icon = '[当前模型]';
17
18
  }
18
19
  }
20
+ if (v < 5 && !config.modules.toolTimeline) {
21
+ config.modules.toolTimeline = JSON.parse(JSON.stringify(pulse_config_1.DEFAULT_CONFIG.modules.toolTimeline));
22
+ }
23
+ if (v < 6) {
24
+ ensureToolTimelineAnalyticsDefaults(config);
25
+ }
19
26
  config.schemaVersion = CURRENT_SCHEMA;
20
27
  return true;
21
28
  }
29
+ function ensureToolTimelineAnalyticsDefaults(config) {
30
+ const defaults = pulse_config_1.DEFAULT_CONFIG.modules.toolTimeline;
31
+ const toolTimeline = config.modules.toolTimeline;
32
+ if (!toolTimeline) {
33
+ config.modules.toolTimeline = JSON.parse(JSON.stringify(defaults));
34
+ return;
35
+ }
36
+ toolTimeline.displayMode = toolTimeline.displayMode ?? defaults.displayMode;
37
+ toolTimeline.maxDisplayEvents = normalizePositiveNumber(toolTimeline.maxDisplayEvents, defaults.maxDisplayEvents);
38
+ toolTimeline.panelWidth = normalizePositiveNumber(toolTimeline.panelWidth, defaults.panelWidth);
39
+ toolTimeline.showRecent = toolTimeline.showRecent ?? defaults.showRecent;
40
+ toolTimeline.showTokenStats = toolTimeline.showTokenStats ?? defaults.showTokenStats;
41
+ toolTimeline.showAgentStats = toolTimeline.showAgentStats ?? defaults.showAgentStats;
42
+ toolTimeline.showSuccessRate = toolTimeline.showSuccessRate ?? defaults.showSuccessRate;
43
+ }
44
+ function normalizePositiveNumber(value, fallback) {
45
+ return typeof value === 'number' && Number.isFinite(value) && value > 0
46
+ ? value
47
+ : fallback;
48
+ }
22
49
  //# sourceMappingURL=migrate-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"migrate-config.js","sourceRoot":"","sources":["../../../src/config/migrate-config.ts"],"names":[],"mappings":";AAAA,+BAA+B;;AAM/B,gEAiBC;AAnBD,MAAM,cAAc,GAAG,CAAC,CAAC;AAEzB,SAAgB,0BAA0B,CAAC,MAAmB;IAC5D,MAAM,CAAC,GAAG,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,cAAc;QAAE,OAAO,KAAK,CAAC;IAEtC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;QACvC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;IAC1B,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACT,MAAc,CAAC,QAAQ,GAAI,MAAc,CAAC,QAAQ,IAAI,IAAI,CAAC;QAC5D,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACzB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC;QACvC,CAAC;IACH,CAAC;IAED,MAAM,CAAC,aAAa,GAAG,cAAc,CAAC;IACtC,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"migrate-config.js","sourceRoot":"","sources":["../../../src/config/migrate-config.ts"],"names":[],"mappings":";AAAA,+BAA+B;;AAO/B,gEA2BC;AA/BD,wDAAuD;AAEvD,MAAM,cAAc,GAAG,CAAC,CAAC;AAEzB,SAAgB,0BAA0B,CAAC,MAAmB;IAC5D,MAAM,CAAC,GAAG,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,cAAc;QAAE,OAAO,KAAK,CAAC;IAEtC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;QACvC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;IAC1B,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACT,MAAc,CAAC,QAAQ,GAAI,MAAc,CAAC,QAAQ,IAAI,IAAI,CAAC;QAC5D,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACzB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC;QACvC,CAAC;IACH,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAE,MAAM,CAAC,OAAe,CAAC,YAAY,EAAE,CAAC;QAClD,MAAM,CAAC,OAAe,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAC/C,IAAI,CAAC,SAAS,CAAC,6BAAc,CAAC,OAAO,CAAC,YAAY,CAAC,CACpD,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACV,mCAAmC,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,aAAa,GAAG,cAAc,CAAC;IACtC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mCAAmC,CAAC,MAAmB;IAC9D,MAAM,QAAQ,GAAG,6BAAc,CAAC,OAAO,CAAC,YAAY,CAAC;IACrD,MAAM,YAAY,GAAI,MAAM,CAAC,OAAe,CAAC,YAAY,CAAC;IAC1D,IAAI,CAAC,YAAY,EAAE,CAAC;QACjB,MAAM,CAAC,OAAe,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5E,OAAO;IACT,CAAC;IAED,YAAY,CAAC,WAAW,GAAG,YAAY,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW,CAAC;IAC5E,YAAY,CAAC,gBAAgB,GAAG,uBAAuB,CACrD,YAAY,CAAC,gBAAgB,EAC7B,QAAQ,CAAC,gBAAgB,CAC1B,CAAC;IACF,YAAY,CAAC,UAAU,GAAG,uBAAuB,CAC/C,YAAY,CAAC,UAAU,EACvB,QAAQ,CAAC,UAAU,CACpB,CAAC;IACF,YAAY,CAAC,UAAU,GAAG,YAAY,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC;IACzE,YAAY,CAAC,cAAc,GAAG,YAAY,CAAC,cAAc,IAAI,QAAQ,CAAC,cAAc,CAAC;IACrF,YAAY,CAAC,cAAc,GAAG,YAAY,CAAC,cAAc,IAAI,QAAQ,CAAC,cAAc,CAAC;IACrF,YAAY,CAAC,eAAe,GAAG,YAAY,CAAC,eAAe,IAAI,QAAQ,CAAC,eAAe,CAAC;AAC1F,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc,EAAE,QAA4B;IAC3E,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QACrE,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,QAAQ,CAAC;AACf,CAAC"}
@@ -23,3 +23,5 @@ export type { OutputStyleSegment } from './output-style';
23
23
  export { extractThirdPartyApi } from './third-party-api';
24
24
  export type { ApiUsageResult } from './third-party-api';
25
25
  export { extractAccountUsageSync, refreshAccountUsage, type AccountUsageResult } from './account-usage';
26
+ export { extractToolTimeline, renderToolAnalyticsPanel, normalizeClaudeToolHook, normalizeClaudeSubagentStopHook, summarizeTool, summarizeResponse, summarizeError, relativeToCwd } from './tool-timeline';
27
+ export type { ToolAnalyticsPanel, ToolTimelineSegment } from './tool-timeline';
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  // src/extractors/index.ts
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.refreshAccountUsage = exports.extractAccountUsageSync = exports.extractThirdPartyApi = exports.extractOutputStyle = exports.extractThinking = exports.extractTurns = exports.extractSessionDuration = exports.extractMcpStatus = exports.extractWeeklyQuota = exports.extractRateLimits = exports.extractGit = exports.extractWorkspace = exports.extractCost = exports.extractContext = exports.extractModel = void 0;
4
+ exports.relativeToCwd = exports.summarizeError = exports.summarizeResponse = exports.summarizeTool = exports.normalizeClaudeSubagentStopHook = exports.normalizeClaudeToolHook = exports.renderToolAnalyticsPanel = exports.extractToolTimeline = exports.refreshAccountUsage = exports.extractAccountUsageSync = exports.extractThirdPartyApi = exports.extractOutputStyle = exports.extractThinking = exports.extractTurns = exports.extractSessionDuration = exports.extractMcpStatus = exports.extractWeeklyQuota = exports.extractRateLimits = exports.extractGit = exports.extractWorkspace = exports.extractCost = exports.extractContext = exports.extractModel = void 0;
5
5
  var model_1 = require("./model");
6
6
  Object.defineProperty(exports, "extractModel", { enumerable: true, get: function () { return model_1.extractModel; } });
7
7
  var context_1 = require("./context");
@@ -30,4 +30,13 @@ Object.defineProperty(exports, "extractThirdPartyApi", { enumerable: true, get:
30
30
  var account_usage_1 = require("./account-usage");
31
31
  Object.defineProperty(exports, "extractAccountUsageSync", { enumerable: true, get: function () { return account_usage_1.extractAccountUsageSync; } });
32
32
  Object.defineProperty(exports, "refreshAccountUsage", { enumerable: true, get: function () { return account_usage_1.refreshAccountUsage; } });
33
+ var tool_timeline_1 = require("./tool-timeline");
34
+ Object.defineProperty(exports, "extractToolTimeline", { enumerable: true, get: function () { return tool_timeline_1.extractToolTimeline; } });
35
+ Object.defineProperty(exports, "renderToolAnalyticsPanel", { enumerable: true, get: function () { return tool_timeline_1.renderToolAnalyticsPanel; } });
36
+ Object.defineProperty(exports, "normalizeClaudeToolHook", { enumerable: true, get: function () { return tool_timeline_1.normalizeClaudeToolHook; } });
37
+ Object.defineProperty(exports, "normalizeClaudeSubagentStopHook", { enumerable: true, get: function () { return tool_timeline_1.normalizeClaudeSubagentStopHook; } });
38
+ Object.defineProperty(exports, "summarizeTool", { enumerable: true, get: function () { return tool_timeline_1.summarizeTool; } });
39
+ Object.defineProperty(exports, "summarizeResponse", { enumerable: true, get: function () { return tool_timeline_1.summarizeResponse; } });
40
+ Object.defineProperty(exports, "summarizeError", { enumerable: true, get: function () { return tool_timeline_1.summarizeError; } });
41
+ Object.defineProperty(exports, "relativeToCwd", { enumerable: true, get: function () { return tool_timeline_1.relativeToCwd; } });
33
42
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extractors/index.ts"],"names":[],"mappings":";AAAA,0BAA0B;;;AAE1B,iCAAuC;AAA9B,qGAAA,YAAY,OAAA;AAGrB,qCAA2C;AAAlC,yGAAA,cAAc,OAAA;AAGvB,+BAAqC;AAA5B,mGAAA,WAAW,OAAA;AAGpB,yCAA+C;AAAtC,6GAAA,gBAAgB,OAAA;AAGzB,6BAAmC;AAA1B,iGAAA,UAAU,OAAA;AAGnB,6CAAsE;AAA7D,gHAAA,iBAAiB,OAAA;AAAE,iHAAA,kBAAkB,OAAA;AAG9C,6BAAyC;AAAhC,uGAAA,gBAAgB,OAAA;AAGzB,qCAAmD;AAA1C,iHAAA,sBAAsB,OAAA;AAG/B,2CAA4C;AAAnC,0GAAA,YAAY,OAAA;AAGrB,uCAA6C;AAApC,2GAAA,eAAe,OAAA;AAGxB,+CAAoD;AAA3C,kHAAA,kBAAkB,OAAA;AAG3B,qDAAyD;AAAhD,uHAAA,oBAAoB,OAAA;AAG7B,iDAAwG;AAA/F,wHAAA,uBAAuB,OAAA;AAAE,oHAAA,mBAAmB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extractors/index.ts"],"names":[],"mappings":";AAAA,0BAA0B;;;AAE1B,iCAAuC;AAA9B,qGAAA,YAAY,OAAA;AAGrB,qCAA2C;AAAlC,yGAAA,cAAc,OAAA;AAGvB,+BAAqC;AAA5B,mGAAA,WAAW,OAAA;AAGpB,yCAA+C;AAAtC,6GAAA,gBAAgB,OAAA;AAGzB,6BAAmC;AAA1B,iGAAA,UAAU,OAAA;AAGnB,6CAAsE;AAA7D,gHAAA,iBAAiB,OAAA;AAAE,iHAAA,kBAAkB,OAAA;AAG9C,6BAAyC;AAAhC,uGAAA,gBAAgB,OAAA;AAGzB,qCAAmD;AAA1C,iHAAA,sBAAsB,OAAA;AAG/B,2CAA4C;AAAnC,0GAAA,YAAY,OAAA;AAGrB,uCAA6C;AAApC,2GAAA,eAAe,OAAA;AAGxB,+CAAoD;AAA3C,kHAAA,kBAAkB,OAAA;AAG3B,qDAAyD;AAAhD,uHAAA,oBAAoB,OAAA;AAG7B,iDAAwG;AAA/F,wHAAA,uBAAuB,OAAA;AAAE,oHAAA,mBAAmB,OAAA;AAErD,iDASyB;AARvB,oHAAA,mBAAmB,OAAA;AACnB,yHAAA,wBAAwB,OAAA;AACxB,wHAAA,uBAAuB,OAAA;AACvB,gIAAA,+BAA+B,OAAA;AAC/B,8GAAA,aAAa,OAAA;AACb,kHAAA,iBAAiB,OAAA;AACjB,+GAAA,cAAc,OAAA;AACd,8GAAA,aAAa,OAAA"}
@@ -0,0 +1,29 @@
1
+ import type { Theme } from '../types/theme';
2
+ import type { ToolTimelineAgentMeta, ToolTimelineEvent, ToolTimelineTarget } from '../types/tool-timeline';
3
+ import type { Language, ToolTimelineModuleConfig } from '../types/pulse-config';
4
+ import type { ContextWindow, CostInfo } from '../types/pulse-input';
5
+ export interface ToolTimelineSegment {
6
+ text: string;
7
+ fg: string;
8
+ }
9
+ export interface ToolAnalyticsPanel {
10
+ text: string;
11
+ }
12
+ export declare function normalizeClaudeToolHook(input: unknown): ToolTimelineEvent | null;
13
+ export declare function normalizeClaudeSubagentStopHook(input: unknown): ToolTimelineAgentMeta | null;
14
+ export declare function summarizeTool(toolName: string, input: unknown, cwd?: string): {
15
+ displayName: string;
16
+ summary: string;
17
+ target?: ToolTimelineTarget;
18
+ inputSummary?: string;
19
+ };
20
+ export declare function summarizeResponse(toolName: string, response: unknown): string | undefined;
21
+ export declare function summarizeError(error: unknown): string | undefined;
22
+ export declare function relativeToCwd(filePath: string, cwd?: string): string;
23
+ export declare function extractToolTimeline(sessionId: string, config: ToolTimelineModuleConfig, theme: Theme, iconOverride?: string): ToolTimelineSegment | null;
24
+ export declare function renderToolAnalyticsPanel(sessionId: string, config: ToolTimelineModuleConfig, theme: Theme, language: Language, snapshot?: {
25
+ contextWindow?: ContextWindow;
26
+ cost?: CostInfo;
27
+ terminalWidth?: number;
28
+ }): ToolAnalyticsPanel | null;
29
+ export declare function stableHash(value: string): string;