@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 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Autocompact buffer percentage.
3
+ *
4
+ * NOTE: This value is applied as a percentage of Claude Code's reported
5
+ * context window size. The `33k/200k` example is just the 200k-window case.
6
+ * It is empirically derived from current Claude Code `/context` output, is
7
+ * not officially documented by Anthropic, and may need adjustment if users
8
+ * report mismatches in future Claude Code versions.
9
+ */
10
+ export declare const AUTOCOMPACT_BUFFER_PERCENT = 0.165;
11
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,eAAO,MAAM,0BAA0B,QAAQ,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Autocompact buffer percentage.
3
+ *
4
+ * NOTE: This value is applied as a percentage of Claude Code's reported
5
+ * context window size. The `33k/200k` example is just the 200k-window case.
6
+ * It is empirically derived from current Claude Code `/context` output, is
7
+ * not officially documented by Anthropic, and may need adjustment if users
8
+ * report mismatches in future Claude Code versions.
9
+ */
10
+ export const AUTOCOMPACT_BUFFER_PERCENT = 0.165;
11
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { StdinData } from './types.js';
2
+ export interface CostEstimate {
3
+ sessionCost: number;
4
+ inputCostPer1M: number;
5
+ outputCostPer1M: number;
6
+ }
7
+ export declare function estimateCost(stdin: StdinData, _cacheDir: string): CostEstimate | null;
8
+ export declare function formatCost(cost: number): string;
9
+ //# sourceMappingURL=cost-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-tracker.d.ts","sourceRoot":"","sources":["../src/cost-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAiBD,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAuBrF;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI/C"}
@@ -0,0 +1,46 @@
1
+ // Pricing per 1M tokens (approximate, as of 2026)
2
+ const MODEL_PRICING = {
3
+ 'opus': { input: 15, output: 75 },
4
+ 'sonnet': { input: 3, output: 15 },
5
+ 'haiku': { input: 0.25, output: 1.25 },
6
+ };
7
+ function getModelTier(modelName) {
8
+ const lower = modelName.toLowerCase();
9
+ if (lower.includes('opus'))
10
+ return 'opus';
11
+ if (lower.includes('sonnet'))
12
+ return 'sonnet';
13
+ if (lower.includes('haiku'))
14
+ return 'haiku';
15
+ return 'sonnet'; // default
16
+ }
17
+ export function estimateCost(stdin, _cacheDir) {
18
+ const modelName = stdin.model?.display_name || stdin.model?.id || '';
19
+ if (!modelName)
20
+ return null;
21
+ const usage = stdin.context_window?.current_usage;
22
+ if (!usage)
23
+ return null;
24
+ const tier = getModelTier(modelName);
25
+ const pricing = MODEL_PRICING[tier];
26
+ if (!pricing)
27
+ return null;
28
+ const inputTokens = (usage.input_tokens ?? 0) + (usage.cache_creation_input_tokens ?? 0);
29
+ const outputTokens = usage.output_tokens ?? 0;
30
+ const inputCost = (inputTokens / 1_000_000) * pricing.input;
31
+ const outputCost = (outputTokens / 1_000_000) * pricing.output;
32
+ const sessionCost = inputCost + outputCost;
33
+ return {
34
+ sessionCost,
35
+ inputCostPer1M: pricing.input,
36
+ outputCostPer1M: pricing.output,
37
+ };
38
+ }
39
+ export function formatCost(cost) {
40
+ if (cost < 0.01)
41
+ return `$${cost.toFixed(4)}`;
42
+ if (cost < 1)
43
+ return `$${cost.toFixed(2)}`;
44
+ return `$${cost.toFixed(2)}`;
45
+ }
46
+ //# sourceMappingURL=cost-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-tracker.js","sourceRoot":"","sources":["../src/cost-tracker.ts"],"names":[],"mappings":"AAQA,kDAAkD;AAClD,MAAM,aAAa,GAAsD;IACvE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;IACjC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;IAClC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;CACvC,CAAC;AAEF,SAAS,YAAY,CAAC,SAAiB;IACrC,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IACtC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAC1C,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC9C,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAC5C,OAAO,QAAQ,CAAC,CAAC,UAAU;AAC7B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAgB,EAAE,SAAiB;IAC9D,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE,YAAY,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC;IACrE,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc,EAAE,aAAa,CAAC;IAClD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,2BAA2B,IAAI,CAAC,CAAC,CAAC;IACzF,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;IAE9C,MAAM,SAAS,GAAG,CAAC,WAAW,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5D,MAAM,UAAU,GAAG,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAC/D,MAAM,WAAW,GAAG,SAAS,GAAG,UAAU,CAAC;IAE3C,OAAO;QACL,WAAW;QACX,cAAc,EAAE,OAAO,CAAC,KAAK;QAC7B,eAAe,EAAE,OAAO,CAAC,MAAM;KAChC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,IAAI,IAAI,GAAG,IAAI;QAAE,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3C,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Create a namespaced debug logger
3
+ * @param namespace - Tag for log messages (e.g., 'config', 'usage')
4
+ */
5
+ export declare function createDebug(namespace: string): (msg: string, ...args: unknown[]) => void;
6
+ //# sourceMappingURL=debug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,IACrB,KAAK,MAAM,EAAE,GAAG,MAAM,OAAO,EAAE,KAAG,IAAI,CAK7D"}
package/dist/debug.js ADDED
@@ -0,0 +1,15 @@
1
+ // Shared debug logging utility
2
+ // Enable via: DEBUG=claude-hud or DEBUG=*
3
+ const DEBUG = process.env.DEBUG?.includes('claude-hud') || process.env.DEBUG === '*';
4
+ /**
5
+ * Create a namespaced debug logger
6
+ * @param namespace - Tag for log messages (e.g., 'config', 'usage')
7
+ */
8
+ export function createDebug(namespace) {
9
+ return function debug(msg, ...args) {
10
+ if (DEBUG) {
11
+ console.error(`[claude-hud:${namespace}] ${msg}`, ...args);
12
+ }
13
+ };
14
+ }
15
+ //# sourceMappingURL=debug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,0CAA0C;AAE1C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC;AAErF;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,SAAiB;IAC3C,OAAO,SAAS,KAAK,CAAC,GAAW,EAAE,GAAG,IAAe;QACnD,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,eAAe,SAAS,KAAK,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Sanitize output to prevent terminal escape injection.
3
+ * Strips ANSI escapes, OSC sequences, control characters, and bidi controls.
4
+ */
5
+ export declare function sanitize(input: string): string;
6
+ /**
7
+ * Parse --extra-cmd argument from process.argv
8
+ * Supports both: --extra-cmd "command" and --extra-cmd="command"
9
+ */
10
+ export declare function parseExtraCmdArg(argv?: string[]): string | null;
11
+ /**
12
+ * Execute a command and parse JSON output expecting { label: string }
13
+ * Returns null on any error (timeout, parse failure, missing label)
14
+ *
15
+ * SECURITY NOTE: The cmd parameter is sourced exclusively from CLI arguments
16
+ * (--extra-cmd) typed by the user. Since the user controls their own shell,
17
+ * shell injection is not a concern here - it's intentional user input.
18
+ */
19
+ export declare function runExtraCmd(cmd: string, timeout?: number): Promise<string | null>;
20
+ //# sourceMappingURL=extra-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extra-cmd.d.ts","sourceRoot":"","sources":["../src/extra-cmd.ts"],"names":[],"mappings":"AAgCA;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAO9C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,MAAM,GAAG,IAAI,CA8B7E;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAAmB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmCnG"}
@@ -0,0 +1,112 @@
1
+ import { exec } from 'node:child_process';
2
+ import { promisify } from 'node:util';
3
+ const execAsync = promisify(exec);
4
+ const MAX_BUFFER = 10 * 1024; // 10KB - plenty for a label
5
+ const MAX_LABEL_LENGTH = 50;
6
+ const TIMEOUT_MS = 3000;
7
+ const isDebug = process.env.DEBUG?.includes('claude-hud') ?? false;
8
+ const SHELL_ESCAPE_RE = /[\x00-\x1f\x7f`$\\]/g;
9
+ const CONSECUTIVE_SPACES_RE = /\s{2,}/g;
10
+ const LEADING_TRAILING_SPACES_RE = /^\s+|\s+$/g;
11
+ // ANSI/control sequence patterns used in sanitize()
12
+ const CSI_SEQUENCE_RE = /\x1B\[[0-?]*[ -/]*[@-~]/g;
13
+ const OSC_SEQUENCE_RE = /\x1B\][^\x07\x1B]*(?:\x07|\x1B\\)/g;
14
+ const C1_ESCAPE_RE = /\x1B[@-Z\\-_]/g;
15
+ const CONTROL_CHARS_RE = /[\u0000-\u001F\u007F-\u009F]/g;
16
+ const BIDI_CHARS_RE = /[\u061C\u200E\u200F\u202A-\u202E\u2066-\u2069\u206A-\u206F]/g;
17
+ function debug(message) {
18
+ if (isDebug) {
19
+ console.error(`[claude-hud:extra-cmd] ${message}`);
20
+ }
21
+ }
22
+ /**
23
+ * Sanitize output to prevent terminal escape injection.
24
+ * Strips ANSI escapes, OSC sequences, control characters, and bidi controls.
25
+ */
26
+ export function sanitize(input) {
27
+ return input
28
+ .replace(CSI_SEQUENCE_RE, '') // CSI sequences
29
+ .replace(OSC_SEQUENCE_RE, '') // OSC sequences
30
+ .replace(C1_ESCAPE_RE, '') // 7-bit C1 / ESC Fe
31
+ .replace(CONTROL_CHARS_RE, '') // C0/C1 controls
32
+ .replace(BIDI_CHARS_RE, ''); // bidi
33
+ }
34
+ /**
35
+ * Parse --extra-cmd argument from process.argv
36
+ * Supports both: --extra-cmd "command" and --extra-cmd="command"
37
+ */
38
+ export function parseExtraCmdArg(argv = process.argv) {
39
+ for (let i = 0; i < argv.length; i++) {
40
+ const arg = argv[i];
41
+ // Handle --extra-cmd=value syntax
42
+ if (arg.startsWith('--extra-cmd=')) {
43
+ const value = arg.slice('--extra-cmd='.length);
44
+ if (value === '') {
45
+ debug('Warning: --extra-cmd value is empty, ignoring');
46
+ return null;
47
+ }
48
+ return value;
49
+ }
50
+ // Handle --extra-cmd value syntax
51
+ if (arg === '--extra-cmd') {
52
+ if (i + 1 >= argv.length) {
53
+ debug('Warning: --extra-cmd specified but no value provided');
54
+ return null;
55
+ }
56
+ const value = argv[i + 1];
57
+ if (value === '') {
58
+ debug('Warning: --extra-cmd value is empty, ignoring');
59
+ return null;
60
+ }
61
+ return value;
62
+ }
63
+ }
64
+ return null;
65
+ }
66
+ /**
67
+ * Execute a command and parse JSON output expecting { label: string }
68
+ * Returns null on any error (timeout, parse failure, missing label)
69
+ *
70
+ * SECURITY NOTE: The cmd parameter is sourced exclusively from CLI arguments
71
+ * (--extra-cmd) typed by the user. Since the user controls their own shell,
72
+ * shell injection is not a concern here - it's intentional user input.
73
+ */
74
+ export async function runExtraCmd(cmd, timeout = TIMEOUT_MS) {
75
+ try {
76
+ const { stdout } = await execAsync(cmd, {
77
+ timeout,
78
+ maxBuffer: MAX_BUFFER,
79
+ });
80
+ const data = JSON.parse(stdout.trim());
81
+ if (typeof data === 'object' &&
82
+ data !== null &&
83
+ 'label' in data &&
84
+ typeof data.label === 'string') {
85
+ let label = sanitize(data.label);
86
+ if (label.length > MAX_LABEL_LENGTH) {
87
+ label = label.slice(0, MAX_LABEL_LENGTH - 1) + '…';
88
+ }
89
+ return label;
90
+ }
91
+ debug(`Command output missing 'label' field or invalid type: ${JSON.stringify(data)}`);
92
+ return null;
93
+ }
94
+ catch (err) {
95
+ if (err instanceof Error) {
96
+ if (err.message.includes('TIMEOUT') || err.message.includes('killed')) {
97
+ debug(`Command timed out after ${timeout}ms: ${cmd}`);
98
+ }
99
+ else if (err instanceof SyntaxError) {
100
+ debug(`Failed to parse JSON output: ${err.message}`);
101
+ }
102
+ else {
103
+ debug(`Command failed: ${err.message}`);
104
+ }
105
+ }
106
+ else {
107
+ debug(`Command failed with unknown error`);
108
+ }
109
+ return null;
110
+ }
111
+ }
112
+ //# sourceMappingURL=extra-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extra-cmd.js","sourceRoot":"","sources":["../src/extra-cmd.ts"],"names":[],"mappings":"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"}
package/dist/git.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ export interface FileStats {
2
+ modified: number;
3
+ added: number;
4
+ deleted: number;
5
+ untracked: number;
6
+ }
7
+ export interface GitStatus {
8
+ branch: string;
9
+ isDirty: boolean;
10
+ ahead: number;
11
+ behind: number;
12
+ fileStats?: FileStats;
13
+ }
14
+ export declare function getGitBranch(cwd?: string): Promise<string | null>;
15
+ export declare function getGitStatus(cwd?: string): Promise<GitStatus | null>;
16
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,wBAAsB,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAavE;AAED,wBAAsB,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CA4D1E"}
package/dist/git.js ADDED
@@ -0,0 +1,94 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { promisify } from 'node:util';
3
+ import { readCache, writeCache, getDefaultCacheDir } from './cache.js';
4
+ const execFileAsync = promisify(execFile);
5
+ export async function getGitBranch(cwd) {
6
+ if (!cwd)
7
+ return null;
8
+ try {
9
+ const { stdout } = await execFileAsync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd, timeout: 1000, encoding: 'utf8' });
10
+ return stdout.trim() || null;
11
+ }
12
+ catch {
13
+ return null;
14
+ }
15
+ }
16
+ export async function getGitStatus(cwd) {
17
+ if (!cwd)
18
+ return null;
19
+ const cacheDir = getDefaultCacheDir();
20
+ const cacheKey = `git-status:${cwd}`;
21
+ const cached = readCache(cacheKey, 2000, cacheDir);
22
+ if (cached)
23
+ return cached;
24
+ try {
25
+ // Get branch name
26
+ const { stdout: branchOut } = await execFileAsync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd, timeout: 1000, encoding: 'utf8' });
27
+ const branch = branchOut.trim();
28
+ if (!branch)
29
+ return null;
30
+ // Check for dirty state and parse file stats
31
+ let isDirty = false;
32
+ let fileStats;
33
+ try {
34
+ const { stdout: statusOut } = await execFileAsync('git', ['--no-optional-locks', 'status', '--porcelain'], { cwd, timeout: 1000, encoding: 'utf8' });
35
+ const trimmed = statusOut.trim();
36
+ isDirty = trimmed.length > 0;
37
+ if (isDirty) {
38
+ fileStats = parseFileStats(trimmed);
39
+ }
40
+ }
41
+ catch {
42
+ // Ignore errors, assume clean
43
+ }
44
+ // Get ahead/behind counts
45
+ let ahead = 0;
46
+ let behind = 0;
47
+ try {
48
+ const { stdout: revOut } = await execFileAsync('git', ['rev-list', '--left-right', '--count', '@{upstream}...HEAD'], { cwd, timeout: 1000, encoding: 'utf8' });
49
+ const parts = revOut.trim().split(/\s+/);
50
+ if (parts.length === 2) {
51
+ behind = parseInt(parts[0], 10) || 0;
52
+ ahead = parseInt(parts[1], 10) || 0;
53
+ }
54
+ }
55
+ catch {
56
+ // No upstream or error, keep 0/0
57
+ }
58
+ const result = { branch, isDirty, ahead, behind, fileStats };
59
+ writeCache(cacheKey, result, cacheDir);
60
+ return result;
61
+ }
62
+ catch {
63
+ return null;
64
+ }
65
+ }
66
+ /**
67
+ * Parse git status --porcelain output and count file stats (Starship-compatible format)
68
+ * Status codes: M=modified, A=added, D=deleted, ??=untracked
69
+ */
70
+ function parseFileStats(porcelainOutput) {
71
+ const stats = { modified: 0, added: 0, deleted: 0, untracked: 0 };
72
+ const lines = porcelainOutput.split('\n').filter(Boolean);
73
+ for (const line of lines) {
74
+ if (line.length < 2)
75
+ continue;
76
+ const index = line[0]; // staged status
77
+ const worktree = line[1]; // unstaged status
78
+ if (line.startsWith('??')) {
79
+ stats.untracked++;
80
+ }
81
+ else if (index === 'A') {
82
+ stats.added++;
83
+ }
84
+ else if (index === 'D' || worktree === 'D') {
85
+ stats.deleted++;
86
+ }
87
+ else if (index === 'M' || worktree === 'M' || index === 'R' || index === 'C') {
88
+ // M=modified, R=renamed (counts as modified), C=copied (counts as modified)
89
+ stats.modified++;
90
+ }
91
+ }
92
+ return stats;
93
+ }
94
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface HealthStatus {
2
+ configExists: boolean;
3
+ configValid: boolean;
4
+ cacheDir: string;
5
+ cacheDirExists: boolean;
6
+ nodeVersion: string;
7
+ platform: string;
8
+ terminalWidth: number | null;
9
+ }
10
+ export declare function runHealthCheck(): Promise<HealthStatus>;
11
+ export declare function formatHealthReport(status: HealthStatus): string;
12
+ //# sourceMappingURL=health-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-check.d.ts","sourceRoot":"","sources":["../src/health-check.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,YAAY,CAAC,CAyB5D;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAQ/D"}
@@ -0,0 +1,37 @@
1
+ import fs from 'node:fs';
2
+ import { getConfigPath, loadConfig } from './config.js';
3
+ import { getDefaultCacheDir } from './cache.js';
4
+ export async function runHealthCheck() {
5
+ const configPath = getConfigPath();
6
+ let configValid = false;
7
+ const configExists = fs.existsSync(configPath);
8
+ if (configExists) {
9
+ try {
10
+ await loadConfig();
11
+ configValid = true;
12
+ }
13
+ catch {
14
+ configValid = false;
15
+ }
16
+ }
17
+ const cacheDir = getDefaultCacheDir();
18
+ return {
19
+ configExists,
20
+ configValid,
21
+ cacheDir,
22
+ cacheDirExists: fs.existsSync(cacheDir),
23
+ nodeVersion: process.version,
24
+ platform: process.platform,
25
+ terminalWidth: process.stdout?.columns ?? null,
26
+ };
27
+ }
28
+ export function formatHealthReport(status) {
29
+ const lines = [
30
+ `Platform: ${status.platform} | Node: ${status.nodeVersion}`,
31
+ `Terminal: ${status.terminalWidth ?? 'unknown'} cols`,
32
+ `Config: ${status.configExists ? (status.configValid ? '✓ valid' : '✘ invalid') : '○ not set (using defaults)'}`,
33
+ `Cache: ${status.cacheDirExists ? '✓ exists' : '○ will be created'}`,
34
+ ];
35
+ return lines.join('\n');
36
+ }
37
+ //# sourceMappingURL=health-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-check.js","sourceRoot":"","sources":["../src/health-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAYhD,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,MAAM,YAAY,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAE/C,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,UAAU,EAAE,CAAC;YACnB,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,WAAW,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IAEtC,OAAO;QACL,YAAY;QACZ,WAAW;QACX,QAAQ;QACR,cAAc,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QACvC,WAAW,EAAE,OAAO,CAAC,OAAO;QAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,aAAa,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,IAAI,IAAI;KAC/C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACrD,MAAM,KAAK,GAAG;QACZ,aAAa,MAAM,CAAC,QAAQ,YAAY,MAAM,CAAC,WAAW,EAAE;QAC5D,aAAa,MAAM,CAAC,aAAa,IAAI,SAAS,OAAO;QACrD,WAAW,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,4BAA4B,EAAE;QAChH,UAAU,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB,EAAE;KACrE,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { readStdin } from './stdin.js';
2
+ import { parseTranscript } from './transcript.js';
3
+ import { render } from './render/index.js';
4
+ import { countConfigs } from './config-reader.js';
5
+ import { getGitStatus } from './git.js';
6
+ import { getUsage } from './usage-api.js';
7
+ import { loadConfig } from './config.js';
8
+ import { parseExtraCmdArg, runExtraCmd } from './extra-cmd.js';
9
+ export type MainDeps = {
10
+ readStdin: typeof readStdin;
11
+ parseTranscript: typeof parseTranscript;
12
+ countConfigs: typeof countConfigs;
13
+ getGitStatus: typeof getGitStatus;
14
+ getUsage: typeof getUsage;
15
+ loadConfig: typeof loadConfig;
16
+ parseExtraCmdArg: typeof parseExtraCmdArg;
17
+ runExtraCmd: typeof runExtraCmd;
18
+ render: typeof render;
19
+ now: () => number;
20
+ log: (...args: unknown[]) => void;
21
+ };
22
+ export declare function main(overrides?: Partial<MainDeps>): Promise<void>;
23
+ export declare function formatSessionDuration(sessionStart?: Date, now?: () => number): string;
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAqB,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAc/D,MAAM,MAAM,QAAQ,GAAG;IACrB,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,eAAe,EAAE,OAAO,eAAe,CAAC;IACxC,YAAY,EAAE,OAAO,YAAY,CAAC;IAClC,YAAY,EAAE,OAAO,YAAY,CAAC;IAClC,QAAQ,EAAE,OAAO,QAAQ,CAAC;IAC1B,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;IAC1C,WAAW,EAAE,OAAO,WAAW,CAAC;IAChC,MAAM,EAAE,OAAO,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACnC,CAAC;AAEF,wBAAsB,IAAI,CAAC,SAAS,GAAE,OAAO,CAAC,QAAQ,CAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyK3E;AAED,wBAAgB,qBAAqB,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,GAAE,MAAM,MAAyB,GAAG,MAAM,CAcvG"}