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.
- package/CHANGELOG.md +45 -0
- package/README.md +31 -0
- package/dist/cli.js +3 -1
- package/dist/commands/hud.d.ts +22 -0
- package/dist/commands/hud.js +180 -0
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.js +114 -5
- package/dist/commands/list.js +1 -0
- package/dist/commands/uninstall.js +9 -16
- package/dist/hud/cache.d.ts +14 -0
- package/dist/hud/cache.js +54 -0
- package/dist/hud/colors.d.ts +23 -0
- package/dist/hud/colors.js +62 -0
- package/dist/hud/components/config-counts.d.ts +8 -0
- package/dist/hud/components/config-counts.js +91 -0
- package/dist/hud/components/context-usage.d.ts +8 -0
- package/dist/hud/components/context-usage.js +49 -0
- package/dist/hud/components/diff-stats.d.ts +3 -0
- package/dist/hud/components/diff-stats.js +36 -0
- package/dist/hud/components/directory.d.ts +3 -0
- package/dist/hud/components/directory.js +10 -0
- package/dist/hud/components/git-ahead-behind.d.ts +3 -0
- package/dist/hud/components/git-ahead-behind.js +16 -0
- package/dist/hud/components/git-branch.d.ts +3 -0
- package/dist/hud/components/git-branch.js +14 -0
- package/dist/hud/components/model.d.ts +3 -0
- package/dist/hud/components/model.js +21 -0
- package/dist/hud/components/release-info.d.ts +3 -0
- package/dist/hud/components/release-info.js +9 -0
- package/dist/hud/components/session-cost.d.ts +3 -0
- package/dist/hud/components/session-cost.js +9 -0
- package/dist/hud/components/session-duration.d.ts +3 -0
- package/dist/hud/components/session-duration.js +18 -0
- package/dist/hud/components/todo-progress.d.ts +3 -0
- package/dist/hud/components/todo-progress.js +11 -0
- package/dist/hud/components/usage-quota.d.ts +3 -0
- package/dist/hud/components/usage-quota.js +45 -0
- package/dist/hud/components/version-badge.d.ts +3 -0
- package/dist/hud/components/version-badge.js +80 -0
- package/dist/hud/components/worktree-count.d.ts +3 -0
- package/dist/hud/components/worktree-count.js +8 -0
- package/dist/hud/config.d.ts +10 -0
- package/dist/hud/config.js +55 -0
- package/dist/hud/credentials.d.ts +17 -0
- package/dist/hud/credentials.js +99 -0
- package/dist/hud/git.d.ts +7 -0
- package/dist/hud/git.js +153 -0
- package/dist/hud/index.d.ts +2 -0
- package/dist/hud/index.js +81 -0
- package/dist/hud/render.d.ts +7 -0
- package/dist/hud/render.js +111 -0
- package/dist/hud/stdin.d.ts +6 -0
- package/dist/hud/stdin.js +25 -0
- package/dist/hud/transcript.d.ts +7 -0
- package/dist/hud/transcript.js +130 -0
- package/dist/hud/types.d.ts +116 -0
- package/dist/hud/types.js +2 -0
- package/dist/hud/usage-api.d.ts +7 -0
- package/dist/hud/usage-api.js +84 -0
- package/dist/utils/manifest.d.ts +1 -0
- package/package.json +5 -2
- package/plugins/devflow-accessibility/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-ambient/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-ambient/agents/scrutinizer.md +6 -4
- package/plugins/devflow-ambient/agents/shepherd.md +26 -12
- package/plugins/devflow-ambient/agents/simplifier.md +24 -15
- package/plugins/devflow-ambient/agents/skimmer.md +71 -21
- package/plugins/devflow-audit-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-code-review/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-core-skills/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-debug/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-frontend-design/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-go/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-implement/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-implement/agents/scrutinizer.md +6 -4
- package/plugins/devflow-implement/agents/shepherd.md +26 -12
- package/plugins/devflow-implement/agents/simplifier.md +24 -15
- package/plugins/devflow-implement/agents/skimmer.md +71 -21
- package/plugins/devflow-implement/commands/implement-teams.md +1 -1
- package/plugins/devflow-implement/commands/implement.md +1 -1
- package/plugins/devflow-implement/skills/self-review/references/stub-detection.md +135 -0
- package/plugins/devflow-java/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-python/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-react/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-resolve/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-resolve/agents/simplifier.md +24 -15
- package/plugins/devflow-rust/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-self-review/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-self-review/agents/scrutinizer.md +6 -4
- package/plugins/devflow-self-review/agents/simplifier.md +24 -15
- package/plugins/devflow-self-review/skills/self-review/references/stub-detection.md +135 -0
- package/plugins/devflow-specify/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-specify/agents/skimmer.md +71 -21
- package/plugins/devflow-specify/commands/specify-teams.md +1 -1
- package/plugins/devflow-specify/commands/specify.md +1 -1
- package/plugins/devflow-typescript/.claude-plugin/plugin.json +1 -1
- package/scripts/hud/cache.d.ts +14 -0
- package/scripts/hud/cache.d.ts.map +1 -0
- package/scripts/hud/cache.js +54 -0
- package/scripts/hud/cache.js.map +1 -0
- package/scripts/hud/colors.d.ts +23 -0
- package/scripts/hud/colors.d.ts.map +1 -0
- package/scripts/hud/colors.js +62 -0
- package/scripts/hud/colors.js.map +1 -0
- package/scripts/hud/components/config-counts.d.ts +8 -0
- package/scripts/hud/components/config-counts.d.ts.map +1 -0
- package/scripts/hud/components/config-counts.js +91 -0
- package/scripts/hud/components/config-counts.js.map +1 -0
- package/scripts/hud/components/context-usage.d.ts +8 -0
- package/scripts/hud/components/context-usage.d.ts.map +1 -0
- package/scripts/hud/components/context-usage.js +49 -0
- package/scripts/hud/components/context-usage.js.map +1 -0
- package/scripts/hud/components/diff-stats.d.ts +3 -0
- package/scripts/hud/components/diff-stats.d.ts.map +1 -0
- package/scripts/hud/components/diff-stats.js +36 -0
- package/scripts/hud/components/diff-stats.js.map +1 -0
- package/scripts/hud/components/directory.d.ts +3 -0
- package/scripts/hud/components/directory.d.ts.map +1 -0
- package/scripts/hud/components/directory.js +10 -0
- package/scripts/hud/components/directory.js.map +1 -0
- package/scripts/hud/components/git-ahead-behind.d.ts +3 -0
- package/scripts/hud/components/git-ahead-behind.d.ts.map +1 -0
- package/scripts/hud/components/git-ahead-behind.js +16 -0
- package/scripts/hud/components/git-ahead-behind.js.map +1 -0
- package/scripts/hud/components/git-branch.d.ts +3 -0
- package/scripts/hud/components/git-branch.d.ts.map +1 -0
- package/scripts/hud/components/git-branch.js +14 -0
- package/scripts/hud/components/git-branch.js.map +1 -0
- package/scripts/hud/components/model.d.ts +3 -0
- package/scripts/hud/components/model.d.ts.map +1 -0
- package/scripts/hud/components/model.js +21 -0
- package/scripts/hud/components/model.js.map +1 -0
- package/scripts/hud/components/release-info.d.ts +3 -0
- package/scripts/hud/components/release-info.d.ts.map +1 -0
- package/scripts/hud/components/release-info.js +9 -0
- package/scripts/hud/components/release-info.js.map +1 -0
- package/scripts/hud/components/session-cost.d.ts +3 -0
- package/scripts/hud/components/session-cost.d.ts.map +1 -0
- package/scripts/hud/components/session-cost.js +9 -0
- package/scripts/hud/components/session-cost.js.map +1 -0
- package/scripts/hud/components/session-duration.d.ts +3 -0
- package/scripts/hud/components/session-duration.d.ts.map +1 -0
- package/scripts/hud/components/session-duration.js +18 -0
- package/scripts/hud/components/session-duration.js.map +1 -0
- package/scripts/hud/components/todo-progress.d.ts +3 -0
- package/scripts/hud/components/todo-progress.d.ts.map +1 -0
- package/scripts/hud/components/todo-progress.js +11 -0
- package/scripts/hud/components/todo-progress.js.map +1 -0
- package/scripts/hud/components/usage-quota.d.ts +3 -0
- package/scripts/hud/components/usage-quota.d.ts.map +1 -0
- package/scripts/hud/components/usage-quota.js +45 -0
- package/scripts/hud/components/usage-quota.js.map +1 -0
- package/scripts/hud/components/version-badge.d.ts +3 -0
- package/scripts/hud/components/version-badge.d.ts.map +1 -0
- package/scripts/hud/components/version-badge.js +80 -0
- package/scripts/hud/components/version-badge.js.map +1 -0
- package/scripts/hud/components/worktree-count.d.ts +3 -0
- package/scripts/hud/components/worktree-count.d.ts.map +1 -0
- package/scripts/hud/components/worktree-count.js +8 -0
- package/scripts/hud/components/worktree-count.js.map +1 -0
- package/scripts/hud/config.d.ts +10 -0
- package/scripts/hud/config.d.ts.map +1 -0
- package/scripts/hud/config.js +55 -0
- package/scripts/hud/config.js.map +1 -0
- package/scripts/hud/credentials.d.ts +17 -0
- package/scripts/hud/credentials.d.ts.map +1 -0
- package/scripts/hud/credentials.js +99 -0
- package/scripts/hud/credentials.js.map +1 -0
- package/scripts/hud/git.d.ts +7 -0
- package/scripts/hud/git.d.ts.map +1 -0
- package/scripts/hud/git.js +153 -0
- package/scripts/hud/git.js.map +1 -0
- package/scripts/hud/index.d.ts +2 -0
- package/scripts/hud/index.d.ts.map +1 -0
- package/scripts/hud/index.js +81 -0
- package/scripts/hud/index.js.map +1 -0
- package/scripts/hud/render.d.ts +7 -0
- package/scripts/hud/render.d.ts.map +1 -0
- package/scripts/hud/render.js +111 -0
- package/scripts/hud/render.js.map +1 -0
- package/scripts/hud/stdin.d.ts +6 -0
- package/scripts/hud/stdin.d.ts.map +1 -0
- package/scripts/hud/stdin.js +25 -0
- package/scripts/hud/stdin.js.map +1 -0
- package/scripts/hud/transcript.d.ts +7 -0
- package/scripts/hud/transcript.d.ts.map +1 -0
- package/scripts/hud/transcript.js +130 -0
- package/scripts/hud/transcript.js.map +1 -0
- package/scripts/hud/types.d.ts +116 -0
- package/scripts/hud/types.d.ts.map +1 -0
- package/scripts/hud/types.js +2 -0
- package/scripts/hud/types.js.map +1 -0
- package/scripts/hud/usage-api.d.ts +7 -0
- package/scripts/hud/usage-api.d.ts.map +1 -0
- package/scripts/hud/usage-api.js +84 -0
- package/scripts/hud/usage-api.js.map +1 -0
- package/scripts/hud.sh +5 -0
- package/shared/agents/scrutinizer.md +6 -4
- package/shared/agents/shepherd.md +26 -12
- package/shared/agents/simplifier.md +24 -15
- package/shared/agents/skimmer.md +71 -21
- package/shared/skills/self-review/references/stub-detection.md +135 -0
- package/src/templates/settings.json +1 -1
|
@@ -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 @@
|
|
|
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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-badge.d.ts","sourceRoot":"","sources":["../../../src/cli/hud/components/version-badge.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAyElE,wBAA8B,YAAY,CACxC,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAqBjC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import * as fs from 'node:fs';
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
import { yellow } from '../colors.js';
|
|
5
|
+
import { readCache, writeCache } from '../cache.js';
|
|
6
|
+
const VERSION_CACHE_KEY = 'version-check';
|
|
7
|
+
const VERSION_CACHE_TTL = 24 * 60 * 60 * 1000; // 24 hours
|
|
8
|
+
function getCurrentVersion(devflowDir) {
|
|
9
|
+
// Try manifest.json first (most reliable for installed version)
|
|
10
|
+
try {
|
|
11
|
+
const manifestPath = path.join(devflowDir, 'manifest.json');
|
|
12
|
+
const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
|
|
13
|
+
if (typeof manifest.version === 'string')
|
|
14
|
+
return manifest.version;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
// Fall through
|
|
18
|
+
}
|
|
19
|
+
// Try package.json as fallback
|
|
20
|
+
try {
|
|
21
|
+
const pkgPath = path.join(path.dirname(new URL(import.meta.url).pathname), '..', '..', '..', 'package.json');
|
|
22
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
|
|
23
|
+
if (typeof pkg.version === 'string')
|
|
24
|
+
return pkg.version;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// Fall through
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
function fetchLatestVersion() {
|
|
32
|
+
return new Promise((resolve) => {
|
|
33
|
+
execFile('npm', ['view', 'devflow-kit', 'version', '--json'], { timeout: 5000 }, (err, stdout) => {
|
|
34
|
+
if (err) {
|
|
35
|
+
resolve(null);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
const parsed = JSON.parse(stdout.trim());
|
|
40
|
+
resolve(typeof parsed === 'string' ? parsed : null);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
const trimmed = stdout.trim();
|
|
44
|
+
resolve(trimmed || null);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
function compareVersions(current, latest) {
|
|
50
|
+
const a = current.split('.').map(Number);
|
|
51
|
+
const b = latest.split('.').map(Number);
|
|
52
|
+
for (let i = 0; i < 3; i++) {
|
|
53
|
+
if ((a[i] || 0) < (b[i] || 0))
|
|
54
|
+
return -1;
|
|
55
|
+
if ((a[i] || 0) > (b[i] || 0))
|
|
56
|
+
return 1;
|
|
57
|
+
}
|
|
58
|
+
return 0;
|
|
59
|
+
}
|
|
60
|
+
export default async function versionBadge(ctx) {
|
|
61
|
+
const current = getCurrentVersion(ctx.devflowDir);
|
|
62
|
+
if (!current)
|
|
63
|
+
return null;
|
|
64
|
+
// Check cache
|
|
65
|
+
let info = readCache(VERSION_CACHE_KEY);
|
|
66
|
+
if (!info) {
|
|
67
|
+
const latest = await fetchLatestVersion();
|
|
68
|
+
if (latest) {
|
|
69
|
+
info = { current, latest };
|
|
70
|
+
writeCache(VERSION_CACHE_KEY, info, VERSION_CACHE_TTL);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (info && compareVersions(info.current, info.latest) < 0) {
|
|
74
|
+
const badge = `\u2726 Devflow v${info.latest} \u00B7 update: npx devflow-kit init`;
|
|
75
|
+
return { text: yellow(badge), raw: badge };
|
|
76
|
+
}
|
|
77
|
+
// Don't show version when up to date
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=version-badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-badge.js","sourceRoot":"","sources":["../../../src/cli/hud/components/version-badge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree-count.d.ts","sourceRoot":"","sources":["../../../src/cli/hud/components/worktree-count.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGlE,wBAA8B,aAAa,CACzC,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAIjC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { dim } from '../colors.js';
|
|
2
|
+
export default async function worktreeCount(ctx) {
|
|
3
|
+
if (!ctx.git || ctx.git.worktreeCount <= 1)
|
|
4
|
+
return null;
|
|
5
|
+
const raw = `${ctx.git.worktreeCount} worktrees`;
|
|
6
|
+
return { text: dim(raw), raw };
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=worktree-count.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree-count.js","sourceRoot":"","sources":["../../../src/cli/hud/components/worktree-count.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEnC,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,aAAa,CACzC,GAAkB;IAElB,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACxD,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,aAAa,YAAY,CAAC;IACjD,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { HudConfig, ComponentId } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* All 14 HUD components in display order.
|
|
4
|
+
*/
|
|
5
|
+
export declare const HUD_COMPONENTS: readonly ComponentId[];
|
|
6
|
+
export declare function getConfigPath(): string;
|
|
7
|
+
export declare function loadConfig(): HudConfig;
|
|
8
|
+
export declare function saveConfig(config: HudConfig): void;
|
|
9
|
+
export declare function resolveComponents(config: HudConfig): ComponentId[];
|
|
10
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/cli/hud/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzD;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,SAAS,WAAW,EAehD,CAAC;AAEF,wBAAgB,aAAa,IAAI,MAAM,CAItC;AAED,wBAAgB,UAAU,IAAI,SAAS,CAYtC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAOlD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,WAAW,EAAE,CAIlE"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
/**
|
|
5
|
+
* All 14 HUD components in display order.
|
|
6
|
+
*/
|
|
7
|
+
export const HUD_COMPONENTS = [
|
|
8
|
+
'directory',
|
|
9
|
+
'gitBranch',
|
|
10
|
+
'gitAheadBehind',
|
|
11
|
+
'diffStats',
|
|
12
|
+
'releaseInfo',
|
|
13
|
+
'worktreeCount',
|
|
14
|
+
'model',
|
|
15
|
+
'contextUsage',
|
|
16
|
+
'versionBadge',
|
|
17
|
+
'sessionDuration',
|
|
18
|
+
'sessionCost',
|
|
19
|
+
'usageQuota',
|
|
20
|
+
'todoProgress',
|
|
21
|
+
'configCounts',
|
|
22
|
+
];
|
|
23
|
+
export function getConfigPath() {
|
|
24
|
+
const devflowDir = process.env.DEVFLOW_DIR || path.join(process.env.HOME || homedir(), '.devflow');
|
|
25
|
+
return path.join(devflowDir, 'hud.json');
|
|
26
|
+
}
|
|
27
|
+
export function loadConfig() {
|
|
28
|
+
const configPath = getConfigPath();
|
|
29
|
+
try {
|
|
30
|
+
const raw = fs.readFileSync(configPath, 'utf-8');
|
|
31
|
+
const parsed = JSON.parse(raw);
|
|
32
|
+
return {
|
|
33
|
+
enabled: parsed.enabled !== false,
|
|
34
|
+
detail: parsed.detail === true,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return { enabled: true, detail: false };
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export function saveConfig(config) {
|
|
42
|
+
const configPath = getConfigPath();
|
|
43
|
+
const dir = path.dirname(configPath);
|
|
44
|
+
if (!fs.existsSync(dir)) {
|
|
45
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
46
|
+
}
|
|
47
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n');
|
|
48
|
+
}
|
|
49
|
+
export function resolveComponents(config) {
|
|
50
|
+
if (config.enabled)
|
|
51
|
+
return [...HUD_COMPONENTS];
|
|
52
|
+
// Version badge always renders so users see upgrade notifications
|
|
53
|
+
return ['versionBadge'];
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/hud/config.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;AAGlC;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAA2B;IACpD,WAAW;IACX,WAAW;IACX,gBAAgB;IAChB,WAAW;IACX,aAAa;IACb,eAAe;IACf,OAAO;IACP,cAAc;IACd,cAAc;IACd,iBAAiB;IACjB,aAAa;IACb,YAAY;IACZ,cAAc;IACd,cAAc;CACf,CAAC;AAEF,MAAM,UAAU,aAAa;IAC3B,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,UAAU,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAuB,CAAC;QACrD,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO,KAAK,KAAK;YACjC,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,IAAI;SAC/B,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC1C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAiB;IAC1C,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,CAAC,GAAG,cAAc,CAAC,CAAC;IAC/C,kEAAkE;IAClE,OAAO,CAAC,cAAc,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface OAuthCredentials {
|
|
2
|
+
accessToken: string;
|
|
3
|
+
subscriptionType?: string;
|
|
4
|
+
}
|
|
5
|
+
/** Resolve the Claude config directory, respecting CLAUDE_CONFIG_DIR. */
|
|
6
|
+
export declare function getClaudeDir(): string;
|
|
7
|
+
/** Read OAuth credentials from ~/.claude/.credentials.json. Injectable claudeDir for tests. */
|
|
8
|
+
export declare function readCredentialsFile(claudeDir?: string): OAuthCredentials | null;
|
|
9
|
+
/** Read OAuth token from macOS Keychain. Returns null on non-darwin or failure. */
|
|
10
|
+
export declare function readKeychainToken(): Promise<string | null>;
|
|
11
|
+
/**
|
|
12
|
+
* Get OAuth credentials using platform-appropriate strategy.
|
|
13
|
+
* macOS: Keychain first, then file fallback. Other platforms: file only.
|
|
14
|
+
* Hybrid: if Keychain has token but no subscriptionType, merge from file.
|
|
15
|
+
*/
|
|
16
|
+
export declare function getCredentials(): Promise<OAuthCredentials | null>;
|
|
17
|
+
//# sourceMappingURL=credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/cli/hud/credentials.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAUD,yEAAyE;AACzE,wBAAgB,YAAY,IAAI,MAAM,CAKrC;AAED,+FAA+F;AAC/F,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAgB/E;AAED,mFAAmF;AACnF,wBAAgB,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAuC1D;AAED;;;;GAIG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAoBvE"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { execFile } from 'node:child_process';
|
|
5
|
+
const KEYCHAIN_TIMEOUT = 3000; // 3s
|
|
6
|
+
const DEBUG = !!process.env.DEVFLOW_HUD_DEBUG;
|
|
7
|
+
function debugLog(msg, data) {
|
|
8
|
+
if (!DEBUG)
|
|
9
|
+
return;
|
|
10
|
+
const entry = { ts: new Date().toISOString(), source: 'credentials', msg, ...data };
|
|
11
|
+
fs.appendFileSync('/tmp/hud-debug.log', JSON.stringify(entry) + '\n');
|
|
12
|
+
}
|
|
13
|
+
/** Resolve the Claude config directory, respecting CLAUDE_CONFIG_DIR. */
|
|
14
|
+
export function getClaudeDir() {
|
|
15
|
+
return (process.env.CLAUDE_CONFIG_DIR ||
|
|
16
|
+
path.join(process.env.HOME || homedir(), '.claude'));
|
|
17
|
+
}
|
|
18
|
+
/** Read OAuth credentials from ~/.claude/.credentials.json. Injectable claudeDir for tests. */
|
|
19
|
+
export function readCredentialsFile(claudeDir) {
|
|
20
|
+
try {
|
|
21
|
+
const dir = claudeDir ?? getClaudeDir();
|
|
22
|
+
const filePath = path.join(dir, '.credentials.json');
|
|
23
|
+
const raw = fs.readFileSync(filePath, 'utf-8');
|
|
24
|
+
const creds = JSON.parse(raw);
|
|
25
|
+
const oauth = creds.claudeAiOauth;
|
|
26
|
+
const accessToken = oauth?.accessToken;
|
|
27
|
+
if (typeof accessToken !== 'string' || !accessToken)
|
|
28
|
+
return null;
|
|
29
|
+
const subscriptionType = typeof oauth?.subscriptionType === 'string' ? oauth.subscriptionType : undefined;
|
|
30
|
+
debugLog('credentials file read', { filePath, hasSubscriptionType: !!subscriptionType });
|
|
31
|
+
return { accessToken, subscriptionType };
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** Read OAuth token from macOS Keychain. Returns null on non-darwin or failure. */
|
|
38
|
+
export function readKeychainToken() {
|
|
39
|
+
if (process.platform !== 'darwin')
|
|
40
|
+
return Promise.resolve(null);
|
|
41
|
+
return new Promise((resolve) => {
|
|
42
|
+
execFile('/usr/bin/security', ['find-generic-password', '-s', 'Claude Code-credentials', '-w'], { timeout: KEYCHAIN_TIMEOUT }, (err, stdout) => {
|
|
43
|
+
if (err || !stdout.trim()) {
|
|
44
|
+
debugLog('keychain read failed', { error: err?.message });
|
|
45
|
+
resolve(null);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
const parsed = JSON.parse(stdout.trim());
|
|
50
|
+
const oauth = parsed.claudeAiOauth;
|
|
51
|
+
const token = oauth?.accessToken;
|
|
52
|
+
if (typeof token === 'string' && token) {
|
|
53
|
+
debugLog('keychain token found');
|
|
54
|
+
resolve(token);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
debugLog('keychain: no accessToken in parsed data');
|
|
58
|
+
resolve(null);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// Keychain value might be the raw token string
|
|
63
|
+
const trimmed = stdout.trim();
|
|
64
|
+
if (trimmed.length > 20) {
|
|
65
|
+
debugLog('keychain: raw token string');
|
|
66
|
+
resolve(trimmed);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
debugLog('keychain: unparseable value');
|
|
70
|
+
resolve(null);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Get OAuth credentials using platform-appropriate strategy.
|
|
78
|
+
* macOS: Keychain first, then file fallback. Other platforms: file only.
|
|
79
|
+
* Hybrid: if Keychain has token but no subscriptionType, merge from file.
|
|
80
|
+
*/
|
|
81
|
+
export async function getCredentials() {
|
|
82
|
+
const fileCreds = readCredentialsFile();
|
|
83
|
+
if (process.platform !== 'darwin') {
|
|
84
|
+
debugLog('non-darwin: file credentials only', { found: !!fileCreds });
|
|
85
|
+
return fileCreds;
|
|
86
|
+
}
|
|
87
|
+
// macOS: try Keychain first
|
|
88
|
+
const keychainToken = await readKeychainToken();
|
|
89
|
+
if (keychainToken) {
|
|
90
|
+
// Merge subscriptionType from file if Keychain doesn't have it
|
|
91
|
+
const subscriptionType = fileCreds?.subscriptionType;
|
|
92
|
+
debugLog('using keychain token', { hasSubscriptionType: !!subscriptionType });
|
|
93
|
+
return { accessToken: keychainToken, subscriptionType };
|
|
94
|
+
}
|
|
95
|
+
// Fallback to file
|
|
96
|
+
debugLog('keychain failed, falling back to file', { found: !!fileCreds });
|
|
97
|
+
return fileCreds;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/cli/hud/credentials.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;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,KAAK;AAOpC,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;AAE9C,SAAS,QAAQ,CAAC,GAAW,EAAE,IAA8B;IAC3D,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,MAAM,KAAK,GAAG,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IACpF,EAAE,CAAC,cAAc,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AACxE,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,YAAY;IAC1B,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE,EAAE,SAAS,CAAC,CACpD,CAAC;AACJ,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,mBAAmB,CAAC,SAAkB;IACpD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,SAAS,IAAI,YAAY,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QACzD,MAAM,KAAK,GAAG,KAAK,CAAC,aAAoD,CAAC;QACzE,MAAM,WAAW,GAAG,KAAK,EAAE,WAAW,CAAC;QACvC,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QACjE,MAAM,gBAAgB,GACpB,OAAO,KAAK,EAAE,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;QACnF,QAAQ,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACzF,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,iBAAiB;IAC/B,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,QAAQ,CACN,mBAAmB,EACnB,CAAC,uBAAuB,EAAE,IAAI,EAAE,yBAAyB,EAAE,IAAI,CAAC,EAChE,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAC7B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;YACd,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC1B,QAAQ,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC1D,OAAO,CAAC,IAAI,CAAC,CAAC;gBACd,OAAO;YACT,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAA4B,CAAC;gBACpE,MAAM,KAAK,GAAG,MAAM,CAAC,aAAoD,CAAC;gBAC1E,MAAM,KAAK,GAAG,KAAK,EAAE,WAAW,CAAC;gBACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,EAAE,CAAC;oBACvC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;oBACjC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACjB,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,yCAAyC,CAAC,CAAC;oBACpD,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,+CAA+C;gBAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC9B,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;oBACxB,QAAQ,CAAC,4BAA4B,CAAC,CAAC;oBACvC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACnB,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,6BAA6B,CAAC,CAAC;oBACxC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChB,CAAC;YACH,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,SAAS,GAAG,mBAAmB,EAAE,CAAC;IAExC,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,QAAQ,CAAC,mCAAmC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QACtE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,4BAA4B;IAC5B,MAAM,aAAa,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAChD,IAAI,aAAa,EAAE,CAAC;QAClB,+DAA+D;QAC/D,MAAM,gBAAgB,GAAG,SAAS,EAAE,gBAAgB,CAAC;QACrD,QAAQ,CAAC,sBAAsB,EAAE,EAAE,mBAAmB,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC9E,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAC1D,CAAC;IAED,mBAAmB;IACnB,QAAQ,CAAC,uCAAuC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IAC1E,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { GitStatus } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Gather git status for the given working directory.
|
|
4
|
+
* Returns null if not in a git repo or on error.
|
|
5
|
+
*/
|
|
6
|
+
export declare function gatherGitStatus(cwd: string): Promise<GitStatus | null>;
|
|
7
|
+
//# sourceMappingURL=git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/cli/hud/git.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAgB5C;;;GAGG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAsF5E"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
const GIT_TIMEOUT = 1000; // 1s per command
|
|
3
|
+
function shellExec(cmd, args, cwd) {
|
|
4
|
+
return new Promise((resolve) => {
|
|
5
|
+
execFile(cmd, args, { cwd, timeout: GIT_TIMEOUT }, (err, stdout) => {
|
|
6
|
+
resolve(err ? '' : stdout.trim());
|
|
7
|
+
});
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
function gitExec(args, cwd) {
|
|
11
|
+
return shellExec('git', args, cwd);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Gather git status for the given working directory.
|
|
15
|
+
* Returns null if not in a git repo or on error.
|
|
16
|
+
*/
|
|
17
|
+
export async function gatherGitStatus(cwd) {
|
|
18
|
+
// Check if in a git repo
|
|
19
|
+
const topLevel = await gitExec(['rev-parse', '--show-toplevel'], cwd);
|
|
20
|
+
if (!topLevel)
|
|
21
|
+
return null;
|
|
22
|
+
// Branch name
|
|
23
|
+
const branch = await gitExec(['rev-parse', '--abbrev-ref', 'HEAD'], cwd);
|
|
24
|
+
if (!branch)
|
|
25
|
+
return null;
|
|
26
|
+
// Dirty check
|
|
27
|
+
const statusOutput = await gitExec(['status', '--porcelain', '--no-optional-locks'], cwd);
|
|
28
|
+
let dirty = false;
|
|
29
|
+
let staged = false;
|
|
30
|
+
for (const line of statusOutput.split('\n')) {
|
|
31
|
+
if (line.length < 2)
|
|
32
|
+
continue;
|
|
33
|
+
const index = line[0];
|
|
34
|
+
const worktree = line[1];
|
|
35
|
+
// Index column: staged change (A/M/D/R/C)
|
|
36
|
+
if (index !== ' ' && index !== '?')
|
|
37
|
+
staged = true;
|
|
38
|
+
// Worktree column: unstaged change (M/D), or untracked (??)
|
|
39
|
+
if (worktree !== ' ' || index === '?')
|
|
40
|
+
dirty = true;
|
|
41
|
+
}
|
|
42
|
+
// Ahead/behind — detect base branch with layered fallback (ported from statusline.sh)
|
|
43
|
+
const baseBranch = await detectBaseBranch(branch, cwd);
|
|
44
|
+
let ahead = 0;
|
|
45
|
+
let behind = 0;
|
|
46
|
+
if (baseBranch) {
|
|
47
|
+
const revList = await gitExec(['rev-list', '--left-right', '--count', `${baseBranch}...HEAD`], cwd);
|
|
48
|
+
const parts = revList.split(/\s+/);
|
|
49
|
+
if (parts.length === 2) {
|
|
50
|
+
behind = parseInt(parts[0], 10) || 0;
|
|
51
|
+
ahead = parseInt(parts[1], 10) || 0;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Diff stats against base
|
|
55
|
+
let filesChanged = 0;
|
|
56
|
+
let additions = 0;
|
|
57
|
+
let deletions = 0;
|
|
58
|
+
if (baseBranch) {
|
|
59
|
+
const diffStat = await gitExec(['diff', '--shortstat', baseBranch], cwd);
|
|
60
|
+
const filesMatch = diffStat.match(/(\d+)\s+file/);
|
|
61
|
+
const addMatch = diffStat.match(/(\d+)\s+insertion/);
|
|
62
|
+
const delMatch = diffStat.match(/(\d+)\s+deletion/);
|
|
63
|
+
filesChanged = filesMatch ? parseInt(filesMatch[1], 10) : 0;
|
|
64
|
+
additions = addMatch ? parseInt(addMatch[1], 10) : 0;
|
|
65
|
+
deletions = delMatch ? parseInt(delMatch[1], 10) : 0;
|
|
66
|
+
}
|
|
67
|
+
// Tag and worktree info (parallel)
|
|
68
|
+
const [tagOutput, worktreeOutput] = await Promise.all([
|
|
69
|
+
gitExec(['describe', '--tags', '--abbrev=0'], cwd),
|
|
70
|
+
gitExec(['worktree', 'list'], cwd),
|
|
71
|
+
]);
|
|
72
|
+
const lastTag = tagOutput || null;
|
|
73
|
+
let commitsSinceTag = 0;
|
|
74
|
+
if (lastTag) {
|
|
75
|
+
const countOutput = await gitExec(['rev-list', `${lastTag}..HEAD`, '--count'], cwd);
|
|
76
|
+
commitsSinceTag = parseInt(countOutput, 10) || 0;
|
|
77
|
+
}
|
|
78
|
+
const worktreeCount = worktreeOutput
|
|
79
|
+
? worktreeOutput.split('\n').filter(l => l.trim().length > 0).length
|
|
80
|
+
: 1;
|
|
81
|
+
return {
|
|
82
|
+
branch,
|
|
83
|
+
dirty,
|
|
84
|
+
staged,
|
|
85
|
+
ahead,
|
|
86
|
+
behind,
|
|
87
|
+
filesChanged,
|
|
88
|
+
additions,
|
|
89
|
+
deletions,
|
|
90
|
+
lastTag,
|
|
91
|
+
commitsSinceTag,
|
|
92
|
+
worktreeCount,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Detect the base branch for ahead/behind calculations.
|
|
97
|
+
* Uses a 4-layer fallback (ported from statusline.sh):
|
|
98
|
+
* 1. Branch reflog ("Created from")
|
|
99
|
+
* 2. HEAD reflog ("checkout: moving from X to branch")
|
|
100
|
+
* 3. GitHub PR base branch (gh pr view, cached)
|
|
101
|
+
* 4. main/master fallback
|
|
102
|
+
*/
|
|
103
|
+
async function detectBaseBranch(branch, cwd) {
|
|
104
|
+
// Layer 1: branch reflog — look for "branch: Created from"
|
|
105
|
+
const branchLog = await gitExec(['reflog', 'show', branch, '--format=%gs', '-n', '1'], cwd);
|
|
106
|
+
const createdMatch = branchLog.match(/branch: Created from (.+)/);
|
|
107
|
+
if (createdMatch) {
|
|
108
|
+
const candidate = createdMatch[1];
|
|
109
|
+
if (candidate !== 'HEAD' && !candidate.includes('~')) {
|
|
110
|
+
const exists = await gitExec(['rev-parse', '--verify', candidate], cwd);
|
|
111
|
+
if (exists)
|
|
112
|
+
return candidate;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Layer 2: HEAD reflog — look for "checkout: moving from X to branch"
|
|
116
|
+
const headLog = await gitExec(['reflog', 'show', 'HEAD', '--format=%gs'], cwd);
|
|
117
|
+
const escapedBranch = branch.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
118
|
+
const checkoutPattern = new RegExp(`checkout: moving from (\\S+) to ${escapedBranch}`);
|
|
119
|
+
for (const line of headLog.split('\n')) {
|
|
120
|
+
const match = line.match(checkoutPattern);
|
|
121
|
+
if (match) {
|
|
122
|
+
const candidate = match[1];
|
|
123
|
+
// Skip raw commit hashes and the current branch
|
|
124
|
+
if (candidate === branch || /^[0-9a-f]{7,}$/.test(candidate))
|
|
125
|
+
continue;
|
|
126
|
+
const exists = await gitExec(['rev-parse', '--verify', candidate], cwd);
|
|
127
|
+
if (exists)
|
|
128
|
+
return candidate;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// Layer 3: GitHub PR base branch via gh CLI
|
|
132
|
+
const prBase = await shellExec('gh', ['pr', 'view', '--json', 'baseRefName', '-q', '.baseRefName'], cwd);
|
|
133
|
+
if (prBase) {
|
|
134
|
+
const exists = await gitExec(['rev-parse', '--verify', prBase], cwd);
|
|
135
|
+
if (exists)
|
|
136
|
+
return prBase;
|
|
137
|
+
}
|
|
138
|
+
// Layer 4: main/master fallback (skip if already on that branch — use remote tracking instead)
|
|
139
|
+
for (const candidate of ['main', 'master']) {
|
|
140
|
+
if (candidate === branch) {
|
|
141
|
+
// On main/master itself — compare against remote tracking branch
|
|
142
|
+
const remote = await gitExec(['rev-parse', '--verify', `origin/${candidate}`], cwd);
|
|
143
|
+
if (remote)
|
|
144
|
+
return `origin/${candidate}`;
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
const exists = await gitExec(['rev-parse', '--verify', candidate], cwd);
|
|
148
|
+
if (exists)
|
|
149
|
+
return candidate;
|
|
150
|
+
}
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/cli/hud/git.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/hud/index.ts"],"names":[],"mappings":""}
|