@sooneocean/claude-hud 0.1.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 (210) hide show
  1. package/.claude-plugin/marketplace.json +20 -0
  2. package/.claude-plugin/plugin.json +20 -0
  3. package/LICENSE +21 -0
  4. package/README.md +379 -0
  5. package/commands/configure.md +361 -0
  6. package/commands/export.md +43 -0
  7. package/commands/health.md +61 -0
  8. package/commands/setup.md +287 -0
  9. package/commands/theme.md +31 -0
  10. package/dist/alert.d.ts +31 -0
  11. package/dist/alert.d.ts.map +1 -0
  12. package/dist/alert.js +53 -0
  13. package/dist/alert.js.map +1 -0
  14. package/dist/burn-rate.d.ts +4 -0
  15. package/dist/burn-rate.d.ts.map +1 -0
  16. package/dist/burn-rate.js +36 -0
  17. package/dist/burn-rate.js.map +1 -0
  18. package/dist/cache.d.ts +6 -0
  19. package/dist/cache.d.ts.map +1 -0
  20. package/dist/cache.js +47 -0
  21. package/dist/cache.js.map +1 -0
  22. package/dist/claude-config-dir.d.ts +4 -0
  23. package/dist/claude-config-dir.d.ts.map +1 -0
  24. package/dist/claude-config-dir.js +24 -0
  25. package/dist/claude-config-dir.js.map +1 -0
  26. package/dist/config-io.d.ts +6 -0
  27. package/dist/config-io.d.ts.map +1 -0
  28. package/dist/config-io.js +27 -0
  29. package/dist/config-io.js.map +1 -0
  30. package/dist/config-reader.d.ts +8 -0
  31. package/dist/config-reader.d.ts.map +1 -0
  32. package/dist/config-reader.js +204 -0
  33. package/dist/config-reader.js.map +1 -0
  34. package/dist/config.d.ts +94 -0
  35. package/dist/config.d.ts.map +1 -0
  36. package/dist/config.js +358 -0
  37. package/dist/config.js.map +1 -0
  38. package/dist/constants.d.ts +11 -0
  39. package/dist/constants.d.ts.map +1 -0
  40. package/dist/constants.js +11 -0
  41. package/dist/constants.js.map +1 -0
  42. package/dist/cost-tracker.d.ts +9 -0
  43. package/dist/cost-tracker.d.ts.map +1 -0
  44. package/dist/cost-tracker.js +46 -0
  45. package/dist/cost-tracker.js.map +1 -0
  46. package/dist/debug.d.ts +6 -0
  47. package/dist/debug.d.ts.map +1 -0
  48. package/dist/debug.js +15 -0
  49. package/dist/debug.js.map +1 -0
  50. package/dist/extra-cmd.d.ts +20 -0
  51. package/dist/extra-cmd.d.ts.map +1 -0
  52. package/dist/extra-cmd.js +112 -0
  53. package/dist/extra-cmd.js.map +1 -0
  54. package/dist/git.d.ts +16 -0
  55. package/dist/git.d.ts.map +1 -0
  56. package/dist/git.js +94 -0
  57. package/dist/git.js.map +1 -0
  58. package/dist/health-check.d.ts +12 -0
  59. package/dist/health-check.d.ts.map +1 -0
  60. package/dist/health-check.js +37 -0
  61. package/dist/health-check.js.map +1 -0
  62. package/dist/index.d.ts +24 -0
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +198 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/providers/agent-teams-provider.d.ts +10 -0
  67. package/dist/providers/agent-teams-provider.d.ts.map +1 -0
  68. package/dist/providers/agent-teams-provider.js +57 -0
  69. package/dist/providers/agent-teams-provider.js.map +1 -0
  70. package/dist/providers/agw-provider.d.ts +10 -0
  71. package/dist/providers/agw-provider.d.ts.map +1 -0
  72. package/dist/providers/agw-provider.js +49 -0
  73. package/dist/providers/agw-provider.js.map +1 -0
  74. package/dist/providers/index.d.ts +14 -0
  75. package/dist/providers/index.d.ts.map +1 -0
  76. package/dist/providers/index.js +25 -0
  77. package/dist/providers/index.js.map +1 -0
  78. package/dist/render/agents-line.d.ts +3 -0
  79. package/dist/render/agents-line.d.ts.map +1 -0
  80. package/dist/render/agents-line.js +40 -0
  81. package/dist/render/agents-line.js.map +1 -0
  82. package/dist/render/alert-line.d.ts +3 -0
  83. package/dist/render/alert-line.d.ts.map +1 -0
  84. package/dist/render/alert-line.js +11 -0
  85. package/dist/render/alert-line.js.map +1 -0
  86. package/dist/render/colors.d.ts +39 -0
  87. package/dist/render/colors.d.ts.map +1 -0
  88. package/dist/render/colors.js +109 -0
  89. package/dist/render/colors.js.map +1 -0
  90. package/dist/render/framework-line.d.ts +3 -0
  91. package/dist/render/framework-line.d.ts.map +1 -0
  92. package/dist/render/framework-line.js +32 -0
  93. package/dist/render/framework-line.js.map +1 -0
  94. package/dist/render/index.d.ts +3 -0
  95. package/dist/render/index.d.ts.map +1 -0
  96. package/dist/render/index.js +435 -0
  97. package/dist/render/index.js.map +1 -0
  98. package/dist/render/lines/environment.d.ts +3 -0
  99. package/dist/render/lines/environment.d.ts.map +1 -0
  100. package/dist/render/lines/environment.js +30 -0
  101. package/dist/render/lines/environment.js.map +1 -0
  102. package/dist/render/lines/identity.d.ts +3 -0
  103. package/dist/render/lines/identity.d.ts.map +1 -0
  104. package/dist/render/lines/identity.js +93 -0
  105. package/dist/render/lines/identity.js.map +1 -0
  106. package/dist/render/lines/index.d.ts +5 -0
  107. package/dist/render/lines/index.d.ts.map +1 -0
  108. package/dist/render/lines/index.js +5 -0
  109. package/dist/render/lines/index.js.map +1 -0
  110. package/dist/render/lines/project.d.ts +3 -0
  111. package/dist/render/lines/project.d.ts.map +1 -0
  112. package/dist/render/lines/project.js +100 -0
  113. package/dist/render/lines/project.js.map +1 -0
  114. package/dist/render/lines/usage.d.ts +3 -0
  115. package/dist/render/lines/usage.d.ts.map +1 -0
  116. package/dist/render/lines/usage.js +65 -0
  117. package/dist/render/lines/usage.js.map +1 -0
  118. package/dist/render/session-line.d.ts +7 -0
  119. package/dist/render/session-line.d.ts.map +1 -0
  120. package/dist/render/session-line.js +227 -0
  121. package/dist/render/session-line.js.map +1 -0
  122. package/dist/render/todos-line.d.ts +3 -0
  123. package/dist/render/todos-line.d.ts.map +1 -0
  124. package/dist/render/todos-line.js +29 -0
  125. package/dist/render/todos-line.js.map +1 -0
  126. package/dist/render/tools-line.d.ts +3 -0
  127. package/dist/render/tools-line.d.ts.map +1 -0
  128. package/dist/render/tools-line.js +45 -0
  129. package/dist/render/tools-line.js.map +1 -0
  130. package/dist/session-history.d.ts +15 -0
  131. package/dist/session-history.d.ts.map +1 -0
  132. package/dist/session-history.js +46 -0
  133. package/dist/session-history.js.map +1 -0
  134. package/dist/session-stats.d.ts +11 -0
  135. package/dist/session-stats.d.ts.map +1 -0
  136. package/dist/session-stats.js +48 -0
  137. package/dist/session-stats.js.map +1 -0
  138. package/dist/speed-tracker.d.ts +7 -0
  139. package/dist/speed-tracker.d.ts.map +1 -0
  140. package/dist/speed-tracker.js +34 -0
  141. package/dist/speed-tracker.js.map +1 -0
  142. package/dist/stdin.d.ts +9 -0
  143. package/dist/stdin.d.ts.map +1 -0
  144. package/dist/stdin.js +142 -0
  145. package/dist/stdin.js.map +1 -0
  146. package/dist/themes.d.ts +10 -0
  147. package/dist/themes.d.ts.map +1 -0
  148. package/dist/themes.js +81 -0
  149. package/dist/themes.js.map +1 -0
  150. package/dist/transcript.d.ts +3 -0
  151. package/dist/transcript.d.ts.map +1 -0
  152. package/dist/transcript.js +221 -0
  153. package/dist/transcript.js.map +1 -0
  154. package/dist/types.d.ts +124 -0
  155. package/dist/types.d.ts.map +1 -0
  156. package/dist/types.js +5 -0
  157. package/dist/types.js.map +1 -0
  158. package/dist/usage-api.d.ts +62 -0
  159. package/dist/usage-api.d.ts.map +1 -0
  160. package/dist/usage-api.js +908 -0
  161. package/dist/usage-api.js.map +1 -0
  162. package/dist/utils/format.d.ts +9 -0
  163. package/dist/utils/format.d.ts.map +1 -0
  164. package/dist/utils/format.js +75 -0
  165. package/dist/utils/format.js.map +1 -0
  166. package/dist/utils/terminal.d.ts +5 -0
  167. package/dist/utils/terminal.d.ts.map +1 -0
  168. package/dist/utils/terminal.js +42 -0
  169. package/dist/utils/terminal.js.map +1 -0
  170. package/package.json +36 -0
  171. package/src/alert.ts +75 -0
  172. package/src/burn-rate.ts +45 -0
  173. package/src/cache.ts +57 -0
  174. package/src/claude-config-dir.ts +27 -0
  175. package/src/config-io.ts +26 -0
  176. package/src/config-reader.ts +236 -0
  177. package/src/config.ts +496 -0
  178. package/src/constants.ts +10 -0
  179. package/src/cost-tracker.ts +53 -0
  180. package/src/debug.ts +16 -0
  181. package/src/extra-cmd.ts +125 -0
  182. package/src/git.ts +126 -0
  183. package/src/health-check.ts +50 -0
  184. package/src/index.ts +234 -0
  185. package/src/providers/agent-teams-provider.ts +56 -0
  186. package/src/providers/agw-provider.ts +47 -0
  187. package/src/providers/index.ts +27 -0
  188. package/src/render/agents-line.ts +51 -0
  189. package/src/render/alert-line.ts +11 -0
  190. package/src/render/colors.ts +145 -0
  191. package/src/render/framework-line.ts +34 -0
  192. package/src/render/index.ts +512 -0
  193. package/src/render/lines/environment.ts +41 -0
  194. package/src/render/lines/identity.ts +109 -0
  195. package/src/render/lines/index.ts +4 -0
  196. package/src/render/lines/project.ts +113 -0
  197. package/src/render/lines/usage.ts +79 -0
  198. package/src/render/session-line.ts +253 -0
  199. package/src/render/todos-line.ts +35 -0
  200. package/src/render/tools-line.ts +58 -0
  201. package/src/session-history.ts +62 -0
  202. package/src/session-stats.ts +65 -0
  203. package/src/speed-tracker.ts +51 -0
  204. package/src/stdin.ts +169 -0
  205. package/src/themes.ts +90 -0
  206. package/src/transcript.ts +268 -0
  207. package/src/types.ts +146 -0
  208. package/src/usage-api.ts +1090 -0
  209. package/src/utils/format.ts +79 -0
  210. package/src/utils/terminal.ts +46 -0
@@ -0,0 +1,3 @@
1
+ import type { RenderContext } from '../types.js';
2
+ export declare function renderToolsLine(ctx: RenderContext): string | null;
3
+ //# sourceMappingURL=tools-line.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-line.d.ts","sourceRoot":"","sources":["../../src/render/tools-line.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAoDjE"}
@@ -0,0 +1,45 @@
1
+ import { yellow, green, cyan, dim, magenta, red } from './colors.js';
2
+ import { truncatePath } from '../utils/format.js';
3
+ export function renderToolsLine(ctx) {
4
+ const { tools } = ctx.transcript;
5
+ if (tools.length === 0) {
6
+ return null;
7
+ }
8
+ const parts = [];
9
+ const runningTools = tools.filter((t) => t.status === 'running');
10
+ const completedTools = tools.filter((t) => t.status === 'completed' || t.status === 'error');
11
+ for (const tool of runningTools.slice(-2)) {
12
+ const target = tool.target ? truncatePath(tool.target.replace(/\\/g, '/')) : '';
13
+ parts.push(`${yellow('◐')} ${cyan(tool.name)}${target ? dim(`: ${target}`) : ''}`);
14
+ }
15
+ const toolCounts = new Map();
16
+ for (const tool of completedTools) {
17
+ const count = toolCounts.get(tool.name) ?? 0;
18
+ toolCounts.set(tool.name, count + 1);
19
+ }
20
+ const sortedTools = Array.from(toolCounts.entries())
21
+ .sort((a, b) => b[1] - a[1])
22
+ .slice(0, 4);
23
+ for (const [name, count] of sortedTools) {
24
+ parts.push(`${green('✓')} ${name} ${dim(`×${count}`)}`);
25
+ }
26
+ // Show error count if any tools failed
27
+ const errorCount = ctx.transcript.tools.filter(t => t.status === 'error').length;
28
+ if (errorCount > 0) {
29
+ parts.push(`${red('✘')} ${errorCount} err`);
30
+ }
31
+ if (ctx.config.display.mergeToolsAgents && ctx.transcript.agents.length > 0) {
32
+ const recentAgents = ctx.transcript.agents.slice(-2);
33
+ for (const agent of recentAgents) {
34
+ const icon = agent.status === 'running' ? magenta('◐') : green('✓');
35
+ const model = agent.model ? dim(`[${agent.model}]`) : '';
36
+ const desc = agent.description ? dim(`: ${agent.description.slice(0, 30)}`) : '';
37
+ parts.push(`${icon} ${agent.type || 'agent'}${model}${desc}`);
38
+ }
39
+ }
40
+ if (parts.length === 0) {
41
+ return null;
42
+ }
43
+ return parts.join(' | ');
44
+ }
45
+ //# sourceMappingURL=tools-line.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-line.js","sourceRoot":"","sources":["../../src/render/tools-line.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface SessionRecord {
2
+ startTime: string;
3
+ endTime: string;
4
+ duration: string;
5
+ model: string;
6
+ peakContextPercent: number;
7
+ autocompactCount: number;
8
+ totalToolCalls: number;
9
+ totalAgentRuns: number;
10
+ }
11
+ export declare function loadHistory(): SessionRecord[];
12
+ export declare function saveCurrentSession(record: Omit<SessionRecord, 'endTime'>): void;
13
+ export declare function getLastSession(): SessionRecord | null;
14
+ export declare function formatSessionSummary(record: SessionRecord): string;
15
+ //# sourceMappingURL=session-history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-history.d.ts","sourceRoot":"","sources":["../src/session-history.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAOD,wBAAgB,WAAW,IAAI,aAAa,EAAE,CAQ7C;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,GAAG,IAAI,CAoB/E;AAED,wBAAgB,cAAc,IAAI,aAAa,GAAG,IAAI,CAIrD;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAElE"}
@@ -0,0 +1,46 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ const DEBUG = process.env.DEBUG?.includes('claude-hud') || process.env.DEBUG === '*';
4
+ function getHistoryPath() {
5
+ const configDir = process.env.CLAUDE_CONFIG_DIR || path.join(process.env.HOME || '', '.claude');
6
+ return path.join(configDir, 'plugins', 'claude-hud', 'session-history.json');
7
+ }
8
+ export function loadHistory() {
9
+ try {
10
+ const data = fs.readFileSync(getHistoryPath(), 'utf-8');
11
+ return JSON.parse(data);
12
+ }
13
+ catch (err) {
14
+ if (DEBUG)
15
+ console.error('[claude-hud:session-history] file read error:', err);
16
+ return [];
17
+ }
18
+ }
19
+ export function saveCurrentSession(record) {
20
+ const history = loadHistory();
21
+ const now = new Date().toISOString();
22
+ // Check if this is an update to the current session (same startTime)
23
+ const existingIdx = history.findIndex(r => r.startTime === record.startTime);
24
+ const fullRecord = { ...record, endTime: now };
25
+ if (existingIdx >= 0) {
26
+ history[existingIdx] = fullRecord;
27
+ }
28
+ else {
29
+ history.push(fullRecord);
30
+ }
31
+ // Keep last 50 sessions
32
+ while (history.length > 50)
33
+ history.shift();
34
+ const dir = path.dirname(getHistoryPath());
35
+ fs.mkdirSync(dir, { recursive: true });
36
+ fs.writeFileSync(getHistoryPath(), JSON.stringify(history, null, 2));
37
+ }
38
+ export function getLastSession() {
39
+ const history = loadHistory();
40
+ // Return the second-to-last (last completed session, not current)
41
+ return history.length >= 2 ? history[history.length - 2] : null;
42
+ }
43
+ export function formatSessionSummary(record) {
44
+ return `Last: ${record.model} ${record.duration} | ${record.peakContextPercent}% peak | ${record.totalToolCalls} tools | ${record.autocompactCount} compacts`;
45
+ }
46
+ //# sourceMappingURL=session-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-history.js","sourceRoot":"","sources":["../src/session-history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC;AAarF,SAAS,cAAc;IACrB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;IAChG,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,sBAAsB,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE,OAAO,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,KAAK;YAAE,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,GAAG,CAAC,CAAC;QAC/E,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAsC;IACvE,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,qEAAqE;IACrE,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7E,MAAM,UAAU,GAAkB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAE9D,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,WAAW,CAAC,GAAG,UAAU,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3B,CAAC;IAED,wBAAwB;IACxB,OAAO,OAAO,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,CAAC,KAAK,EAAE,CAAC;IAE5C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC3C,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,EAAE,CAAC,aAAa,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,kEAAkE;IAClE,OAAO,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAqB;IACxD,OAAO,SAAS,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,MAAM,MAAM,CAAC,kBAAkB,YAAY,MAAM,CAAC,cAAc,YAAY,MAAM,CAAC,gBAAgB,WAAW,CAAC;AAChK,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { SessionStats } from './types.js';
2
+ interface UpdateInput {
3
+ contextPercent: number;
4
+ toolCount: number;
5
+ agentCount: number;
6
+ }
7
+ export declare function getSparkline(cacheDir: string): number[];
8
+ export declare function getSessionStats(cacheDir: string): SessionStats;
9
+ export declare function updateSessionStats(cacheDir: string, input: UpdateInput): void;
10
+ export {};
11
+ //# sourceMappingURL=session-stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-stats.d.ts","sourceRoot":"","sources":["../src/session-stats.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAa/C,UAAU,WAAW;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAEvD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,CAQ9D;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CA8B7E"}
@@ -0,0 +1,48 @@
1
+ import { readCache, writeCache } from './cache.js';
2
+ const CACHE_KEY = 'session-stats';
3
+ const HISTORY_KEY = 'context-history';
4
+ const SPARKLINE_KEY = 'context-sparkline';
5
+ const TTL = 24 * 60 * 60 * 1000;
6
+ const DROP_THRESHOLD = 20;
7
+ const SPARKLINE_MAX = 20;
8
+ export function getSparkline(cacheDir) {
9
+ return readCache(SPARKLINE_KEY, TTL, cacheDir) ?? [];
10
+ }
11
+ export function getSessionStats(cacheDir) {
12
+ const cached = readCache(CACHE_KEY, TTL, cacheDir);
13
+ return cached ?? {
14
+ totalToolCalls: 0,
15
+ totalAgentRuns: 0,
16
+ peakContextPercent: 0,
17
+ autocompactCount: 0,
18
+ };
19
+ }
20
+ export function updateSessionStats(cacheDir, input) {
21
+ const stats = getSessionStats(cacheDir);
22
+ const history = readCache(HISTORY_KEY, TTL, cacheDir) ?? { values: [] };
23
+ stats.totalToolCalls = input.toolCount;
24
+ stats.totalAgentRuns = input.agentCount;
25
+ if (input.contextPercent > stats.peakContextPercent) {
26
+ stats.peakContextPercent = input.contextPercent;
27
+ }
28
+ history.values.push(input.contextPercent);
29
+ if (history.values.length > 3)
30
+ history.values.shift();
31
+ if (history.values.length >= 3) {
32
+ const [prev2, prev1, current] = history.values.slice(-3);
33
+ const dropFromPrev2 = prev2 - prev1;
34
+ const sustainedDrop = prev2 - current;
35
+ if (dropFromPrev2 > DROP_THRESHOLD && sustainedDrop > DROP_THRESHOLD) {
36
+ stats.autocompactCount++;
37
+ history.values = [current];
38
+ }
39
+ }
40
+ const sparkline = readCache(SPARKLINE_KEY, TTL, cacheDir) ?? [];
41
+ sparkline.push(input.contextPercent);
42
+ if (sparkline.length > SPARKLINE_MAX)
43
+ sparkline.shift();
44
+ writeCache(SPARKLINE_KEY, sparkline, cacheDir);
45
+ writeCache(CACHE_KEY, stats, cacheDir);
46
+ writeCache(HISTORY_KEY, history, cacheDir);
47
+ }
48
+ //# sourceMappingURL=session-stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-stats.js","sourceRoot":"","sources":["../src/session-stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGnD,MAAM,SAAS,GAAG,eAAe,CAAC;AAClC,MAAM,WAAW,GAAG,iBAAiB,CAAC;AACtC,MAAM,aAAa,GAAG,mBAAmB,CAAC;AAC1C,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAChC,MAAM,cAAc,GAAG,EAAE,CAAC;AAC1B,MAAM,aAAa,GAAG,EAAE,CAAC;AAYzB,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,OAAO,SAAS,CAAW,aAAa,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,MAAM,MAAM,GAAG,SAAS,CAAe,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IACjE,OAAO,MAAM,IAAI;QACf,cAAc,EAAE,CAAC;QACjB,cAAc,EAAE,CAAC;QACjB,kBAAkB,EAAE,CAAC;QACrB,gBAAgB,EAAE,CAAC;KACpB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAgB,EAAE,KAAkB;IACrE,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,SAAS,CAAiB,WAAW,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAExF,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC;IACvC,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC;IACxC,IAAI,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAAC;QACpD,KAAK,CAAC,kBAAkB,GAAG,KAAK,CAAC,cAAc,CAAC;IAClD,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC1C,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAEtD,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,MAAM,aAAa,GAAG,KAAK,GAAG,KAAK,CAAC;QACpC,MAAM,aAAa,GAAG,KAAK,GAAG,OAAO,CAAC;QACtC,IAAI,aAAa,GAAG,cAAc,IAAI,aAAa,GAAG,cAAc,EAAE,CAAC;YACrE,KAAK,CAAC,gBAAgB,EAAE,CAAC;YACzB,OAAO,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,SAAS,CAAW,aAAa,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC1E,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACrC,IAAI,SAAS,CAAC,MAAM,GAAG,aAAa;QAAE,SAAS,CAAC,KAAK,EAAE,CAAC;IACxD,UAAU,CAAC,aAAa,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAE/C,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACvC,UAAU,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { StdinData } from './types.js';
2
+ export type SpeedTrackerDeps = {
3
+ homeDir: () => string;
4
+ now: () => number;
5
+ };
6
+ export declare function getOutputSpeed(stdin: StdinData, overrides?: Partial<SpeedTrackerDeps>): number | null;
7
+ //# sourceMappingURL=speed-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speed-tracker.d.ts","sourceRoot":"","sources":["../src/speed-tracker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAY5C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,MAAM,CAAC;CACnB,CAAC;AAWF,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,GAAE,OAAO,CAAC,gBAAgB,CAAM,GAAG,MAAM,GAAG,IAAI,CAsBzG"}
@@ -0,0 +1,34 @@
1
+ import * as os from 'node:os';
2
+ import * as path from 'node:path';
3
+ import { readCache, writeCache } from './cache.js';
4
+ import { getHudPluginDir } from './claude-config-dir.js';
5
+ const SPEED_WINDOW_MS = 2000;
6
+ const SPEED_CACHE_KEY = 'speed-tracker';
7
+ const defaultDeps = {
8
+ homeDir: () => os.homedir(),
9
+ now: () => Date.now(),
10
+ };
11
+ function getCacheDir(homeDir) {
12
+ return path.join(getHudPluginDir(homeDir), '.cache');
13
+ }
14
+ export function getOutputSpeed(stdin, overrides = {}) {
15
+ const outputTokens = stdin.context_window?.current_usage?.output_tokens;
16
+ if (typeof outputTokens !== 'number' || !Number.isFinite(outputTokens)) {
17
+ return null;
18
+ }
19
+ const deps = { ...defaultDeps, ...overrides };
20
+ const now = deps.now();
21
+ const cacheDir = getCacheDir(deps.homeDir());
22
+ const previous = readCache(SPEED_CACHE_KEY, 5000, cacheDir);
23
+ let speed = null;
24
+ if (previous && outputTokens >= previous.outputTokens) {
25
+ const deltaTokens = outputTokens - previous.outputTokens;
26
+ const deltaMs = now - previous.timestamp;
27
+ if (deltaTokens > 0 && deltaMs > 0 && deltaMs <= SPEED_WINDOW_MS) {
28
+ speed = deltaTokens / (deltaMs / 1000);
29
+ }
30
+ }
31
+ writeCache(SPEED_CACHE_KEY, { outputTokens, timestamp: now }, cacheDir);
32
+ return speed;
33
+ }
34
+ //# sourceMappingURL=speed-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speed-tracker.js","sourceRoot":"","sources":["../src/speed-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,eAAe,GAAG,IAAI,CAAC;AAC7B,MAAM,eAAe,GAAG,eAAe,CAAC;AAYxC,MAAM,WAAW,GAAqB;IACpC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE;IAC3B,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;CACtB,CAAC;AAEF,SAAS,WAAW,CAAC,OAAe;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAgB,EAAE,YAAuC,EAAE;IACxF,MAAM,YAAY,GAAG,KAAK,CAAC,cAAc,EAAE,aAAa,EAAE,aAAa,CAAC;IACxE,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACvE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,EAAE,GAAG,WAAW,EAAE,GAAG,SAAS,EAAE,CAAC;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,SAAS,CAAa,eAAe,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAExE,IAAI,KAAK,GAAkB,IAAI,CAAC;IAChC,IAAI,QAAQ,IAAI,YAAY,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;QACtD,MAAM,WAAW,GAAG,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;QACzD,MAAM,OAAO,GAAG,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC;QACzC,IAAI,WAAW,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,IAAI,eAAe,EAAE,CAAC;YACjE,KAAK,GAAG,WAAW,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,UAAU,CAAa,eAAe,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;IACpF,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { StdinData } from './types.js';
2
+ export declare function readStdin(): Promise<StdinData | null>;
3
+ export declare function getTotalTokens(stdin: StdinData): number;
4
+ export declare function getContextPercent(stdin: StdinData): number;
5
+ export declare function getBufferedPercent(stdin: StdinData): number;
6
+ export declare function getModelName(stdin: StdinData): string;
7
+ export declare function isBedrockModelId(modelId?: string): boolean;
8
+ export declare function getProviderLabel(stdin: StdinData): string | null;
9
+ //# sourceMappingURL=stdin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdin.d.ts","sourceRoot":"","sources":["../src/stdin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,wBAAsB,SAAS,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAoB3D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAOvD;AAcD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAe1D;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAyB3D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAarD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAM1D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAKhE"}
package/dist/stdin.js ADDED
@@ -0,0 +1,142 @@
1
+ import { AUTOCOMPACT_BUFFER_PERCENT } from './constants.js';
2
+ export async function readStdin() {
3
+ if (process.stdin.isTTY) {
4
+ return null;
5
+ }
6
+ const chunks = [];
7
+ try {
8
+ process.stdin.setEncoding('utf8');
9
+ for await (const chunk of process.stdin) {
10
+ chunks.push(chunk);
11
+ }
12
+ const raw = chunks.join('');
13
+ if (!raw.trim()) {
14
+ return null;
15
+ }
16
+ return JSON.parse(raw);
17
+ }
18
+ catch {
19
+ return null;
20
+ }
21
+ }
22
+ export function getTotalTokens(stdin) {
23
+ const usage = stdin.context_window?.current_usage;
24
+ return ((usage?.input_tokens ?? 0) +
25
+ (usage?.cache_creation_input_tokens ?? 0) +
26
+ (usage?.cache_read_input_tokens ?? 0));
27
+ }
28
+ /**
29
+ * Get native percentage from Claude Code v2.1.6+ if available.
30
+ * Returns null if not available or invalid, triggering fallback to manual calculation.
31
+ */
32
+ function getNativePercent(stdin) {
33
+ const nativePercent = stdin.context_window?.used_percentage;
34
+ if (typeof nativePercent === 'number' && !Number.isNaN(nativePercent)) {
35
+ return Math.min(100, Math.max(0, Math.round(nativePercent)));
36
+ }
37
+ return null;
38
+ }
39
+ export function getContextPercent(stdin) {
40
+ // Prefer native percentage (v2.1.6+) - accurate and matches /context
41
+ const native = getNativePercent(stdin);
42
+ if (native !== null) {
43
+ return native;
44
+ }
45
+ // Fallback: manual calculation without buffer
46
+ const size = stdin.context_window?.context_window_size;
47
+ if (!size || size <= 0) {
48
+ return 0;
49
+ }
50
+ const totalTokens = getTotalTokens(stdin);
51
+ return Math.min(100, Math.round((totalTokens / size) * 100));
52
+ }
53
+ export function getBufferedPercent(stdin) {
54
+ // Prefer native percentage (v2.1.6+) so the HUD matches Claude Code's
55
+ // own context output. The buffered fallback only approximates older versions.
56
+ const native = getNativePercent(stdin);
57
+ if (native !== null) {
58
+ return native;
59
+ }
60
+ // Fallback: manual calculation with buffer for older Claude Code versions
61
+ const size = stdin.context_window?.context_window_size;
62
+ if (!size || size <= 0) {
63
+ return 0;
64
+ }
65
+ const totalTokens = getTotalTokens(stdin);
66
+ // Scale buffer by raw usage: no buffer at ≤5% (e.g. after /clear),
67
+ // full buffer at ≥50%. Autocompact doesn't kick in at very low usage.
68
+ const rawRatio = totalTokens / size;
69
+ const LOW = 0.05;
70
+ const HIGH = 0.50;
71
+ const scale = Math.min(1, Math.max(0, (rawRatio - LOW) / (HIGH - LOW)));
72
+ const buffer = size * AUTOCOMPACT_BUFFER_PERCENT * scale;
73
+ return Math.min(100, Math.round(((totalTokens + buffer) / size) * 100));
74
+ }
75
+ export function getModelName(stdin) {
76
+ const displayName = stdin.model?.display_name?.trim();
77
+ if (displayName) {
78
+ return displayName;
79
+ }
80
+ const modelId = stdin.model?.id?.trim();
81
+ if (!modelId) {
82
+ return 'Unknown';
83
+ }
84
+ const normalizedBedrockLabel = normalizeBedrockModelLabel(modelId);
85
+ return normalizedBedrockLabel ?? modelId;
86
+ }
87
+ export function isBedrockModelId(modelId) {
88
+ if (!modelId) {
89
+ return false;
90
+ }
91
+ const normalized = modelId.toLowerCase();
92
+ return normalized.includes('anthropic.claude-');
93
+ }
94
+ export function getProviderLabel(stdin) {
95
+ if (isBedrockModelId(stdin.model?.id)) {
96
+ return 'Bedrock';
97
+ }
98
+ return null;
99
+ }
100
+ function normalizeBedrockModelLabel(modelId) {
101
+ if (!isBedrockModelId(modelId)) {
102
+ return null;
103
+ }
104
+ const lowercaseId = modelId.toLowerCase();
105
+ const claudePrefix = 'anthropic.claude-';
106
+ const claudeIndex = lowercaseId.indexOf(claudePrefix);
107
+ if (claudeIndex === -1) {
108
+ return null;
109
+ }
110
+ let suffix = lowercaseId.slice(claudeIndex + claudePrefix.length);
111
+ suffix = suffix.replace(/-v\d+:\d+$/, '');
112
+ suffix = suffix.replace(/-\d{8}$/, '');
113
+ const tokens = suffix.split('-').filter(Boolean);
114
+ if (tokens.length === 0) {
115
+ return null;
116
+ }
117
+ const familyIndex = tokens.findIndex((token) => token === 'haiku' || token === 'sonnet' || token === 'opus');
118
+ if (familyIndex === -1) {
119
+ return null;
120
+ }
121
+ const family = tokens[familyIndex];
122
+ const beforeVersion = readNumericVersion(tokens, familyIndex - 1, -1).reverse();
123
+ const afterVersion = readNumericVersion(tokens, familyIndex + 1, 1);
124
+ const versionParts = beforeVersion.length >= afterVersion.length ? beforeVersion : afterVersion;
125
+ const version = versionParts.length ? versionParts.join('.') : null;
126
+ const familyLabel = family[0].toUpperCase() + family.slice(1);
127
+ return version ? `Claude ${familyLabel} ${version}` : `Claude ${familyLabel}`;
128
+ }
129
+ function readNumericVersion(tokens, startIndex, step) {
130
+ const parts = [];
131
+ for (let i = startIndex; i >= 0 && i < tokens.length; i += step) {
132
+ if (!/^\d+$/.test(tokens[i])) {
133
+ break;
134
+ }
135
+ parts.push(tokens[i]);
136
+ if (parts.length === 2) {
137
+ break;
138
+ }
139
+ }
140
+ return parts;
141
+ }
142
+ //# sourceMappingURL=stdin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdin.js","sourceRoot":"","sources":["../src/stdin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { HudColorOverrides } from './config.js';
2
+ export interface ColorTheme {
3
+ name: string;
4
+ colors: HudColorOverrides;
5
+ }
6
+ export declare const THEMES: Record<string, ColorTheme>;
7
+ export declare function getTheme(name: string): ColorTheme | undefined;
8
+ export declare function getThemeNames(): string[];
9
+ export declare function detectTerminalTheme(): 'dark' | 'light' | null;
10
+ //# sourceMappingURL=themes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../src/themes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CA6D7C,CAAC;AAEF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAE7D;AAED,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAExC;AAED,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,OAAO,GAAG,IAAI,CAW7D"}
package/dist/themes.js ADDED
@@ -0,0 +1,81 @@
1
+ export const THEMES = {
2
+ default: {
3
+ name: 'Default',
4
+ colors: {
5
+ context: 'green',
6
+ usage: 'brightBlue',
7
+ warning: 'yellow',
8
+ usageWarning: 'brightMagenta',
9
+ critical: 'red',
10
+ },
11
+ },
12
+ catppuccin: {
13
+ name: 'Catppuccin Mocha',
14
+ colors: {
15
+ context: '#a6e3a1', // green
16
+ usage: '#89b4fa', // blue
17
+ warning: '#f9e2af', // yellow
18
+ usageWarning: '#cba6f7', // mauve
19
+ critical: '#f38ba8', // red
20
+ },
21
+ },
22
+ dracula: {
23
+ name: 'Dracula',
24
+ colors: {
25
+ context: '#50fa7b', // green
26
+ usage: '#8be9fd', // cyan
27
+ warning: '#f1fa8c', // yellow
28
+ usageWarning: '#bd93f9', // purple
29
+ critical: '#ff5555', // red
30
+ },
31
+ },
32
+ nord: {
33
+ name: 'Nord',
34
+ colors: {
35
+ context: '#a3be8c', // green
36
+ usage: '#81a1c1', // blue
37
+ warning: '#ebcb8b', // yellow
38
+ usageWarning: '#b48ead', // purple
39
+ critical: '#bf616a', // red
40
+ },
41
+ },
42
+ catppuccin_latte: {
43
+ name: 'Catppuccin Latte',
44
+ colors: {
45
+ context: '#40a02b', // green
46
+ usage: '#1e66f5', // blue
47
+ warning: '#df8e1d', // yellow
48
+ usageWarning: '#8839ef', // mauve
49
+ critical: '#d20f39', // red
50
+ },
51
+ },
52
+ nord_light: {
53
+ name: 'Nord Light',
54
+ colors: {
55
+ context: '#a3be8c', // green (same as dark)
56
+ usage: '#5e81ac', // blue
57
+ warning: '#ebcb8b', // yellow (same as dark)
58
+ usageWarning: '#b48ead', // purple (same as dark)
59
+ critical: '#bf616a', // red (same as dark)
60
+ },
61
+ },
62
+ };
63
+ export function getTheme(name) {
64
+ return THEMES[name.toLowerCase()];
65
+ }
66
+ export function getThemeNames() {
67
+ return Object.keys(THEMES);
68
+ }
69
+ export function detectTerminalTheme() {
70
+ // COLORFGBG format: "foreground;background" (e.g., "15;0" = white on black = dark)
71
+ const colorfgbg = process.env.COLORFGBG;
72
+ if (!colorfgbg)
73
+ return null;
74
+ const parts = colorfgbg.split(';');
75
+ const bg = parseInt(parts[parts.length - 1], 10);
76
+ if (isNaN(bg))
77
+ return null;
78
+ // Low background color = dark theme, high = light theme
79
+ return bg < 8 ? 'dark' : 'light';
80
+ }
81
+ //# sourceMappingURL=themes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themes.js","sourceRoot":"","sources":["../src/themes.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,MAAM,GAA+B;IAChD,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,MAAM,EAAE;YACN,OAAO,EAAE,OAAO;YAChB,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE,QAAQ;YACjB,YAAY,EAAE,eAAe;YAC7B,QAAQ,EAAE,KAAK;SAChB;KACF;IACD,UAAU,EAAE;QACV,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE;YACN,OAAO,EAAE,SAAS,EAAO,QAAQ;YACjC,KAAK,EAAE,SAAS,EAAS,OAAO;YAChC,OAAO,EAAE,SAAS,EAAO,SAAS;YAClC,YAAY,EAAE,SAAS,EAAE,QAAQ;YACjC,QAAQ,EAAE,SAAS,EAAM,MAAM;SAChC;KACF;IACD,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,MAAM,EAAE;YACN,OAAO,EAAE,SAAS,EAAO,QAAQ;YACjC,KAAK,EAAE,SAAS,EAAS,OAAO;YAChC,OAAO,EAAE,SAAS,EAAO,SAAS;YAClC,YAAY,EAAE,SAAS,EAAE,SAAS;YAClC,QAAQ,EAAE,SAAS,EAAM,MAAM;SAChC;KACF;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE;YACN,OAAO,EAAE,SAAS,EAAO,QAAQ;YACjC,KAAK,EAAE,SAAS,EAAS,OAAO;YAChC,OAAO,EAAE,SAAS,EAAO,SAAS;YAClC,YAAY,EAAE,SAAS,EAAE,SAAS;YAClC,QAAQ,EAAE,SAAS,EAAM,MAAM;SAChC;KACF;IACD,gBAAgB,EAAE;QAChB,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE;YACN,OAAO,EAAE,SAAS,EAAO,QAAQ;YACjC,KAAK,EAAE,SAAS,EAAS,OAAO;YAChC,OAAO,EAAE,SAAS,EAAO,SAAS;YAClC,YAAY,EAAE,SAAS,EAAE,QAAQ;YACjC,QAAQ,EAAE,SAAS,EAAM,MAAM;SAChC;KACF;IACD,UAAU,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE;YACN,OAAO,EAAE,SAAS,EAAO,uBAAuB;YAChD,KAAK,EAAE,SAAS,EAAS,OAAO;YAChC,OAAO,EAAE,SAAS,EAAO,wBAAwB;YACjD,YAAY,EAAE,SAAS,EAAE,wBAAwB;YACjD,QAAQ,EAAE,SAAS,EAAM,qBAAqB;SAC/C;KACF;CACF,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,mFAAmF;IACnF,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IACxC,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACjD,IAAI,KAAK,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3B,wDAAwD;IACxD,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AACnC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { TranscriptData } from './types.js';
2
+ export declare function parseTranscript(transcriptPath: string): Promise<TranscriptData>;
3
+ //# sourceMappingURL=transcript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../src/transcript.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAmC,MAAM,YAAY,CAAC;AAwClF,wBAAsB,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAmErF"}