claude-scope 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/dist/constants.d.ts +56 -0
  2. package/dist/constants.d.ts.map +1 -0
  3. package/dist/constants.js +57 -0
  4. package/dist/constants.js.map +1 -0
  5. package/dist/core/renderer.d.ts +33 -3
  6. package/dist/core/renderer.d.ts.map +1 -1
  7. package/dist/core/renderer.js +49 -7
  8. package/dist/core/renderer.js.map +1 -1
  9. package/dist/core/stdin-data-widget.d.ts +85 -0
  10. package/dist/core/stdin-data-widget.d.ts.map +1 -0
  11. package/dist/core/stdin-data-widget.js +75 -0
  12. package/dist/core/stdin-data-widget.js.map +1 -0
  13. package/dist/core/widget-types.d.ts +30 -0
  14. package/dist/core/widget-types.d.ts.map +1 -0
  15. package/dist/core/widget-types.js +30 -0
  16. package/dist/core/widget-types.js.map +1 -0
  17. package/dist/data/stdin-provider.d.ts +44 -0
  18. package/dist/data/stdin-provider.d.ts.map +1 -0
  19. package/dist/data/stdin-provider.js +83 -0
  20. package/dist/data/stdin-provider.js.map +1 -0
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +64 -21
  23. package/dist/index.js.map +1 -1
  24. package/dist/providers/git-provider.d.ts +55 -32
  25. package/dist/providers/git-provider.d.ts.map +1 -1
  26. package/dist/providers/git-provider.js +63 -40
  27. package/dist/providers/git-provider.js.map +1 -1
  28. package/dist/providers/stdin-provider.d.ts +16 -15
  29. package/dist/providers/stdin-provider.d.ts.map +1 -1
  30. package/dist/providers/stdin-provider.js +35 -66
  31. package/dist/providers/stdin-provider.js.map +1 -1
  32. package/dist/schemas/stdin-schema.d.ts +123 -0
  33. package/dist/schemas/stdin-schema.d.ts.map +1 -0
  34. package/dist/schemas/stdin-schema.js +81 -0
  35. package/dist/schemas/stdin-schema.js.map +1 -0
  36. package/dist/types.d.ts +13 -15
  37. package/dist/types.d.ts.map +1 -1
  38. package/dist/types.js +3 -0
  39. package/dist/types.js.map +1 -1
  40. package/dist/ui/utils/colors.d.ts +52 -0
  41. package/dist/ui/utils/colors.d.ts.map +1 -0
  42. package/dist/ui/utils/colors.js +54 -0
  43. package/dist/ui/utils/colors.js.map +1 -0
  44. package/dist/ui/utils/formatters.d.ts +56 -0
  45. package/dist/ui/utils/formatters.d.ts.map +1 -0
  46. package/dist/ui/utils/formatters.js +114 -0
  47. package/dist/ui/utils/formatters.js.map +1 -0
  48. package/dist/utils/colors.d.ts +16 -0
  49. package/dist/utils/colors.d.ts.map +1 -1
  50. package/dist/utils/colors.js +18 -0
  51. package/dist/utils/colors.js.map +1 -1
  52. package/dist/utils/formatters.d.ts +56 -0
  53. package/dist/utils/formatters.d.ts.map +1 -0
  54. package/dist/utils/formatters.js +114 -0
  55. package/dist/utils/formatters.js.map +1 -0
  56. package/dist/widgets/context-widget.d.ts +13 -0
  57. package/dist/widgets/context-widget.d.ts.map +1 -0
  58. package/dist/widgets/context-widget.js +31 -0
  59. package/dist/widgets/context-widget.js.map +1 -0
  60. package/dist/widgets/core/stdin-data-widget.d.ts +93 -0
  61. package/dist/widgets/core/stdin-data-widget.d.ts.map +1 -0
  62. package/dist/widgets/core/stdin-data-widget.js +84 -0
  63. package/dist/widgets/core/stdin-data-widget.js.map +1 -0
  64. package/dist/widgets/cost-widget.d.ts +13 -0
  65. package/dist/widgets/cost-widget.d.ts.map +1 -0
  66. package/dist/widgets/cost-widget.js +18 -0
  67. package/dist/widgets/cost-widget.js.map +1 -0
  68. package/dist/widgets/duration-widget.d.ts +13 -0
  69. package/dist/widgets/duration-widget.d.ts.map +1 -0
  70. package/dist/widgets/duration-widget.js +18 -0
  71. package/dist/widgets/duration-widget.js.map +1 -0
  72. package/dist/widgets/git/git-changes-widget.d.ts +38 -0
  73. package/dist/widgets/git/git-changes-widget.d.ts.map +1 -0
  74. package/dist/widgets/git/git-changes-widget.js +91 -0
  75. package/dist/widgets/git/git-changes-widget.js.map +1 -0
  76. package/dist/widgets/git/git-widget.d.ts +37 -0
  77. package/dist/widgets/git/git-widget.d.ts.map +1 -0
  78. package/dist/widgets/git/git-widget.js +67 -0
  79. package/dist/widgets/git/git-widget.js.map +1 -0
  80. package/dist/widgets/git-changes-widget.d.ts +16 -0
  81. package/dist/widgets/git-changes-widget.d.ts.map +1 -0
  82. package/dist/widgets/git-changes-widget.js +37 -0
  83. package/dist/widgets/git-changes-widget.js.map +1 -0
  84. package/dist/widgets/git-widget.d.ts +8 -2
  85. package/dist/widgets/git-widget.d.ts.map +1 -1
  86. package/dist/widgets/git-widget.js +9 -9
  87. package/dist/widgets/git-widget.js.map +1 -1
  88. package/dist/widgets/model-widget.d.ts +13 -0
  89. package/dist/widgets/model-widget.d.ts.map +1 -0
  90. package/dist/widgets/model-widget.js +15 -0
  91. package/dist/widgets/model-widget.js.map +1 -0
  92. package/package.json +14 -6
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Git status widget
3
+ * Displays current git branch
4
+ *
5
+ * NOTE: This widget implements IWidget directly (not extending StdinDataWidget)
6
+ * because it requires async git operations with custom lifecycle management.
7
+ */
8
+ import type { IWidget, WidgetContext, RenderContext, StdinData } from '../../core/types.js';
9
+ import type { IGit } from '../../providers/git-provider.js';
10
+ /**
11
+ * Widget displaying git branch information
12
+ *
13
+ * Uses Dependency Injection for IGit to enable:
14
+ * - Easy testing with MockGit
15
+ * - No tight coupling to git implementation
16
+ * - Clean separation of concerns
17
+ */
18
+ export declare class GitWidget implements IWidget {
19
+ readonly id = "git";
20
+ readonly metadata: import("../../core/types.js").IWidgetMetadata;
21
+ private gitFactory;
22
+ private git;
23
+ private enabled;
24
+ private cwd;
25
+ /**
26
+ * @param gitFactory - Optional factory function for creating IGit instances
27
+ * If not provided, uses default createGit (production)
28
+ * Tests can inject MockGit factory here
29
+ */
30
+ constructor(gitFactory?: (cwd: string) => IGit);
31
+ initialize(context: WidgetContext): Promise<void>;
32
+ render(context: RenderContext): Promise<string | null>;
33
+ update(data: StdinData): Promise<void>;
34
+ isEnabled(): boolean;
35
+ cleanup(): Promise<void>;
36
+ }
37
+ //# sourceMappingURL=git-widget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-widget.d.ts","sourceRoot":"","sources":["../../../src/widgets/git/git-widget.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAE5F,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAC;AAG5D;;;;;;;GAOG;AACH,qBAAa,SAAU,YAAW,OAAO;IACvC,QAAQ,CAAC,EAAE,SAAS;IACpB,QAAQ,CAAC,QAAQ,gDAGf;IAEF,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,GAAG,CAAqB;IAChC,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,GAAG,CAAuB;IAElC;;;;OAIG;gBACS,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI;IAIxC,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAoBtD,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ5C,SAAS,IAAI,OAAO;IAId,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Git status widget
3
+ * Displays current git branch
4
+ *
5
+ * NOTE: This widget implements IWidget directly (not extending StdinDataWidget)
6
+ * because it requires async git operations with custom lifecycle management.
7
+ */
8
+ import { createWidgetMetadata } from '../../core/widget-types.js';
9
+ import { createGit } from '../../providers/git-provider.js';
10
+ /**
11
+ * Widget displaying git branch information
12
+ *
13
+ * Uses Dependency Injection for IGit to enable:
14
+ * - Easy testing with MockGit
15
+ * - No tight coupling to git implementation
16
+ * - Clean separation of concerns
17
+ */
18
+ export class GitWidget {
19
+ id = 'git';
20
+ metadata = createWidgetMetadata('Git Widget', 'Displays current git branch');
21
+ gitFactory;
22
+ git = null;
23
+ enabled = true;
24
+ cwd = null;
25
+ /**
26
+ * @param gitFactory - Optional factory function for creating IGit instances
27
+ * If not provided, uses default createGit (production)
28
+ * Tests can inject MockGit factory here
29
+ */
30
+ constructor(gitFactory) {
31
+ this.gitFactory = gitFactory || createGit;
32
+ }
33
+ async initialize(context) {
34
+ this.enabled = context.config?.enabled !== false;
35
+ }
36
+ async render(context) {
37
+ if (!this.enabled || !this.git || !this.cwd) {
38
+ return null;
39
+ }
40
+ try {
41
+ const status = await this.git.status();
42
+ const branch = status.current || null;
43
+ if (!branch) {
44
+ return null;
45
+ }
46
+ return ` ${branch}`;
47
+ }
48
+ catch {
49
+ // Log specific error for debugging but return null (graceful degradation)
50
+ return null;
51
+ }
52
+ }
53
+ async update(data) {
54
+ // Re-initialize git if cwd changed
55
+ if (data.cwd !== this.cwd) {
56
+ this.cwd = data.cwd;
57
+ this.git = this.gitFactory(data.cwd);
58
+ }
59
+ }
60
+ isEnabled() {
61
+ return this.enabled;
62
+ }
63
+ async cleanup() {
64
+ // No cleanup needed for native git implementation
65
+ }
66
+ }
67
+ //# sourceMappingURL=git-widget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-widget.js","sourceRoot":"","sources":["../../../src/widgets/git/git-widget.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAE5D;;;;;;;GAOG;AACH,MAAM,OAAO,SAAS;IACX,EAAE,GAAG,KAAK,CAAC;IACX,QAAQ,GAAG,oBAAoB,CACtC,YAAY,EACZ,6BAA6B,CAC9B,CAAC;IAEM,UAAU,CAAwB;IAClC,GAAG,GAAgB,IAAI,CAAC;IACxB,OAAO,GAAG,IAAI,CAAC;IACf,GAAG,GAAkB,IAAI,CAAC;IAElC;;;;OAIG;IACH,YAAY,UAAkC;QAC5C,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,SAAS,CAAC;IAC5C,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,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC;YAEtC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,IAAI,MAAM,EAAE,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,0EAA0E;YAC1E,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAe;QAC1B,mCAAmC;QACnC,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YACpB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,kDAAkD;IACpD,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, IWidgetMetadata, WidgetContext, RenderContext, StdinData } from '../core/types.js';
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;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE;;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;IAEpB,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAKhC;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;IAKjD,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IActD,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAO5C,SAAS,IAAI,OAAO;IAId,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
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
- // Initialize with config if needed
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;;;GAGG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAS3D;;GAEG;AACH,MAAM,OAAO,SAAS;IACX,EAAE,GAAG,KAAK,CAAC;IAEX,QAAQ,GAAoB;QACnC,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,6BAA6B;QAC1C,OAAO,EAAE,OAAO;QAChB,MAAM,EAAE,cAAc;KACvB,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,mCAAmC;QACnC,IAAI,CAAC,OAAO,GAAI,OAAO,CAAC,MAAM,CAAC,OAA+B,KAAK,KAAK,CAAC;IAC3E,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,8BAA8B;QAC9B,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"}
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, StdinData } from '../types.js';
8
+ export declare class ModelWidget extends StdinDataWidget {
9
+ readonly id = "model";
10
+ readonly metadata: import("../core/types.js").IWidgetMetadata;
11
+ protected renderWithData(data: StdinData, context: RenderContext): 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,6BAA6B,CAAC;AAE9D,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE5D,qBAAa,WAAY,SAAQ,eAAe;IAC9C,QAAQ,CAAC,EAAE,WAAW;IACtB,QAAQ,CAAC,QAAQ,6CAGf;IAEF,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI;CAGjF"}
@@ -0,0 +1,15 @@
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
+ renderWithData(data, context) {
12
+ return data.model.display_name;
13
+ }
14
+ }
15
+ //# sourceMappingURL=model-widget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-widget.js","sourceRoot":"","sources":["../../src/widgets/model-widget.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAG/D,MAAM,OAAO,WAAY,SAAQ,eAAe;IACrC,EAAE,GAAG,OAAO,CAAC;IACb,QAAQ,GAAG,oBAAoB,CACtC,OAAO,EACP,wCAAwC,CACzC,CAAC;IAEQ,cAAc,CAAC,IAAe,EAAE,OAAsB;QAC9D,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;IACjC,CAAC;CACF"}
package/package.json CHANGED
@@ -1,10 +1,16 @@
1
1
  {
2
2
  "name": "claude-scope",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "Claude Code plugin for session status and analytics",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "main": "dist/index.js",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
8
14
  "bin": {
9
15
  "claude-scope": "./dist/index.js"
10
16
  },
@@ -15,14 +21,16 @@
15
21
  ],
16
22
  "scripts": {
17
23
  "build": "tsc",
18
- "test": "tsx --test tests/**/*.test.ts",
19
- "test:unit": "tsx --test tests/unit/**/*.test.ts",
20
- "test:integration": "tsx --test tests/integration/**/*.test.ts",
21
- "test:coverage": "c8 --reporter=text --reporter=html --exclude='tests/**' --exclude='**/*.test.ts' tsx --test tests/**/*.test.ts",
24
+ "test": "tsx --test tests/e2e/stdin-flow.test.ts tests/integration/cli-flow.integration.test.ts tests/integration/five-widgets.integration.test.ts tests/unit/cli.test.ts tests/unit/types.test.ts tests/unit/core/*.test.ts tests/unit/data/*.test.ts tests/unit/utils/*.test.ts tests/unit/widgets/*.test.ts",
25
+ "test:unit": "tsx --test tests/unit/cli.test.ts tests/unit/types.test.ts tests/unit/core/*.test.ts tests/unit/data/*.test.ts tests/unit/utils/*.test.ts tests/unit/widgets/*.test.ts",
26
+ "test:integration": "tsx --test tests/e2e/stdin-flow.test.ts tests/integration/cli-flow.integration.test.ts tests/integration/five-widgets.integration.test.ts",
27
+ "test:coverage": "c8 --reporter=text --reporter=html --exclude='tests/**' --exclude='**/*.test.ts' tsx --test tests/e2e/stdin-flow.test.ts tests/integration/cli-flow.integration.test.ts tests/integration/five-widgets.integration.test.ts tests/unit/cli.test.ts tests/unit/types.test.ts tests/unit/core/*.test.ts tests/unit/data/*.test.ts tests/unit/utils/*.test.ts tests/unit/widgets/*.test.ts",
28
+ "test:snapshot": "SNAPSHOT_UPDATE=true tsx --test tests/e2e/stdin-flow.test.ts tests/integration/cli-flow.integration.test.ts tests/integration/five-widgets.integration.test.ts tests/unit/cli.test.ts tests/unit/types.test.ts tests/unit/core/*.test.ts tests/unit/data/*.test.ts tests/unit/utils/*.test.ts tests/unit/widgets/*.test.ts",
29
+ "test:snapshot:verify": "tsx --test tests/e2e/stdin-flow.test.ts tests/integration/cli-flow.integration.test.ts tests/integration/five-widgets.integration.test.ts tests/unit/cli.test.ts tests/unit/types.test.ts tests/unit/core/*.test.ts tests/unit/data/*.test.ts tests/unit/utils/*.test.ts tests/unit/widgets/*.test.ts",
22
30
  "dev": "tsx src/index.ts"
23
31
  },
24
32
  "dependencies": {
25
- "simple-git": "^3.27.0"
33
+ "zod": "^4.3.5"
26
34
  },
27
35
  "devDependencies": {
28
36
  "@types/node": "^22.10.2",