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
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Constants used throughout the application
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Time-related constants
|
|
6
|
+
*/
|
|
7
|
+
export declare const TIME: {
|
|
8
|
+
/** Milliseconds per second */
|
|
9
|
+
readonly MS_PER_SECOND: 1000;
|
|
10
|
+
/** Seconds per minute */
|
|
11
|
+
readonly SECONDS_PER_MINUTE: 60;
|
|
12
|
+
/** Seconds per hour */
|
|
13
|
+
readonly SECONDS_PER_HOUR: 3600;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Cost formatting thresholds
|
|
17
|
+
*/
|
|
18
|
+
export declare const COST_THRESHOLDS: {
|
|
19
|
+
/** Below this value, show 4 decimal places ($0.0012) */
|
|
20
|
+
readonly SMALL: 0.01;
|
|
21
|
+
/** Above this value, show no decimal places ($123) */
|
|
22
|
+
readonly LARGE: 100;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Context usage color thresholds (percentages)
|
|
26
|
+
*/
|
|
27
|
+
export declare const CONTEXT_THRESHOLDS: {
|
|
28
|
+
/** Below this: green (low usage) */
|
|
29
|
+
readonly LOW_MEDIUM: 50;
|
|
30
|
+
/** Below this: yellow (medium usage), above: red (high usage) */
|
|
31
|
+
readonly MEDIUM_HIGH: 80;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Default values
|
|
35
|
+
*/
|
|
36
|
+
export declare const DEFAULTS: {
|
|
37
|
+
/** Default separator between widgets */
|
|
38
|
+
readonly SEPARATOR: " ";
|
|
39
|
+
/** Default width for progress bars in characters */
|
|
40
|
+
readonly PROGRESS_BAR_WIDTH: 20;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* ANSI color codes
|
|
44
|
+
*/
|
|
45
|
+
export declare const ANSI_COLORS: {
|
|
46
|
+
/** Green color */
|
|
47
|
+
readonly GREEN: "\u001B[32m";
|
|
48
|
+
/** Yellow color */
|
|
49
|
+
readonly YELLOW: "\u001B[33m";
|
|
50
|
+
/** Red color */
|
|
51
|
+
readonly RED: "\u001B[31m";
|
|
52
|
+
/** Reset color */
|
|
53
|
+
readonly RESET: "\u001B[0m";
|
|
54
|
+
};
|
|
55
|
+
export declare const DEFAULT_PROGRESS_BAR_WIDTH: 20;
|
|
56
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,eAAO,MAAM,IAAI;IACf,8BAA8B;;IAE9B,yBAAyB;;IAEzB,uBAAuB;;CAEf,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,eAAe;IAC1B,wDAAwD;;IAExD,sDAAsD;;CAE9C,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,kBAAkB;IAC7B,oCAAoC;;IAEpC,iEAAiE;;CAEzD,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,QAAQ;IACnB,wCAAwC;;IAExC,oDAAoD;;CAE5C,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB,kBAAkB;;IAElB,mBAAmB;;IAEnB,gBAAgB;;IAEhB,kBAAkB;;CAEV,CAAC;AAGX,eAAO,MAAM,0BAA0B,IAA8B,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Constants used throughout the application
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Time-related constants
|
|
6
|
+
*/
|
|
7
|
+
export const TIME = {
|
|
8
|
+
/** Milliseconds per second */
|
|
9
|
+
MS_PER_SECOND: 1000,
|
|
10
|
+
/** Seconds per minute */
|
|
11
|
+
SECONDS_PER_MINUTE: 60,
|
|
12
|
+
/** Seconds per hour */
|
|
13
|
+
SECONDS_PER_HOUR: 3600,
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Cost formatting thresholds
|
|
17
|
+
*/
|
|
18
|
+
export const COST_THRESHOLDS = {
|
|
19
|
+
/** Below this value, show 4 decimal places ($0.0012) */
|
|
20
|
+
SMALL: 0.01,
|
|
21
|
+
/** Above this value, show no decimal places ($123) */
|
|
22
|
+
LARGE: 100,
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Context usage color thresholds (percentages)
|
|
26
|
+
*/
|
|
27
|
+
export const CONTEXT_THRESHOLDS = {
|
|
28
|
+
/** Below this: green (low usage) */
|
|
29
|
+
LOW_MEDIUM: 50,
|
|
30
|
+
/** Below this: yellow (medium usage), above: red (high usage) */
|
|
31
|
+
MEDIUM_HIGH: 80,
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Default values
|
|
35
|
+
*/
|
|
36
|
+
export const DEFAULTS = {
|
|
37
|
+
/** Default separator between widgets */
|
|
38
|
+
SEPARATOR: ' ',
|
|
39
|
+
/** Default width for progress bars in characters */
|
|
40
|
+
PROGRESS_BAR_WIDTH: 20,
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* ANSI color codes
|
|
44
|
+
*/
|
|
45
|
+
export const ANSI_COLORS = {
|
|
46
|
+
/** Green color */
|
|
47
|
+
GREEN: '\x1b[32m',
|
|
48
|
+
/** Yellow color */
|
|
49
|
+
YELLOW: '\x1b[33m',
|
|
50
|
+
/** Red color */
|
|
51
|
+
RED: '\x1b[31m',
|
|
52
|
+
/** Reset color */
|
|
53
|
+
RESET: '\x1b[0m',
|
|
54
|
+
};
|
|
55
|
+
// Re-export for backward compatibility
|
|
56
|
+
export const DEFAULT_PROGRESS_BAR_WIDTH = DEFAULTS.PROGRESS_BAR_WIDTH;
|
|
57
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,8BAA8B;IAC9B,aAAa,EAAE,IAAI;IACnB,yBAAyB;IACzB,kBAAkB,EAAE,EAAE;IACtB,uBAAuB;IACvB,gBAAgB,EAAE,IAAI;CACd,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,wDAAwD;IACxD,KAAK,EAAE,IAAI;IACX,sDAAsD;IACtD,KAAK,EAAE,GAAG;CACF,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,oCAAoC;IACpC,UAAU,EAAE,EAAE;IACd,iEAAiE;IACjE,WAAW,EAAE,EAAE;CACP,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,wCAAwC;IACxC,SAAS,EAAE,GAAG;IACd,oDAAoD;IACpD,kBAAkB,EAAE,EAAE;CACd,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,kBAAkB;IAClB,KAAK,EAAE,UAAU;IACjB,mBAAmB;IACnB,MAAM,EAAE,UAAU;IAClB,gBAAgB;IAChB,GAAG,EAAE,UAAU;IACf,kBAAkB;IAClB,KAAK,EAAE,SAAS;CACR,CAAC;AAEX,uCAAuC;AACvC,MAAM,CAAC,MAAM,0BAA0B,GAAG,QAAQ,CAAC,kBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/core/renderer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/core/renderer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD;;GAEG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,SAAS,CAA8B;IAE/C;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBzE;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAGtC"}
|
package/dist/core/renderer.js
CHANGED
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
* Unified rendering engine
|
|
3
3
|
* Combines widget outputs into statusline
|
|
4
4
|
*/
|
|
5
|
+
import { DEFAULTS } from '../constants.js';
|
|
5
6
|
/**
|
|
6
7
|
* Renderer for combining widget outputs
|
|
7
8
|
*/
|
|
8
9
|
export class Renderer {
|
|
9
|
-
separator =
|
|
10
|
+
separator = DEFAULTS.SEPARATOR;
|
|
10
11
|
/**
|
|
11
12
|
* Render widgets into a single line
|
|
12
13
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/core/renderer.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/core/renderer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C;;GAEG;AACH,MAAM,OAAO,QAAQ;IACX,SAAS,GAAW,QAAQ,CAAC,SAAS,CAAC;IAE/C;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,OAAkB,EAAE,OAAsB;QACrD,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;gBACxB,SAAS;YACX,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5C,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,SAAiB;QAC5B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base class for widgets that receive StdinData
|
|
3
|
+
*
|
|
4
|
+
* Eliminates duplicate data storage and update logic across widgets.
|
|
5
|
+
* Extending widgets only need to implement render() method.
|
|
6
|
+
*/
|
|
7
|
+
import type { IWidget, IWidgetMetadata, WidgetContext, RenderContext } from './types.js';
|
|
8
|
+
import type { StdinData } from '../types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Abstract base class for widgets working with StdinData
|
|
11
|
+
*
|
|
12
|
+
* Provides common functionality:
|
|
13
|
+
* - StdinData storage and retrieval
|
|
14
|
+
* - Enabled state management
|
|
15
|
+
* - Consistent update pattern
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* export class ModelWidget extends StdinDataWidget {
|
|
20
|
+
* readonly id = 'model';
|
|
21
|
+
* readonly metadata = {
|
|
22
|
+
* name: 'Model',
|
|
23
|
+
* description: 'Displays Claude model',
|
|
24
|
+
* version: '1.0.0',
|
|
25
|
+
* author: 'claude-scope'
|
|
26
|
+
* };
|
|
27
|
+
*
|
|
28
|
+
* async render(context: RenderContext): Promise<string | null> {
|
|
29
|
+
* const data = this.getData();
|
|
30
|
+
* return data.model.display_name;
|
|
31
|
+
* }
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare abstract class StdinDataWidget implements IWidget {
|
|
36
|
+
/**
|
|
37
|
+
* Stored stdin data from last update
|
|
38
|
+
*/
|
|
39
|
+
protected data: StdinData | null;
|
|
40
|
+
/**
|
|
41
|
+
* Widget enabled state
|
|
42
|
+
*/
|
|
43
|
+
protected enabled: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Unique widget identifier
|
|
46
|
+
*/
|
|
47
|
+
abstract readonly id: string;
|
|
48
|
+
/**
|
|
49
|
+
* Widget metadata
|
|
50
|
+
*/
|
|
51
|
+
abstract readonly metadata: IWidgetMetadata;
|
|
52
|
+
/**
|
|
53
|
+
* Initialize widget with context
|
|
54
|
+
* @param context - Widget initialization context
|
|
55
|
+
*/
|
|
56
|
+
initialize(context: WidgetContext): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Update widget with new stdin data
|
|
59
|
+
* @param data - Stdin data from Claude Code
|
|
60
|
+
*/
|
|
61
|
+
update(data: StdinData): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Check if widget is enabled
|
|
64
|
+
* @returns true if widget should render
|
|
65
|
+
*/
|
|
66
|
+
isEnabled(): boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Get stored stdin data
|
|
69
|
+
* @returns StdinData
|
|
70
|
+
* @throws Error if data not initialized (update() not called)
|
|
71
|
+
*/
|
|
72
|
+
protected getData(): StdinData;
|
|
73
|
+
/**
|
|
74
|
+
* Render widget output
|
|
75
|
+
* @param context - Render context
|
|
76
|
+
* @returns Rendered string, or null if widget should not display
|
|
77
|
+
*/
|
|
78
|
+
abstract render(context: RenderContext): Promise<string | null>;
|
|
79
|
+
/**
|
|
80
|
+
* Optional cleanup method
|
|
81
|
+
* Override if widget has resources to clean up
|
|
82
|
+
*/
|
|
83
|
+
cleanup?(): Promise<void>;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=stdin-data-widget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdin-data-widget.d.ts","sourceRoot":"","sources":["../../src/core/stdin-data-widget.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACzF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,8BAAsB,eAAgB,YAAW,OAAO;IACtD;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAQ;IAExC;;OAEG;IACH,SAAS,CAAC,OAAO,UAAQ;IAEzB;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IAE5C;;;OAGG;IACG,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD;;;OAGG;IACG,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C;;;OAGG;IACH,SAAS,IAAI,OAAO;IAIpB;;;;OAIG;IACH,SAAS,CAAC,OAAO,IAAI,SAAS;IAS9B;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAE/D;;;OAGG;IACG,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;CAChC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base class for widgets that receive StdinData
|
|
3
|
+
*
|
|
4
|
+
* Eliminates duplicate data storage and update logic across widgets.
|
|
5
|
+
* Extending widgets only need to implement render() method.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Abstract base class for widgets working with StdinData
|
|
9
|
+
*
|
|
10
|
+
* Provides common functionality:
|
|
11
|
+
* - StdinData storage and retrieval
|
|
12
|
+
* - Enabled state management
|
|
13
|
+
* - Consistent update pattern
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* export class ModelWidget extends StdinDataWidget {
|
|
18
|
+
* readonly id = 'model';
|
|
19
|
+
* readonly metadata = {
|
|
20
|
+
* name: 'Model',
|
|
21
|
+
* description: 'Displays Claude model',
|
|
22
|
+
* version: '1.0.0',
|
|
23
|
+
* author: 'claude-scope'
|
|
24
|
+
* };
|
|
25
|
+
*
|
|
26
|
+
* async render(context: RenderContext): Promise<string | null> {
|
|
27
|
+
* const data = this.getData();
|
|
28
|
+
* return data.model.display_name;
|
|
29
|
+
* }
|
|
30
|
+
* }
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export class StdinDataWidget {
|
|
34
|
+
/**
|
|
35
|
+
* Stored stdin data from last update
|
|
36
|
+
*/
|
|
37
|
+
data = null;
|
|
38
|
+
/**
|
|
39
|
+
* Widget enabled state
|
|
40
|
+
*/
|
|
41
|
+
enabled = true;
|
|
42
|
+
/**
|
|
43
|
+
* Initialize widget with context
|
|
44
|
+
* @param context - Widget initialization context
|
|
45
|
+
*/
|
|
46
|
+
async initialize(context) {
|
|
47
|
+
this.enabled = context.config?.enabled !== false;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Update widget with new stdin data
|
|
51
|
+
* @param data - Stdin data from Claude Code
|
|
52
|
+
*/
|
|
53
|
+
async update(data) {
|
|
54
|
+
this.data = data;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Check if widget is enabled
|
|
58
|
+
* @returns true if widget should render
|
|
59
|
+
*/
|
|
60
|
+
isEnabled() {
|
|
61
|
+
return this.enabled;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get stored stdin data
|
|
65
|
+
* @returns StdinData
|
|
66
|
+
* @throws Error if data not initialized (update() not called)
|
|
67
|
+
*/
|
|
68
|
+
getData() {
|
|
69
|
+
if (!this.data) {
|
|
70
|
+
throw new Error(`Widget ${this.id} data not initialized. Call update() before render().`);
|
|
71
|
+
}
|
|
72
|
+
return this.data;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=stdin-data-widget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdin-data-widget.js","sourceRoot":"","sources":["../../src/core/stdin-data-widget.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,OAAgB,eAAe;IACnC;;OAEG;IACO,IAAI,GAAqB,IAAI,CAAC;IAExC;;OAEG;IACO,OAAO,GAAG,IAAI,CAAC;IAYzB;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,OAAsB;QACrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,KAAK,KAAK,CAAC;IACnD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,IAAe;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED;;;OAGG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACO,OAAO;QACf,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,UAAU,IAAI,CAAC,EAAE,uDAAuD,CACzE,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;CAcF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Widget type utilities and helpers
|
|
3
|
+
*/
|
|
4
|
+
import type { IWidgetMetadata, IWidget } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Create widget metadata with defaults
|
|
7
|
+
*
|
|
8
|
+
* @param name - Widget name
|
|
9
|
+
* @param description - Widget description
|
|
10
|
+
* @param version - Widget version (default: '1.0.0')
|
|
11
|
+
* @param author - Widget author (default: 'claude-scope')
|
|
12
|
+
* @returns Widget metadata object
|
|
13
|
+
*/
|
|
14
|
+
export declare function createWidgetMetadata(name: string, description: string, version?: string, author?: string): IWidgetMetadata;
|
|
15
|
+
/**
|
|
16
|
+
* Type for widget constructor
|
|
17
|
+
* Can be used with dependency injection
|
|
18
|
+
*/
|
|
19
|
+
export type WidgetConstructor = new (...args: unknown[]) => IWidget;
|
|
20
|
+
/**
|
|
21
|
+
* Widget configuration options
|
|
22
|
+
*/
|
|
23
|
+
export interface WidgetConfig {
|
|
24
|
+
enabled?: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Create widget config with defaults
|
|
28
|
+
*/
|
|
29
|
+
export declare function createWidgetConfig(config?: WidgetConfig): WidgetConfig;
|
|
30
|
+
//# sourceMappingURL=widget-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"widget-types.d.ts","sourceRoot":"","sources":["../../src/core/widget-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE3D;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,OAAO,SAAU,EACjB,MAAM,SAAiB,GACtB,eAAe,CAOjB;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,GAAE,YAAiB,GAAG,YAAY,CAK1E"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Widget type utilities and helpers
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Create widget metadata with defaults
|
|
6
|
+
*
|
|
7
|
+
* @param name - Widget name
|
|
8
|
+
* @param description - Widget description
|
|
9
|
+
* @param version - Widget version (default: '1.0.0')
|
|
10
|
+
* @param author - Widget author (default: 'claude-scope')
|
|
11
|
+
* @returns Widget metadata object
|
|
12
|
+
*/
|
|
13
|
+
export function createWidgetMetadata(name, description, version = '1.0.0', author = 'claude-scope') {
|
|
14
|
+
return {
|
|
15
|
+
name,
|
|
16
|
+
description,
|
|
17
|
+
version,
|
|
18
|
+
author
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Create widget config with defaults
|
|
23
|
+
*/
|
|
24
|
+
export function createWidgetConfig(config = {}) {
|
|
25
|
+
return {
|
|
26
|
+
enabled: true,
|
|
27
|
+
...config
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=widget-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"widget-types.js","sourceRoot":"","sources":["../../src/core/widget-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAY,EACZ,WAAmB,EACnB,OAAO,GAAG,OAAO,EACjB,MAAM,GAAG,cAAc;IAEvB,OAAO;QACL,IAAI;QACJ,WAAW;QACX,OAAO;QACP,MAAM;KACP,CAAC;AACJ,CAAC;AAeD;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAuB,EAAE;IAC1D,OAAO;QACL,OAAO,EAAE,IAAI;QACb,GAAG,MAAM;KACV,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAuDH;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAkC5C"}
|
package/dist/index.js
CHANGED
|
@@ -6,27 +6,78 @@
|
|
|
6
6
|
import { WidgetRegistry } from './core/widget-registry.js';
|
|
7
7
|
import { Renderer } from './core/renderer.js';
|
|
8
8
|
import { GitWidget } from './widgets/git-widget.js';
|
|
9
|
-
import {
|
|
9
|
+
import { ModelWidget } from './widgets/model-widget.js';
|
|
10
|
+
import { ContextWidget } from './widgets/context-widget.js';
|
|
11
|
+
import { CostWidget } from './widgets/cost-widget.js';
|
|
12
|
+
import { DurationWidget } from './widgets/duration-widget.js';
|
|
13
|
+
import { GitChangesWidget } from './widgets/git-changes-widget.js';
|
|
14
|
+
import { createGitAdapter } from './providers/git-provider.js';
|
|
15
|
+
/**
|
|
16
|
+
* Create mock StdinData for development/testing
|
|
17
|
+
*/
|
|
18
|
+
function createMockStdinData() {
|
|
19
|
+
return {
|
|
20
|
+
hook_event_name: 'Status',
|
|
21
|
+
session_id: 'dev-session',
|
|
22
|
+
transcript_path: '/tmp/transcript.json',
|
|
23
|
+
cwd: process.cwd(),
|
|
24
|
+
model: {
|
|
25
|
+
id: 'claude-opus-4-1',
|
|
26
|
+
display_name: 'Opus 4.5'
|
|
27
|
+
},
|
|
28
|
+
workspace: {
|
|
29
|
+
current_dir: process.cwd(),
|
|
30
|
+
project_dir: process.cwd()
|
|
31
|
+
},
|
|
32
|
+
version: '1.0.80',
|
|
33
|
+
output_style: {
|
|
34
|
+
name: 'default'
|
|
35
|
+
},
|
|
36
|
+
cost: {
|
|
37
|
+
total_cost_usd: 0.0123,
|
|
38
|
+
total_duration_ms: 330000,
|
|
39
|
+
total_api_duration_ms: 15000,
|
|
40
|
+
total_lines_added: 42,
|
|
41
|
+
total_lines_removed: 10
|
|
42
|
+
},
|
|
43
|
+
context_window: {
|
|
44
|
+
total_input_tokens: 15234,
|
|
45
|
+
total_output_tokens: 4521,
|
|
46
|
+
context_window_size: 200000,
|
|
47
|
+
current_usage: {
|
|
48
|
+
input_tokens: 8500,
|
|
49
|
+
output_tokens: 1200,
|
|
50
|
+
cache_creation_input_tokens: 5000,
|
|
51
|
+
cache_read_input_tokens: 2000
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
}
|
|
10
56
|
/**
|
|
11
57
|
* Main entry point
|
|
12
58
|
*/
|
|
13
59
|
export async function main() {
|
|
14
|
-
// Initialize git
|
|
15
|
-
const
|
|
60
|
+
// Initialize git adapter using factory method
|
|
61
|
+
const gitAdapter = createGitAdapter();
|
|
16
62
|
// Create registry
|
|
17
63
|
const registry = new WidgetRegistry();
|
|
18
|
-
//
|
|
19
|
-
|
|
20
|
-
await registry.register(
|
|
21
|
-
|
|
64
|
+
// Register all widgets
|
|
65
|
+
await registry.register(new ModelWidget());
|
|
66
|
+
await registry.register(new ContextWidget());
|
|
67
|
+
await registry.register(new CostWidget());
|
|
68
|
+
await registry.register(new DurationWidget());
|
|
69
|
+
await registry.register(new GitWidget({ git: gitAdapter }));
|
|
70
|
+
await registry.register(new GitChangesWidget(gitAdapter));
|
|
71
|
+
// Create renderer with pipe separator
|
|
22
72
|
const renderer = new Renderer();
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
73
|
+
renderer.setSeparator(' │ ');
|
|
74
|
+
// Create mock data for dev (in real usage, comes from stdin)
|
|
75
|
+
const mockData = createMockStdinData();
|
|
76
|
+
// Update all widgets with data
|
|
77
|
+
for (const widget of registry.getAll()) {
|
|
78
|
+
await widget.update(mockData);
|
|
79
|
+
}
|
|
80
|
+
// Render
|
|
30
81
|
const output = await renderer.render(registry.getEnabledWidgets(), { width: 80, timestamp: Date.now() });
|
|
31
82
|
return output;
|
|
32
83
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* Git operations provider
|
|
3
3
|
* Wraps simple-git for dependency injection
|
|
4
4
|
*/
|
|
5
|
-
import type
|
|
5
|
+
import { type SimpleGit } from 'simple-git';
|
|
6
|
+
import type { GitInfo, GitChanges } from '../types.js';
|
|
6
7
|
/**
|
|
7
8
|
* Git interface for dependency injection
|
|
8
9
|
*/
|
|
@@ -12,6 +13,10 @@ export interface IGit {
|
|
|
12
13
|
current: string | null;
|
|
13
14
|
all: string[];
|
|
14
15
|
}>;
|
|
16
|
+
diffStats(): Promise<{
|
|
17
|
+
insertions: number;
|
|
18
|
+
deletions: number;
|
|
19
|
+
} | null>;
|
|
15
20
|
}
|
|
16
21
|
/**
|
|
17
22
|
* Dependencies for GitProvider
|
|
@@ -36,6 +41,11 @@ export declare class GitProvider {
|
|
|
36
41
|
* @returns Branch name or null if not in repo
|
|
37
42
|
*/
|
|
38
43
|
getBranch(): Promise<string | null>;
|
|
44
|
+
/**
|
|
45
|
+
* Get git diff statistics
|
|
46
|
+
* @returns Changes with insertions and deletions, or null if not a repo
|
|
47
|
+
*/
|
|
48
|
+
getChanges(): Promise<GitChanges | null>;
|
|
39
49
|
/**
|
|
40
50
|
* Check if current path is a git repository
|
|
41
51
|
*/
|
|
@@ -45,4 +55,10 @@ export declare class GitProvider {
|
|
|
45
55
|
*/
|
|
46
56
|
getInfo(): Promise<GitInfo>;
|
|
47
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Factory method to create an IGit instance from simple-git
|
|
60
|
+
* @param gitInstance - Optional simple-git instance (creates default if not provided)
|
|
61
|
+
* @returns IGit implementation
|
|
62
|
+
*/
|
|
63
|
+
export declare function createGitAdapter(gitInstance?: SimpleGit): IGit;
|
|
48
64
|
//# sourceMappingURL=git-provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-provider.d.ts","sourceRoot":"","sources":["../../src/providers/git-provider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"git-provider.d.ts","sourceRoot":"","sources":["../../src/providers/git-provider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,MAAM,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,GAAG,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAC7D,SAAS,IAAI,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;CACxE;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,IAAI,CAAC;CACX;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,GAAG,CAAO;IAClB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAkB;gBAErB,IAAI,EAAE,eAAe;IAKjC;;OAEG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvC;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IASzC;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAgB9C;;OAEG;IACH,MAAM,IAAI,OAAO;IAIjB;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;CAMlC;AAuDD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,CAAC,EAAE,SAAS,GAAG,IAAI,CAG9D"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Git operations provider
|
|
3
3
|
* Wraps simple-git for dependency injection
|
|
4
4
|
*/
|
|
5
|
+
import { simpleGit } from 'simple-git';
|
|
5
6
|
/**
|
|
6
7
|
* Git provider for repository operations
|
|
7
8
|
*/
|
|
@@ -31,6 +32,23 @@ export class GitProvider {
|
|
|
31
32
|
const result = await this.git.branch();
|
|
32
33
|
return result.current;
|
|
33
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Get git diff statistics
|
|
37
|
+
* @returns Changes with insertions and deletions, or null if not a repo
|
|
38
|
+
*/
|
|
39
|
+
async getChanges() {
|
|
40
|
+
if (!this._isRepo) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
const stats = await this.git.diffStats();
|
|
44
|
+
if (!stats) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
insertions: stats.insertions,
|
|
49
|
+
deletions: stats.deletions
|
|
50
|
+
};
|
|
51
|
+
}
|
|
34
52
|
/**
|
|
35
53
|
* Check if current path is a git repository
|
|
36
54
|
*/
|
|
@@ -47,4 +65,63 @@ export class GitProvider {
|
|
|
47
65
|
};
|
|
48
66
|
}
|
|
49
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Adapter to wrap simple-git with our IGit interface
|
|
70
|
+
*/
|
|
71
|
+
class SimpleGitAdapter {
|
|
72
|
+
git;
|
|
73
|
+
constructor(git) {
|
|
74
|
+
this.git = git;
|
|
75
|
+
}
|
|
76
|
+
async checkIsRepo() {
|
|
77
|
+
try {
|
|
78
|
+
await this.git.status();
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
async branch() {
|
|
86
|
+
const branches = await this.git.branch();
|
|
87
|
+
return {
|
|
88
|
+
current: branches.current || null,
|
|
89
|
+
all: branches.all
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
async diffStats() {
|
|
93
|
+
try {
|
|
94
|
+
const summary = await this.git.diffSummary(['--shortstat']);
|
|
95
|
+
// Parse the summary object
|
|
96
|
+
let insertions = 0;
|
|
97
|
+
let deletions = 0;
|
|
98
|
+
if (summary.files && summary.files.length > 0) {
|
|
99
|
+
for (const file of summary.files) {
|
|
100
|
+
if ('insertions' in file && typeof file.insertions === 'number') {
|
|
101
|
+
insertions += file.insertions;
|
|
102
|
+
}
|
|
103
|
+
if ('deletions' in file && typeof file.deletions === 'number') {
|
|
104
|
+
deletions += file.deletions;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (insertions === 0 && deletions === 0) {
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
return { insertions, deletions };
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Factory method to create an IGit instance from simple-git
|
|
120
|
+
* @param gitInstance - Optional simple-git instance (creates default if not provided)
|
|
121
|
+
* @returns IGit implementation
|
|
122
|
+
*/
|
|
123
|
+
export function createGitAdapter(gitInstance) {
|
|
124
|
+
const git = gitInstance ?? simpleGit();
|
|
125
|
+
return new SimpleGitAdapter(git);
|
|
126
|
+
}
|
|
50
127
|
//# sourceMappingURL=git-provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-provider.js","sourceRoot":"","sources":["../../src/providers/git-provider.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"git-provider.js","sourceRoot":"","sources":["../../src/providers/git-provider.ts"],"names":[],"mappings":"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"}
|