devflow-kit 1.6.1 → 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 (203) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/README.md +31 -0
  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 +114 -5
  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-ambient/agents/skimmer.md +71 -21
  68. package/plugins/devflow-audit-claude/.claude-plugin/plugin.json +1 -1
  69. package/plugins/devflow-code-review/.claude-plugin/plugin.json +1 -1
  70. package/plugins/devflow-core-skills/.claude-plugin/plugin.json +1 -1
  71. package/plugins/devflow-debug/.claude-plugin/plugin.json +1 -1
  72. package/plugins/devflow-frontend-design/.claude-plugin/plugin.json +1 -1
  73. package/plugins/devflow-go/.claude-plugin/plugin.json +1 -1
  74. package/plugins/devflow-implement/.claude-plugin/plugin.json +1 -1
  75. package/plugins/devflow-implement/agents/scrutinizer.md +6 -4
  76. package/plugins/devflow-implement/agents/shepherd.md +26 -12
  77. package/plugins/devflow-implement/agents/simplifier.md +24 -15
  78. package/plugins/devflow-implement/agents/skimmer.md +71 -21
  79. package/plugins/devflow-implement/commands/implement-teams.md +1 -1
  80. package/plugins/devflow-implement/commands/implement.md +1 -1
  81. package/plugins/devflow-implement/skills/self-review/references/stub-detection.md +135 -0
  82. package/plugins/devflow-java/.claude-plugin/plugin.json +1 -1
  83. package/plugins/devflow-python/.claude-plugin/plugin.json +1 -1
  84. package/plugins/devflow-react/.claude-plugin/plugin.json +1 -1
  85. package/plugins/devflow-resolve/.claude-plugin/plugin.json +1 -1
  86. package/plugins/devflow-resolve/agents/simplifier.md +24 -15
  87. package/plugins/devflow-rust/.claude-plugin/plugin.json +1 -1
  88. package/plugins/devflow-self-review/.claude-plugin/plugin.json +1 -1
  89. package/plugins/devflow-self-review/agents/scrutinizer.md +6 -4
  90. package/plugins/devflow-self-review/agents/simplifier.md +24 -15
  91. package/plugins/devflow-self-review/skills/self-review/references/stub-detection.md +135 -0
  92. package/plugins/devflow-specify/.claude-plugin/plugin.json +1 -1
  93. package/plugins/devflow-specify/agents/skimmer.md +71 -21
  94. package/plugins/devflow-specify/commands/specify-teams.md +1 -1
  95. package/plugins/devflow-specify/commands/specify.md +1 -1
  96. package/plugins/devflow-typescript/.claude-plugin/plugin.json +1 -1
  97. package/scripts/hud/cache.d.ts +14 -0
  98. package/scripts/hud/cache.d.ts.map +1 -0
  99. package/scripts/hud/cache.js +54 -0
  100. package/scripts/hud/cache.js.map +1 -0
  101. package/scripts/hud/colors.d.ts +23 -0
  102. package/scripts/hud/colors.d.ts.map +1 -0
  103. package/scripts/hud/colors.js +62 -0
  104. package/scripts/hud/colors.js.map +1 -0
  105. package/scripts/hud/components/config-counts.d.ts +8 -0
  106. package/scripts/hud/components/config-counts.d.ts.map +1 -0
  107. package/scripts/hud/components/config-counts.js +91 -0
  108. package/scripts/hud/components/config-counts.js.map +1 -0
  109. package/scripts/hud/components/context-usage.d.ts +8 -0
  110. package/scripts/hud/components/context-usage.d.ts.map +1 -0
  111. package/scripts/hud/components/context-usage.js +49 -0
  112. package/scripts/hud/components/context-usage.js.map +1 -0
  113. package/scripts/hud/components/diff-stats.d.ts +3 -0
  114. package/scripts/hud/components/diff-stats.d.ts.map +1 -0
  115. package/scripts/hud/components/diff-stats.js +36 -0
  116. package/scripts/hud/components/diff-stats.js.map +1 -0
  117. package/scripts/hud/components/directory.d.ts +3 -0
  118. package/scripts/hud/components/directory.d.ts.map +1 -0
  119. package/scripts/hud/components/directory.js +10 -0
  120. package/scripts/hud/components/directory.js.map +1 -0
  121. package/scripts/hud/components/git-ahead-behind.d.ts +3 -0
  122. package/scripts/hud/components/git-ahead-behind.d.ts.map +1 -0
  123. package/scripts/hud/components/git-ahead-behind.js +16 -0
  124. package/scripts/hud/components/git-ahead-behind.js.map +1 -0
  125. package/scripts/hud/components/git-branch.d.ts +3 -0
  126. package/scripts/hud/components/git-branch.d.ts.map +1 -0
  127. package/scripts/hud/components/git-branch.js +14 -0
  128. package/scripts/hud/components/git-branch.js.map +1 -0
  129. package/scripts/hud/components/model.d.ts +3 -0
  130. package/scripts/hud/components/model.d.ts.map +1 -0
  131. package/scripts/hud/components/model.js +21 -0
  132. package/scripts/hud/components/model.js.map +1 -0
  133. package/scripts/hud/components/release-info.d.ts +3 -0
  134. package/scripts/hud/components/release-info.d.ts.map +1 -0
  135. package/scripts/hud/components/release-info.js +9 -0
  136. package/scripts/hud/components/release-info.js.map +1 -0
  137. package/scripts/hud/components/session-cost.d.ts +3 -0
  138. package/scripts/hud/components/session-cost.d.ts.map +1 -0
  139. package/scripts/hud/components/session-cost.js +9 -0
  140. package/scripts/hud/components/session-cost.js.map +1 -0
  141. package/scripts/hud/components/session-duration.d.ts +3 -0
  142. package/scripts/hud/components/session-duration.d.ts.map +1 -0
  143. package/scripts/hud/components/session-duration.js +18 -0
  144. package/scripts/hud/components/session-duration.js.map +1 -0
  145. package/scripts/hud/components/todo-progress.d.ts +3 -0
  146. package/scripts/hud/components/todo-progress.d.ts.map +1 -0
  147. package/scripts/hud/components/todo-progress.js +11 -0
  148. package/scripts/hud/components/todo-progress.js.map +1 -0
  149. package/scripts/hud/components/usage-quota.d.ts +3 -0
  150. package/scripts/hud/components/usage-quota.d.ts.map +1 -0
  151. package/scripts/hud/components/usage-quota.js +45 -0
  152. package/scripts/hud/components/usage-quota.js.map +1 -0
  153. package/scripts/hud/components/version-badge.d.ts +3 -0
  154. package/scripts/hud/components/version-badge.d.ts.map +1 -0
  155. package/scripts/hud/components/version-badge.js +80 -0
  156. package/scripts/hud/components/version-badge.js.map +1 -0
  157. package/scripts/hud/components/worktree-count.d.ts +3 -0
  158. package/scripts/hud/components/worktree-count.d.ts.map +1 -0
  159. package/scripts/hud/components/worktree-count.js +8 -0
  160. package/scripts/hud/components/worktree-count.js.map +1 -0
  161. package/scripts/hud/config.d.ts +10 -0
  162. package/scripts/hud/config.d.ts.map +1 -0
  163. package/scripts/hud/config.js +55 -0
  164. package/scripts/hud/config.js.map +1 -0
  165. package/scripts/hud/credentials.d.ts +17 -0
  166. package/scripts/hud/credentials.d.ts.map +1 -0
  167. package/scripts/hud/credentials.js +99 -0
  168. package/scripts/hud/credentials.js.map +1 -0
  169. package/scripts/hud/git.d.ts +7 -0
  170. package/scripts/hud/git.d.ts.map +1 -0
  171. package/scripts/hud/git.js +153 -0
  172. package/scripts/hud/git.js.map +1 -0
  173. package/scripts/hud/index.d.ts +2 -0
  174. package/scripts/hud/index.d.ts.map +1 -0
  175. package/scripts/hud/index.js +81 -0
  176. package/scripts/hud/index.js.map +1 -0
  177. package/scripts/hud/render.d.ts +7 -0
  178. package/scripts/hud/render.d.ts.map +1 -0
  179. package/scripts/hud/render.js +111 -0
  180. package/scripts/hud/render.js.map +1 -0
  181. package/scripts/hud/stdin.d.ts +6 -0
  182. package/scripts/hud/stdin.d.ts.map +1 -0
  183. package/scripts/hud/stdin.js +25 -0
  184. package/scripts/hud/stdin.js.map +1 -0
  185. package/scripts/hud/transcript.d.ts +7 -0
  186. package/scripts/hud/transcript.d.ts.map +1 -0
  187. package/scripts/hud/transcript.js +130 -0
  188. package/scripts/hud/transcript.js.map +1 -0
  189. package/scripts/hud/types.d.ts +116 -0
  190. package/scripts/hud/types.d.ts.map +1 -0
  191. package/scripts/hud/types.js +2 -0
  192. package/scripts/hud/types.js.map +1 -0
  193. package/scripts/hud/usage-api.d.ts +7 -0
  194. package/scripts/hud/usage-api.d.ts.map +1 -0
  195. package/scripts/hud/usage-api.js +84 -0
  196. package/scripts/hud/usage-api.js.map +1 -0
  197. package/scripts/hud.sh +5 -0
  198. package/shared/agents/scrutinizer.md +6 -4
  199. package/shared/agents/shepherd.md +26 -12
  200. package/shared/agents/simplifier.md +24 -15
  201. package/shared/agents/skimmer.md +71 -21
  202. package/shared/skills/self-review/references/stub-detection.md +135 -0
  203. package/src/templates/settings.json +1 -1
@@ -4,7 +4,7 @@
4
4
  "author": {
5
5
  "name": "Dean0x"
6
6
  },
7
- "version": "1.6.1",
7
+ "version": "1.8.0",
8
8
  "homepage": "https://github.com/dean0x/devflow",
9
9
  "repository": "https://github.com/dean0x/devflow",
10
10
  "license": "MIT",
@@ -0,0 +1,14 @@
1
+ export declare function getCacheDir(): string;
2
+ /**
3
+ * Read a cached value. Returns null if missing or expired.
4
+ */
5
+ export declare function readCache<T>(key: string): T | null;
6
+ /**
7
+ * Read a cached value regardless of TTL (stale data). Returns null if missing.
8
+ */
9
+ export declare function readCacheStale<T>(key: string): T | null;
10
+ /**
11
+ * Write a value to cache with a TTL in milliseconds.
12
+ */
13
+ export declare function writeCache<T>(key: string, data: T, ttlMs: number): void;
14
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/cli/hud/cache.ts"],"names":[],"mappings":"AAUA,wBAAgB,WAAW,IAAI,MAAM,CAIpC;AAoBD;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAElD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAEvD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAWvE"}
@@ -0,0 +1,54 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ export function getCacheDir() {
5
+ const devflowDir = process.env.DEVFLOW_DIR || path.join(process.env.HOME || homedir(), '.devflow');
6
+ return path.join(devflowDir, 'cache');
7
+ }
8
+ /**
9
+ * Read a cached value. Returns null if missing or expired.
10
+ * When `ignoreExpiry` is true, returns data regardless of TTL (stale read).
11
+ */
12
+ function readCacheEntry(key, ignoreExpiry) {
13
+ try {
14
+ const filePath = path.join(getCacheDir(), `${key}.json`);
15
+ const raw = fs.readFileSync(filePath, 'utf-8');
16
+ const entry = JSON.parse(raw);
17
+ if (ignoreExpiry || Date.now() - entry.timestamp < entry.ttl) {
18
+ return entry.data;
19
+ }
20
+ return null;
21
+ }
22
+ catch {
23
+ return null;
24
+ }
25
+ }
26
+ /**
27
+ * Read a cached value. Returns null if missing or expired.
28
+ */
29
+ export function readCache(key) {
30
+ return readCacheEntry(key, false);
31
+ }
32
+ /**
33
+ * Read a cached value regardless of TTL (stale data). Returns null if missing.
34
+ */
35
+ export function readCacheStale(key) {
36
+ return readCacheEntry(key, true);
37
+ }
38
+ /**
39
+ * Write a value to cache with a TTL in milliseconds.
40
+ */
41
+ export function writeCache(key, data, ttlMs) {
42
+ try {
43
+ const dir = getCacheDir();
44
+ if (!fs.existsSync(dir)) {
45
+ fs.mkdirSync(dir, { recursive: true });
46
+ }
47
+ const entry = { data, timestamp: Date.now(), ttl: ttlMs };
48
+ fs.writeFileSync(path.join(dir, `${key}.json`), JSON.stringify(entry));
49
+ }
50
+ catch {
51
+ // Cache write failure is non-fatal
52
+ }
53
+ }
54
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/cli/hud/cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAQlC,MAAM,UAAU,WAAW;IACzB,MAAM,UAAU,GACd,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;IAClF,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CAAI,GAAW,EAAE,YAAqB;IAC3D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC;QACzD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;QAC/C,IAAI,YAAY,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;YAC7D,OAAO,KAAK,CAAC,IAAI,CAAC;QACpB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAI,GAAW;IACtC,OAAO,cAAc,CAAI,GAAG,EAAE,KAAK,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAI,GAAW;IAC3C,OAAO,cAAc,CAAI,GAAG,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAI,GAAW,EAAE,IAAO,EAAE,KAAa;IAC/D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;QAC1B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,KAAK,GAAkB,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QACzE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,mCAAmC;IACrC,CAAC;AACH,CAAC"}
@@ -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"}