devflow-kit 1.7.0 → 1.8.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 (195) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +31 -1
  3. package/dist/cli.js +3 -1
  4. package/dist/commands/hud.d.ts +22 -0
  5. package/dist/commands/hud.js +180 -0
  6. package/dist/commands/init.d.ts +1 -0
  7. package/dist/commands/init.js +112 -3
  8. package/dist/commands/list.js +1 -0
  9. package/dist/commands/uninstall.js +9 -16
  10. package/dist/hud/cache.d.ts +14 -0
  11. package/dist/hud/cache.js +54 -0
  12. package/dist/hud/colors.d.ts +23 -0
  13. package/dist/hud/colors.js +62 -0
  14. package/dist/hud/components/config-counts.d.ts +8 -0
  15. package/dist/hud/components/config-counts.js +91 -0
  16. package/dist/hud/components/context-usage.d.ts +8 -0
  17. package/dist/hud/components/context-usage.js +49 -0
  18. package/dist/hud/components/diff-stats.d.ts +3 -0
  19. package/dist/hud/components/diff-stats.js +36 -0
  20. package/dist/hud/components/directory.d.ts +3 -0
  21. package/dist/hud/components/directory.js +10 -0
  22. package/dist/hud/components/git-ahead-behind.d.ts +3 -0
  23. package/dist/hud/components/git-ahead-behind.js +16 -0
  24. package/dist/hud/components/git-branch.d.ts +3 -0
  25. package/dist/hud/components/git-branch.js +14 -0
  26. package/dist/hud/components/model.d.ts +3 -0
  27. package/dist/hud/components/model.js +21 -0
  28. package/dist/hud/components/release-info.d.ts +3 -0
  29. package/dist/hud/components/release-info.js +9 -0
  30. package/dist/hud/components/session-cost.d.ts +3 -0
  31. package/dist/hud/components/session-cost.js +9 -0
  32. package/dist/hud/components/session-duration.d.ts +3 -0
  33. package/dist/hud/components/session-duration.js +18 -0
  34. package/dist/hud/components/todo-progress.d.ts +3 -0
  35. package/dist/hud/components/todo-progress.js +11 -0
  36. package/dist/hud/components/usage-quota.d.ts +3 -0
  37. package/dist/hud/components/usage-quota.js +45 -0
  38. package/dist/hud/components/version-badge.d.ts +3 -0
  39. package/dist/hud/components/version-badge.js +80 -0
  40. package/dist/hud/components/worktree-count.d.ts +3 -0
  41. package/dist/hud/components/worktree-count.js +8 -0
  42. package/dist/hud/config.d.ts +10 -0
  43. package/dist/hud/config.js +55 -0
  44. package/dist/hud/credentials.d.ts +17 -0
  45. package/dist/hud/credentials.js +99 -0
  46. package/dist/hud/git.d.ts +7 -0
  47. package/dist/hud/git.js +153 -0
  48. package/dist/hud/index.d.ts +2 -0
  49. package/dist/hud/index.js +81 -0
  50. package/dist/hud/render.d.ts +7 -0
  51. package/dist/hud/render.js +111 -0
  52. package/dist/hud/stdin.d.ts +6 -0
  53. package/dist/hud/stdin.js +25 -0
  54. package/dist/hud/transcript.d.ts +7 -0
  55. package/dist/hud/transcript.js +130 -0
  56. package/dist/hud/types.d.ts +116 -0
  57. package/dist/hud/types.js +2 -0
  58. package/dist/hud/usage-api.d.ts +7 -0
  59. package/dist/hud/usage-api.js +84 -0
  60. package/dist/utils/manifest.d.ts +1 -0
  61. package/package.json +5 -2
  62. package/plugins/devflow-accessibility/.claude-plugin/plugin.json +1 -1
  63. package/plugins/devflow-ambient/.claude-plugin/plugin.json +1 -1
  64. package/plugins/devflow-ambient/agents/scrutinizer.md +6 -4
  65. package/plugins/devflow-ambient/agents/shepherd.md +26 -12
  66. package/plugins/devflow-ambient/agents/simplifier.md +24 -15
  67. package/plugins/devflow-audit-claude/.claude-plugin/plugin.json +1 -1
  68. package/plugins/devflow-code-review/.claude-plugin/plugin.json +1 -1
  69. package/plugins/devflow-core-skills/.claude-plugin/plugin.json +1 -1
  70. package/plugins/devflow-debug/.claude-plugin/plugin.json +1 -1
  71. package/plugins/devflow-frontend-design/.claude-plugin/plugin.json +1 -1
  72. package/plugins/devflow-go/.claude-plugin/plugin.json +1 -1
  73. package/plugins/devflow-implement/.claude-plugin/plugin.json +1 -1
  74. package/plugins/devflow-implement/agents/scrutinizer.md +6 -4
  75. package/plugins/devflow-implement/agents/shepherd.md +26 -12
  76. package/plugins/devflow-implement/agents/simplifier.md +24 -15
  77. package/plugins/devflow-implement/skills/self-review/references/stub-detection.md +135 -0
  78. package/plugins/devflow-java/.claude-plugin/plugin.json +1 -1
  79. package/plugins/devflow-python/.claude-plugin/plugin.json +1 -1
  80. package/plugins/devflow-react/.claude-plugin/plugin.json +1 -1
  81. package/plugins/devflow-resolve/.claude-plugin/plugin.json +1 -1
  82. package/plugins/devflow-resolve/agents/simplifier.md +24 -15
  83. package/plugins/devflow-rust/.claude-plugin/plugin.json +1 -1
  84. package/plugins/devflow-self-review/.claude-plugin/plugin.json +1 -1
  85. package/plugins/devflow-self-review/agents/scrutinizer.md +6 -4
  86. package/plugins/devflow-self-review/agents/simplifier.md +24 -15
  87. package/plugins/devflow-self-review/skills/self-review/references/stub-detection.md +135 -0
  88. package/plugins/devflow-specify/.claude-plugin/plugin.json +1 -1
  89. package/plugins/devflow-typescript/.claude-plugin/plugin.json +1 -1
  90. package/scripts/hud/cache.d.ts +14 -0
  91. package/scripts/hud/cache.d.ts.map +1 -0
  92. package/scripts/hud/cache.js +54 -0
  93. package/scripts/hud/cache.js.map +1 -0
  94. package/scripts/hud/colors.d.ts +23 -0
  95. package/scripts/hud/colors.d.ts.map +1 -0
  96. package/scripts/hud/colors.js +62 -0
  97. package/scripts/hud/colors.js.map +1 -0
  98. package/scripts/hud/components/config-counts.d.ts +8 -0
  99. package/scripts/hud/components/config-counts.d.ts.map +1 -0
  100. package/scripts/hud/components/config-counts.js +91 -0
  101. package/scripts/hud/components/config-counts.js.map +1 -0
  102. package/scripts/hud/components/context-usage.d.ts +8 -0
  103. package/scripts/hud/components/context-usage.d.ts.map +1 -0
  104. package/scripts/hud/components/context-usage.js +49 -0
  105. package/scripts/hud/components/context-usage.js.map +1 -0
  106. package/scripts/hud/components/diff-stats.d.ts +3 -0
  107. package/scripts/hud/components/diff-stats.d.ts.map +1 -0
  108. package/scripts/hud/components/diff-stats.js +36 -0
  109. package/scripts/hud/components/diff-stats.js.map +1 -0
  110. package/scripts/hud/components/directory.d.ts +3 -0
  111. package/scripts/hud/components/directory.d.ts.map +1 -0
  112. package/scripts/hud/components/directory.js +10 -0
  113. package/scripts/hud/components/directory.js.map +1 -0
  114. package/scripts/hud/components/git-ahead-behind.d.ts +3 -0
  115. package/scripts/hud/components/git-ahead-behind.d.ts.map +1 -0
  116. package/scripts/hud/components/git-ahead-behind.js +16 -0
  117. package/scripts/hud/components/git-ahead-behind.js.map +1 -0
  118. package/scripts/hud/components/git-branch.d.ts +3 -0
  119. package/scripts/hud/components/git-branch.d.ts.map +1 -0
  120. package/scripts/hud/components/git-branch.js +14 -0
  121. package/scripts/hud/components/git-branch.js.map +1 -0
  122. package/scripts/hud/components/model.d.ts +3 -0
  123. package/scripts/hud/components/model.d.ts.map +1 -0
  124. package/scripts/hud/components/model.js +21 -0
  125. package/scripts/hud/components/model.js.map +1 -0
  126. package/scripts/hud/components/release-info.d.ts +3 -0
  127. package/scripts/hud/components/release-info.d.ts.map +1 -0
  128. package/scripts/hud/components/release-info.js +9 -0
  129. package/scripts/hud/components/release-info.js.map +1 -0
  130. package/scripts/hud/components/session-cost.d.ts +3 -0
  131. package/scripts/hud/components/session-cost.d.ts.map +1 -0
  132. package/scripts/hud/components/session-cost.js +9 -0
  133. package/scripts/hud/components/session-cost.js.map +1 -0
  134. package/scripts/hud/components/session-duration.d.ts +3 -0
  135. package/scripts/hud/components/session-duration.d.ts.map +1 -0
  136. package/scripts/hud/components/session-duration.js +18 -0
  137. package/scripts/hud/components/session-duration.js.map +1 -0
  138. package/scripts/hud/components/todo-progress.d.ts +3 -0
  139. package/scripts/hud/components/todo-progress.d.ts.map +1 -0
  140. package/scripts/hud/components/todo-progress.js +11 -0
  141. package/scripts/hud/components/todo-progress.js.map +1 -0
  142. package/scripts/hud/components/usage-quota.d.ts +3 -0
  143. package/scripts/hud/components/usage-quota.d.ts.map +1 -0
  144. package/scripts/hud/components/usage-quota.js +45 -0
  145. package/scripts/hud/components/usage-quota.js.map +1 -0
  146. package/scripts/hud/components/version-badge.d.ts +3 -0
  147. package/scripts/hud/components/version-badge.d.ts.map +1 -0
  148. package/scripts/hud/components/version-badge.js +80 -0
  149. package/scripts/hud/components/version-badge.js.map +1 -0
  150. package/scripts/hud/components/worktree-count.d.ts +3 -0
  151. package/scripts/hud/components/worktree-count.d.ts.map +1 -0
  152. package/scripts/hud/components/worktree-count.js +8 -0
  153. package/scripts/hud/components/worktree-count.js.map +1 -0
  154. package/scripts/hud/config.d.ts +10 -0
  155. package/scripts/hud/config.d.ts.map +1 -0
  156. package/scripts/hud/config.js +55 -0
  157. package/scripts/hud/config.js.map +1 -0
  158. package/scripts/hud/credentials.d.ts +17 -0
  159. package/scripts/hud/credentials.d.ts.map +1 -0
  160. package/scripts/hud/credentials.js +99 -0
  161. package/scripts/hud/credentials.js.map +1 -0
  162. package/scripts/hud/git.d.ts +7 -0
  163. package/scripts/hud/git.d.ts.map +1 -0
  164. package/scripts/hud/git.js +153 -0
  165. package/scripts/hud/git.js.map +1 -0
  166. package/scripts/hud/index.d.ts +2 -0
  167. package/scripts/hud/index.d.ts.map +1 -0
  168. package/scripts/hud/index.js +81 -0
  169. package/scripts/hud/index.js.map +1 -0
  170. package/scripts/hud/render.d.ts +7 -0
  171. package/scripts/hud/render.d.ts.map +1 -0
  172. package/scripts/hud/render.js +111 -0
  173. package/scripts/hud/render.js.map +1 -0
  174. package/scripts/hud/stdin.d.ts +6 -0
  175. package/scripts/hud/stdin.d.ts.map +1 -0
  176. package/scripts/hud/stdin.js +25 -0
  177. package/scripts/hud/stdin.js.map +1 -0
  178. package/scripts/hud/transcript.d.ts +7 -0
  179. package/scripts/hud/transcript.d.ts.map +1 -0
  180. package/scripts/hud/transcript.js +130 -0
  181. package/scripts/hud/transcript.js.map +1 -0
  182. package/scripts/hud/types.d.ts +116 -0
  183. package/scripts/hud/types.d.ts.map +1 -0
  184. package/scripts/hud/types.js +2 -0
  185. package/scripts/hud/types.js.map +1 -0
  186. package/scripts/hud/usage-api.d.ts +7 -0
  187. package/scripts/hud/usage-api.d.ts.map +1 -0
  188. package/scripts/hud/usage-api.js +84 -0
  189. package/scripts/hud/usage-api.js.map +1 -0
  190. package/scripts/hud.sh +5 -0
  191. package/shared/agents/scrutinizer.md +6 -4
  192. package/shared/agents/shepherd.md +26 -12
  193. package/shared/agents/simplifier.md +24 -15
  194. package/shared/skills/self-review/references/stub-detection.md +135 -0
  195. package/src/templates/settings.json +1 -1
@@ -0,0 +1,23 @@
1
+ /**
2
+ * ANSI color helpers — no dependencies, precompiled escape sequences.
3
+ * Used by HUD components for direct terminal output (not @clack/prompts).
4
+ */
5
+ export declare function bold(s: string): string;
6
+ export declare function dim(s: string): string;
7
+ export declare function red(s: string): string;
8
+ export declare function green(s: string): string;
9
+ export declare function yellow(s: string): string;
10
+ export declare function blue(s: string): string;
11
+ export declare function magenta(s: string): string;
12
+ export declare function cyan(s: string): string;
13
+ export declare function gray(s: string): string;
14
+ export declare function white(s: string): string;
15
+ export declare function orange(s: string): string;
16
+ export declare function brightRed(s: string): string;
17
+ export declare function boldRed(s: string): string;
18
+ export declare function bgGreen(s: string): string;
19
+ export declare function bgYellow(s: string): string;
20
+ export declare function bgRed(s: string): string;
21
+ export declare function truncate(s: string, max: number): string;
22
+ export declare function stripAnsi(s: string): string;
23
+ //# sourceMappingURL=colors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/cli/hud/colors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtC;AACD,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAErC;AACD,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAErC;AACD,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEvC;AACD,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAExC;AACD,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtC;AACD,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEzC;AACD,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtC;AACD,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtC;AACD,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEvC;AACD,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAExC;AACD,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3C;AACD,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEzC;AACD,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEzC;AACD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1C;AACD,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEvC;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEvD;AAID,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3C"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * ANSI color helpers — no dependencies, precompiled escape sequences.
3
+ * Used by HUD components for direct terminal output (not @clack/prompts).
4
+ */
5
+ const ESC = '\x1b[';
6
+ const RESET = `${ESC}0m`;
7
+ export function bold(s) {
8
+ return `${ESC}1m${s}${RESET}`;
9
+ }
10
+ export function dim(s) {
11
+ return `${ESC}2m${s}${RESET}`;
12
+ }
13
+ export function red(s) {
14
+ return `${ESC}31m${s}${RESET}`;
15
+ }
16
+ export function green(s) {
17
+ return `${ESC}32m${s}${RESET}`;
18
+ }
19
+ export function yellow(s) {
20
+ return `${ESC}33m${s}${RESET}`;
21
+ }
22
+ export function blue(s) {
23
+ return `${ESC}34m${s}${RESET}`;
24
+ }
25
+ export function magenta(s) {
26
+ return `${ESC}35m${s}${RESET}`;
27
+ }
28
+ export function cyan(s) {
29
+ return `${ESC}36m${s}${RESET}`;
30
+ }
31
+ export function gray(s) {
32
+ return `${ESC}90m${s}${RESET}`;
33
+ }
34
+ export function white(s) {
35
+ return `${ESC}37m${s}${RESET}`;
36
+ }
37
+ export function orange(s) {
38
+ return `${ESC}38;5;208m${s}${RESET}`;
39
+ }
40
+ export function brightRed(s) {
41
+ return `${ESC}91m${s}${RESET}`;
42
+ }
43
+ export function boldRed(s) {
44
+ return `${ESC}1;31m${s}${RESET}`;
45
+ }
46
+ export function bgGreen(s) {
47
+ return `${ESC}42m${s}${RESET}`;
48
+ }
49
+ export function bgYellow(s) {
50
+ return `${ESC}43m${s}${RESET}`;
51
+ }
52
+ export function bgRed(s) {
53
+ return `${ESC}41m${s}${RESET}`;
54
+ }
55
+ export function truncate(s, max) {
56
+ return s.length > max ? s.slice(0, max - 1) + '\u2026' : s;
57
+ }
58
+ const ANSI_PATTERN = /\x1b\[[0-9;]*m/g;
59
+ export function stripAnsi(s) {
60
+ return s.replace(ANSI_PATTERN, '');
61
+ }
62
+ //# sourceMappingURL=colors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/cli/hud/colors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,GAAG,GAAG,OAAO,CAAC;AACpB,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC;AAEzB,MAAM,UAAU,IAAI,CAAC,CAAS;IAC5B,OAAO,GAAG,GAAG,KAAK,CAAC,GAAG,KAAK,EAAE,CAAC;AAChC,CAAC;AACD,MAAM,UAAU,GAAG,CAAC,CAAS;IAC3B,OAAO,GAAG,GAAG,KAAK,CAAC,GAAG,KAAK,EAAE,CAAC;AAChC,CAAC;AACD,MAAM,UAAU,GAAG,CAAC,CAAS;IAC3B,OAAO,GAAG,GAAG,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;AACjC,CAAC;AACD,MAAM,UAAU,KAAK,CAAC,CAAS;IAC7B,OAAO,GAAG,GAAG,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;AACjC,CAAC;AACD,MAAM,UAAU,MAAM,CAAC,CAAS;IAC9B,OAAO,GAAG,GAAG,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;AACjC,CAAC;AACD,MAAM,UAAU,IAAI,CAAC,CAAS;IAC5B,OAAO,GAAG,GAAG,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;AACjC,CAAC;AACD,MAAM,UAAU,OAAO,CAAC,CAAS;IAC/B,OAAO,GAAG,GAAG,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;AACjC,CAAC;AACD,MAAM,UAAU,IAAI,CAAC,CAAS;IAC5B,OAAO,GAAG,GAAG,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;AACjC,CAAC;AACD,MAAM,UAAU,IAAI,CAAC,CAAS;IAC5B,OAAO,GAAG,GAAG,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;AACjC,CAAC;AACD,MAAM,UAAU,KAAK,CAAC,CAAS;IAC7B,OAAO,GAAG,GAAG,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;AACjC,CAAC;AACD,MAAM,UAAU,MAAM,CAAC,CAAS;IAC9B,OAAO,GAAG,GAAG,YAAY,CAAC,GAAG,KAAK,EAAE,CAAC;AACvC,CAAC;AACD,MAAM,UAAU,SAAS,CAAC,CAAS;IACjC,OAAO,GAAG,GAAG,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;AACjC,CAAC;AACD,MAAM,UAAU,OAAO,CAAC,CAAS;IAC/B,OAAO,GAAG,GAAG,QAAQ,CAAC,GAAG,KAAK,EAAE,CAAC;AACnC,CAAC;AACD,MAAM,UAAU,OAAO,CAAC,CAAS;IAC/B,OAAO,GAAG,GAAG,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;AACjC,CAAC;AACD,MAAM,UAAU,QAAQ,CAAC,CAAS;IAChC,OAAO,GAAG,GAAG,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;AACjC,CAAC;AACD,MAAM,UAAU,KAAK,CAAC,CAAS;IAC7B,OAAO,GAAG,GAAG,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,CAAS,EAAE,GAAW;IAC7C,OAAO,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,YAAY,GAAG,iBAAiB,CAAC;AAEvC,MAAM,UAAU,SAAS,CAAC,CAAS;IACjC,OAAO,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ComponentResult, GatherContext, ConfigCountsData } from '../types.js';
2
+ /**
3
+ * Gather configuration counts for the configCounts component.
4
+ * Exported for use by the main HUD entry point.
5
+ */
6
+ export declare function gatherConfigCounts(cwd: string): ConfigCountsData;
7
+ export default function configCounts(ctx: GatherContext): Promise<ComponentResult | null>;
8
+ //# sourceMappingURL=config-counts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-counts.d.ts","sourceRoot":"","sources":["../../../src/cli/hud/components/config-counts.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAqCpF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAoChE;AAED,wBAA8B,YAAY,CACxC,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAejC"}
@@ -0,0 +1,91 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ import { dim } from '../colors.js';
5
+ function countClaudeMdFiles(cwd) {
6
+ let count = 0;
7
+ // Check project CLAUDE.md
8
+ if (fs.existsSync(path.join(cwd, 'CLAUDE.md')))
9
+ count++;
10
+ // Check user CLAUDE.md
11
+ const claudeDir = process.env.CLAUDE_CONFIG_DIR ||
12
+ path.join(process.env.HOME || homedir(), '.claude');
13
+ if (fs.existsSync(path.join(claudeDir, 'CLAUDE.md')))
14
+ count++;
15
+ return count;
16
+ }
17
+ function countFromSettings(settingsPath) {
18
+ try {
19
+ const settings = JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
20
+ const mcpServers = settings.mcpServers
21
+ ? Object.keys(settings.mcpServers).length
22
+ : 0;
23
+ let hooks = 0;
24
+ if (settings.hooks) {
25
+ const hooksObj = settings.hooks;
26
+ for (const event of Object.values(hooksObj)) {
27
+ if (Array.isArray(event))
28
+ hooks += event.length;
29
+ }
30
+ }
31
+ return { mcpServers, hooks };
32
+ }
33
+ catch {
34
+ return { mcpServers: 0, hooks: 0 };
35
+ }
36
+ }
37
+ /**
38
+ * Gather configuration counts for the configCounts component.
39
+ * Exported for use by the main HUD entry point.
40
+ */
41
+ export function gatherConfigCounts(cwd) {
42
+ const claudeDir = process.env.CLAUDE_CONFIG_DIR ||
43
+ path.join(process.env.HOME || homedir(), '.claude');
44
+ const claudeMdFiles = countClaudeMdFiles(cwd);
45
+ // Count rules (.md/.mdc files in .claude/rules)
46
+ let rules = 0;
47
+ for (const rulesDir of [
48
+ path.join(cwd, '.claude', 'rules'),
49
+ path.join(claudeDir, 'rules'),
50
+ ]) {
51
+ try {
52
+ const files = fs.readdirSync(rulesDir);
53
+ rules += files.filter((f) => f.endsWith('.md') || f.endsWith('.mdc')).length;
54
+ }
55
+ catch {
56
+ /* ignore */
57
+ }
58
+ }
59
+ // Aggregate settings from user and project
60
+ const userSettings = countFromSettings(path.join(claudeDir, 'settings.json'));
61
+ const projectSettings = countFromSettings(path.join(cwd, '.claude', 'settings.json'));
62
+ return {
63
+ claudeMdFiles,
64
+ rules,
65
+ mcpServers: userSettings.mcpServers + projectSettings.mcpServers,
66
+ hooks: userSettings.hooks + projectSettings.hooks,
67
+ };
68
+ }
69
+ export default async function configCounts(ctx) {
70
+ if (!ctx.configCounts)
71
+ return null;
72
+ const { claudeMdFiles, rules: ruleCount, mcpServers, hooks: hookCount } = ctx.configCounts;
73
+ const skillCount = ctx.transcript?.skills.length ?? 0;
74
+ const parts = [];
75
+ if (claudeMdFiles > 0)
76
+ parts.push(`${claudeMdFiles} CLAUDE.md`);
77
+ if (ruleCount > 0)
78
+ parts.push(`${ruleCount} rules`);
79
+ if (mcpServers > 0)
80
+ parts.push(`${mcpServers} MCPs`);
81
+ if (hookCount > 0)
82
+ parts.push(`${hookCount} hooks`);
83
+ if (skillCount > 0)
84
+ parts.push(`${skillCount} skills`);
85
+ if (parts.length === 0)
86
+ return null;
87
+ const raw = parts.join(' \u00B7 ');
88
+ const text = parts.map((p) => dim(p)).join(dim(' \u00B7 '));
89
+ return { text, raw };
90
+ }
91
+ //# sourceMappingURL=config-counts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-counts.js","sourceRoot":"","sources":["../../../src/cli/hud/components/config-counts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ComponentResult, GatherContext } from '../types.js';
2
+ /**
3
+ * Context window usage component.
4
+ * Visual bar with 3-tier color gradient matching usage-quota: green / yellow / red.
5
+ * At >85% appends token breakdown: (in: Nk).
6
+ */
7
+ export default function contextUsage(ctx: GatherContext): Promise<ComponentResult | null>;
8
+ //# sourceMappingURL=context-usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-usage.d.ts","sourceRoot":"","sources":["../../../src/cli/hud/components/context-usage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAKlE;;;;GAIG;AACH,wBAA8B,YAAY,CACxC,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CA4CjC"}
@@ -0,0 +1,49 @@
1
+ import { dim, green, yellow, red } from '../colors.js';
2
+ const BAR_WIDTH = 8;
3
+ /**
4
+ * Context window usage component.
5
+ * Visual bar with 3-tier color gradient matching usage-quota: green / yellow / red.
6
+ * At >85% appends token breakdown: (in: Nk).
7
+ */
8
+ export default async function contextUsage(ctx) {
9
+ const cw = ctx.stdin.context_window;
10
+ if (!cw)
11
+ return null;
12
+ let pct = null;
13
+ if (cw.used_percentage !== undefined) {
14
+ pct = Math.round(cw.used_percentage);
15
+ }
16
+ else if (cw.context_window_size && cw.current_usage?.input_tokens !== undefined) {
17
+ pct = Math.round((cw.current_usage.input_tokens / cw.context_window_size) * 100);
18
+ }
19
+ if (pct === null)
20
+ return null;
21
+ const filled = Math.round((pct / 100) * BAR_WIDTH);
22
+ const empty = BAR_WIDTH - filled;
23
+ let colorFn;
24
+ if (pct < 50) {
25
+ colorFn = green;
26
+ }
27
+ else if (pct < 80) {
28
+ colorFn = yellow;
29
+ }
30
+ else {
31
+ colorFn = red;
32
+ }
33
+ const filledBar = '\u2588'.repeat(filled);
34
+ const emptyBar = '\u2591'.repeat(empty);
35
+ let suffix = '';
36
+ if (pct > 85 && cw.current_usage?.input_tokens !== undefined) {
37
+ const inK = Math.round(cw.current_usage.input_tokens / 1000);
38
+ suffix = ` (in: ${inK}k)`;
39
+ }
40
+ const raw = `Current Session ${filledBar}${emptyBar} ${pct}%${suffix}`;
41
+ const text = dim('Current Session ') +
42
+ colorFn(filledBar) +
43
+ dim(emptyBar) +
44
+ ' ' +
45
+ colorFn(`${pct}%`) +
46
+ (suffix ? dim(suffix) : '');
47
+ return { text, raw };
48
+ }
49
+ //# sourceMappingURL=context-usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-usage.js","sourceRoot":"","sources":["../../../src/cli/hud/components/context-usage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,SAAS,GAAG,CAAC,CAAC;AAEpB;;;;GAIG;AACH,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,YAAY,CACxC,GAAkB;IAElB,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC;IACpC,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAErB,IAAI,GAAG,GAAkB,IAAI,CAAC;IAC9B,IAAI,EAAE,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QACrC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC;IACvC,CAAC;SAAM,IAAI,EAAE,CAAC,mBAAmB,IAAI,EAAE,CAAC,aAAa,EAAE,YAAY,KAAK,SAAS,EAAE,CAAC;QAClF,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY,GAAG,EAAE,CAAC,mBAAmB,CAAC,GAAG,GAAG,CAAC,CAAC;IACnF,CAAC;IAED,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAE9B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;IAEjC,IAAI,OAA8B,CAAC;IACnC,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC;QACb,OAAO,GAAG,KAAK,CAAC;IAClB,CAAC;SAAM,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC;QACpB,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,GAAG,CAAC;IAChB,CAAC;IAED,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAExC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC,aAAa,EAAE,YAAY,KAAK,SAAS,EAAE,CAAC;QAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;QAC7D,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED,MAAM,GAAG,GAAG,mBAAmB,SAAS,GAAG,QAAQ,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;IACvE,MAAM,IAAI,GACR,GAAG,CAAC,kBAAkB,CAAC;QACvB,OAAO,CAAC,SAAS,CAAC;QAClB,GAAG,CAAC,QAAQ,CAAC;QACb,GAAG;QACH,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC;QAClB,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAE9B,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACvB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ComponentResult, GatherContext } from '../types.js';
2
+ export default function diffStats(ctx: GatherContext): Promise<ComponentResult | null>;
3
+ //# sourceMappingURL=diff-stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-stats.d.ts","sourceRoot":"","sources":["../../../src/cli/hud/components/diff-stats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGlE,wBAA8B,SAAS,CACrC,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CA+BjC"}
@@ -0,0 +1,36 @@
1
+ import { dim, green, red } from '../colors.js';
2
+ export default async function diffStats(ctx) {
3
+ if (!ctx.git)
4
+ return null;
5
+ const { filesChanged, additions, deletions } = ctx.git;
6
+ if (filesChanged === 0 && additions === 0 && deletions === 0)
7
+ return null;
8
+ const filePart = filesChanged > 0
9
+ ? `${filesChanged} file${filesChanged === 1 ? '' : 's'}`
10
+ : '';
11
+ const lineParts = [];
12
+ if (additions > 0)
13
+ lineParts.push(`+${additions}`);
14
+ if (deletions > 0)
15
+ lineParts.push(`-${deletions}`);
16
+ const sections = [];
17
+ const rawSections = [];
18
+ if (filePart) {
19
+ sections.push(dim(filePart));
20
+ rawSections.push(filePart);
21
+ }
22
+ if (lineParts.length > 0) {
23
+ const lineText = lineParts
24
+ .map((p) => (p.startsWith('+') ? green(p) : red(p)))
25
+ .join(' ');
26
+ sections.push(lineText);
27
+ rawSections.push(lineParts.join(' '));
28
+ }
29
+ if (sections.length === 0)
30
+ return null;
31
+ return {
32
+ text: sections.join(dim(' \u00B7 ')),
33
+ raw: rawSections.join(' \u00B7 '),
34
+ };
35
+ }
36
+ //# sourceMappingURL=diff-stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-stats.js","sourceRoot":"","sources":["../../../src/cli/hud/components/diff-stats.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,SAAS,CACrC,GAAkB;IAElB,IAAI,CAAC,GAAG,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC;IACvD,IAAI,YAAY,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1E,MAAM,QAAQ,GAAG,YAAY,GAAG,CAAC;QAC/B,CAAC,CAAC,GAAG,YAAY,QAAQ,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;QACxD,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,SAAS,GAAG,CAAC;QAAE,SAAS,CAAC,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC;IACnD,IAAI,SAAS,GAAG,CAAC;QAAE,SAAS,CAAC,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC;IAEnD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7B,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,SAAS;aACvB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aACnD,IAAI,CAAC,GAAG,CAAC,CAAC;QACb,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACpC,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;KAClC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ComponentResult, GatherContext } from '../types.js';
2
+ export default function directory(ctx: GatherContext): Promise<ComponentResult | null>;
3
+ //# sourceMappingURL=directory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directory.d.ts","sourceRoot":"","sources":["../../../src/cli/hud/components/directory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIlE,wBAA8B,SAAS,CACrC,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAKjC"}
@@ -0,0 +1,10 @@
1
+ import { bold, white } from '../colors.js';
2
+ import * as path from 'node:path';
3
+ export default async function directory(ctx) {
4
+ const cwd = ctx.stdin.cwd;
5
+ if (!cwd)
6
+ return null;
7
+ const name = path.basename(cwd);
8
+ return { text: bold(white(name)), raw: name };
9
+ }
10
+ //# sourceMappingURL=directory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directory.js","sourceRoot":"","sources":["../../../src/cli/hud/components/directory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,SAAS,CACrC,GAAkB;IAElB,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;IAC1B,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AAChD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ComponentResult, GatherContext } from '../types.js';
2
+ export default function gitAheadBehind(ctx: GatherContext): Promise<ComponentResult | null>;
3
+ //# sourceMappingURL=git-ahead-behind.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-ahead-behind.d.ts","sourceRoot":"","sources":["../../../src/cli/hud/components/git-ahead-behind.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGlE,wBAA8B,cAAc,CAC1C,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CASjC"}
@@ -0,0 +1,16 @@
1
+ import { dim } from '../colors.js';
2
+ export default async function gitAheadBehind(ctx) {
3
+ if (!ctx.git)
4
+ return null;
5
+ const { ahead, behind } = ctx.git;
6
+ if (ahead === 0 && behind === 0)
7
+ return null;
8
+ const rawParts = [];
9
+ if (ahead > 0)
10
+ rawParts.push(`${ahead}\u2191`);
11
+ if (behind > 0)
12
+ rawParts.push(`${behind}\u2193`);
13
+ const raw = rawParts.join(' ');
14
+ return { text: dim(raw), raw };
15
+ }
16
+ //# sourceMappingURL=git-ahead-behind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-ahead-behind.js","sourceRoot":"","sources":["../../../src/cli/hud/components/git-ahead-behind.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEnC,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,cAAc,CAC1C,GAAkB;IAElB,IAAI,CAAC,GAAG,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC;IAClC,IAAI,KAAK,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,KAAK,GAAG,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC;IAC/C,IAAI,MAAM,GAAG,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,QAAQ,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;AACjC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ComponentResult, GatherContext } from '../types.js';
2
+ export default function gitBranch(ctx: GatherContext): Promise<ComponentResult | null>;
3
+ //# sourceMappingURL=git-branch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-branch.d.ts","sourceRoot":"","sources":["../../../src/cli/hud/components/git-branch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGlE,wBAA8B,SAAS,CACrC,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAWjC"}
@@ -0,0 +1,14 @@
1
+ import { white, yellow, green } from '../colors.js';
2
+ export default async function gitBranch(ctx) {
3
+ if (!ctx.git)
4
+ return null;
5
+ const dirtyMark = ctx.git.dirty ? '*' : '';
6
+ const stagedMark = ctx.git.staged ? '+' : '';
7
+ const indicator = dirtyMark + stagedMark;
8
+ const text = white(ctx.git.branch) +
9
+ (dirtyMark ? yellow(dirtyMark) : '') +
10
+ (stagedMark ? green(stagedMark) : '');
11
+ const raw = ctx.git.branch + indicator;
12
+ return { text, raw };
13
+ }
14
+ //# sourceMappingURL=git-branch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-branch.js","sourceRoot":"","sources":["../../../src/cli/hud/components/git-branch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,SAAS,CACrC,GAAkB;IAElB,IAAI,CAAC,GAAG,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3C,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,MAAM,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;IACzC,MAAM,IAAI,GACR,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;QACrB,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC;IACvC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACvB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ComponentResult, GatherContext } from '../types.js';
2
+ export default function model(ctx: GatherContext): Promise<ComponentResult | null>;
3
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/cli/hud/components/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGlE,wBAA8B,KAAK,CACjC,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAmBjC"}
@@ -0,0 +1,21 @@
1
+ import { dim, white } from '../colors.js';
2
+ export default async function model(ctx) {
3
+ const name = ctx.stdin.model?.display_name;
4
+ if (!name)
5
+ return null;
6
+ // Strip "Claude " prefix and trailing context info like "(1M context)" for brevity
7
+ const short = name
8
+ .replace(/^Claude\s+/i, '')
9
+ .replace(/\s*\(\d+[KkMm]\s*context\)\s*$/, '');
10
+ const cwSize = ctx.stdin.context_window?.context_window_size;
11
+ let sizeStr = '';
12
+ if (cwSize) {
13
+ sizeStr =
14
+ cwSize >= 1_000_000
15
+ ? ` [${Math.round(cwSize / 1_000_000)}m]`
16
+ : ` [${Math.round(cwSize / 1000)}k]`;
17
+ }
18
+ const raw = short + sizeStr;
19
+ return { text: white(short) + (sizeStr ? dim(sizeStr) : ''), raw };
20
+ }
21
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/cli/hud/components/model.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,KAAK,CACjC,GAAkB;IAElB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC;IAC3C,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,mFAAmF;IACnF,MAAM,KAAK,GAAG,IAAI;SACf,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;SAC1B,OAAO,CAAC,gCAAgC,EAAE,EAAE,CAAC,CAAC;IAEjD,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,mBAAmB,CAAC;IAC7D,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,MAAM,EAAE,CAAC;QACX,OAAO;YACL,MAAM,IAAI,SAAS;gBACjB,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI;gBACzC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;IAC3C,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,GAAG,OAAO,CAAC;IAC5B,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;AACrE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ComponentResult, GatherContext } from '../types.js';
2
+ export default function releaseInfo(ctx: GatherContext): Promise<ComponentResult | null>;
3
+ //# sourceMappingURL=release-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-info.d.ts","sourceRoot":"","sources":["../../../src/cli/hud/components/release-info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGlE,wBAA8B,WAAW,CACvC,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAKjC"}
@@ -0,0 +1,9 @@
1
+ import { dim } from '../colors.js';
2
+ export default async function releaseInfo(ctx) {
3
+ if (!ctx.git?.lastTag)
4
+ return null;
5
+ const { lastTag, commitsSinceTag } = ctx.git;
6
+ const raw = commitsSinceTag > 0 ? `${lastTag} +${commitsSinceTag}` : lastTag;
7
+ return { text: dim(raw), raw };
8
+ }
9
+ //# sourceMappingURL=release-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-info.js","sourceRoot":"","sources":["../../../src/cli/hud/components/release-info.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEnC,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,WAAW,CACvC,GAAkB;IAElB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC;IAC7C,MAAM,GAAG,GAAG,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,eAAe,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7E,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;AACjC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ComponentResult, GatherContext } from '../types.js';
2
+ export default function sessionCost(ctx: GatherContext): Promise<ComponentResult | null>;
3
+ //# sourceMappingURL=session-cost.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-cost.d.ts","sourceRoot":"","sources":["../../../src/cli/hud/components/session-cost.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGlE,wBAA8B,WAAW,CACvC,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAKjC"}
@@ -0,0 +1,9 @@
1
+ import { dim } from '../colors.js';
2
+ export default async function sessionCost(ctx) {
3
+ const cost = ctx.stdin.cost?.total_cost_usd;
4
+ if (cost == null)
5
+ return null;
6
+ const formatted = `$${cost.toFixed(2)}`;
7
+ return { text: dim(formatted), raw: formatted };
8
+ }
9
+ //# sourceMappingURL=session-cost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-cost.js","sourceRoot":"","sources":["../../../src/cli/hud/components/session-cost.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEnC,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,WAAW,CACvC,GAAkB;IAElB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC;IAC5C,IAAI,IAAI,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;AAClD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ComponentResult, GatherContext } from '../types.js';
2
+ export default function sessionDuration(ctx: GatherContext): Promise<ComponentResult | null>;
3
+ //# sourceMappingURL=session-duration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-duration.d.ts","sourceRoot":"","sources":["../../../src/cli/hud/components/session-duration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGlE,wBAA8B,eAAe,CAC3C,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAajC"}
@@ -0,0 +1,18 @@
1
+ import { dim } from '../colors.js';
2
+ export default async function sessionDuration(ctx) {
3
+ if (!ctx.sessionStartTime)
4
+ return null;
5
+ const elapsed = Math.floor((Date.now() - ctx.sessionStartTime) / 1000);
6
+ const minutes = Math.floor(elapsed / 60);
7
+ const hours = Math.floor(minutes / 60);
8
+ let label;
9
+ if (hours > 0) {
10
+ label = `${hours}h ${minutes % 60}m`;
11
+ }
12
+ else {
13
+ label = `${minutes}m`;
14
+ }
15
+ const text = `\u23F1 ${label}`;
16
+ return { text: dim(text), raw: text };
17
+ }
18
+ //# sourceMappingURL=session-duration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-duration.js","sourceRoot":"","sources":["../../../src/cli/hud/components/session-duration.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEnC,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,eAAe,CAC3C,GAAkB;IAElB,IAAI,CAAC,GAAG,CAAC,gBAAgB;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACvC,IAAI,KAAa,CAAC;IAClB,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,KAAK,GAAG,GAAG,KAAK,KAAK,OAAO,GAAG,EAAE,GAAG,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,GAAG,OAAO,GAAG,CAAC;IACxB,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,KAAK,EAAE,CAAC;IAC/B,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACxC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ComponentResult, GatherContext } from '../types.js';
2
+ export default function todoProgress(ctx: GatherContext): Promise<ComponentResult | null>;
3
+ //# sourceMappingURL=todo-progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todo-progress.d.ts","sourceRoot":"","sources":["../../../src/cli/hud/components/todo-progress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGlE,wBAA8B,YAAY,CACxC,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAMjC"}
@@ -0,0 +1,11 @@
1
+ import { dim } from '../colors.js';
2
+ export default async function todoProgress(ctx) {
3
+ if (!ctx.transcript)
4
+ return null;
5
+ const { todos } = ctx.transcript;
6
+ if (todos.total === 0)
7
+ return null;
8
+ const label = `${todos.completed}/${todos.total} todos`;
9
+ return { text: dim(label), raw: label };
10
+ }
11
+ //# sourceMappingURL=todo-progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todo-progress.js","sourceRoot":"","sources":["../../../src/cli/hud/components/todo-progress.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEnC,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,YAAY,CACxC,GAAkB;IAElB,IAAI,CAAC,GAAG,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC;IACjC,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,KAAK,GAAG,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,QAAQ,CAAC;IACxD,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ComponentResult, GatherContext } from '../types.js';
2
+ export default function usageQuota(ctx: GatherContext): Promise<ComponentResult | null>;
3
+ //# sourceMappingURL=usage-quota.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-quota.d.ts","sourceRoot":"","sources":["../../../src/cli/hud/components/usage-quota.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AA6BlE,wBAA8B,UAAU,CACtC,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAqBjC"}
@@ -0,0 +1,45 @@
1
+ import { green, yellow, red, dim } from '../colors.js';
2
+ const BAR_WIDTH = 8;
3
+ function renderBar(percent) {
4
+ const filled = Math.round((percent / 100) * BAR_WIDTH);
5
+ const empty = BAR_WIDTH - filled;
6
+ let colorFn;
7
+ if (percent < 50) {
8
+ colorFn = green;
9
+ }
10
+ else if (percent < 80) {
11
+ colorFn = yellow;
12
+ }
13
+ else {
14
+ colorFn = red;
15
+ }
16
+ const filledBar = '\u2588'.repeat(filled);
17
+ const emptyBar = '\u2591'.repeat(empty);
18
+ const text = colorFn(filledBar) +
19
+ dim(emptyBar) +
20
+ ' ' +
21
+ colorFn(`${percent}%`);
22
+ const raw = `${filledBar}${emptyBar} ${percent}%`;
23
+ return { text, raw };
24
+ }
25
+ export default async function usageQuota(ctx) {
26
+ if (!ctx.usage)
27
+ return null;
28
+ const { fiveHourPercent, sevenDayPercent } = ctx.usage;
29
+ const parts = [];
30
+ if (fiveHourPercent !== null) {
31
+ const bar = renderBar(Math.round(fiveHourPercent));
32
+ parts.push({ text: dim('5h ') + bar.text, raw: `5h ${bar.raw}` });
33
+ }
34
+ if (sevenDayPercent !== null) {
35
+ const bar = renderBar(Math.round(sevenDayPercent));
36
+ parts.push({ text: dim('7d ') + bar.text, raw: `7d ${bar.raw}` });
37
+ }
38
+ if (parts.length === 0)
39
+ return null;
40
+ const sep = dim(' \u00B7 ');
41
+ const text = dim('Session ') + parts.map((p) => p.text).join(sep);
42
+ const raw = 'Session ' + parts.map((p) => p.raw).join(' \u00B7 ');
43
+ return { text, raw };
44
+ }
45
+ //# sourceMappingURL=usage-quota.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-quota.js","sourceRoot":"","sources":["../../../src/cli/hud/components/usage-quota.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,SAAS,GAAG,CAAC,CAAC;AAEpB,SAAS,SAAS,CAAC,OAAe;IAChC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;IAEjC,IAAI,OAA8B,CAAC;IACnC,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;QACjB,OAAO,GAAG,KAAK,CAAC;IAClB,CAAC;SAAM,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;QACxB,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,GAAG,CAAC;IAChB,CAAC;IAED,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,IAAI,GACR,OAAO,CAAC,SAAS,CAAC;QAClB,GAAG,CAAC,QAAQ,CAAC;QACb,GAAG;QACH,OAAO,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,GAAG,SAAS,GAAG,QAAQ,IAAI,OAAO,GAAG,CAAC;IAClD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,UAAU,CACtC,GAAkB;IAElB,IAAI,CAAC,GAAG,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAE5B,MAAM,EAAE,eAAe,EAAE,eAAe,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC;IACvD,MAAM,KAAK,GAAoC,EAAE,CAAC;IAElD,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpC,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClE,MAAM,GAAG,GAAG,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACvB,CAAC"}