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
package/dist/index.js CHANGED
@@ -5,31 +5,74 @@
5
5
  */
6
6
  import { WidgetRegistry } from './core/widget-registry.js';
7
7
  import { Renderer } from './core/renderer.js';
8
- import { GitWidget } from './widgets/git-widget.js';
9
- import { simpleGit } from 'simple-git';
8
+ import { GitWidget } from './widgets/git/git-widget.js';
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/git-changes-widget.js';
14
+ import { StdinProvider } from './data/stdin-provider.js';
15
+ /**
16
+ * Read stdin as string
17
+ */
18
+ async function readStdin() {
19
+ const chunks = [];
20
+ for await (const chunk of process.stdin) {
21
+ chunks.push(chunk);
22
+ }
23
+ return Buffer.concat(chunks).toString('utf8');
24
+ }
10
25
  /**
11
26
  * Main entry point
12
27
  */
13
28
  export async function main() {
14
- // Initialize git
15
- const git = simpleGit();
16
- // Create registry
17
- const registry = new WidgetRegistry();
18
- // Create and register git widget
19
- const gitWidget = new GitWidget({ git });
20
- await registry.register(gitWidget);
21
- // Create renderer
22
- const renderer = new Renderer();
23
- // Render output
24
- const cwd = process.cwd();
25
- await gitWidget.update({
26
- session_id: 'dev-session',
27
- cwd,
28
- model: { id: 'dev', display_name: 'Development' }
29
- });
30
- const output = await renderer.render(registry.getEnabledWidgets(), { width: 80, timestamp: Date.now() });
31
- return output;
29
+ try {
30
+ // Read JSON from stdin
31
+ const stdin = await readStdin();
32
+ // If stdin is empty, return empty string
33
+ if (!stdin || stdin.trim().length === 0) {
34
+ return '';
35
+ }
36
+ // Parse and validate with StdinProvider
37
+ const provider = new StdinProvider();
38
+ const stdinData = await provider.parse(stdin);
39
+ // Create registry
40
+ const registry = new WidgetRegistry();
41
+ // Register all widgets (no constructor args needed)
42
+ await registry.register(new ModelWidget());
43
+ await registry.register(new ContextWidget());
44
+ await registry.register(new CostWidget());
45
+ await registry.register(new DurationWidget());
46
+ await registry.register(new GitWidget());
47
+ await registry.register(new GitChangesWidget());
48
+ // Create renderer with error handling configuration
49
+ const renderer = new Renderer({
50
+ separator: ' │ ',
51
+ onError: (error, widget) => {
52
+ // Silently ignore widget errors - they return null
53
+ },
54
+ showErrors: false
55
+ });
56
+ // Update all widgets with data
57
+ for (const widget of registry.getAll()) {
58
+ await widget.update(stdinData);
59
+ }
60
+ // Render
61
+ const output = await renderer.render(registry.getEnabledWidgets(), { width: 80, timestamp: Date.now() });
62
+ return output || '';
63
+ }
64
+ catch (error) {
65
+ // Return empty string on any error
66
+ return '';
67
+ }
32
68
  }
33
69
  // Run when executed (works with both direct node and npx)
34
- main().then(console.log).catch(console.error);
70
+ main().then((output) => {
71
+ if (output) {
72
+ console.log(output);
73
+ }
74
+ }).catch(() => {
75
+ // Silently fail - return empty status line
76
+ process.exit(0);
77
+ });
35
78
  //# sourceMappingURL=index.js.map
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;AAEvC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,iBAAiB;IACjB,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IAExB,kBAAkB;IAClB,MAAM,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;IAEtC,iCAAiC;IACjC,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,MAAM,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAEnC,kBAAkB;IAClB,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;IAEhC,gBAAgB;IAChB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,SAAS,CAAC,MAAM,CAAC;QACrB,UAAU,EAAE,aAAa;QACzB,GAAG;QACH,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE;KAClD,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAClC,QAAQ,CAAC,iBAAiB,EAAE,EAC5B,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CACrC,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,0DAA0D;AAC1D,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,48 +1,71 @@
1
1
  /**
2
- * Git operations provider
3
- * Wraps simple-git for dependency injection
2
+ * Git provider interface and implementation
3
+ *
4
+ * Uses native Node.js child_process to execute git commands,
5
+ * avoiding external dependencies like simple-git.
4
6
  */
5
- import type { GitInfo } from '../types.js';
6
7
  /**
7
- * Git interface for dependency injection
8
+ * Result of git status operation
8
9
  */
9
- export interface IGit {
10
- checkIsRepo(): Promise<boolean>;
11
- branch(): Promise<{
12
- current: string | null;
13
- all: string[];
14
- }>;
10
+ export interface GitStatusResult {
11
+ /** Current branch name (null if no branch or detached HEAD) */
12
+ current: string | null;
15
13
  }
16
14
  /**
17
- * Dependencies for GitProvider
15
+ * Single file diff statistics
18
16
  */
19
- export interface GitProviderDeps {
20
- git: IGit;
17
+ export interface GitDiffFile {
18
+ /** File path relative to repo root */
19
+ file: string;
20
+ /** Number of lines added */
21
+ insertions: number;
22
+ /** Number of lines deleted */
23
+ deletions: number;
21
24
  }
22
25
  /**
23
- * Git provider for repository operations
26
+ * Result of git diff --shortstat operation
24
27
  */
25
- export declare class GitProvider {
26
- private git;
27
- private repoPath;
28
- private _isRepo;
29
- constructor(deps: GitProviderDeps);
30
- /**
31
- * Initialize provider with repository path
32
- */
33
- init(path: string): Promise<void>;
34
- /**
35
- * Get current branch name
36
- * @returns Branch name or null if not in repo
37
- */
38
- getBranch(): Promise<string | null>;
28
+ export interface GitDiffSummary {
29
+ /** Array of changed files with statistics */
30
+ files: GitDiffFile[];
31
+ }
32
+ /**
33
+ * Interface for git operations
34
+ *
35
+ * Abstraction over git commands to enable:
36
+ * - Easy testing with mocks
37
+ * - Swapping implementations
38
+ * - No tight coupling to specific git library
39
+ */
40
+ export interface IGit {
39
41
  /**
40
- * Check if current path is a git repository
42
+ * Get current git status (branch name)
43
+ * @returns Promise resolving to status info
41
44
  */
42
- isRepo(): boolean;
45
+ status(): Promise<GitStatusResult>;
43
46
  /**
44
- * Get complete git info
47
+ * Get diff statistics (insertions/deletions)
48
+ * @returns Promise resolving to diff summary
45
49
  */
46
- getInfo(): Promise<GitInfo>;
50
+ diffSummary(options?: string[]): Promise<GitDiffSummary>;
47
51
  }
52
+ /**
53
+ * Native git implementation using child_process
54
+ *
55
+ * Executes real git commands on the system.
56
+ * Requires git to be installed and available in PATH.
57
+ */
58
+ export declare class NativeGit implements IGit {
59
+ private cwd;
60
+ constructor(cwd: string);
61
+ status(): Promise<GitStatusResult>;
62
+ diffSummary(options?: string[]): Promise<GitDiffSummary>;
63
+ }
64
+ /**
65
+ * Factory function to create NativeGit instance
66
+ *
67
+ * @param cwd - Working directory for git operations
68
+ * @returns IGit instance
69
+ */
70
+ export declare function createGit(cwd: string): IGit;
48
71
  //# 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;AAE3C;;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;CAC9D;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;;OAEG;IACH,MAAM,IAAI,OAAO;IAIjB;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;CAMlC"}
1
+ {"version":3,"file":"git-provider.d.ts","sourceRoot":"","sources":["../../src/providers/git-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,+DAA+D;IAC/D,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,6CAA6C;IAC7C,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,IAAI;IACnB;;;OAGG;IACH,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;IAEnC;;;OAGG;IACH,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CAC1D;AAED;;;;;GAKG;AACH,qBAAa,SAAU,YAAW,IAAI;IACpC,OAAO,CAAC,GAAG,CAAS;gBAER,GAAG,EAAE,MAAM;IAIjB,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC;IAiBlC,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC;CAgC/D;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE3C"}
@@ -1,50 +1,73 @@
1
1
  /**
2
- * Git operations provider
3
- * Wraps simple-git for dependency injection
2
+ * Git provider interface and implementation
3
+ *
4
+ * Uses native Node.js child_process to execute git commands,
5
+ * avoiding external dependencies like simple-git.
4
6
  */
7
+ import { execFile } from 'node:child_process';
8
+ import { promisify } from 'node:util';
9
+ const execFileAsync = promisify(execFile);
5
10
  /**
6
- * Git provider for repository operations
11
+ * Native git implementation using child_process
12
+ *
13
+ * Executes real git commands on the system.
14
+ * Requires git to be installed and available in PATH.
7
15
  */
8
- export class GitProvider {
9
- git;
10
- repoPath;
11
- _isRepo = false;
12
- constructor(deps) {
13
- this.git = deps.git;
14
- this.repoPath = '';
16
+ export class NativeGit {
17
+ cwd;
18
+ constructor(cwd) {
19
+ this.cwd = cwd;
15
20
  }
16
- /**
17
- * Initialize provider with repository path
18
- */
19
- async init(path) {
20
- this.repoPath = path;
21
- this._isRepo = await this.git.checkIsRepo();
22
- }
23
- /**
24
- * Get current branch name
25
- * @returns Branch name or null if not in repo
26
- */
27
- async getBranch() {
28
- if (!this._isRepo) {
29
- return null;
21
+ async status() {
22
+ try {
23
+ const { stdout } = await execFileAsync('git', ['status', '--branch', '--short'], {
24
+ cwd: this.cwd,
25
+ });
26
+ // Parse output like: "## main" or "## feature-branch"
27
+ const match = stdout.match(/^##\s+(\S+)/m);
28
+ const current = match ? match[1] : null;
29
+ return { current };
30
+ }
31
+ catch {
32
+ // Not in a git repo or git not available
33
+ return { current: null };
30
34
  }
31
- const result = await this.git.branch();
32
- return result.current;
33
- }
34
- /**
35
- * Check if current path is a git repository
36
- */
37
- isRepo() {
38
- return this._isRepo;
39
35
  }
40
- /**
41
- * Get complete git info
42
- */
43
- async getInfo() {
44
- return {
45
- branch: await this.getBranch(),
46
- isRepo: this.isRepo()
47
- };
36
+ async diffSummary(options) {
37
+ const args = ['diff', '--shortstat'];
38
+ if (options) {
39
+ args.push(...options);
40
+ }
41
+ try {
42
+ const { stdout } = await execFileAsync('git', args, {
43
+ cwd: this.cwd,
44
+ });
45
+ // Parse output like: " 5 file(s) changed, 12 insertions(+), 3 deletions(-)"
46
+ // or: " 2 insertions(+), 1 deletion(-)"
47
+ const insertionMatch = stdout.match(/(\d+)\s+insertion/);
48
+ const deletionMatch = stdout.match(/(\d+)\s+deletion/);
49
+ const insertions = insertionMatch ? parseInt(insertionMatch[1], 10) : 0;
50
+ const deletions = deletionMatch ? parseInt(deletionMatch[1], 10) : 0;
51
+ // Return a single "file" entry representing total changes
52
+ // This matches the simple-git behavior we had before
53
+ const files = insertions > 0 || deletions > 0
54
+ ? [{ file: '(total)', insertions, deletions }]
55
+ : [];
56
+ return { files };
57
+ }
58
+ catch {
59
+ // Not in a git repo or git not available
60
+ return { files: [] };
61
+ }
48
62
  }
49
63
  }
64
+ /**
65
+ * Factory function to create NativeGit instance
66
+ *
67
+ * @param cwd - Working directory for git operations
68
+ * @returns IGit instance
69
+ */
70
+ export function createGit(cwd) {
71
+ return new NativeGit(cwd);
72
+ }
50
73
  //# 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;AAmBH;;GAEG;AACH,MAAM,OAAO,WAAW;IACd,GAAG,CAAO;IACV,QAAQ,CAAS;IACjB,OAAO,GAAY,KAAK,CAAC;IAEjC,YAAY,IAAqB;QAC/B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,IAAY;QACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAS;QACb,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,OAAO;YACL,MAAM,EAAE,MAAM,IAAI,CAAC,SAAS,EAAE;YAC9B,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;SACtB,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"git-provider.js","sourceRoot":"","sources":["../../src/providers/git-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAoD1C;;;;;GAKG;AACH,MAAM,OAAO,SAAS;IACZ,GAAG,CAAS;IAEpB,YAAY,GAAW;QACrB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE;gBAC/E,GAAG,EAAE,IAAI,CAAC,GAAG;aACd,CAAC,CAAC;YAEH,sDAAsD;YACtD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAExC,OAAO,EAAE,OAAO,EAAE,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,yCAAyC;YACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAkB;QAClC,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QACrC,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QACxB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE;gBAClD,GAAG,EAAE,IAAI,CAAC,GAAG;aACd,CAAC,CAAC;YAEH,4EAA4E;YAC5E,wCAAwC;YACxC,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACzD,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAEvD,MAAM,UAAU,GAAG,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxE,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAErE,0DAA0D;YAC1D,qDAAqD;YACrD,MAAM,KAAK,GACT,UAAU,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC;gBAC7B,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;gBAC9C,CAAC,CAAC,EAAE,CAAC;YAET,OAAO,EAAE,KAAK,EAAE,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,yCAAyC;YACzC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,OAAO,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Stdin provider for parsing JSON data from stdin
3
- * Parses and validates Claude Code session data
3
+ * Parses and validates Claude Code session data using Zod
4
4
  */
5
5
  import type { StdinData } from '../types.js';
6
6
  /**
@@ -16,28 +16,29 @@ export declare class StdinValidationError extends Error {
16
16
  constructor(message: string);
17
17
  }
18
18
  /**
19
- * Stdin provider for parsing JSON data
19
+ * Stdin provider for parsing and validating JSON data
20
20
  */
21
21
  export declare class StdinProvider {
22
22
  /**
23
- * Parse JSON string from stdin
23
+ * Parse and validate JSON string from stdin
24
24
  * @param input JSON string to parse
25
- * @returns Parsed StdinData object
25
+ * @returns Validated StdinData object
26
26
  * @throws StdinParseError if JSON is malformed
27
- * @throws StdinValidationError if data is invalid
27
+ * @throws StdinValidationError if data doesn't match schema
28
28
  */
29
29
  parse(input: string): Promise<StdinData>;
30
30
  /**
31
- * Validate stdin data structure
32
- * @param data Data to validate
33
- * @returns true if valid, false otherwise
34
- */
35
- validate(data: unknown): data is StdinData;
36
- /**
37
- * Validate stdin data and return detailed error message
38
- * @param data Data to validate
39
- * @returns Error message if invalid, null if valid
31
+ * Safe parse that returns result instead of throwing
32
+ * Useful for testing and optional validation
33
+ * @param input JSON string to parse
34
+ * @returns Result object with success flag
40
35
  */
41
- private getValidationError;
36
+ safeParse(input: string): Promise<{
37
+ success: true;
38
+ data: StdinData;
39
+ } | {
40
+ success: false;
41
+ error: string;
42
+ }>;
42
43
  }
43
44
  //# sourceMappingURL=stdin-provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stdin-provider.d.ts","sourceRoot":"","sources":["../../src/providers/stdin-provider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB;;;;;;OAMG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAuB9C;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,SAAS;IAmC1C;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;CA+B3B"}
1
+ {"version":3,"file":"stdin-provider.d.ts","sourceRoot":"","sources":["../../src/providers/stdin-provider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB;;;;;;OAMG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAmC9C;;;;;OAKG;IACG,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,IAAI,EAAE,SAAS,CAAA;KAAE,GAAG;QAAE,OAAO,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAQhH"}
@@ -1,7 +1,9 @@
1
1
  /**
2
2
  * Stdin provider for parsing JSON data from stdin
3
- * Parses and validates Claude Code session data
3
+ * Parses and validates Claude Code session data using Zod
4
4
  */
5
+ import { z } from 'zod';
6
+ import { StdinDataSchema } from '../schemas/stdin-schema.js';
5
7
  /**
6
8
  * Error thrown when stdin parsing fails
7
9
  */
@@ -21,15 +23,15 @@ export class StdinValidationError extends Error {
21
23
  }
22
24
  }
23
25
  /**
24
- * Stdin provider for parsing JSON data
26
+ * Stdin provider for parsing and validating JSON data
25
27
  */
26
28
  export class StdinProvider {
27
29
  /**
28
- * Parse JSON string from stdin
30
+ * Parse and validate JSON string from stdin
29
31
  * @param input JSON string to parse
30
- * @returns Parsed StdinData object
32
+ * @returns Validated StdinData object
31
33
  * @throws StdinParseError if JSON is malformed
32
- * @throws StdinValidationError if data is invalid
34
+ * @throws StdinValidationError if data doesn't match schema
33
35
  */
34
36
  async parse(input) {
35
37
  // Check for empty input
@@ -41,74 +43,41 @@ export class StdinProvider {
41
43
  try {
42
44
  data = JSON.parse(input);
43
45
  }
44
- catch {
45
- throw new StdinParseError('Failed to parse stdin data: Invalid JSON');
46
+ catch (error) {
47
+ throw new StdinParseError(`Invalid JSON: ${error.message}`);
46
48
  }
47
- // Validate data structure
48
- if (!this.validate(data)) {
49
- const error = this.getValidationError(data);
50
- throw new StdinValidationError(`stdin data validation failed: ${error}`);
51
- }
52
- return data;
53
- }
54
- /**
55
- * Validate stdin data structure
56
- * @param data Data to validate
57
- * @returns true if valid, false otherwise
58
- */
59
- validate(data) {
60
- // Basic type check
61
- if (typeof data !== 'object' || data === null) {
62
- return false;
63
- }
64
- const obj = data;
65
- // Check required top-level fields
66
- if (typeof obj.session_id !== 'string') {
67
- return false;
68
- }
69
- if (typeof obj.cwd !== 'string') {
70
- return false;
71
- }
72
- // Check model object
73
- if (typeof obj.model !== 'object' || obj.model === null) {
74
- return false;
75
- }
76
- const model = obj.model;
77
- if (typeof model.id !== 'string') {
78
- return false;
79
- }
80
- if (typeof model.display_name !== 'string') {
81
- return false;
49
+ // Validate with Zod
50
+ try {
51
+ return StdinDataSchema.parse(data);
52
+ }
53
+ catch (error) {
54
+ if (error instanceof z.ZodError) {
55
+ // Format error messages nicely
56
+ const errorDetails = error.issues
57
+ .map((e) => {
58
+ const path = e.path.length > 0 ? e.path.join('.') : 'root';
59
+ return `${path}: ${e.message}`;
60
+ })
61
+ .join(', ');
62
+ throw new StdinValidationError(`Validation failed: ${errorDetails}`);
63
+ }
64
+ throw error;
82
65
  }
83
- return true;
84
66
  }
85
67
  /**
86
- * Validate stdin data and return detailed error message
87
- * @param data Data to validate
88
- * @returns Error message if invalid, null if valid
68
+ * Safe parse that returns result instead of throwing
69
+ * Useful for testing and optional validation
70
+ * @param input JSON string to parse
71
+ * @returns Result object with success flag
89
72
  */
90
- getValidationError(data) {
91
- if (typeof data !== 'object' || data === null) {
92
- return 'stdin data must be an object';
93
- }
94
- const obj = data;
95
- if (typeof obj.session_id !== 'string') {
96
- return 'missing session_id';
97
- }
98
- if (typeof obj.cwd !== 'string') {
99
- return 'missing cwd';
100
- }
101
- if (typeof obj.model !== 'object' || obj.model === null) {
102
- return 'missing model';
103
- }
104
- const model = obj.model;
105
- if (typeof model.id !== 'string') {
106
- return 'missing model.id';
73
+ async safeParse(input) {
74
+ try {
75
+ const data = await this.parse(input);
76
+ return { success: true, data };
107
77
  }
108
- if (typeof model.display_name !== 'string') {
109
- return 'missing model.display_name';
78
+ catch (error) {
79
+ return { success: false, error: error.message };
110
80
  }
111
- return null;
112
81
  }
113
82
  }
114
83
  //# sourceMappingURL=stdin-provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stdin-provider.js","sourceRoot":"","sources":["../../src/providers/stdin-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stdin-provider.js","sourceRoot":"","sources":["../../src/providers/stdin-provider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,aAAa;IACxB;;;;;;OAMG;IACH,KAAK,CAAC,KAAK,CAAC,KAAa;QACvB,wBAAwB;QACxB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,eAAe,CAAC,qBAAqB,CAAC,CAAC;QACnD,CAAC;QAED,aAAa;QACb,IAAI,IAAa,CAAC;QAClB,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,eAAe,CAAC,iBAAkB,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC;YACH,OAAO,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAChC,+BAA+B;gBAC/B,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM;qBAC9B,GAAG,CAAC,CAAC,CAAa,EAAE,EAAE;oBACrB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;oBAC3D,OAAO,GAAG,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;gBACjC,CAAC,CAAC;qBACD,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEd,MAAM,IAAI,oBAAoB,CAC5B,sBAAsB,YAAY,EAAE,CACrC,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,SAAS,CAAC,KAAa;QAC3B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC;QAC7D,CAAC;IACH,CAAC;CACF"}