claude-scope 0.1.2 → 0.1.3
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/dist/constants.d.ts +56 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +57 -0
- package/dist/constants.js.map +1 -0
- package/dist/core/renderer.d.ts.map +1 -1
- package/dist/core/renderer.js +2 -1
- package/dist/core/renderer.js.map +1 -1
- package/dist/core/stdin-data-widget.d.ts +85 -0
- package/dist/core/stdin-data-widget.d.ts.map +1 -0
- package/dist/core/stdin-data-widget.js +75 -0
- package/dist/core/stdin-data-widget.js.map +1 -0
- package/dist/core/widget-types.d.ts +30 -0
- package/dist/core/widget-types.d.ts.map +1 -0
- package/dist/core/widget-types.js +30 -0
- package/dist/core/widget-types.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +65 -14
- package/dist/index.js.map +1 -1
- package/dist/providers/git-provider.d.ts +17 -1
- package/dist/providers/git-provider.d.ts.map +1 -1
- package/dist/providers/git-provider.js +77 -0
- package/dist/providers/git-provider.js.map +1 -1
- package/dist/types.d.ts +55 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/colors.d.ts +16 -0
- package/dist/utils/colors.d.ts.map +1 -1
- package/dist/utils/colors.js +18 -0
- package/dist/utils/colors.js.map +1 -1
- package/dist/utils/formatters.d.ts +56 -0
- package/dist/utils/formatters.d.ts.map +1 -0
- package/dist/utils/formatters.js +114 -0
- package/dist/utils/formatters.js.map +1 -0
- package/dist/widgets/context-widget.d.ts +13 -0
- package/dist/widgets/context-widget.d.ts.map +1 -0
- package/dist/widgets/context-widget.js +27 -0
- package/dist/widgets/context-widget.js.map +1 -0
- package/dist/widgets/cost-widget.d.ts +13 -0
- package/dist/widgets/cost-widget.d.ts.map +1 -0
- package/dist/widgets/cost-widget.js +17 -0
- package/dist/widgets/cost-widget.js.map +1 -0
- package/dist/widgets/duration-widget.d.ts +13 -0
- package/dist/widgets/duration-widget.d.ts.map +1 -0
- package/dist/widgets/duration-widget.js +17 -0
- package/dist/widgets/duration-widget.js.map +1 -0
- package/dist/widgets/git-changes-widget.d.ts +16 -0
- package/dist/widgets/git-changes-widget.d.ts.map +1 -0
- package/dist/widgets/git-changes-widget.js +37 -0
- package/dist/widgets/git-changes-widget.js.map +1 -0
- package/dist/widgets/git-widget.d.ts +8 -2
- package/dist/widgets/git-widget.d.ts.map +1 -1
- package/dist/widgets/git-widget.js +9 -9
- package/dist/widgets/git-widget.js.map +1 -1
- package/dist/widgets/model-widget.d.ts +13 -0
- package/dist/widgets/model-widget.d.ts.map +1 -0
- package/dist/widgets/model-widget.js +16 -0
- package/dist/widgets/model-widget.js.map +1 -0
- package/package.json +7 -1
package/dist/types.d.ts
CHANGED
|
@@ -8,13 +8,61 @@ export interface ModelInfo {
|
|
|
8
8
|
id: string;
|
|
9
9
|
display_name: string;
|
|
10
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* Output style configuration
|
|
13
|
+
*/
|
|
14
|
+
export interface OutputStyle {
|
|
15
|
+
name: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Workspace information
|
|
19
|
+
*/
|
|
20
|
+
export interface WorkspaceInfo {
|
|
21
|
+
current_dir: string;
|
|
22
|
+
project_dir: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Cost and activity information
|
|
26
|
+
*/
|
|
27
|
+
export interface CostInfo {
|
|
28
|
+
total_cost_usd: number;
|
|
29
|
+
total_duration_ms: number;
|
|
30
|
+
total_api_duration_ms: number;
|
|
31
|
+
total_lines_added: number;
|
|
32
|
+
total_lines_removed: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Current context window usage
|
|
36
|
+
*/
|
|
37
|
+
export interface ContextUsage {
|
|
38
|
+
input_tokens: number;
|
|
39
|
+
output_tokens: number;
|
|
40
|
+
cache_creation_input_tokens: number;
|
|
41
|
+
cache_read_input_tokens: number;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Context window information
|
|
45
|
+
*/
|
|
46
|
+
export interface ContextWindow {
|
|
47
|
+
total_input_tokens: number;
|
|
48
|
+
total_output_tokens: number;
|
|
49
|
+
context_window_size: number;
|
|
50
|
+
current_usage: ContextUsage | null;
|
|
51
|
+
}
|
|
11
52
|
/**
|
|
12
53
|
* Data received from Claude Code via stdin
|
|
13
54
|
*/
|
|
14
55
|
export interface StdinData {
|
|
56
|
+
hook_event_name: "Status";
|
|
15
57
|
session_id: string;
|
|
58
|
+
transcript_path: string;
|
|
16
59
|
cwd: string;
|
|
17
60
|
model: ModelInfo;
|
|
61
|
+
workspace: WorkspaceInfo;
|
|
62
|
+
version: string;
|
|
63
|
+
output_style: OutputStyle;
|
|
64
|
+
cost: CostInfo;
|
|
65
|
+
context_window: ContextWindow;
|
|
18
66
|
}
|
|
19
67
|
/**
|
|
20
68
|
* Git repository information
|
|
@@ -23,6 +71,13 @@ export interface GitInfo {
|
|
|
23
71
|
branch: string | null;
|
|
24
72
|
isRepo: boolean;
|
|
25
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Git change statistics
|
|
76
|
+
*/
|
|
77
|
+
export interface GitChanges {
|
|
78
|
+
insertions: number;
|
|
79
|
+
deletions: number;
|
|
80
|
+
}
|
|
26
81
|
/**
|
|
27
82
|
* Rendering context passed to widgets
|
|
28
83
|
*/
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,2BAA2B,EAAE,MAAM,CAAC;IACpC,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,YAAY,GAAG,IAAI,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,eAAe,EAAE,QAAQ,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE,aAAa,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,WAAW,CAAC;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,cAAc,EAAE,aAAa,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
package/dist/utils/colors.d.ts
CHANGED
|
@@ -33,4 +33,20 @@ export declare const bold = "\u001B[1m";
|
|
|
33
33
|
export declare const dim = "\u001B[2m";
|
|
34
34
|
export declare const italic = "\u001B[3m";
|
|
35
35
|
export declare const underline = "\u001B[4m";
|
|
36
|
+
/**
|
|
37
|
+
* Context usage colors
|
|
38
|
+
* Used for context progress bar based on usage percentage
|
|
39
|
+
*/
|
|
40
|
+
export declare const contextColors: {
|
|
41
|
+
readonly low: "\u001B[32m";
|
|
42
|
+
readonly medium: "\u001B[33m";
|
|
43
|
+
readonly high: "\u001B[31m";
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Wrap text in ANSI color
|
|
47
|
+
* @param text - Text to colorize
|
|
48
|
+
* @param color - ANSI color code
|
|
49
|
+
* @returns Colorized text with reset code
|
|
50
|
+
*/
|
|
51
|
+
export declare function colorize(text: string, color: string): string;
|
|
36
52
|
//# sourceMappingURL=colors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/utils/colors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,eAAO,MAAM,KAAK,cAAY,CAAC;AAE/B;;GAEG;AACH,eAAO,MAAM,GAAG,eAAa,CAAC;AAC9B,eAAO,MAAM,KAAK,eAAa,CAAC;AAChC,eAAO,MAAM,MAAM,eAAa,CAAC;AACjC,eAAO,MAAM,IAAI,eAAa,CAAC;AAC/B,eAAO,MAAM,OAAO,eAAa,CAAC;AAClC,eAAO,MAAM,IAAI,eAAa,CAAC;AAC/B,eAAO,MAAM,KAAK,eAAa,CAAC;AAChC,eAAO,MAAM,IAAI,eAAa,CAAC;AAE/B;;GAEG;AACH,eAAO,MAAM,KAAK,eAAa,CAAC;AAChC,eAAO,MAAM,OAAO,eAAa,CAAC;AAClC,eAAO,MAAM,QAAQ,eAAa,CAAC;AACnC,eAAO,MAAM,MAAM,eAAa,CAAC;AAEjC;;GAEG;AACH,eAAO,MAAM,IAAI,cAAY,CAAC;AAC9B,eAAO,MAAM,GAAG,cAAY,CAAC;AAC7B,eAAO,MAAM,MAAM,cAAY,CAAC;AAChC,eAAO,MAAM,SAAS,cAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/utils/colors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,eAAO,MAAM,KAAK,cAAY,CAAC;AAE/B;;GAEG;AACH,eAAO,MAAM,GAAG,eAAa,CAAC;AAC9B,eAAO,MAAM,KAAK,eAAa,CAAC;AAChC,eAAO,MAAM,MAAM,eAAa,CAAC;AACjC,eAAO,MAAM,IAAI,eAAa,CAAC;AAC/B,eAAO,MAAM,OAAO,eAAa,CAAC;AAClC,eAAO,MAAM,IAAI,eAAa,CAAC;AAC/B,eAAO,MAAM,KAAK,eAAa,CAAC;AAChC,eAAO,MAAM,IAAI,eAAa,CAAC;AAE/B;;GAEG;AACH,eAAO,MAAM,KAAK,eAAa,CAAC;AAChC,eAAO,MAAM,OAAO,eAAa,CAAC;AAClC,eAAO,MAAM,QAAQ,eAAa,CAAC;AACnC,eAAO,MAAM,MAAM,eAAa,CAAC;AAEjC;;GAEG;AACH,eAAO,MAAM,IAAI,cAAY,CAAC;AAC9B,eAAO,MAAM,GAAG,cAAY,CAAC;AAC7B,eAAO,MAAM,MAAM,cAAY,CAAC;AAChC,eAAO,MAAM,SAAS,cAAY,CAAC;AAEnC;;;GAGG;AACH,eAAO,MAAM,aAAa;;;;CAIhB,CAAC;AAEX;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5D"}
|
package/dist/utils/colors.js
CHANGED
|
@@ -33,4 +33,22 @@ export const bold = '\x1b[1m';
|
|
|
33
33
|
export const dim = '\x1b[2m';
|
|
34
34
|
export const italic = '\x1b[3m';
|
|
35
35
|
export const underline = '\x1b[4m';
|
|
36
|
+
/**
|
|
37
|
+
* Context usage colors
|
|
38
|
+
* Used for context progress bar based on usage percentage
|
|
39
|
+
*/
|
|
40
|
+
export const contextColors = {
|
|
41
|
+
low: green, // <50% usage
|
|
42
|
+
medium: yellow, // 50-79% usage
|
|
43
|
+
high: red // >=80% usage
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Wrap text in ANSI color
|
|
47
|
+
* @param text - Text to colorize
|
|
48
|
+
* @param color - ANSI color code
|
|
49
|
+
* @returns Colorized text with reset code
|
|
50
|
+
*/
|
|
51
|
+
export function colorize(text, color) {
|
|
52
|
+
return `${color}${text}${reset}`;
|
|
53
|
+
}
|
|
36
54
|
//# sourceMappingURL=colors.js.map
|
package/dist/utils/colors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/utils/colors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,SAAS,CAAC;AAE/B;;GAEG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,UAAU,CAAC;AAC9B,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAAC;AAChC,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC;AACjC,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAAC;AAC/B,MAAM,CAAC,MAAM,OAAO,GAAG,UAAU,CAAC;AAClC,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAAC;AAC/B,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAAC;AAChC,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAAC;AAE/B;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAAC;AAChC,MAAM,CAAC,MAAM,OAAO,GAAG,UAAU,CAAC;AAClC,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAC;AACnC,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC;AAEjC;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,SAAS,CAAC;AAC9B,MAAM,CAAC,MAAM,GAAG,GAAG,SAAS,CAAC;AAC7B,MAAM,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC;AAChC,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/utils/colors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,SAAS,CAAC;AAE/B;;GAEG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,UAAU,CAAC;AAC9B,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAAC;AAChC,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC;AACjC,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAAC;AAC/B,MAAM,CAAC,MAAM,OAAO,GAAG,UAAU,CAAC;AAClC,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAAC;AAC/B,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAAC;AAChC,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAAC;AAE/B;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAAC;AAChC,MAAM,CAAC,MAAM,OAAO,GAAG,UAAU,CAAC;AAClC,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAC;AACnC,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC;AAEjC;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,SAAS,CAAC;AAC9B,MAAM,CAAC,MAAM,GAAG,GAAG,SAAS,CAAC;AAC7B,MAAM,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC;AAChC,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC;AAEnC;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,GAAG,EAAE,KAAK,EAAM,aAAa;IAC7B,MAAM,EAAE,MAAM,EAAE,eAAe;IAC/B,IAAI,EAAE,GAAG,CAAO,cAAc;CACtB,CAAC;AAEX;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,KAAa;IAClD,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formatter utilities for displaying data in human-readable formats
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Format milliseconds to human-readable duration
|
|
6
|
+
*
|
|
7
|
+
* Examples:
|
|
8
|
+
* - 45000 -> "45s"
|
|
9
|
+
* - 60000 -> "1m 0s"
|
|
10
|
+
* - 3600000 -> "1h 0m 0s"
|
|
11
|
+
* - 3665000 -> "1h 1m 5s"
|
|
12
|
+
*
|
|
13
|
+
* @param ms - Duration in milliseconds
|
|
14
|
+
* @returns Human-readable duration string
|
|
15
|
+
*/
|
|
16
|
+
export declare function formatDuration(ms: number): string;
|
|
17
|
+
/**
|
|
18
|
+
* Format cost in USD with appropriate precision
|
|
19
|
+
*
|
|
20
|
+
* - Values < $0.01 (positive): 4 decimal places ($0.0012)
|
|
21
|
+
* - Values >= $0.01: 2 decimal places ($1.23)
|
|
22
|
+
* - Values >= $100: 0 decimal places ($123)
|
|
23
|
+
* - Negative values: 2 decimal places ($-1.23)
|
|
24
|
+
*
|
|
25
|
+
* @param usd - Cost in USD
|
|
26
|
+
* @returns Formatted cost string with $ prefix
|
|
27
|
+
*/
|
|
28
|
+
export declare function formatCostUSD(usd: number): string;
|
|
29
|
+
/**
|
|
30
|
+
* Create a visual progress bar
|
|
31
|
+
*
|
|
32
|
+
* @param percent - Percentage (0-100)
|
|
33
|
+
* @param width - Bar width in characters (default: DEFAULTS.PROGRESS_BAR_WIDTH)
|
|
34
|
+
* @returns Progress bar string like "████████░░░░░░░░░░░░"
|
|
35
|
+
*/
|
|
36
|
+
export declare function progressBar(percent: number, width?: number): string;
|
|
37
|
+
/**
|
|
38
|
+
* Get color code for context percentage
|
|
39
|
+
*
|
|
40
|
+
* - <50%: green (low usage)
|
|
41
|
+
* - 50-79%: yellow (medium usage)
|
|
42
|
+
* - >=80%: red (high usage)
|
|
43
|
+
*
|
|
44
|
+
* @param percent - Context usage percentage (0-100)
|
|
45
|
+
* @returns ANSI color code
|
|
46
|
+
*/
|
|
47
|
+
export declare function getContextColor(percent: number): string;
|
|
48
|
+
/**
|
|
49
|
+
* Colorize text with ANSI color code
|
|
50
|
+
*
|
|
51
|
+
* @param text - Text to colorize
|
|
52
|
+
* @param color - ANSI color code
|
|
53
|
+
* @returns Colorized text with reset code
|
|
54
|
+
*/
|
|
55
|
+
export declare function colorize(text: string, color: string): string;
|
|
56
|
+
//# sourceMappingURL=formatters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/utils/formatters.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAsBjD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAgBjD;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAoC,GAAG,MAAM,CAKhG;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAUvD;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5D"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formatter utilities for displaying data in human-readable formats
|
|
3
|
+
*/
|
|
4
|
+
import { TIME, COST_THRESHOLDS, CONTEXT_THRESHOLDS, ANSI_COLORS, DEFAULTS } from '../constants.js';
|
|
5
|
+
/**
|
|
6
|
+
* Format milliseconds to human-readable duration
|
|
7
|
+
*
|
|
8
|
+
* Examples:
|
|
9
|
+
* - 45000 -> "45s"
|
|
10
|
+
* - 60000 -> "1m 0s"
|
|
11
|
+
* - 3600000 -> "1h 0m 0s"
|
|
12
|
+
* - 3665000 -> "1h 1m 5s"
|
|
13
|
+
*
|
|
14
|
+
* @param ms - Duration in milliseconds
|
|
15
|
+
* @returns Human-readable duration string
|
|
16
|
+
*/
|
|
17
|
+
export function formatDuration(ms) {
|
|
18
|
+
if (ms <= 0)
|
|
19
|
+
return '0s';
|
|
20
|
+
const seconds = Math.floor(ms / TIME.MS_PER_SECOND);
|
|
21
|
+
const hours = Math.floor(seconds / TIME.SECONDS_PER_HOUR);
|
|
22
|
+
const minutes = Math.floor((seconds % TIME.SECONDS_PER_HOUR) / TIME.SECONDS_PER_MINUTE);
|
|
23
|
+
const secs = seconds % TIME.SECONDS_PER_MINUTE;
|
|
24
|
+
const parts = [];
|
|
25
|
+
if (hours > 0) {
|
|
26
|
+
parts.push(`${hours}h`);
|
|
27
|
+
parts.push(`${minutes}m`);
|
|
28
|
+
parts.push(`${secs}s`);
|
|
29
|
+
}
|
|
30
|
+
else if (minutes > 0) {
|
|
31
|
+
parts.push(`${minutes}m`);
|
|
32
|
+
parts.push(`${secs}s`);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
parts.push(`${secs}s`);
|
|
36
|
+
}
|
|
37
|
+
return parts.join(' ');
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Format cost in USD with appropriate precision
|
|
41
|
+
*
|
|
42
|
+
* - Values < $0.01 (positive): 4 decimal places ($0.0012)
|
|
43
|
+
* - Values >= $0.01: 2 decimal places ($1.23)
|
|
44
|
+
* - Values >= $100: 0 decimal places ($123)
|
|
45
|
+
* - Negative values: 2 decimal places ($-1.23)
|
|
46
|
+
*
|
|
47
|
+
* @param usd - Cost in USD
|
|
48
|
+
* @returns Formatted cost string with $ prefix
|
|
49
|
+
*/
|
|
50
|
+
export function formatCostUSD(usd) {
|
|
51
|
+
const absUsd = Math.abs(usd);
|
|
52
|
+
if (usd < 0) {
|
|
53
|
+
// Negative values: 2 decimal places
|
|
54
|
+
return `$${usd.toFixed(2)}`;
|
|
55
|
+
}
|
|
56
|
+
else if (absUsd < COST_THRESHOLDS.SMALL) {
|
|
57
|
+
// 4 decimal places for very small positive values
|
|
58
|
+
return `$${usd.toFixed(4)}`;
|
|
59
|
+
}
|
|
60
|
+
else if (absUsd < COST_THRESHOLDS.LARGE) {
|
|
61
|
+
// 2 decimal places for normal values
|
|
62
|
+
return `$${usd.toFixed(2)}`;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
// 0 decimal places for large values
|
|
66
|
+
return `$${Math.floor(usd).toFixed(0)}`;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Create a visual progress bar
|
|
71
|
+
*
|
|
72
|
+
* @param percent - Percentage (0-100)
|
|
73
|
+
* @param width - Bar width in characters (default: DEFAULTS.PROGRESS_BAR_WIDTH)
|
|
74
|
+
* @returns Progress bar string like "████████░░░░░░░░░░░░"
|
|
75
|
+
*/
|
|
76
|
+
export function progressBar(percent, width = DEFAULTS.PROGRESS_BAR_WIDTH) {
|
|
77
|
+
const clampedPercent = Math.max(0, Math.min(100, percent));
|
|
78
|
+
const filled = Math.round((clampedPercent / 100) * width);
|
|
79
|
+
const empty = width - filled;
|
|
80
|
+
return '█'.repeat(filled) + '░'.repeat(empty);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get color code for context percentage
|
|
84
|
+
*
|
|
85
|
+
* - <50%: green (low usage)
|
|
86
|
+
* - 50-79%: yellow (medium usage)
|
|
87
|
+
* - >=80%: red (high usage)
|
|
88
|
+
*
|
|
89
|
+
* @param percent - Context usage percentage (0-100)
|
|
90
|
+
* @returns ANSI color code
|
|
91
|
+
*/
|
|
92
|
+
export function getContextColor(percent) {
|
|
93
|
+
const clampedPercent = Math.max(0, Math.min(100, percent));
|
|
94
|
+
if (clampedPercent < CONTEXT_THRESHOLDS.LOW_MEDIUM) {
|
|
95
|
+
return ANSI_COLORS.GREEN;
|
|
96
|
+
}
|
|
97
|
+
else if (clampedPercent < CONTEXT_THRESHOLDS.MEDIUM_HIGH) {
|
|
98
|
+
return ANSI_COLORS.YELLOW;
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
return ANSI_COLORS.RED;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Colorize text with ANSI color code
|
|
106
|
+
*
|
|
107
|
+
* @param text - Text to colorize
|
|
108
|
+
* @param color - ANSI color code
|
|
109
|
+
* @returns Colorized text with reset code
|
|
110
|
+
*/
|
|
111
|
+
export function colorize(text, color) {
|
|
112
|
+
return `${color}${text}${ANSI_COLORS.RESET}`;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=formatters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/utils/formatters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Widget
|
|
3
|
+
*
|
|
4
|
+
* Displays context window usage with progress bar
|
|
5
|
+
*/
|
|
6
|
+
import { StdinDataWidget } from '../core/stdin-data-widget.js';
|
|
7
|
+
import type { RenderContext } from '../core/types.js';
|
|
8
|
+
export declare class ContextWidget extends StdinDataWidget {
|
|
9
|
+
readonly id = "context";
|
|
10
|
+
readonly metadata: import("../core/types.js").IWidgetMetadata;
|
|
11
|
+
render(context: RenderContext): Promise<string | null>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=context-widget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-widget.d.ts","sourceRoot":"","sources":["../../src/widgets/context-widget.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAI/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,qBAAa,aAAc,SAAQ,eAAe;IAChD,QAAQ,CAAC,EAAE,aAAa;IACxB,QAAQ,CAAC,QAAQ,6CAGf;IAEI,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAiB7D"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Widget
|
|
3
|
+
*
|
|
4
|
+
* Displays context window usage with progress bar
|
|
5
|
+
*/
|
|
6
|
+
import { StdinDataWidget } from '../core/stdin-data-widget.js';
|
|
7
|
+
import { createWidgetMetadata } from '../core/widget-types.js';
|
|
8
|
+
import { progressBar, getContextColor, colorize } from '../utils/formatters.js';
|
|
9
|
+
import { DEFAULTS } from '../constants.js';
|
|
10
|
+
export class ContextWidget extends StdinDataWidget {
|
|
11
|
+
id = 'context';
|
|
12
|
+
metadata = createWidgetMetadata('Context', 'Displays context window usage with progress bar');
|
|
13
|
+
async render(context) {
|
|
14
|
+
const data = this.getData();
|
|
15
|
+
const { current_usage, context_window_size } = data.context_window;
|
|
16
|
+
if (!current_usage)
|
|
17
|
+
return null;
|
|
18
|
+
const used = current_usage.input_tokens +
|
|
19
|
+
current_usage.cache_creation_input_tokens +
|
|
20
|
+
current_usage.cache_read_input_tokens;
|
|
21
|
+
const percent = Math.round((used / context_window_size) * 100);
|
|
22
|
+
const bar = progressBar(percent, DEFAULTS.PROGRESS_BAR_WIDTH);
|
|
23
|
+
const color = getContextColor(percent);
|
|
24
|
+
return colorize(`[${bar}] ${percent}%`, color);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=context-widget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-widget.js","sourceRoot":"","sources":["../../src/widgets/context-widget.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3C,MAAM,OAAO,aAAc,SAAQ,eAAe;IACvC,EAAE,GAAG,SAAS,CAAC;IACf,QAAQ,GAAG,oBAAoB,CACtC,SAAS,EACT,iDAAiD,CAClD,CAAC;IAEF,KAAK,CAAC,MAAM,CAAC,OAAsB;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5B,MAAM,EAAE,aAAa,EAAE,mBAAmB,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC;QAEnE,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;QAEhC,MAAM,IAAI,GAAG,aAAa,CAAC,YAAY;YAC1B,aAAa,CAAC,2BAA2B;YACzC,aAAa,CAAC,uBAAuB,CAAC;QAEnD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,mBAAmB,CAAC,GAAG,GAAG,CAAC,CAAC;QAE/D,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QAEvC,OAAO,QAAQ,CAAC,IAAI,GAAG,KAAK,OAAO,GAAG,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cost Widget
|
|
3
|
+
*
|
|
4
|
+
* Displays session cost in USD
|
|
5
|
+
*/
|
|
6
|
+
import { StdinDataWidget } from '../core/stdin-data-widget.js';
|
|
7
|
+
import type { RenderContext } from '../core/types.js';
|
|
8
|
+
export declare class CostWidget extends StdinDataWidget {
|
|
9
|
+
readonly id = "cost";
|
|
10
|
+
readonly metadata: import("../core/types.js").IWidgetMetadata;
|
|
11
|
+
render(context: RenderContext): Promise<string | null>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=cost-widget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-widget.d.ts","sourceRoot":"","sources":["../../src/widgets/cost-widget.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAG/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,qBAAa,UAAW,SAAQ,eAAe;IAC7C,QAAQ,CAAC,EAAE,UAAU;IACrB,QAAQ,CAAC,QAAQ,6CAGf;IAEI,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAI7D"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cost Widget
|
|
3
|
+
*
|
|
4
|
+
* Displays session cost in USD
|
|
5
|
+
*/
|
|
6
|
+
import { StdinDataWidget } from '../core/stdin-data-widget.js';
|
|
7
|
+
import { createWidgetMetadata } from '../core/widget-types.js';
|
|
8
|
+
import { formatCostUSD } from '../utils/formatters.js';
|
|
9
|
+
export class CostWidget extends StdinDataWidget {
|
|
10
|
+
id = 'cost';
|
|
11
|
+
metadata = createWidgetMetadata('Cost', 'Displays session cost in USD');
|
|
12
|
+
async render(context) {
|
|
13
|
+
const data = this.getData();
|
|
14
|
+
return formatCostUSD(data.cost.total_cost_usd);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=cost-widget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-widget.js","sourceRoot":"","sources":["../../src/widgets/cost-widget.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD,MAAM,OAAO,UAAW,SAAQ,eAAe;IACpC,EAAE,GAAG,MAAM,CAAC;IACZ,QAAQ,GAAG,oBAAoB,CACtC,MAAM,EACN,8BAA8B,CAC/B,CAAC;IAEF,KAAK,CAAC,MAAM,CAAC,OAAsB;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5B,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACjD,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Duration Widget
|
|
3
|
+
*
|
|
4
|
+
* Displays elapsed session time
|
|
5
|
+
*/
|
|
6
|
+
import { StdinDataWidget } from '../core/stdin-data-widget.js';
|
|
7
|
+
import type { RenderContext } from '../core/types.js';
|
|
8
|
+
export declare class DurationWidget extends StdinDataWidget {
|
|
9
|
+
readonly id = "duration";
|
|
10
|
+
readonly metadata: import("../core/types.js").IWidgetMetadata;
|
|
11
|
+
render(context: RenderContext): Promise<string | null>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=duration-widget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duration-widget.d.ts","sourceRoot":"","sources":["../../src/widgets/duration-widget.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAG/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,qBAAa,cAAe,SAAQ,eAAe;IACjD,QAAQ,CAAC,EAAE,cAAc;IACzB,QAAQ,CAAC,QAAQ,6CAGf;IAEI,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAI7D"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Duration Widget
|
|
3
|
+
*
|
|
4
|
+
* Displays elapsed session time
|
|
5
|
+
*/
|
|
6
|
+
import { StdinDataWidget } from '../core/stdin-data-widget.js';
|
|
7
|
+
import { createWidgetMetadata } from '../core/widget-types.js';
|
|
8
|
+
import { formatDuration } from '../utils/formatters.js';
|
|
9
|
+
export class DurationWidget extends StdinDataWidget {
|
|
10
|
+
id = 'duration';
|
|
11
|
+
metadata = createWidgetMetadata('Duration', 'Displays elapsed session time');
|
|
12
|
+
async render(context) {
|
|
13
|
+
const data = this.getData();
|
|
14
|
+
return formatDuration(data.cost.total_duration_ms);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=duration-widget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duration-widget.js","sourceRoot":"","sources":["../../src/widgets/duration-widget.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,MAAM,OAAO,cAAe,SAAQ,eAAe;IACxC,EAAE,GAAG,UAAU,CAAC;IAChB,QAAQ,GAAG,oBAAoB,CACtC,UAAU,EACV,+BAA+B,CAChC,CAAC;IAEF,KAAK,CAAC,MAAM,CAAC,OAAsB;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5B,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACrD,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git Changes Widget
|
|
3
|
+
*
|
|
4
|
+
* Displays git diff statistics
|
|
5
|
+
*/
|
|
6
|
+
import { StdinDataWidget } from '../core/stdin-data-widget.js';
|
|
7
|
+
import type { IGit } from '../providers/git-provider.js';
|
|
8
|
+
import type { RenderContext } from '../core/types.js';
|
|
9
|
+
export declare class GitChangesWidget extends StdinDataWidget {
|
|
10
|
+
private gitProvider;
|
|
11
|
+
readonly id = "git-changes";
|
|
12
|
+
readonly metadata: import("../core/types.js").IWidgetMetadata;
|
|
13
|
+
constructor(gitProvider: IGit);
|
|
14
|
+
render(context: RenderContext): Promise<string | null>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=git-changes-widget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-changes-widget.d.ts","sourceRoot":"","sources":["../../src/widgets/git-changes-widget.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,qBAAa,gBAAiB,SAAQ,eAAe;IAOvC,OAAO,CAAC,WAAW;IAN/B,QAAQ,CAAC,EAAE,iBAAiB;IAC5B,QAAQ,CAAC,QAAQ,6CAGf;gBAEkB,WAAW,EAAE,IAAI;IAI/B,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAoB7D"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git Changes Widget
|
|
3
|
+
*
|
|
4
|
+
* Displays git diff statistics
|
|
5
|
+
*/
|
|
6
|
+
import { StdinDataWidget } from '../core/stdin-data-widget.js';
|
|
7
|
+
import { createWidgetMetadata } from '../core/widget-types.js';
|
|
8
|
+
export class GitChangesWidget extends StdinDataWidget {
|
|
9
|
+
gitProvider;
|
|
10
|
+
id = 'git-changes';
|
|
11
|
+
metadata = createWidgetMetadata('Git Changes', 'Displays git diff statistics');
|
|
12
|
+
constructor(gitProvider) {
|
|
13
|
+
super();
|
|
14
|
+
this.gitProvider = gitProvider;
|
|
15
|
+
}
|
|
16
|
+
async render(context) {
|
|
17
|
+
let changes;
|
|
18
|
+
try {
|
|
19
|
+
changes = await this.gitProvider.diffStats();
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
if (!changes)
|
|
25
|
+
return null;
|
|
26
|
+
if (changes.insertions === 0 && changes.deletions === 0) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
const parts = [];
|
|
30
|
+
if (changes.insertions > 0)
|
|
31
|
+
parts.push(`+${changes.insertions}`);
|
|
32
|
+
if (changes.deletions > 0)
|
|
33
|
+
parts.push(`-${changes.deletions}`);
|
|
34
|
+
return parts.join(',');
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=git-changes-widget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-changes-widget.js","sourceRoot":"","sources":["../../src/widgets/git-changes-widget.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAI/D,MAAM,OAAO,gBAAiB,SAAQ,eAAe;IAO/B;IANX,EAAE,GAAG,aAAa,CAAC;IACnB,QAAQ,GAAG,oBAAoB,CACtC,aAAa,EACb,8BAA8B,CAC/B,CAAC;IAEF,YAAoB,WAAiB;QACnC,KAAK,EAAE,CAAC;QADU,gBAAW,GAAX,WAAW,CAAM;IAErC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAsB;QACjC,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAE1B,IAAI,OAAO,CAAC,UAAU,KAAK,CAAC,IAAI,OAAO,CAAC,SAAS,KAAK,CAAC,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QACjE,IAAI,OAAO,CAAC,SAAS,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAE/D,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Git status widget
|
|
3
3
|
* Displays current git branch
|
|
4
|
+
*
|
|
5
|
+
* NOTE: This widget implements IWidget directly (not extending StdinDataWidget)
|
|
6
|
+
* because it has different lifecycle requirements:
|
|
7
|
+
* - Uses GitProvider instead of transforming StdinData directly
|
|
8
|
+
* - Maintains internal state (currentCwd) for change detection
|
|
9
|
+
* - Needs to reinitialize GitProvider when cwd changes
|
|
4
10
|
*/
|
|
5
|
-
import type { IWidget,
|
|
11
|
+
import type { IWidget, WidgetContext, RenderContext, StdinData } from '../core/types.js';
|
|
6
12
|
import type { GitProviderDeps } from '../providers/git-provider.js';
|
|
7
13
|
/**
|
|
8
14
|
* Git widget dependencies
|
|
@@ -15,7 +21,7 @@ export interface GitWidgetDeps {
|
|
|
15
21
|
*/
|
|
16
22
|
export declare class GitWidget implements IWidget {
|
|
17
23
|
readonly id = "git";
|
|
18
|
-
readonly metadata: IWidgetMetadata;
|
|
24
|
+
readonly metadata: import("../core/types.js").IWidgetMetadata;
|
|
19
25
|
private gitProvider;
|
|
20
26
|
private enabled;
|
|
21
27
|
private currentCwd;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-widget.d.ts","sourceRoot":"","sources":["../../src/widgets/git-widget.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"git-widget.d.ts","sourceRoot":"","sources":["../../src/widgets/git-widget.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAIpE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;CAC7B;AAED;;GAEG;AACH,qBAAa,SAAU,YAAW,OAAO;IACvC,QAAQ,CAAC,EAAE,SAAS;IACpB,QAAQ,CAAC,QAAQ,6CAGf;IAEF,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,UAAU,CAAM;gBAEZ,IAAI,EAAE,aAAa;IAIzB,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAatD,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAO5C,SAAS,IAAI,OAAO;IAId,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
|
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Git status widget
|
|
3
3
|
* Displays current git branch
|
|
4
|
+
*
|
|
5
|
+
* NOTE: This widget implements IWidget directly (not extending StdinDataWidget)
|
|
6
|
+
* because it has different lifecycle requirements:
|
|
7
|
+
* - Uses GitProvider instead of transforming StdinData directly
|
|
8
|
+
* - Maintains internal state (currentCwd) for change detection
|
|
9
|
+
* - Needs to reinitialize GitProvider when cwd changes
|
|
4
10
|
*/
|
|
5
11
|
import { GitProvider } from '../providers/git-provider.js';
|
|
12
|
+
import { createWidgetMetadata } from '../core/widget-types.js';
|
|
6
13
|
/**
|
|
7
14
|
* Widget displaying git branch information
|
|
8
15
|
*/
|
|
9
16
|
export class GitWidget {
|
|
10
17
|
id = 'git';
|
|
11
|
-
metadata =
|
|
12
|
-
name: 'Git Widget',
|
|
13
|
-
description: 'Displays current git branch',
|
|
14
|
-
version: '1.0.0',
|
|
15
|
-
author: 'claude-scope'
|
|
16
|
-
};
|
|
18
|
+
metadata = createWidgetMetadata('Git Widget', 'Displays current git branch');
|
|
17
19
|
gitProvider;
|
|
18
20
|
enabled = true;
|
|
19
21
|
currentCwd = '';
|
|
@@ -21,8 +23,7 @@ export class GitWidget {
|
|
|
21
23
|
this.gitProvider = new GitProvider({ git: deps.git });
|
|
22
24
|
}
|
|
23
25
|
async initialize(context) {
|
|
24
|
-
|
|
25
|
-
this.enabled = context.config.enabled !== false;
|
|
26
|
+
this.enabled = context.config?.enabled !== false;
|
|
26
27
|
}
|
|
27
28
|
async render(context) {
|
|
28
29
|
if (!this.enabled || !this.gitProvider.isRepo()) {
|
|
@@ -32,7 +33,6 @@ export class GitWidget {
|
|
|
32
33
|
if (!branch) {
|
|
33
34
|
return null;
|
|
34
35
|
}
|
|
35
|
-
// Simple format: branch-name
|
|
36
36
|
return ` ${branch}`;
|
|
37
37
|
}
|
|
38
38
|
async update(data) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-widget.js","sourceRoot":"","sources":["../../src/widgets/git-widget.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"git-widget.js","sourceRoot":"","sources":["../../src/widgets/git-widget.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAS/D;;GAEG;AACH,MAAM,OAAO,SAAS;IACX,EAAE,GAAG,KAAK,CAAC;IACX,QAAQ,GAAG,oBAAoB,CACtC,YAAY,EACZ,6BAA6B,CAC9B,CAAC;IAEM,WAAW,CAAc;IACzB,OAAO,GAAG,IAAI,CAAC;IACf,UAAU,GAAG,EAAE,CAAC;IAExB,YAAY,IAAmB;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAsB;QACrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,KAAK,KAAK,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAsB;QACjC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;QAClD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,MAAM,EAAE,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAe;QAC1B,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;YACjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC;YAC3B,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,2BAA2B;IAC7B,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model Widget
|
|
3
|
+
*
|
|
4
|
+
* Displays the current Claude model name
|
|
5
|
+
*/
|
|
6
|
+
import { StdinDataWidget } from '../core/stdin-data-widget.js';
|
|
7
|
+
import type { RenderContext } from '../core/types.js';
|
|
8
|
+
export declare class ModelWidget extends StdinDataWidget {
|
|
9
|
+
readonly id = "model";
|
|
10
|
+
readonly metadata: import("../core/types.js").IWidgetMetadata;
|
|
11
|
+
render(context: RenderContext): Promise<string | null>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=model-widget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-widget.d.ts","sourceRoot":"","sources":["../../src/widgets/model-widget.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,qBAAa,WAAY,SAAQ,eAAe;IAC9C,QAAQ,CAAC,EAAE,WAAW;IACtB,QAAQ,CAAC,QAAQ,6CAGf;IAEI,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAI7D"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model Widget
|
|
3
|
+
*
|
|
4
|
+
* Displays the current Claude model name
|
|
5
|
+
*/
|
|
6
|
+
import { StdinDataWidget } from '../core/stdin-data-widget.js';
|
|
7
|
+
import { createWidgetMetadata } from '../core/widget-types.js';
|
|
8
|
+
export class ModelWidget extends StdinDataWidget {
|
|
9
|
+
id = 'model';
|
|
10
|
+
metadata = createWidgetMetadata('Model', 'Displays the current Claude model name');
|
|
11
|
+
async render(context) {
|
|
12
|
+
const data = this.getData();
|
|
13
|
+
return data.model.display_name;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=model-widget.js.map
|