pulse-line 1.0.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.
Files changed (211) hide show
  1. package/.claude-plugin/marketplace.json +20 -0
  2. package/.claude-plugin/plugin.json +27 -0
  3. package/LICENSE +21 -0
  4. package/README.md +316 -0
  5. package/bin/pulse-line.js +12 -0
  6. package/commands/clear-cache.md +23 -0
  7. package/commands/config.md +25 -0
  8. package/commands/debug.md +25 -0
  9. package/commands/disable.md +27 -0
  10. package/commands/enable.md +27 -0
  11. package/commands/install.md +25 -0
  12. package/commands/language.md +27 -0
  13. package/commands/reload.md +23 -0
  14. package/commands/theme.md +27 -0
  15. package/commands/themes.md +23 -0
  16. package/commands/uninstall.md +23 -0
  17. package/dist/src/cli.d.ts +2 -0
  18. package/dist/src/cli.js +242 -0
  19. package/dist/src/cli.js.map +1 -0
  20. package/dist/src/config/defaults.d.ts +2 -0
  21. package/dist/src/config/defaults.js +7 -0
  22. package/dist/src/config/defaults.js.map +1 -0
  23. package/dist/src/config/loader.d.ts +6 -0
  24. package/dist/src/config/loader.js +146 -0
  25. package/dist/src/config/loader.js.map +1 -0
  26. package/dist/src/config/migrate-config.d.ts +2 -0
  27. package/dist/src/config/migrate-config.js +22 -0
  28. package/dist/src/config/migrate-config.js.map +1 -0
  29. package/dist/src/config/validator.d.ts +2 -0
  30. package/dist/src/config/validator.js +7 -0
  31. package/dist/src/config/validator.js.map +1 -0
  32. package/dist/src/extractors/account-usage.d.ts +20 -0
  33. package/dist/src/extractors/account-usage.js +293 -0
  34. package/dist/src/extractors/account-usage.js.map +1 -0
  35. package/dist/src/extractors/context.d.ts +7 -0
  36. package/dist/src/extractors/context.js +20 -0
  37. package/dist/src/extractors/context.js.map +1 -0
  38. package/dist/src/extractors/cost.d.ts +5 -0
  39. package/dist/src/extractors/cost.js +13 -0
  40. package/dist/src/extractors/cost.js.map +1 -0
  41. package/dist/src/extractors/git.d.ts +6 -0
  42. package/dist/src/extractors/git.js +35 -0
  43. package/dist/src/extractors/git.js.map +1 -0
  44. package/dist/src/extractors/index.d.ts +25 -0
  45. package/dist/src/extractors/index.js +33 -0
  46. package/dist/src/extractors/index.js.map +1 -0
  47. package/dist/src/extractors/mcp.d.ts +5 -0
  48. package/dist/src/extractors/mcp.js +72 -0
  49. package/dist/src/extractors/mcp.js.map +1 -0
  50. package/dist/src/extractors/model.d.ts +9 -0
  51. package/dist/src/extractors/model.js +20 -0
  52. package/dist/src/extractors/model.js.map +1 -0
  53. package/dist/src/extractors/output-style.d.ts +9 -0
  54. package/dist/src/extractors/output-style.js +13 -0
  55. package/dist/src/extractors/output-style.js.map +1 -0
  56. package/dist/src/extractors/rate-limits.d.ts +8 -0
  57. package/dist/src/extractors/rate-limits.js +39 -0
  58. package/dist/src/extractors/rate-limits.js.map +1 -0
  59. package/dist/src/extractors/session.d.ts +5 -0
  60. package/dist/src/extractors/session.js +67 -0
  61. package/dist/src/extractors/session.js.map +1 -0
  62. package/dist/src/extractors/thinking.d.ts +10 -0
  63. package/dist/src/extractors/thinking.js +16 -0
  64. package/dist/src/extractors/thinking.js.map +1 -0
  65. package/dist/src/extractors/third-party-api.d.ts +13 -0
  66. package/dist/src/extractors/third-party-api.js +193 -0
  67. package/dist/src/extractors/third-party-api.js.map +1 -0
  68. package/dist/src/extractors/transcript.d.ts +5 -0
  69. package/dist/src/extractors/transcript.js +67 -0
  70. package/dist/src/extractors/transcript.js.map +1 -0
  71. package/dist/src/extractors/workspace.d.ts +9 -0
  72. package/dist/src/extractors/workspace.js +43 -0
  73. package/dist/src/extractors/workspace.js.map +1 -0
  74. package/dist/src/formatters/duration.d.ts +1 -0
  75. package/dist/src/formatters/duration.js +19 -0
  76. package/dist/src/formatters/duration.js.map +1 -0
  77. package/dist/src/formatters/index.d.ts +7 -0
  78. package/dist/src/formatters/index.js +16 -0
  79. package/dist/src/formatters/index.js.map +1 -0
  80. package/dist/src/formatters/layout.d.ts +10 -0
  81. package/dist/src/formatters/layout.js +38 -0
  82. package/dist/src/formatters/layout.js.map +1 -0
  83. package/dist/src/formatters/progress-bar.d.ts +2 -0
  84. package/dist/src/formatters/progress-bar.js +23 -0
  85. package/dist/src/formatters/progress-bar.js.map +1 -0
  86. package/dist/src/formatters/segment.d.ts +9 -0
  87. package/dist/src/formatters/segment.js +18 -0
  88. package/dist/src/formatters/segment.js.map +1 -0
  89. package/dist/src/formatters/separator.d.ts +1 -0
  90. package/dist/src/formatters/separator.js +11 -0
  91. package/dist/src/formatters/separator.js.map +1 -0
  92. package/dist/src/i18n/index.d.ts +8 -0
  93. package/dist/src/i18n/index.js +31 -0
  94. package/dist/src/i18n/index.js.map +1 -0
  95. package/dist/src/i18n/locales/en.d.ts +1 -0
  96. package/dist/src/i18n/locales/en.js +26 -0
  97. package/dist/src/i18n/locales/en.js.map +1 -0
  98. package/dist/src/i18n/locales/zh.d.ts +1 -0
  99. package/dist/src/i18n/locales/zh.js +26 -0
  100. package/dist/src/i18n/locales/zh.js.map +1 -0
  101. package/dist/src/index.d.ts +1 -0
  102. package/dist/src/index.js +176 -0
  103. package/dist/src/index.js.map +1 -0
  104. package/dist/src/parser/stdin-parser.d.ts +3 -0
  105. package/dist/src/parser/stdin-parser.js +58 -0
  106. package/dist/src/parser/stdin-parser.js.map +1 -0
  107. package/dist/src/themes/builtin/cyberpunk.d.ts +2 -0
  108. package/dist/src/themes/builtin/cyberpunk.js +47 -0
  109. package/dist/src/themes/builtin/cyberpunk.js.map +1 -0
  110. package/dist/src/themes/builtin/dark.d.ts +2 -0
  111. package/dist/src/themes/builtin/dark.js +47 -0
  112. package/dist/src/themes/builtin/dark.js.map +1 -0
  113. package/dist/src/themes/builtin/forest.d.ts +2 -0
  114. package/dist/src/themes/builtin/forest.js +47 -0
  115. package/dist/src/themes/builtin/forest.js.map +1 -0
  116. package/dist/src/themes/builtin/light.d.ts +2 -0
  117. package/dist/src/themes/builtin/light.js +47 -0
  118. package/dist/src/themes/builtin/light.js.map +1 -0
  119. package/dist/src/themes/builtin/ocean.d.ts +2 -0
  120. package/dist/src/themes/builtin/ocean.js +47 -0
  121. package/dist/src/themes/builtin/ocean.js.map +1 -0
  122. package/dist/src/themes/icon-provider.d.ts +2 -0
  123. package/dist/src/themes/icon-provider.js +10 -0
  124. package/dist/src/themes/icon-provider.js.map +1 -0
  125. package/dist/src/themes/icon-sets/nerd.d.ts +17 -0
  126. package/dist/src/themes/icon-sets/nerd.js +20 -0
  127. package/dist/src/themes/icon-sets/nerd.js.map +1 -0
  128. package/dist/src/themes/icon-sets/text.d.ts +17 -0
  129. package/dist/src/themes/icon-sets/text.js +21 -0
  130. package/dist/src/themes/icon-sets/text.js.map +1 -0
  131. package/dist/src/themes/index.d.ts +4 -0
  132. package/dist/src/themes/index.js +56 -0
  133. package/dist/src/themes/index.js.map +1 -0
  134. package/dist/src/types/pulse-config.d.ts +58 -0
  135. package/dist/src/types/pulse-config.js +50 -0
  136. package/dist/src/types/pulse-config.js.map +1 -0
  137. package/dist/src/types/pulse-input.d.ts +83 -0
  138. package/dist/src/types/pulse-input.js +4 -0
  139. package/dist/src/types/pulse-input.js.map +1 -0
  140. package/dist/src/types/theme.d.ts +50 -0
  141. package/dist/src/types/theme.js +4 -0
  142. package/dist/src/types/theme.js.map +1 -0
  143. package/dist/src/utils/ansi.d.ts +6 -0
  144. package/dist/src/utils/ansi.js +31 -0
  145. package/dist/src/utils/ansi.js.map +1 -0
  146. package/dist/src/utils/cache.d.ts +11 -0
  147. package/dist/src/utils/cache.js +128 -0
  148. package/dist/src/utils/cache.js.map +1 -0
  149. package/dist/src/utils/claude-settings-env.d.ts +11 -0
  150. package/dist/src/utils/claude-settings-env.js +108 -0
  151. package/dist/src/utils/claude-settings-env.js.map +1 -0
  152. package/dist/src/utils/constants.d.ts +3 -0
  153. package/dist/src/utils/constants.js +43 -0
  154. package/dist/src/utils/constants.js.map +1 -0
  155. package/dist/src/utils/display-sanitize.d.ts +7 -0
  156. package/dist/src/utils/display-sanitize.js +69 -0
  157. package/dist/src/utils/display-sanitize.js.map +1 -0
  158. package/dist/src/utils/fs.d.ts +5 -0
  159. package/dist/src/utils/fs.js +79 -0
  160. package/dist/src/utils/fs.js.map +1 -0
  161. package/dist/src/utils/git.d.ts +7 -0
  162. package/dist/src/utils/git.js +56 -0
  163. package/dist/src/utils/git.js.map +1 -0
  164. package/dist/src/utils/logger.d.ts +9 -0
  165. package/dist/src/utils/logger.js +53 -0
  166. package/dist/src/utils/logger.js.map +1 -0
  167. package/dist/src/utils/model-display-env.d.ts +12 -0
  168. package/dist/src/utils/model-display-env.js +53 -0
  169. package/dist/src/utils/model-display-env.js.map +1 -0
  170. package/dist/src/utils/provider-credentials.d.ts +12 -0
  171. package/dist/src/utils/provider-credentials.js +145 -0
  172. package/dist/src/utils/provider-credentials.js.map +1 -0
  173. package/dist/test/advanced-extractors.test.d.ts +1 -0
  174. package/dist/test/advanced-extractors.test.js +96 -0
  175. package/dist/test/advanced-extractors.test.js.map +1 -0
  176. package/dist/test/benchmark.d.ts +1 -0
  177. package/dist/test/benchmark.js +67 -0
  178. package/dist/test/benchmark.js.map +1 -0
  179. package/dist/test/display-sanitize.test.d.ts +1 -0
  180. package/dist/test/display-sanitize.test.js +28 -0
  181. package/dist/test/display-sanitize.test.js.map +1 -0
  182. package/dist/test/extractors.test.d.ts +1 -0
  183. package/dist/test/extractors.test.js +261 -0
  184. package/dist/test/extractors.test.js.map +1 -0
  185. package/dist/test/formatters.test.d.ts +1 -0
  186. package/dist/test/formatters.test.js +62 -0
  187. package/dist/test/formatters.test.js.map +1 -0
  188. package/dist/test/git.test.d.ts +1 -0
  189. package/dist/test/git.test.js +85 -0
  190. package/dist/test/git.test.js.map +1 -0
  191. package/dist/test/migrate-config.test.d.ts +1 -0
  192. package/dist/test/migrate-config.test.js +23 -0
  193. package/dist/test/migrate-config.test.js.map +1 -0
  194. package/dist/test/model-display-env.test.d.ts +1 -0
  195. package/dist/test/model-display-env.test.js +125 -0
  196. package/dist/test/model-display-env.test.js.map +1 -0
  197. package/dist/test/parser.test.d.ts +1 -0
  198. package/dist/test/parser.test.js +108 -0
  199. package/dist/test/parser.test.js.map +1 -0
  200. package/dist/test/provider-credentials.test.d.ts +1 -0
  201. package/dist/test/provider-credentials.test.js +62 -0
  202. package/dist/test/provider-credentials.test.js.map +1 -0
  203. package/dist/test/themes.test.d.ts +1 -0
  204. package/dist/test/themes.test.js +83 -0
  205. package/dist/test/themes.test.js.map +1 -0
  206. package/dist/test/third-party-api.test.d.ts +1 -0
  207. package/dist/test/third-party-api.test.js +99 -0
  208. package/dist/test/third-party-api.test.js.map +1 -0
  209. package/dist/tsconfig.tsbuildinfo +1 -0
  210. package/package.json +43 -0
  211. package/skills/pulse-configuration/SKILL.md +267 -0
@@ -0,0 +1,267 @@
1
+ ---
2
+ description: Configure pulse-line modules, themes, and status bar customization
3
+ ---
4
+
5
+ # Pulse Configuration Skill
6
+
7
+ ## Overview
8
+
9
+ This skill provides guidance for configuring pulse-line modules and themes to customize the Claude Code status bar according to your workflow needs.
10
+
11
+ ## Configuration File
12
+
13
+ Location: `~/.claude/pulse/config.json`
14
+
15
+ Open in editor:
16
+ ```bash
17
+ pulse-line config
18
+ ```
19
+
20
+ ## Module Configuration
21
+
22
+ Each module in the `modules` section has the following properties:
23
+
24
+ ```json
25
+ {
26
+ "enabled": true,
27
+ "order": 1,
28
+ "icon": "[M]"
29
+ }
30
+ ```
31
+
32
+ ### Available Modules
33
+
34
+ #### Core modules
35
+
36
+ **model** — current model; default tag `[M]`.
37
+
38
+ **context** — usage bar; default `[C]`.
39
+
40
+ **git** — branch plus `↑`/`↓`; default `[G]`.
41
+
42
+ **cost** — USD total; default `[$]`.
43
+
44
+ #### Advanced (`config.json` keys)
45
+
46
+ **duration**, **workspace**, **turns**, **cacheRatio**, **thinking**, **rateLimits**, **weeklyQuota**, **mcpStatus**, **outputStyle** — bracket tags `[T]` … `[S]` in defaults (see bundled `pulse-config.ts`).
47
+
48
+ **accountUsage** — Zhipu / DeepSeek quotas via merged **`settings*.json`** `env` + `process.env`. For Claude Code routed through **`ANTHROPIC_BASE_URL` → `*.bigmodel.cn`**, GLM quotas use **`ANTHROPIC_AUTH_TOKEN`** (Anthropic-compat) when classic `ZHIPU_*` vars are absent.
49
+
50
+ **thirdPartyApi** — optional HTTP prefetch; rendered usage primarily via **`accountUsage`** cache.
51
+
52
+ ### iconSet
53
+
54
+ - `"text"` (default): bracket labels + separators safe without Nerd Fonts.
55
+ - `"nerd"`: Nerd Font / Powerline symbols; patched terminal font required.
56
+
57
+ With **`iconSet`: `"text"`**, if your `config.json` still has old Nerd/PUA characters in `modules.*.icon` or `separator`, Pulse **replaces** them with the bundled ASCII defaults so terminals without patched fonts do not show replacement glyphs (tofu).
58
+
59
+ Config files saved **without** `schemaVersion` run a **one‑time** upgrade first load (`iconSet: nerd → text`, then `schemaVersion: 3` is written). Set `iconSet` to `nerd` again only if your terminal ships a patched Nerd Font.
60
+
61
+ ## Model name on the status bar
62
+
63
+ The model segment label resolves as follows (**first non-empty wins**):
64
+
65
+ 1. **Explicit overrides:** `PULSE_MODEL_DISPLAY`, `CLAUDE_CODE_MODEL_DISPLAY` (`process.env` and merged Claude `settings*.json`).
66
+ 2. **Tier routing:** from `model.id` / `model.display_name` pick **Opus / Sonnet / Haiku**, then read **`ANTHROPIC_DEFAULT_OPUS_MODEL`**, **`…_SONNET_MODEL`**, or **`…_HAIKU_MODEL`** respectively (same precedence as overrides).
67
+ 3. **Global fallback:** `CLAUDE_MODEL`, `ANTHROPIC_MODEL`.
68
+ 4. **`model.display_name`** from stdin snapshot.
69
+
70
+ When Claude Code lists “Opus 4.x” but routing uses **`ANTHROPIC_DEFAULT_OPUS_MODEL: glm‑5.x`**, the bar shows **`glm‑5.x`**.
71
+
72
+ Example in `~/.claude/settings.json`:
73
+
74
+ ```json
75
+ {
76
+ "env": {
77
+ "ANTHROPIC_DEFAULT_OPUS_MODEL": "glm-5.1",
78
+ "ANTHROPIC_DEFAULT_SONNET_MODEL": "glm-5",
79
+ "ANTHROPIC_MODEL": "glm-5.1"
80
+ }
81
+ }
82
+ ```
83
+
84
+ ## Theme Configuration
85
+
86
+ Change theme via CLI:
87
+
88
+ ```bash
89
+ pulse-line theme dark
90
+ pulse-line theme cyberpunk
91
+ ```
92
+
93
+ Or edit config file directly:
94
+
95
+ ```json
96
+ {
97
+ "theme": "ocean"
98
+ }
99
+ ```
100
+
101
+ ### Theme Characteristics
102
+
103
+ - **dark** - Blue/green on black, professional
104
+ - **light** - Blue/green on white, clean
105
+ - **cyberpunk** - Bright neon colors, high contrast
106
+ - **forest** - Natural greens, earthy tones
107
+ - **ocean** - Deep blues, aquatic feel
108
+
109
+ ## Layout Customization
110
+
111
+ The `separator` string is drawn between modules. `padding` repeats that many **spaces** on both sides of each separator (after color is applied).
112
+
113
+ Example default: `"separator": " \u2502 ", "padding": 1` (U+2502 vertical rule with breathing room).
114
+
115
+ ## Example Configurations
116
+
117
+ ### Minimal Setup
118
+
119
+ ```json
120
+ {
121
+ "theme": "dark",
122
+ "separator": " │ ",
123
+ "modules": {
124
+ "model": { "enabled": true, "order": 1 },
125
+ "context": { "enabled": true, "order": 2, "showBar": true, "barWidth": 10 },
126
+ "cost": { "enabled": true, "order": 3 }
127
+ }
128
+ }
129
+ ```
130
+
131
+ ### Developer Setup
132
+
133
+ ```json
134
+ {
135
+ "theme": "ocean",
136
+ "separator": " │ ",
137
+ "modules": {
138
+ "model": { "enabled": true, "order": 1 },
139
+ "context": { "enabled": true, "order": 2, "showBar": true, "barWidth": 14 },
140
+ "git": { "enabled": true, "order": 3, "showUpstream": true },
141
+ "workspace": { "enabled": true, "order": 4 },
142
+ "cost": { "enabled": true, "order": 5 }
143
+ }
144
+ }
145
+ ```
146
+
147
+ ### Power User Setup
148
+
149
+ ```json
150
+ {
151
+ "theme": "cyberpunk",
152
+ "separator": " ║ ",
153
+ "modules": {
154
+ "model": { "enabled": true, "order": 1 },
155
+ "context": { "enabled": true, "order": 2, "showBar": true, "barWidth": 16 },
156
+ "git": { "enabled": true, "order": 3 },
157
+ "workspace": { "enabled": true, "order": 4 },
158
+ "turns": { "enabled": true, "order": 5 },
159
+ "cost": { "enabled": true, "order": 6 },
160
+ "duration": { "enabled": true, "order": 7 },
161
+ "rateLimits": { "enabled": true, "order": 8 },
162
+ "cacheRatio": { "enabled": true, "order": 9 }
163
+ }
164
+ }
165
+ ```
166
+
167
+ ## Enabling/Disabling Modules
168
+
169
+ Quick CLI commands:
170
+
171
+ ```bash
172
+ # Enable a module
173
+ pulse-line enable rateLimits
174
+
175
+ # Disable a module
176
+ pulse-line disable thinking
177
+
178
+ # Reload to apply changes
179
+ pulse-line reload
180
+ ```
181
+
182
+ ## Advanced Options
183
+
184
+ ### Context Module Options
185
+
186
+ ```json
187
+ {
188
+ "context": {
189
+ "enabled": true,
190
+ "order": 2,
191
+ "showBar": true, // Show progress bar
192
+ "barWidth": 12, // Bar width in characters
193
+ "showTokens": true, // Show exact token counts
194
+ "thresholds": {
195
+ "low": 50, // Green below 50%
196
+ "medium": 75, // Yellow 50-75%
197
+ "high": 90 // Red above 90%
198
+ }
199
+ }
200
+ }
201
+ ```
202
+
203
+ ### Git Module Options
204
+
205
+ ```json
206
+ {
207
+ "git": {
208
+ "enabled": true,
209
+ "order": 3,
210
+ "showUpstream": true, // Show upstream branch status
211
+ "showChanges": true, // Indicate uncommitted changes
212
+ "cacheDuration": 300 // Cache duration in seconds
213
+ }
214
+ }
215
+ ```
216
+
217
+ ## Performance Tips
218
+
219
+ 1. **Disable unused modules** - Each enabled module adds ~0.1ms
220
+ 2. **Reduce bar width** - Smaller bars render faster
221
+ 3. **Use caching** - Default cache settings are optimal
222
+ 4. **Minimal setup** - 3-4 modules keeps P99 <1ms
223
+
224
+ ## Troubleshooting
225
+
226
+ ### Config Not Applying
227
+
228
+ 1. Run `pulse-line reload`
229
+ 2. Restart Claude Code
230
+ 3. Verify config file is valid JSON
231
+
232
+ ### Module Not Showing
233
+
234
+ 1. Check module is `"enabled": true`
235
+ 2. Verify `order` is a number (not string)
236
+ 3. Run `pulse-line reload`
237
+
238
+ ### Performance Issues
239
+
240
+ 1. Disable advanced modules (thirdPartyApi, rateLimits)
241
+ 2. Reduce `barWidth` to 8-10
242
+ 3. Check cache is working (should see instant updates)
243
+
244
+ ### Icons show as `` or boxes
245
+
246
+ 1. Keep **`iconSet`** as **`"text"`** (default) unless the terminal font is Nerd-patched.
247
+ 2. Remove private-use / Powerline glyphs from `separator` and `modules.*.icon`, or let Pulse reset them automatically in text mode.
248
+ 3. Run `pulse-line reload` or restart Claude Code after editing `config.json`.
249
+
250
+ ## Best Practices
251
+
252
+ 1. **Start minimal** - Enable core modules first
253
+ 2. **Add gradually** - Test each new module
254
+ 3. **Customize icons** — short ASCII tags (for example `[M]`, `[ctx]`) keep columns aligned without emoji.
255
+ 4. **Use reload** - No need to restart Claude Code
256
+ 5. **Check config** - Use `pulse-line config` to edit
257
+
258
+ ## Related Commands
259
+
260
+ - `pulse-line install` - Initial setup
261
+ - `pulse-line uninstall` - Remove plugin
262
+ - `pulse-line theme <name>` - Switch theme
263
+ - `pulse-line enable <module>` - Enable module
264
+ - `pulse-line disable <module>` - Disable module
265
+ - `pulse-line reload` - Apply changes
266
+ - `pulse-line config` - Edit config file
267
+ - `pulse-line themes` - List themes