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
@@ -0,0 +1,243 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const node_test_1 = require("node:test");
40
+ const node_assert_1 = __importDefault(require("node:assert"));
41
+ const fs = __importStar(require("fs"));
42
+ const os = __importStar(require("os"));
43
+ const path = __importStar(require("path"));
44
+ const tool_timeline_1 = require("../src/extractors/tool-timeline");
45
+ const cache_1 = require("../src/tool-timeline/cache");
46
+ const dark_1 = require("../src/themes/builtin/dark");
47
+ function withTimelineCache(fn) {
48
+ const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'pulse-timeline-render-'));
49
+ const prev = process.env.PULSE_CACHE_DIR_OVERRIDE;
50
+ process.env.PULSE_CACHE_DIR_OVERRIDE = dir;
51
+ try {
52
+ return fn();
53
+ }
54
+ finally {
55
+ if (prev === undefined)
56
+ delete process.env.PULSE_CACHE_DIR_OVERRIDE;
57
+ else
58
+ process.env.PULSE_CACHE_DIR_OVERRIDE = prev;
59
+ fs.rmSync(dir, { recursive: true, force: true });
60
+ }
61
+ }
62
+ function config(overrides = {}) {
63
+ return {
64
+ enabled: true,
65
+ order: 16,
66
+ mode: 'summary',
67
+ summaryMaxLength: 80,
68
+ showAverage: true,
69
+ showFailures: true,
70
+ showSlowest: true,
71
+ slowThresholdMs: 3000,
72
+ ...overrides
73
+ };
74
+ }
75
+ function event(overrides = {}) {
76
+ return {
77
+ id: overrides.id || 'id',
78
+ provider: 'claude-code',
79
+ sessionId: 's1',
80
+ toolName: overrides.toolName || 'Bash',
81
+ displayName: overrides.displayName || overrides.toolName || 'Bash',
82
+ summary: overrides.summary || 'npm test',
83
+ status: overrides.status || 'success',
84
+ endedAt: overrides.endedAt || new Date().toISOString(),
85
+ durationMs: overrides.durationMs,
86
+ ...overrides
87
+ };
88
+ }
89
+ (0, node_test_1.test)('extractToolTimeline returns null without cache or events', () => {
90
+ withTimelineCache(() => {
91
+ node_assert_1.default.strictEqual((0, tool_timeline_1.extractToolTimeline)('missing', config(), dark_1.darkTheme), null);
92
+ });
93
+ });
94
+ (0, node_test_1.test)('extractToolTimeline renders successful summary', () => {
95
+ withTimelineCache(() => {
96
+ (0, cache_1.appendToolTimelineEvent)(event({ id: '1', durationMs: 320 }));
97
+ const segment = (0, tool_timeline_1.extractToolTimeline)('s1', config(), dark_1.darkTheme, '[Tool]');
98
+ node_assert_1.default.ok(segment);
99
+ node_assert_1.default.ok(segment.text.includes('[Tool] 1 calls'));
100
+ node_assert_1.default.ok(segment.text.includes('avg 320ms'));
101
+ node_assert_1.default.strictEqual(segment.fg, dark_1.darkTheme.colors.info);
102
+ });
103
+ });
104
+ (0, node_test_1.test)('extractToolTimeline uses error color and fail count for failures', () => {
105
+ withTimelineCache(() => {
106
+ (0, cache_1.appendToolTimelineEvent)(event({ id: '1', status: 'failure', durationMs: 20 }));
107
+ const segment = (0, tool_timeline_1.extractToolTimeline)('s1', config(), dark_1.darkTheme);
108
+ node_assert_1.default.ok(segment);
109
+ node_assert_1.default.ok(segment.text.includes('fail 1'));
110
+ node_assert_1.default.strictEqual(segment.fg, dark_1.darkTheme.colors.error);
111
+ });
112
+ });
113
+ (0, node_test_1.test)('extractToolTimeline uses warning color for slow calls', () => {
114
+ withTimelineCache(() => {
115
+ (0, cache_1.appendToolTimelineEvent)(event({ id: '1', durationMs: 4000 }));
116
+ const segment = (0, tool_timeline_1.extractToolTimeline)('s1', config({ slowThresholdMs: 3000 }), dark_1.darkTheme);
117
+ node_assert_1.default.ok(segment);
118
+ node_assert_1.default.ok(segment.text.includes('slow Bash 4.0s'));
119
+ node_assert_1.default.strictEqual(segment.fg, dark_1.darkTheme.colors.warning);
120
+ });
121
+ });
122
+ (0, node_test_1.test)('extractToolTimeline honors summaryMaxLength and compact-list mode', () => {
123
+ withTimelineCache(() => {
124
+ (0, cache_1.appendToolTimelineEvent)(event({ id: '1', summary: 'first command' }));
125
+ (0, cache_1.appendToolTimelineEvent)(event({ id: '2', summary: 'second command' }));
126
+ const segment = (0, tool_timeline_1.extractToolTimeline)('s1', config({
127
+ mode: 'compact-list',
128
+ maxDisplayEvents: 1,
129
+ summaryMaxLength: 35
130
+ }), dark_1.darkTheme, '[T]');
131
+ node_assert_1.default.ok(segment);
132
+ node_assert_1.default.ok(segment.text.includes('second command'));
133
+ node_assert_1.default.ok(!segment.text.includes('first command'));
134
+ node_assert_1.default.ok(segment.text.length <= 35);
135
+ });
136
+ });
137
+ (0, node_test_1.test)('renderToolAnalyticsPanel renders English analytics panel', () => {
138
+ withTimelineCache(() => {
139
+ (0, cache_1.appendToolTimelineEvent)(event({ id: '1', toolName: 'Read', displayName: 'Read', summary: 'src/index.ts', durationMs: 45 }));
140
+ (0, cache_1.appendToolTimelineEvent)(event({
141
+ id: '2',
142
+ toolName: 'Agent',
143
+ displayName: 'Agent',
144
+ summary: 'Explore',
145
+ actorName: 'Explore',
146
+ agentId: 'agent_1',
147
+ durationMs: 18400,
148
+ subagentMetrics: {
149
+ totalToolUseCount: 7,
150
+ totalTokens: 42100,
151
+ totalDurationMs: 18400
152
+ }
153
+ }));
154
+ const panel = (0, tool_timeline_1.renderToolAnalyticsPanel)('s1', config({
155
+ displayMode: 'analytics-panel',
156
+ maxDisplayEvents: 5,
157
+ panelWidth: 59
158
+ }), dark_1.darkTheme, 'en', {
159
+ contextWindow: {
160
+ total_input_tokens: 100,
161
+ total_output_tokens: 50,
162
+ context_window_size: 200000,
163
+ used_percentage: 1,
164
+ remaining_percentage: 99,
165
+ current_usage: {
166
+ input_tokens: 1000,
167
+ output_tokens: 200,
168
+ cache_creation_input_tokens: 300,
169
+ cache_read_input_tokens: 500
170
+ }
171
+ }
172
+ });
173
+ node_assert_1.default.ok(panel);
174
+ node_assert_1.default.ok(panel.text.includes('TOOL ANALYTICS'));
175
+ node_assert_1.default.ok(panel.text.includes('\n Calls: 9'));
176
+ node_assert_1.default.ok(panel.text.includes('Calls: 9'));
177
+ node_assert_1.default.ok(panel.text.includes('Context: 2.0K tok'));
178
+ node_assert_1.default.ok(panel.text.includes('Success: 100%'));
179
+ node_assert_1.default.ok(panel.text.includes('Main agent: 2 tools'));
180
+ node_assert_1.default.ok(panel.text.includes('Subagents: 7 tools / 1 agents'));
181
+ node_assert_1.default.ok(panel.text.includes('Explore 7'));
182
+ node_assert_1.default.ok(panel.text.includes('Slowest: Agent "Explore" 18s'));
183
+ node_assert_1.default.ok(panel.text.includes('Recent:'));
184
+ });
185
+ });
186
+ (0, node_test_1.test)('renderToolAnalyticsPanel renders Chinese labels and caps recent calls at five', () => {
187
+ withTimelineCache(() => {
188
+ for (let i = 1; i <= 6; i++) {
189
+ (0, cache_1.appendToolTimelineEvent)(event({
190
+ id: `${i}`,
191
+ toolUseId: `${i}`,
192
+ summary: `cmd ${i}`,
193
+ durationMs: i * 10
194
+ }));
195
+ }
196
+ const panel = (0, tool_timeline_1.renderToolAnalyticsPanel)('s1', config({
197
+ displayMode: 'analytics-panel',
198
+ maxDisplayEvents: 10,
199
+ panelWidth: 59
200
+ }), dark_1.darkTheme, 'zh');
201
+ node_assert_1.default.ok(panel);
202
+ node_assert_1.default.ok(panel.text.includes('工具分析'));
203
+ node_assert_1.default.ok(panel.text.includes('调用: 6'));
204
+ node_assert_1.default.ok(panel.text.includes('成功: 100%'));
205
+ node_assert_1.default.ok(panel.text.includes('最近:'));
206
+ node_assert_1.default.ok(!panel.text.includes('cmd 1'));
207
+ node_assert_1.default.ok(panel.text.includes('cmd 2'));
208
+ node_assert_1.default.ok(panel.text.includes('cmd 6'));
209
+ });
210
+ });
211
+ (0, node_test_1.test)('renderToolAnalyticsPanel returns null without cache', () => {
212
+ withTimelineCache(() => {
213
+ node_assert_1.default.strictEqual((0, tool_timeline_1.renderToolAnalyticsPanel)('missing', config(), dark_1.darkTheme, 'en'), null);
214
+ });
215
+ });
216
+ (0, node_test_1.test)('renderToolAnalyticsPanel wraps metrics on narrow terminals', () => {
217
+ withTimelineCache(() => {
218
+ (0, cache_1.appendToolTimelineEvent)(event({
219
+ id: '1',
220
+ toolName: 'Agent',
221
+ displayName: 'Agent',
222
+ summary: 'Explore',
223
+ actorName: 'Explore',
224
+ durationMs: 18000,
225
+ subagentMetrics: {
226
+ totalToolUseCount: 7,
227
+ totalTokens: 42100,
228
+ totalDurationMs: 18000
229
+ }
230
+ }));
231
+ const panel = (0, tool_timeline_1.renderToolAnalyticsPanel)('s1', config({
232
+ displayMode: 'analytics-panel',
233
+ panelWidth: 59
234
+ }), dark_1.darkTheme, 'en', {
235
+ terminalWidth: 40
236
+ });
237
+ node_assert_1.default.ok(panel);
238
+ node_assert_1.default.ok(panel.text.includes('\n Main agent: 1 tools\n'));
239
+ node_assert_1.default.ok(panel.text.includes('\n Subagents: 7 tools / 1 agents\n'));
240
+ node_assert_1.default.ok(!panel.text.includes('Subagents: 7 tools / ...'));
241
+ });
242
+ });
243
+ //# sourceMappingURL=tool-timeline-render.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-timeline-render.test.js","sourceRoot":"","sources":["../../test/tool-timeline-render.test.ts"],"names":[],"mappings":"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"}
package/hooks/hooks.json CHANGED
@@ -9,6 +9,42 @@
9
9
  }
10
10
  ]
11
11
  }
12
+ ],
13
+ "PostToolUse": [
14
+ {
15
+ "matcher": ".*",
16
+ "hooks": [
17
+ {
18
+ "type": "command",
19
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/dist/src/cli.js\" hook collect-tool-event --provider claude-code",
20
+ "timeout": 5
21
+ }
22
+ ]
23
+ }
24
+ ],
25
+ "PostToolUseFailure": [
26
+ {
27
+ "matcher": ".*",
28
+ "hooks": [
29
+ {
30
+ "type": "command",
31
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/dist/src/cli.js\" hook collect-tool-event --provider claude-code",
32
+ "timeout": 5
33
+ }
34
+ ]
35
+ }
36
+ ],
37
+ "SubagentStop": [
38
+ {
39
+ "matcher": ".*",
40
+ "hooks": [
41
+ {
42
+ "type": "command",
43
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/dist/src/cli.js\" hook collect-subagent-event --provider claude-code",
44
+ "timeout": 5
45
+ }
46
+ ]
47
+ }
12
48
  ]
13
49
  }
14
50
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pulse-line",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "Customizable status bar for Claude Code",
5
5
  "main": "dist/src/index.js",
6
6
  "bin": {