@promptctl/cc-candybar 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 (111) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +145 -0
  3. package/bin/cc-candybar +6 -0
  4. package/dist/index.mjs +185 -0
  5. package/package.json +99 -0
  6. package/plugin/.claude-plugin/plugin.json +11 -0
  7. package/plugin/bin/preview.sh +305 -0
  8. package/plugin/commands/candybar.md +403 -0
  9. package/plugin/templates/config-essential.json +36 -0
  10. package/plugin/templates/config-full.json +55 -0
  11. package/plugin/templates/config-standard.json +39 -0
  12. package/plugin/templates/config-tui-compact.json +48 -0
  13. package/plugin/templates/config-tui-full.json +89 -0
  14. package/plugin/templates/config-tui-standard.json +56 -0
  15. package/plugin/templates/config-tui.json +18 -0
  16. package/plugin/templates/nerd-fonts-sample.txt +5 -0
  17. package/schema/cc-candybar.schema.json +1379 -0
  18. package/src/click/wire.ts +113 -0
  19. package/src/config/action.ts +91 -0
  20. package/src/config/cli.ts +170 -0
  21. package/src/config/default-dsl-config.ts +661 -0
  22. package/src/config/dsl-loader.ts +265 -0
  23. package/src/config/dsl-types.ts +425 -0
  24. package/src/config/loader/actions.ts +530 -0
  25. package/src/config/loader/cache.ts +206 -0
  26. package/src/config/loader/cross-ref.ts +326 -0
  27. package/src/config/loader/cycles.ts +148 -0
  28. package/src/config/loader/diagnostics.ts +99 -0
  29. package/src/config/loader/discovery.ts +182 -0
  30. package/src/config/loader/emit-schema.ts +63 -0
  31. package/src/config/loader/globals.ts +42 -0
  32. package/src/config/loader/helpers.ts +48 -0
  33. package/src/config/loader/layout.ts +688 -0
  34. package/src/config/loader/merge.ts +40 -0
  35. package/src/config/loader/refs.ts +96 -0
  36. package/src/config/loader/segments.ts +120 -0
  37. package/src/config/loader/validate-core.ts +674 -0
  38. package/src/config/loader/variables.ts +260 -0
  39. package/src/daemon/acquire.ts +411 -0
  40. package/src/daemon/cache/git.ts +553 -0
  41. package/src/daemon/cache/render.ts +449 -0
  42. package/src/daemon/cache/session-usage-store.ts +446 -0
  43. package/src/daemon/cache/watchers.ts +245 -0
  44. package/src/daemon/client-debug.ts +120 -0
  45. package/src/daemon/client-stats.ts +129 -0
  46. package/src/daemon/client-transport.ts +273 -0
  47. package/src/daemon/client.ts +75 -0
  48. package/src/daemon/debug-types.ts +91 -0
  49. package/src/daemon/debug.ts +264 -0
  50. package/src/daemon/limits.ts +154 -0
  51. package/src/daemon/log.ts +69 -0
  52. package/src/daemon/parent-watchdog.ts +80 -0
  53. package/src/daemon/paths.ts +127 -0
  54. package/src/daemon/protocol.ts +235 -0
  55. package/src/daemon/render-payload.ts +611 -0
  56. package/src/daemon/server.ts +1103 -0
  57. package/src/daemon/session-state-file.ts +108 -0
  58. package/src/daemon/session-state.ts +237 -0
  59. package/src/daemon/stats.ts +229 -0
  60. package/src/daemon/verbs/index.ts +458 -0
  61. package/src/daemon/verbs/state-validators.ts +708 -0
  62. package/src/demo/dsl.ts +117 -0
  63. package/src/demo/mock-data.ts +67 -0
  64. package/src/demo/statusline.json5 +92 -0
  65. package/src/dsl/node-registry.ts +281 -0
  66. package/src/dsl/render.ts +558 -0
  67. package/src/index.ts +206 -0
  68. package/src/install/index.ts +410 -0
  69. package/src/proc/launch.ts +451 -0
  70. package/src/proc/stats-handle.ts +13 -0
  71. package/src/render/action.ts +458 -0
  72. package/src/render/diagnostic-style.ts +23 -0
  73. package/src/render/diagnostic-text.ts +77 -0
  74. package/src/render/error-glyph.ts +53 -0
  75. package/src/render/outcome-plan.ts +45 -0
  76. package/src/render/picker.ts +231 -0
  77. package/src/render/split-lines.ts +51 -0
  78. package/src/render/strip.ts +103 -0
  79. package/src/segments/cache.ts +131 -0
  80. package/src/segments/context.ts +190 -0
  81. package/src/segments/git.ts +561 -0
  82. package/src/segments/metrics.ts +101 -0
  83. package/src/segments/pricing.ts +452 -0
  84. package/src/segments/session.ts +188 -0
  85. package/src/segments/tmux.ts +74 -0
  86. package/src/template-engine/cells.ts +90 -0
  87. package/src/template-engine/colors.ts +102 -0
  88. package/src/template-engine/engine.ts +108 -0
  89. package/src/template-engine/funcs.ts +216 -0
  90. package/src/template-engine/index.ts +11 -0
  91. package/src/template-engine/layout.ts +112 -0
  92. package/src/template-engine/scope.ts +62 -0
  93. package/src/themes/index.ts +19 -0
  94. package/src/themes/palette-resolvers.ts +86 -0
  95. package/src/themes/policy.ts +79 -0
  96. package/src/themes/session-random.ts +88 -0
  97. package/src/utils/cache.ts +206 -0
  98. package/src/utils/claude.ts +616 -0
  99. package/src/utils/color-support.ts +118 -0
  100. package/src/utils/formatters.ts +77 -0
  101. package/src/utils/logger.ts +5 -0
  102. package/src/utils/outcome.ts +33 -0
  103. package/src/utils/schema-validator.ts +126 -0
  104. package/src/utils/single-flight.ts +57 -0
  105. package/src/utils/terminal-width.ts +43 -0
  106. package/src/utils/terminal.ts +11 -0
  107. package/src/utils/transcript-fs.ts +162 -0
  108. package/src/var-system/index.ts +24 -0
  109. package/src/var-system/sources.ts +1038 -0
  110. package/src/var-system/store.ts +223 -0
  111. package/src/var-system/types.ts +57 -0
@@ -0,0 +1,403 @@
1
+ ---
2
+ name: candybar
3
+ description: CC Candybar statusline setup wizard
4
+ allowed-tools:
5
+ - Bash
6
+ - Read
7
+ - Write
8
+ - Edit
9
+ - AskUserQuestion
10
+ - Glob
11
+ ---
12
+
13
+ # CC Candybar Setup Wizard
14
+
15
+ You are running an interactive setup wizard to configure the cc-candybar statusline for Claude Code. Follow these steps in order, using AskUserQuestion for each decision point.
16
+
17
+ ## Important Notes
18
+
19
+ - Do not skip steps or combine questions.
20
+ - Always wait for the user's response before moving to the next step.
21
+ - Track the user's choices in variables throughout the wizard.
22
+ - The final config is written as JSON to `~/.config/cc-candybar/config.json`.
23
+ - Do NOT use the Agent tool or Explore subagents. All information you need is in this document.
24
+ - Do NOT read source code from the cc-candybar package. Use only the instructions below.
25
+ - IMPORTANT: After running any Bash or Read tool, repeat the key output as text in your response. Some users have a collapsed UI mode where tool outputs require a click to expand. Always relay important results (like version numbers, previews, or file contents) in your text so the user can see them without expanding.
26
+
27
+ ## Step 1: Check Node.js
28
+
29
+ Run this command to check if Node.js 18+ is available:
30
+
31
+ ```bash
32
+ node --version 2>/dev/null || echo "not_installed"
33
+ ```
34
+
35
+ Tell the user the detected version in your text response.
36
+
37
+ ### If Node.js is NOT installed or version is below 18
38
+
39
+ Display:
40
+
41
+ ````markdown
42
+ CC Candybar requires **Node.js 18+** to run.
43
+
44
+ Install it from https://nodejs.org or via your package manager:
45
+
46
+ ```bash
47
+ # macOS
48
+ brew install node
49
+
50
+ # Ubuntu/Debian
51
+ curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
52
+ sudo apt-get install -y nodejs
53
+ ```
54
+ ````
55
+
56
+ Then ask:
57
+
58
+ - **Question**: "Install Node.js or check again?"
59
+ - **Header**: "Node.js"
60
+ - **Options**:
61
+ - "I installed it, check again" -> Re-run the version check from the top of Step 1
62
+ - "Exit wizard" -> Tell them to install Node.js 18+ and exit
63
+
64
+ ### If Node.js 18+ IS installed
65
+
66
+ Continue to the next step.
67
+
68
+ ## Step 2: Nerd Font Detection
69
+
70
+ > [!IMPORTANT]
71
+ > You cannot display nerd font glyphs properly in your text output.
72
+ > You MUST run the cat command below and let the terminal render it.
73
+ > After running it, tell the user to expand the bash output if they cannot see the icons.
74
+
75
+ ```bash
76
+ cat ${CLAUDE_PLUGIN_ROOT}/templates/nerd-fonts-sample.txt
77
+ ```
78
+
79
+ After running the command, tell the user: "Check the bash output above for Nerd Font icons (folder, code, branch, robot). You may need to click/expand the bash output to see them."
80
+
81
+ Then ask:
82
+
83
+ - **Question**: "Can you see the icons clearly (folder, code, branch, robot)?"
84
+ - **Header**: "Nerd Font"
85
+ - **Options**:
86
+ - "Yes, I can see them" -> Set `charset=unicode`. Continue to Step 3
87
+ - "No, I see boxes or blank spaces" -> Set `charset=text`. Continue to Step 3
88
+
89
+ ## Step 3: Theme Selection
90
+
91
+ Show a preview of all six themes using the bundled preview script.
92
+
93
+ > [!IMPORTANT]
94
+ > You cannot render ANSI escape codes in your text output.
95
+ > You MUST run the preview command below and let the terminal display the result.
96
+ > After running, tell the user to expand the bash output if they cannot see the previews.
97
+
98
+ ```bash
99
+ ${CLAUDE_PLUGIN_ROOT}/bin/preview.sh --compare-themes --charset=${charset}
100
+ ```
101
+
102
+ After running the command, display the theme list and tell the user to check the bash output above for previews:
103
+
104
+ ````markdown
105
+ **Available themes:**
106
+
107
+ 1. **dark** -- Dark background, high contrast (default)
108
+ 2. **light** -- Light background for light terminals
109
+ 3. **nord** -- Cool blue palette inspired by Arctic colors
110
+ 4. **tokyo-night** -- Modern dark theme with vibrant accents
111
+ 5. **rose-pine** -- Soft, muted palette with rose and pine tones
112
+ 6. **gruvbox** -- Warm retro colors with earthy tones
113
+ ````
114
+
115
+ Then ask:
116
+
117
+ - **Question**: "Which theme? Type a name or pick from the list."
118
+ - **Header**: "Theme"
119
+ - **Options**:
120
+ - "dark" -> Set `chosen_theme=dark`
121
+ - "light" -> Set `chosen_theme=light`
122
+ - "nord" -> Set `chosen_theme=nord`
123
+ - "tokyo-night" -> Set `chosen_theme=tokyo-night`
124
+
125
+ If the user types "rose-pine" or "gruvbox" (or any valid theme name) in the free text field, accept that as their choice. Valid themes: dark, light, nord, tokyo-night, rose-pine, gruvbox.
126
+
127
+ ## Step 4: Style Selection
128
+
129
+ Show a preview of all four styles using the bundled preview script.
130
+
131
+ > [!IMPORTANT]
132
+ > You cannot render ANSI escape codes or nerd font glyphs in your text output.
133
+ > You MUST run the preview command below and let the terminal display the result.
134
+ > Do NOT attempt to describe what the styles look like. Let the user see them.
135
+ > After running, tell the user to expand the bash output if they cannot see the previews.
136
+
137
+ ```bash
138
+ ${CLAUDE_PLUGIN_ROOT}/bin/preview.sh --compare-styles --theme=${chosen_theme} --charset=${charset}
139
+ ```
140
+
141
+ After running the command, tell the user: "The four style previews are in the bash output above. Expand it if needed."
142
+
143
+ Then ask:
144
+
145
+ - **Question**: "Which style do you prefer?"
146
+ - **Header**: "Style"
147
+ - **Options**:
148
+ - "minimal" -> Set `chosen_style=minimal`
149
+ - "powerline" -> Set `chosen_style=powerline`
150
+ - "capsule" -> Set `chosen_style=capsule`
151
+ - "tui" -> Set `chosen_style=tui`
152
+
153
+ If the user chose `charset=text`, add a note that powerline and capsule use text fallback separators.
154
+
155
+ **If the user chose "tui":** skip Steps 5 and 6 and continue to Step 4b for TUI layout selection.
156
+
157
+ ## Step 4b: TUI Layout Selection
158
+
159
+ > [!NOTE]
160
+ > This step only applies if the user chose "tui" style in Step 4. Otherwise skip to Step 5.
161
+
162
+ Show a preview of all three TUI layouts using the bundled preview script.
163
+
164
+ > [!IMPORTANT]
165
+ > You MUST run the preview command below and let the terminal display the result.
166
+ > After running, tell the user to expand the bash output if they cannot see the previews.
167
+
168
+ ```bash
169
+ ${CLAUDE_PLUGIN_ROOT}/bin/preview.sh --compare-tui-layouts --theme=${chosen_theme} --charset=${charset}
170
+ ```
171
+
172
+ After running the command, tell the user: "The three TUI layout previews are in the bash output above. Expand it if needed."
173
+
174
+ Display the three TUI layout presets:
175
+
176
+ ````markdown
177
+ **Choose a TUI layout:**
178
+
179
+ 1. **Compact** — Git + context window only
180
+ Minimal footprint. Model name in the title bar. Clean and focused.
181
+
182
+ 2. **Standard** — Git + context + block usage with progress bars
183
+ Model and directory in the title bar. Good default for most users.
184
+
185
+ 3. **Full** — Git, context, block, session, and daily cost
186
+ Title bar with model and directory. Footer with weekly usage and response time.
187
+ Maximum information density.
188
+ ````
189
+
190
+ Then ask:
191
+
192
+ - **Question**: "Which TUI layout?"
193
+ - **Header**: "TUI Layout"
194
+ - **Options**:
195
+ - "Compact" -> Set `chosen_tui_layout=compact`
196
+ - "Standard" -> Set `chosen_tui_layout=standard`
197
+ - "Full" -> Set `chosen_tui_layout=full`
198
+
199
+ After selection, skip Steps 5 and 6 (always skipped for TUI). If "Compact" or "Standard", also skip Step 7 (no budget needed). If "Full", continue to Step 7.
200
+
201
+ ### TUI preset to template mapping
202
+
203
+ - `compact` -> `config-tui-compact.json`
204
+ - `standard` -> `config-tui-standard.json`
205
+ - `full` -> `config-tui-full.json`
206
+
207
+ ## Step 5: Segment Selection
208
+
209
+ > [!NOTE]
210
+ > Skip this step if the user chose "tui" style.
211
+
212
+ Display the three presets:
213
+
214
+ ````markdown
215
+ **Choose a segment preset:**
216
+
217
+ 1. **Essential** -- Directory, git, model, context window
218
+ Clean and lightweight. Just the basics.
219
+
220
+ 2. **Standard** -- Essential + session cost, daily cost tracking
221
+ Adds cost visibility without clutter. Good default for most users.
222
+
223
+ 3. **Full** -- Standard + block usage, metrics, version, weekly usage
224
+ Everything on. For users who want maximum information density.
225
+ ````
226
+
227
+ Then ask:
228
+
229
+ - **Question**: "Which segment preset?"
230
+ - **Header**: "Segments"
231
+ - **Options**:
232
+ - "Essential" -> Set `chosen_preset=essential`
233
+ - "Standard" -> Set `chosen_preset=standard`
234
+ - "Full" -> Set `chosen_preset=full`
235
+
236
+ ### Preset to template mapping
237
+
238
+ Each preset has a corresponding template config file in `${CLAUDE_PLUGIN_ROOT}/templates/`:
239
+
240
+ - `essential` -> `config-essential.json`
241
+ - `standard` -> `config-standard.json`
242
+ - `full` -> `config-full.json`
243
+
244
+ For TUI templates, see Step 4b.
245
+
246
+ ## Step 6: Bar Display Style
247
+
248
+ > [!NOTE]
249
+ > Skip this step if the user chose "tui" style. Default to `text` if skipped.
250
+
251
+ Display the available bar styles for progress indicators (used by context, block, and weekly segments):
252
+
253
+ ````markdown
254
+ **Bar display styles** (for context window, block usage, and weekly usage):
255
+
256
+ 1. **text** -- Numbers only, no bar (default). Example: `65,000 (61%)`
257
+ 2. **bar** -- Classic bar. Example: `▓▓▓▓▓░░░░░ 50%`
258
+ 3. **blocks** -- Block fill. Example: `█████░░░░░ 50%`
259
+ 4. **dots** -- Dot fill. Example: `●●●●●○○○○○ 50%`
260
+ 5. **geometric** -- Geometric. Example: `▰▰▰▰▰▱▱▱▱▱ 50%`
261
+ 6. **line** -- Line style. Example: `━━━━━┄┄┄┄┄ 50%`
262
+ ````
263
+
264
+ Then ask:
265
+
266
+ - **Question**: "Which bar style for progress indicators?"
267
+ - **Header**: "Display Style"
268
+ - **Options**:
269
+ - "text" -> Set `chosen_bar_style=text`
270
+ - "bar" -> Set `chosen_bar_style=bar`
271
+ - "blocks" -> Set `chosen_bar_style=blocks`
272
+ - "dots" -> Set `chosen_bar_style=dots`
273
+
274
+ If the user types "geometric", "line", "filled", "squares", "capped", "ball", or "blocks-line" in the free text field, accept that as their choice. All valid display styles: text, ball, bar, blocks, blocks-line, capped, dots, filled, geometric, line, squares.
275
+
276
+ Apply `chosen_bar_style` to the `displayStyle` field of context, block, and weekly segments in the config.
277
+
278
+ ## Step 7: Budget
279
+
280
+ > [!NOTE]
281
+ > Skip this step if the user chose "Essential" preset, or TUI "Compact" or "Standard" layout. Only TUI "Full" layout uses a budget placeholder.
282
+
283
+ Ask the user about their daily budget for cost tracking:
284
+
285
+ - **Question**: "Set a daily spending budget? (used by the today segment for percentage warnings)"
286
+ - **Header**: "Budget"
287
+ - **Options**:
288
+ - "$25/day" -> Set `today_budget=25`
289
+ - "$50/day" -> Set `today_budget=50`
290
+ - "$100/day" -> Set `today_budget=100`
291
+ - "No budget" -> Set `today_budget=null` (omit amount from config)
292
+
293
+ ## Step 8: Write Configuration
294
+
295
+ ### Check for existing config
296
+
297
+ ```bash
298
+ test -f ~/.config/cc-candybar/config.json && echo "exists" || echo "not_found"
299
+ ```
300
+
301
+ If it exists, ask:
302
+
303
+ - **Question**: "Found existing ~/.config/cc-candybar/config.json. What should I do?"
304
+ - **Header**: "Existing Config"
305
+ - **Options**:
306
+ - "Replace it" -> Continue
307
+ - "Back it up first" -> Run `cp ~/.config/cc-candybar/config.json ~/.config/cc-candybar/config.json.bak` then continue
308
+ - "Keep it and exit" -> Exit the wizard
309
+
310
+ ### Build and write the config
311
+
312
+ 1. **Pick the template file.** Based on the user's choices:
313
+ - Non-TUI styles: `config-essential.json`, `config-standard.json`, or `config-full.json` (from Step 5)
314
+ - TUI style: `config-tui-compact.json`, `config-tui-standard.json`, or `config-tui-full.json` (from Step 4b)
315
+
316
+ 2. **Read the template** using the Read tool:
317
+
318
+ ```text
319
+ ${CLAUDE_PLUGIN_ROOT}/templates/<template-file>
320
+ ```
321
+
322
+ 1. **Replace placeholders** in the template content:
323
+
324
+ | Placeholder | Replace with |
325
+ |-------------|-------------|
326
+ | `replace:THEME` | The chosen theme (e.g., `tokyo-night`) |
327
+ | `replace:STYLE` | The chosen style (e.g., `capsule`). Not present in TUI templates. |
328
+ | `replace:CHARSET` | `unicode` or `text` |
329
+ | `replace:BAR_STYLE` | The chosen bar style (e.g., `blocks`). Default `text` if Step 6 was skipped. Not present in TUI templates. |
330
+ | `replace:TODAY_BUDGET` | The budget number (e.g., `50`). Only present in non-TUI standard/full and TUI full templates. **Important:** replace `"replace:TODAY_BUDGET"` (including the surrounding quotes) with the bare number so the result is `"amount": 50` not `"amount": "50"`. |
331
+
332
+ 1. **Handle "No budget"**: If the user chose "No budget" in Step 7, remove the entire `"amount": "replace:TODAY_BUDGET",` line (including the trailing comma) from the budget section. If Step 7 was skipped (essential preset, or TUI compact/standard), do not modify the budget section.
333
+
334
+ 1. **Write the result** to `~/.config/cc-candybar/config.json` using the Write tool. Do NOT read or merge with any existing config.
335
+
336
+ ## Step 9: Update settings.json
337
+
338
+ Read `~/.claude/settings.json` if it exists. Add or update ONLY the `statusLine` key:
339
+
340
+ ```json
341
+ {
342
+ "statusLine": {
343
+ "type": "command",
344
+ "command": "npx -y @promptctl/cc-candybar@latest"
345
+ }
346
+ }
347
+ ```
348
+
349
+ If the file does not exist, create it with only the statusLine configuration.
350
+ If it exists, preserve ALL other settings (hooks, permissions, plugins, etc.) and only add or update the `statusLine` key.
351
+
352
+ Use the Read tool to load the existing file, merge the statusLine key, and Write to save it back.
353
+
354
+ ## Step 10: Test Installation
355
+
356
+ Run a test with sample data to verify the statusline renders:
357
+
358
+ > [!IMPORTANT]
359
+ > You MUST run this command and tell the user to check the output.
360
+
361
+ ```bash
362
+ ${CLAUDE_PLUGIN_ROOT}/bin/preview.sh --theme=${chosen_theme} --style=${chosen_style} --charset=${charset}
363
+ ```
364
+
365
+ Tell the user: "Check the bash output above for your statusline preview. Expand it if needed."
366
+
367
+ If it produced output, tell the user the setup is working.
368
+
369
+ ## Step 11: Success Message
370
+
371
+ Display:
372
+
373
+ ````markdown
374
+ Setup complete.
375
+
376
+ **Files created/updated:**
377
+ - `~/.config/cc-candybar/config.json` (candybar config)
378
+ - `~/.claude/settings.json` (claude settings)
379
+
380
+ **What now:**
381
+ 1. Restart Claude Code if the statusline does not appear.
382
+ 2. Run `/candybar` any time to reconfigure.
383
+ 3. Edit `~/.config/cc-candybar/config.json` by hand for advanced options.
384
+
385
+ Documentation: https://github.com/promptctl/cc-candybar
386
+ ````
387
+
388
+ **If the user chose TUI style**, also display:
389
+
390
+ ````markdown
391
+ **Customizing your TUI grid layout:**
392
+
393
+ Edit `display.tui` in `~/.config/cc-candybar/config.json` to fine-tune:
394
+
395
+ - **Box style** — Add `"box": "rounded"` to change borders. Presets: `rounded`, `square`, `heavy`, `double`, `dashed`, `heavy-dashed`, `mixed`, `ascii`, `invisible`
396
+ - **Title/footer** — Edit `title.left`, `title.right`, `footer.left`, `footer.right` using `{segment.part}` tokens (e.g. `{model.icon}`, `{dir}`, `{weekly.pct}`)
397
+ - **Grid areas** — Rearrange cells in `breakpoints[].areas`. Use `.` for empty cells, `---` for dividers. Repeat a name across adjacent cells to span columns
398
+ - **Custom colors** — Add `colors.custom` entries with dot-notation keys (e.g. `"context.bar": { "fg": "#4a9eff" }`)
399
+ - **Responsive breakpoints** — Add breakpoints for different terminal widths. The engine picks the largest `minWidth` that fits
400
+ - **Column sizing** — `"auto"` (fit content), `"1fr"` (fill remaining), or a fixed number like `"20"`
401
+
402
+ See the TUI Grid Layout section in the README for the full reference.
403
+ ````
@@ -0,0 +1,36 @@
1
+ {
2
+ "theme": "replace:THEME",
3
+ "display": {
4
+ "style": "replace:STYLE",
5
+ "charset": "replace:CHARSET",
6
+ "colorCompatibility": "auto",
7
+ "autoWrap": true,
8
+ "padding": 1,
9
+ "lines": [
10
+ {
11
+ "segments": {
12
+ "directory": { "enabled": true, "style": "fish" },
13
+ "git": { "enabled": true },
14
+ "model": { "enabled": true }
15
+ }
16
+ },
17
+ {
18
+ "segments": {
19
+ "context": {
20
+ "enabled": true,
21
+ "showPercentageOnly": false,
22
+ "displayStyle": "replace:BAR_STYLE",
23
+ "autocompactBuffer": 33000
24
+ }
25
+ }
26
+ }
27
+ ]
28
+ },
29
+ "budget": {
30
+ "session": { "warningThreshold": 80 }
31
+ },
32
+ "modelContextLimits": {
33
+ "sonnet": 1000000,
34
+ "opus": 200000
35
+ }
36
+ }
@@ -0,0 +1,55 @@
1
+ {
2
+ "theme": "replace:THEME",
3
+ "display": {
4
+ "style": "replace:STYLE",
5
+ "charset": "replace:CHARSET",
6
+ "colorCompatibility": "auto",
7
+ "autoWrap": true,
8
+ "padding": 1,
9
+ "lines": [
10
+ {
11
+ "segments": {
12
+ "directory": { "enabled": true, "style": "fish" },
13
+ "git": { "enabled": true },
14
+ "model": { "enabled": true },
15
+ "session": { "enabled": true, "type": "tokens", "costSource": "calculated" }
16
+ }
17
+ },
18
+ {
19
+ "segments": {
20
+ "today": { "enabled": true, "type": "cost" },
21
+ "block": { "enabled": true, "displayStyle": "replace:BAR_STYLE" },
22
+ "weekly": { "enabled": true, "displayStyle": "replace:BAR_STYLE" },
23
+ "context": {
24
+ "enabled": true,
25
+ "showPercentageOnly": false,
26
+ "displayStyle": "replace:BAR_STYLE",
27
+ "autocompactBuffer": 33000
28
+ }
29
+ }
30
+ },
31
+ {
32
+ "segments": {
33
+ "metrics": {
34
+ "enabled": true,
35
+ "showResponseTime": false,
36
+ "showLastResponseTime": false,
37
+ "showDuration": true,
38
+ "showMessageCount": true,
39
+ "showLinesAdded": false,
40
+ "showLinesRemoved": false
41
+ },
42
+ "version": { "enabled": true }
43
+ }
44
+ }
45
+ ]
46
+ },
47
+ "budget": {
48
+ "session": { "warningThreshold": 80 },
49
+ "today": { "amount": "replace:TODAY_BUDGET", "warningThreshold": 80 }
50
+ },
51
+ "modelContextLimits": {
52
+ "sonnet": 1000000,
53
+ "opus": 200000
54
+ }
55
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "theme": "replace:THEME",
3
+ "display": {
4
+ "style": "replace:STYLE",
5
+ "charset": "replace:CHARSET",
6
+ "colorCompatibility": "auto",
7
+ "autoWrap": true,
8
+ "padding": 1,
9
+ "lines": [
10
+ {
11
+ "segments": {
12
+ "directory": { "enabled": true, "style": "fish" },
13
+ "git": { "enabled": true },
14
+ "model": { "enabled": true },
15
+ "session": { "enabled": true, "type": "tokens", "costSource": "calculated" }
16
+ }
17
+ },
18
+ {
19
+ "segments": {
20
+ "today": { "enabled": true, "type": "cost" },
21
+ "context": {
22
+ "enabled": true,
23
+ "showPercentageOnly": false,
24
+ "displayStyle": "replace:BAR_STYLE",
25
+ "autocompactBuffer": 33000
26
+ }
27
+ }
28
+ }
29
+ ]
30
+ },
31
+ "budget": {
32
+ "session": { "warningThreshold": 80 },
33
+ "today": { "amount": "replace:TODAY_BUDGET", "warningThreshold": 80 }
34
+ },
35
+ "modelContextLimits": {
36
+ "sonnet": 1000000,
37
+ "opus": 200000
38
+ }
39
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "theme": "replace:THEME",
3
+ "display": {
4
+ "style": "tui",
5
+ "charset": "replace:CHARSET",
6
+ "colorCompatibility": "auto",
7
+ "autoWrap": true,
8
+ "tui": {
9
+ "fitContent": true,
10
+ "minWidth": 30,
11
+ "padding": { "horizontal": 1 },
12
+ "separator": { "column": "" },
13
+ "title": {
14
+ "left": "{model}",
15
+ "right": "{dir}"
16
+ },
17
+ "breakpoints": [
18
+ {
19
+ "minWidth": 0,
20
+ "areas": [
21
+ "git.icon git.headVal . git.working",
22
+ "---",
23
+ "context.icon context.bar context.pct context.tokens"
24
+ ],
25
+ "columns": ["auto", "1fr", "auto", "auto"],
26
+ "align": ["left", "left", "right", "right"]
27
+ }
28
+ ]
29
+ },
30
+ "lines": [
31
+ {
32
+ "segments": {
33
+ "directory": { "enabled": true, "showBasename": true },
34
+ "git": { "enabled": true },
35
+ "model": { "enabled": true },
36
+ "context": { "enabled": true, "autocompactBuffer": 0 }
37
+ }
38
+ }
39
+ ]
40
+ },
41
+ "budget": {
42
+ "session": { "warningThreshold": 80 }
43
+ },
44
+ "modelContextLimits": {
45
+ "sonnet": 1000000,
46
+ "opus": 200000
47
+ }
48
+ }
@@ -0,0 +1,89 @@
1
+ {
2
+ "theme": "replace:THEME",
3
+ "display": {
4
+ "style": "tui",
5
+ "charset": "replace:CHARSET",
6
+ "colorCompatibility": "auto",
7
+ "autoWrap": true,
8
+ "tui": {
9
+ "fitContent": true,
10
+ "minWidth": 60,
11
+ "padding": { "horizontal": 1 },
12
+ "separator": { "column": "" },
13
+ "title": {
14
+ "left": "{model.icon} {model.value}",
15
+ "right": "{dir}"
16
+ },
17
+ "footer": {
18
+ "left": "{activity.durationIcon} {activity.durationVal} {activity.messagesIcon} {activity.messagesVal}",
19
+ "right": "{metrics.lastResponse}"
20
+ },
21
+ "segments": {
22
+ "git.headVal": {
23
+ "items": ["{branch}", "{status}", "{ahead}", "{behind}"],
24
+ "gap": 1
25
+ }
26
+ },
27
+ "breakpoints": [
28
+ {
29
+ "minWidth": 55,
30
+ "areas": [
31
+ "git.icon git.headVal git.headVal git.headVal git.working",
32
+ "---",
33
+ "context.icon context.bar context.bar context.pct context.tokens",
34
+ "block.icon block.bar block.bar block.value block.time",
35
+ "weekly.icon weekly.bar weekly.bar weekly.pct weekly.time",
36
+ "---",
37
+ "session session session today today"
38
+ ],
39
+ "columns": ["auto", "1fr", "auto", "auto", "auto"],
40
+ "align": ["left", "left", "right", "right", "right"]
41
+ },
42
+ {
43
+ "minWidth": 0,
44
+ "areas": [
45
+ "git.head",
46
+ "git.working",
47
+ "---",
48
+ "context",
49
+ "block",
50
+ "---",
51
+ "session",
52
+ "today"
53
+ ],
54
+ "columns": ["1fr"],
55
+ "align": ["left"]
56
+ }
57
+ ]
58
+ },
59
+ "lines": [
60
+ {
61
+ "segments": {
62
+ "directory": { "enabled": true, "style": "fish" },
63
+ "git": { "enabled": true, "showAheadBehind": true },
64
+ "model": { "enabled": true },
65
+ "context": { "enabled": true, "autocompactBuffer": 0 },
66
+ "block": { "enabled": true, "type": "tokens" },
67
+ "session": { "enabled": true, "type": "tokens" },
68
+ "today": { "enabled": true, "type": "cost" },
69
+ "weekly": { "enabled": true },
70
+ "metrics": {
71
+ "enabled": true,
72
+ "showLastResponseTime": true,
73
+ "showResponseTime": false,
74
+ "showDuration": true,
75
+ "showMessageCount": true
76
+ }
77
+ }
78
+ }
79
+ ]
80
+ },
81
+ "budget": {
82
+ "session": { "warningThreshold": 80 },
83
+ "today": { "amount": "replace:TODAY_BUDGET", "warningThreshold": 80 }
84
+ },
85
+ "modelContextLimits": {
86
+ "sonnet": 1000000,
87
+ "opus": 200000
88
+ }
89
+ }