@sooneocean/claude-hud 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +20 -0
- package/.claude-plugin/plugin.json +20 -0
- package/LICENSE +21 -0
- package/README.md +379 -0
- package/commands/configure.md +361 -0
- package/commands/export.md +43 -0
- package/commands/health.md +61 -0
- package/commands/setup.md +287 -0
- package/commands/theme.md +31 -0
- package/dist/alert.d.ts +31 -0
- package/dist/alert.d.ts.map +1 -0
- package/dist/alert.js +53 -0
- package/dist/alert.js.map +1 -0
- package/dist/burn-rate.d.ts +4 -0
- package/dist/burn-rate.d.ts.map +1 -0
- package/dist/burn-rate.js +36 -0
- package/dist/burn-rate.js.map +1 -0
- package/dist/cache.d.ts +6 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +47 -0
- package/dist/cache.js.map +1 -0
- package/dist/claude-config-dir.d.ts +4 -0
- package/dist/claude-config-dir.d.ts.map +1 -0
- package/dist/claude-config-dir.js +24 -0
- package/dist/claude-config-dir.js.map +1 -0
- package/dist/config-io.d.ts +6 -0
- package/dist/config-io.d.ts.map +1 -0
- package/dist/config-io.js +27 -0
- package/dist/config-io.js.map +1 -0
- package/dist/config-reader.d.ts +8 -0
- package/dist/config-reader.d.ts.map +1 -0
- package/dist/config-reader.js +204 -0
- package/dist/config-reader.js.map +1 -0
- package/dist/config.d.ts +94 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +358 -0
- package/dist/config.js.map +1 -0
- package/dist/constants.d.ts +11 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +11 -0
- package/dist/constants.js.map +1 -0
- package/dist/cost-tracker.d.ts +9 -0
- package/dist/cost-tracker.d.ts.map +1 -0
- package/dist/cost-tracker.js +46 -0
- package/dist/cost-tracker.js.map +1 -0
- package/dist/debug.d.ts +6 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +15 -0
- package/dist/debug.js.map +1 -0
- package/dist/extra-cmd.d.ts +20 -0
- package/dist/extra-cmd.d.ts.map +1 -0
- package/dist/extra-cmd.js +112 -0
- package/dist/extra-cmd.js.map +1 -0
- package/dist/git.d.ts +16 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +94 -0
- package/dist/git.js.map +1 -0
- package/dist/health-check.d.ts +12 -0
- package/dist/health-check.d.ts.map +1 -0
- package/dist/health-check.js +37 -0
- package/dist/health-check.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +198 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/agent-teams-provider.d.ts +10 -0
- package/dist/providers/agent-teams-provider.d.ts.map +1 -0
- package/dist/providers/agent-teams-provider.js +57 -0
- package/dist/providers/agent-teams-provider.js.map +1 -0
- package/dist/providers/agw-provider.d.ts +10 -0
- package/dist/providers/agw-provider.d.ts.map +1 -0
- package/dist/providers/agw-provider.js +49 -0
- package/dist/providers/agw-provider.js.map +1 -0
- package/dist/providers/index.d.ts +14 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +25 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/render/agents-line.d.ts +3 -0
- package/dist/render/agents-line.d.ts.map +1 -0
- package/dist/render/agents-line.js +40 -0
- package/dist/render/agents-line.js.map +1 -0
- package/dist/render/alert-line.d.ts +3 -0
- package/dist/render/alert-line.d.ts.map +1 -0
- package/dist/render/alert-line.js +11 -0
- package/dist/render/alert-line.js.map +1 -0
- package/dist/render/colors.d.ts +39 -0
- package/dist/render/colors.d.ts.map +1 -0
- package/dist/render/colors.js +109 -0
- package/dist/render/colors.js.map +1 -0
- package/dist/render/framework-line.d.ts +3 -0
- package/dist/render/framework-line.d.ts.map +1 -0
- package/dist/render/framework-line.js +32 -0
- package/dist/render/framework-line.js.map +1 -0
- package/dist/render/index.d.ts +3 -0
- package/dist/render/index.d.ts.map +1 -0
- package/dist/render/index.js +435 -0
- package/dist/render/index.js.map +1 -0
- package/dist/render/lines/environment.d.ts +3 -0
- package/dist/render/lines/environment.d.ts.map +1 -0
- package/dist/render/lines/environment.js +30 -0
- package/dist/render/lines/environment.js.map +1 -0
- package/dist/render/lines/identity.d.ts +3 -0
- package/dist/render/lines/identity.d.ts.map +1 -0
- package/dist/render/lines/identity.js +93 -0
- package/dist/render/lines/identity.js.map +1 -0
- package/dist/render/lines/index.d.ts +5 -0
- package/dist/render/lines/index.d.ts.map +1 -0
- package/dist/render/lines/index.js +5 -0
- package/dist/render/lines/index.js.map +1 -0
- package/dist/render/lines/project.d.ts +3 -0
- package/dist/render/lines/project.d.ts.map +1 -0
- package/dist/render/lines/project.js +100 -0
- package/dist/render/lines/project.js.map +1 -0
- package/dist/render/lines/usage.d.ts +3 -0
- package/dist/render/lines/usage.d.ts.map +1 -0
- package/dist/render/lines/usage.js +65 -0
- package/dist/render/lines/usage.js.map +1 -0
- package/dist/render/session-line.d.ts +7 -0
- package/dist/render/session-line.d.ts.map +1 -0
- package/dist/render/session-line.js +227 -0
- package/dist/render/session-line.js.map +1 -0
- package/dist/render/todos-line.d.ts +3 -0
- package/dist/render/todos-line.d.ts.map +1 -0
- package/dist/render/todos-line.js +29 -0
- package/dist/render/todos-line.js.map +1 -0
- package/dist/render/tools-line.d.ts +3 -0
- package/dist/render/tools-line.d.ts.map +1 -0
- package/dist/render/tools-line.js +45 -0
- package/dist/render/tools-line.js.map +1 -0
- package/dist/session-history.d.ts +15 -0
- package/dist/session-history.d.ts.map +1 -0
- package/dist/session-history.js +46 -0
- package/dist/session-history.js.map +1 -0
- package/dist/session-stats.d.ts +11 -0
- package/dist/session-stats.d.ts.map +1 -0
- package/dist/session-stats.js +48 -0
- package/dist/session-stats.js.map +1 -0
- package/dist/speed-tracker.d.ts +7 -0
- package/dist/speed-tracker.d.ts.map +1 -0
- package/dist/speed-tracker.js +34 -0
- package/dist/speed-tracker.js.map +1 -0
- package/dist/stdin.d.ts +9 -0
- package/dist/stdin.d.ts.map +1 -0
- package/dist/stdin.js +142 -0
- package/dist/stdin.js.map +1 -0
- package/dist/themes.d.ts +10 -0
- package/dist/themes.d.ts.map +1 -0
- package/dist/themes.js +81 -0
- package/dist/themes.js.map +1 -0
- package/dist/transcript.d.ts +3 -0
- package/dist/transcript.d.ts.map +1 -0
- package/dist/transcript.js +221 -0
- package/dist/transcript.js.map +1 -0
- package/dist/types.d.ts +124 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/usage-api.d.ts +62 -0
- package/dist/usage-api.d.ts.map +1 -0
- package/dist/usage-api.js +908 -0
- package/dist/usage-api.js.map +1 -0
- package/dist/utils/format.d.ts +9 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +75 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/terminal.d.ts +5 -0
- package/dist/utils/terminal.d.ts.map +1 -0
- package/dist/utils/terminal.js +42 -0
- package/dist/utils/terminal.js.map +1 -0
- package/package.json +36 -0
- package/src/alert.ts +75 -0
- package/src/burn-rate.ts +45 -0
- package/src/cache.ts +57 -0
- package/src/claude-config-dir.ts +27 -0
- package/src/config-io.ts +26 -0
- package/src/config-reader.ts +236 -0
- package/src/config.ts +496 -0
- package/src/constants.ts +10 -0
- package/src/cost-tracker.ts +53 -0
- package/src/debug.ts +16 -0
- package/src/extra-cmd.ts +125 -0
- package/src/git.ts +126 -0
- package/src/health-check.ts +50 -0
- package/src/index.ts +234 -0
- package/src/providers/agent-teams-provider.ts +56 -0
- package/src/providers/agw-provider.ts +47 -0
- package/src/providers/index.ts +27 -0
- package/src/render/agents-line.ts +51 -0
- package/src/render/alert-line.ts +11 -0
- package/src/render/colors.ts +145 -0
- package/src/render/framework-line.ts +34 -0
- package/src/render/index.ts +512 -0
- package/src/render/lines/environment.ts +41 -0
- package/src/render/lines/identity.ts +109 -0
- package/src/render/lines/index.ts +4 -0
- package/src/render/lines/project.ts +113 -0
- package/src/render/lines/usage.ts +79 -0
- package/src/render/session-line.ts +253 -0
- package/src/render/todos-line.ts +35 -0
- package/src/render/tools-line.ts +58 -0
- package/src/session-history.ts +62 -0
- package/src/session-stats.ts +65 -0
- package/src/speed-tracker.ts +51 -0
- package/src/stdin.ts +169 -0
- package/src/themes.ts +90 -0
- package/src/transcript.ts +268 -0
- package/src/types.ts +146 -0
- package/src/usage-api.ts +1090 -0
- package/src/utils/format.ts +79 -0
- package/src/utils/terminal.ts +46 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { RenderContext } from '../types.js';
|
|
2
|
+
import { getTotalTokens } from '../stdin.js';
|
|
3
|
+
import { dim, getQuotaColor, RESET } from '../render/colors.js';
|
|
4
|
+
|
|
5
|
+
export function formatTokens(n: number): string {
|
|
6
|
+
if (n >= 1000000) {
|
|
7
|
+
return `${(n / 1000000).toFixed(1)}M`;
|
|
8
|
+
}
|
|
9
|
+
if (n >= 1000) {
|
|
10
|
+
return `${(n / 1000).toFixed(0)}k`;
|
|
11
|
+
}
|
|
12
|
+
return n.toString();
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function formatContextValue(ctx: RenderContext, percent: number, mode: 'percent' | 'tokens' | 'remaining'): string {
|
|
16
|
+
if (mode === 'tokens') {
|
|
17
|
+
const totalTokens = getTotalTokens(ctx.stdin);
|
|
18
|
+
const size = ctx.stdin.context_window?.context_window_size ?? 0;
|
|
19
|
+
if (size > 0) {
|
|
20
|
+
return `${formatTokens(totalTokens)}/${formatTokens(size)}`;
|
|
21
|
+
}
|
|
22
|
+
return formatTokens(totalTokens);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
if (mode === 'remaining') {
|
|
26
|
+
return `${Math.max(0, 100 - percent)}%`;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return `${percent}%`;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function formatResetTime(resetAt: Date | null): string {
|
|
33
|
+
if (!resetAt) return '';
|
|
34
|
+
const now = new Date();
|
|
35
|
+
const diffMs = resetAt.getTime() - now.getTime();
|
|
36
|
+
if (diffMs <= 0) return '';
|
|
37
|
+
|
|
38
|
+
const diffMins = Math.ceil(diffMs / 60000);
|
|
39
|
+
if (diffMins < 60) return `${diffMins}m`;
|
|
40
|
+
|
|
41
|
+
const hours = Math.floor(diffMins / 60);
|
|
42
|
+
const mins = diffMins % 60;
|
|
43
|
+
|
|
44
|
+
if (hours >= 24) {
|
|
45
|
+
const days = Math.floor(hours / 24);
|
|
46
|
+
const remHours = hours % 24;
|
|
47
|
+
if (remHours > 0) return `${days}d ${remHours}h`;
|
|
48
|
+
return `${days}d`;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return mins > 0 ? `${hours}h ${mins}m` : `${hours}h`;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export function formatUsageError(error?: string): string {
|
|
55
|
+
if (!error) return '';
|
|
56
|
+
if (error === 'rate-limited') return ' (syncing...)';
|
|
57
|
+
if (error.startsWith('http-')) return ` (${error.slice(5)})`;
|
|
58
|
+
return ` (${error})`;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function formatUsagePercent(percent: number | null, colors?: RenderContext['config']['colors']): string {
|
|
62
|
+
if (percent === null) {
|
|
63
|
+
return dim('--');
|
|
64
|
+
}
|
|
65
|
+
const color = getQuotaColor(percent, colors);
|
|
66
|
+
return `${color}${percent}%${RESET}`;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export function truncateString(str: string, maxLen: number, suffix = '...'): string {
|
|
70
|
+
if (str.length <= maxLen) return str;
|
|
71
|
+
return str.slice(0, maxLen - suffix.length) + suffix;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export function truncatePath(filePath: string, maxLen = 20): string {
|
|
75
|
+
if (filePath.length <= maxLen) return filePath;
|
|
76
|
+
const parts = filePath.split('/');
|
|
77
|
+
const filename = parts[parts.length - 1];
|
|
78
|
+
return `.../${filename}`;
|
|
79
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// Returns a progress bar width scaled to the current terminal width.
|
|
2
|
+
// Wide (>=100): 10, Medium (60-99): 6, Narrow (<60): 4. Defaults to 10.
|
|
3
|
+
export function getAdaptiveBarWidth(): number {
|
|
4
|
+
const stdoutCols = process.stdout?.columns;
|
|
5
|
+
const cols = (typeof stdoutCols === 'number' && Number.isFinite(stdoutCols) && stdoutCols > 0)
|
|
6
|
+
? Math.floor(stdoutCols)
|
|
7
|
+
: Number.parseInt(process.env.COLUMNS ?? '', 10);
|
|
8
|
+
|
|
9
|
+
if (Number.isFinite(cols) && cols > 0) {
|
|
10
|
+
if (cols >= 100) return 10;
|
|
11
|
+
if (cols >= 60) return 6;
|
|
12
|
+
return 4;
|
|
13
|
+
}
|
|
14
|
+
return 10;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// Returns the current terminal width in columns, or null if unknown.
|
|
18
|
+
// Checks stdout, then stderr (for piped subprocess mode), then COLUMNS env var.
|
|
19
|
+
export function getTerminalWidth(): number | null {
|
|
20
|
+
const stdoutColumns = process.stdout?.columns;
|
|
21
|
+
if (typeof stdoutColumns === 'number' && Number.isFinite(stdoutColumns) && stdoutColumns > 0) {
|
|
22
|
+
return Math.floor(stdoutColumns);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// When running as a statusline subprocess, stdout is piped but stderr is
|
|
26
|
+
// still connected to the real terminal — use it to get the actual width.
|
|
27
|
+
const stderrColumns = process.stderr?.columns;
|
|
28
|
+
if (typeof stderrColumns === 'number' && Number.isFinite(stderrColumns) && stderrColumns > 0) {
|
|
29
|
+
return Math.floor(stderrColumns);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const envColumns = Number.parseInt(process.env.COLUMNS ?? '', 10);
|
|
33
|
+
if (Number.isFinite(envColumns) && envColumns > 0) {
|
|
34
|
+
return envColumns;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function isNarrowTerminal(width: number | null): boolean {
|
|
41
|
+
return width !== null && width < 80;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function isVeryNarrowTerminal(width: number | null): boolean {
|
|
45
|
+
return width !== null && width < 60;
|
|
46
|
+
}
|