@thanhvn14/csvibe 0.1.0 → 0.1.2

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 (176) hide show
  1. package/.csvibe/state/approaches.json +1 -0
  2. package/README.md +142 -3
  3. package/dist/commands/brainstorm.d.ts +16 -0
  4. package/dist/commands/brainstorm.d.ts.map +1 -0
  5. package/dist/commands/brainstorm.js +186 -0
  6. package/dist/commands/brainstorm.js.map +1 -0
  7. package/dist/commands/doctor.d.ts +9 -0
  8. package/dist/commands/doctor.d.ts.map +1 -0
  9. package/dist/commands/doctor.js +72 -0
  10. package/dist/commands/doctor.js.map +1 -0
  11. package/dist/commands/help.d.ts.map +1 -1
  12. package/dist/commands/help.js +13 -7
  13. package/dist/commands/help.js.map +1 -1
  14. package/dist/commands/index.d.ts +3 -0
  15. package/dist/commands/index.d.ts.map +1 -1
  16. package/dist/commands/index.js +7 -1
  17. package/dist/commands/index.js.map +1 -1
  18. package/dist/commands/init/index.d.ts +7 -0
  19. package/dist/commands/init/index.d.ts.map +1 -0
  20. package/dist/commands/init/index.js +10 -0
  21. package/dist/commands/init/index.js.map +1 -0
  22. package/dist/commands/init/init-command.d.ts +10 -0
  23. package/dist/commands/init/init-command.d.ts.map +1 -0
  24. package/dist/commands/init/init-command.js +75 -0
  25. package/dist/commands/init/init-command.js.map +1 -0
  26. package/dist/commands/init/phases/config-handler.d.ts +10 -0
  27. package/dist/commands/init/phases/config-handler.d.ts.map +1 -0
  28. package/dist/commands/init/phases/config-handler.js +21 -0
  29. package/dist/commands/init/phases/config-handler.js.map +1 -0
  30. package/dist/commands/init/phases/detection-handler.d.ts +10 -0
  31. package/dist/commands/init/phases/detection-handler.d.ts.map +1 -0
  32. package/dist/commands/init/phases/detection-handler.js +80 -0
  33. package/dist/commands/init/phases/detection-handler.js.map +1 -0
  34. package/dist/commands/init/phases/download-handler.d.ts +9 -0
  35. package/dist/commands/init/phases/download-handler.d.ts.map +1 -0
  36. package/dist/commands/init/phases/download-handler.js +16 -0
  37. package/dist/commands/init/phases/download-handler.js.map +1 -0
  38. package/dist/commands/init/phases/prompt-handler.d.ts +10 -0
  39. package/dist/commands/init/phases/prompt-handler.d.ts.map +1 -0
  40. package/dist/commands/init/phases/prompt-handler.js +24 -0
  41. package/dist/commands/init/phases/prompt-handler.js.map +1 -0
  42. package/dist/commands/init/phases/scaffold-handler.d.ts +9 -0
  43. package/dist/commands/init/phases/scaffold-handler.d.ts.map +1 -0
  44. package/dist/commands/init/phases/scaffold-handler.js +18 -0
  45. package/dist/commands/init/phases/scaffold-handler.js.map +1 -0
  46. package/dist/commands/init/phases/validation-handler.d.ts +14 -0
  47. package/dist/commands/init/phases/validation-handler.d.ts.map +1 -0
  48. package/dist/commands/init/phases/validation-handler.js +50 -0
  49. package/dist/commands/init/phases/validation-handler.js.map +1 -0
  50. package/dist/commands/init/phases/vscode-handler.d.ts +9 -0
  51. package/dist/commands/init/phases/vscode-handler.d.ts.map +1 -0
  52. package/dist/commands/init/phases/vscode-handler.js +16 -0
  53. package/dist/commands/init/phases/vscode-handler.js.map +1 -0
  54. package/dist/commands/init/types.d.ts +28 -0
  55. package/dist/commands/init/types.d.ts.map +1 -0
  56. package/dist/commands/init/types.js +6 -0
  57. package/dist/commands/init/types.js.map +1 -0
  58. package/dist/commands/scout.d.ts +30 -0
  59. package/dist/commands/scout.d.ts.map +1 -0
  60. package/dist/commands/scout.js +116 -0
  61. package/dist/commands/scout.js.map +1 -0
  62. package/dist/config/constants.d.ts +3 -3
  63. package/dist/config/constants.js +3 -3
  64. package/dist/config/constants.js.map +1 -1
  65. package/dist/domains/config/generator.d.ts +17 -0
  66. package/dist/domains/config/generator.d.ts.map +1 -0
  67. package/dist/domains/config/generator.js +67 -0
  68. package/dist/domains/config/generator.js.map +1 -0
  69. package/dist/domains/config/index.d.ts +8 -0
  70. package/dist/domains/config/index.d.ts.map +1 -0
  71. package/dist/domains/config/index.js +15 -0
  72. package/dist/domains/config/index.js.map +1 -0
  73. package/dist/domains/config/types.d.ts +39 -0
  74. package/dist/domains/config/types.d.ts.map +1 -0
  75. package/dist/domains/config/types.js +6 -0
  76. package/dist/domains/config/types.js.map +1 -0
  77. package/dist/domains/config/validator.d.ts +17 -0
  78. package/dist/domains/config/validator.d.ts.map +1 -0
  79. package/dist/domains/config/validator.js +54 -0
  80. package/dist/domains/config/validator.js.map +1 -0
  81. package/dist/domains/github/auth-api.d.ts +19 -0
  82. package/dist/domains/github/auth-api.d.ts.map +1 -0
  83. package/dist/domains/github/auth-api.js +196 -0
  84. package/dist/domains/github/auth-api.js.map +1 -0
  85. package/dist/domains/github/github-client.d.ts +323 -0
  86. package/dist/domains/github/github-client.d.ts.map +1 -0
  87. package/dist/domains/github/github-client.js +192 -0
  88. package/dist/domains/github/github-client.js.map +1 -0
  89. package/dist/domains/github/index.d.ts +9 -0
  90. package/dist/domains/github/index.d.ts.map +1 -0
  91. package/dist/domains/github/index.js +23 -0
  92. package/dist/domains/github/index.js.map +1 -0
  93. package/dist/domains/github/keychain.d.ts +19 -0
  94. package/dist/domains/github/keychain.d.ts.map +1 -0
  95. package/dist/domains/github/keychain.js +132 -0
  96. package/dist/domains/github/keychain.js.map +1 -0
  97. package/dist/domains/github/types.d.ts +40 -0
  98. package/dist/domains/github/types.d.ts.map +1 -0
  99. package/dist/domains/github/types.js +6 -0
  100. package/dist/domains/github/types.js.map +1 -0
  101. package/dist/domains/health-checks/auto-healer.d.ts +14 -0
  102. package/dist/domains/health-checks/auto-healer.d.ts.map +1 -0
  103. package/dist/domains/health-checks/auto-healer.js +160 -0
  104. package/dist/domains/health-checks/auto-healer.js.map +1 -0
  105. package/dist/domains/health-checks/check-runner.d.ts +10 -0
  106. package/dist/domains/health-checks/check-runner.d.ts.map +1 -0
  107. package/dist/domains/health-checks/check-runner.js +31 -0
  108. package/dist/domains/health-checks/check-runner.js.map +1 -0
  109. package/dist/domains/health-checks/checkers/auth-checker.d.ts +10 -0
  110. package/dist/domains/health-checks/checkers/auth-checker.d.ts.map +1 -0
  111. package/dist/domains/health-checks/checkers/auth-checker.js +90 -0
  112. package/dist/domains/health-checks/checkers/auth-checker.js.map +1 -0
  113. package/dist/domains/health-checks/checkers/deps-checker.d.ts +10 -0
  114. package/dist/domains/health-checks/checkers/deps-checker.d.ts.map +1 -0
  115. package/dist/domains/health-checks/checkers/deps-checker.js +150 -0
  116. package/dist/domains/health-checks/checkers/deps-checker.js.map +1 -0
  117. package/dist/domains/health-checks/checkers/project-checker.d.ts +10 -0
  118. package/dist/domains/health-checks/checkers/project-checker.d.ts.map +1 -0
  119. package/dist/domains/health-checks/checkers/project-checker.js +124 -0
  120. package/dist/domains/health-checks/checkers/project-checker.js.map +1 -0
  121. package/dist/domains/health-checks/checkers/system-checker.d.ts +10 -0
  122. package/dist/domains/health-checks/checkers/system-checker.d.ts.map +1 -0
  123. package/dist/domains/health-checks/checkers/system-checker.js +135 -0
  124. package/dist/domains/health-checks/checkers/system-checker.js.map +1 -0
  125. package/dist/domains/health-checks/index.d.ts +9 -0
  126. package/dist/domains/health-checks/index.d.ts.map +1 -0
  127. package/dist/domains/health-checks/index.js +21 -0
  128. package/dist/domains/health-checks/index.js.map +1 -0
  129. package/dist/domains/health-checks/report-generator.d.ts +18 -0
  130. package/dist/domains/health-checks/report-generator.d.ts.map +1 -0
  131. package/dist/domains/health-checks/report-generator.js +117 -0
  132. package/dist/domains/health-checks/report-generator.js.map +1 -0
  133. package/dist/domains/health-checks/types.d.ts +35 -0
  134. package/dist/domains/health-checks/types.d.ts.map +1 -0
  135. package/dist/domains/health-checks/types.js +6 -0
  136. package/dist/domains/health-checks/types.js.map +1 -0
  137. package/dist/index.js +33 -0
  138. package/dist/index.js.map +1 -1
  139. package/dist/utils/approaches-validator.d.ts +40 -0
  140. package/dist/utils/approaches-validator.d.ts.map +1 -0
  141. package/dist/utils/approaches-validator.js +101 -0
  142. package/dist/utils/approaches-validator.js.map +1 -0
  143. package/dist/utils/dependency-analyzer.d.ts +31 -0
  144. package/dist/utils/dependency-analyzer.d.ts.map +1 -0
  145. package/dist/utils/dependency-analyzer.js +294 -0
  146. package/dist/utils/dependency-analyzer.js.map +1 -0
  147. package/dist/utils/directory-analyzer.d.ts +23 -0
  148. package/dist/utils/directory-analyzer.d.ts.map +1 -0
  149. package/dist/utils/directory-analyzer.js +81 -0
  150. package/dist/utils/directory-analyzer.js.map +1 -0
  151. package/dist/utils/downloader.d.ts +3 -3
  152. package/dist/utils/downloader.d.ts.map +1 -1
  153. package/dist/utils/downloader.js +35 -65
  154. package/dist/utils/downloader.js.map +1 -1
  155. package/dist/utils/errors.d.ts +64 -10
  156. package/dist/utils/errors.d.ts.map +1 -1
  157. package/dist/utils/errors.js +136 -22
  158. package/dist/utils/errors.js.map +1 -1
  159. package/dist/utils/gh-cli.d.ts +4 -2
  160. package/dist/utils/gh-cli.d.ts.map +1 -1
  161. package/dist/utils/gh-cli.js +33 -38
  162. package/dist/utils/gh-cli.js.map +1 -1
  163. package/dist/utils/progress.d.ts +37 -0
  164. package/dist/utils/progress.d.ts.map +1 -0
  165. package/dist/utils/progress.js +121 -0
  166. package/dist/utils/progress.js.map +1 -0
  167. package/dist/utils/prompts.d.ts +5 -1
  168. package/dist/utils/prompts.d.ts.map +1 -1
  169. package/dist/utils/prompts.js +124 -64
  170. package/dist/utils/prompts.js.map +1 -1
  171. package/package.json +7 -3
  172. package/test-jira-prompt.js +32 -0
  173. package/dist/commands/init.d.ts +0 -6
  174. package/dist/commands/init.d.ts.map +0 -1
  175. package/dist/commands/init.js +0 -147
  176. package/dist/commands/init.js.map +0 -1
@@ -2,25 +2,79 @@
2
2
  * Error handling utilities and custom error classes
3
3
  */
4
4
  /**
5
- * Base error class for CSVibe CLI errors
5
+ * Abstract base error class for CSVibe CLI errors
6
+ * All custom errors should extend this class
6
7
  */
7
- export declare class CsvibeError extends Error {
8
- readonly code: string;
8
+ export declare abstract class CSVibeError extends Error {
9
9
  readonly exitCode: number;
10
- constructor(message: string, code: string, exitCode?: number);
10
+ abstract code: string;
11
+ abstract recoveryHint: string;
12
+ constructor(message: string, exitCode?: number);
11
13
  }
12
14
  /**
13
- * Error for gh CLI related issues
15
+ * GitHub authentication error
14
16
  */
15
- export declare class GhCliError extends CsvibeError {
16
- constructor(message: string, code: string);
17
+ export declare class GitHubAuthError extends CSVibeError {
18
+ code: string;
19
+ recoveryHint: string;
20
+ constructor(message?: string);
17
21
  }
18
22
  /**
19
- * Error for validation failures
23
+ * Project not found error
20
24
  */
21
- export declare class ValidationError extends CsvibeError {
22
- constructor(message: string, code: string);
25
+ export declare class ProjectNotFoundError extends CSVibeError {
26
+ code: string;
27
+ recoveryHint: string;
28
+ constructor(message?: string);
23
29
  }
30
+ /**
31
+ * Config validation error
32
+ */
33
+ export declare class ConfigValidationError extends CSVibeError {
34
+ code: string;
35
+ recoveryHint: string;
36
+ constructor(message?: string);
37
+ }
38
+ /**
39
+ * Network error
40
+ */
41
+ export declare class NetworkError extends CSVibeError {
42
+ code: string;
43
+ recoveryHint: string;
44
+ constructor(message?: string);
45
+ }
46
+ /**
47
+ * Dependency error
48
+ */
49
+ export declare class DependencyError extends CSVibeError {
50
+ code: string;
51
+ recoveryHint: string;
52
+ constructor(message?: string);
53
+ }
54
+ /**
55
+ * Legacy error classes for backward compatibility
56
+ */
57
+ export declare class CsvibeError extends CSVibeError {
58
+ code: string;
59
+ recoveryHint: string;
60
+ constructor(message: string, code?: string, exitCode?: number);
61
+ }
62
+ export declare class GhCliError extends GitHubAuthError {
63
+ constructor(message: string, _code?: string);
64
+ }
65
+ export declare class ValidationError extends CSVibeError {
66
+ code: string;
67
+ recoveryHint: string;
68
+ constructor(message: string, code?: string);
69
+ }
70
+ /**
71
+ * Format error with color-coded output and recovery hints
72
+ */
73
+ export declare function formatError(error: CSVibeError): string;
74
+ /**
75
+ * Log error to file for debugging
76
+ */
77
+ export declare function logError(error: Error): Promise<void>;
24
78
  /**
25
79
  * Global error handler for CLI
26
80
  */
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,qBAAa,WAAY,SAAQ,KAAK;aAGlB,IAAI,EAAE,MAAM;aACZ,QAAQ,EAAE,MAAM;gBAFhC,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,MAAU;CAKvC;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,WAAW;gBAC7B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAI1C;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,WAAW;gBAClC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAI1C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAejD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,EAC1E,EAAE,EAAE,CAAC,GACJ,CAAC,CAQH"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH;;;GAGG;AACH,8BAAsB,WAAY,SAAQ,KAAK;aAM3B,QAAQ,EAAE,MAAM;IALlC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;gBAG5B,OAAO,EAAE,MAAM,EACC,QAAQ,GAAE,MAAU;CAMvC;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,IAAI,SAAe;IACnB,YAAY,SAA+F;gBAE/F,OAAO,GAAE,MAAuC;CAG7D;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,WAAW;IACnD,IAAI,SAAyB;IAC7B,YAAY,SAAkG;gBAElG,OAAO,GAAE,MAA0C;CAGhE;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,WAAW;IACpD,IAAI,SAAsB;IAC1B,YAAY,SAA2E;gBAE3E,OAAO,GAAE,MAA0C;CAGhE;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,WAAW;IAC3C,IAAI,SAAe;IACnB,YAAY,SAAyF;gBAEzF,OAAO,GAAE,MAAiC;CAGvD;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,IAAI,SAAkB;IACtB,YAAY,SAAiE;gBAEjE,OAAO,GAAE,MAAwC;CAG9D;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,WAAW;IAC1C,IAAI,SAAe;IACnB,YAAY,SAAmF;gBAG7F,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,EACb,QAAQ,GAAE,MAAU;CAKvB;AAED,qBAAa,UAAW,SAAQ,eAAe;gBACjC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;CAG5C;AAED,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,IAAI,SAAkB;IACtB,YAAY,SAAoD;gBAEpD,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;CAI3C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAkBtD;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB1D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAkBjD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,EAC1E,EAAE,EAAE,CAAC,GACJ,CAAC,CAQH"}
@@ -6,54 +6,168 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
6
6
  return (mod && mod.__esModule) ? mod : { "default": mod };
7
7
  };
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.ValidationError = exports.GhCliError = exports.CsvibeError = void 0;
9
+ exports.ValidationError = exports.GhCliError = exports.CsvibeError = exports.DependencyError = exports.NetworkError = exports.ConfigValidationError = exports.ProjectNotFoundError = exports.GitHubAuthError = exports.CSVibeError = void 0;
10
+ exports.formatError = formatError;
11
+ exports.logError = logError;
10
12
  exports.handleError = handleError;
11
13
  exports.withErrorHandling = withErrorHandling;
12
14
  const chalk_1 = __importDefault(require("chalk"));
15
+ const fs_extra_1 = __importDefault(require("fs-extra"));
16
+ const path_1 = __importDefault(require("path"));
17
+ const os_1 = __importDefault(require("os"));
13
18
  /**
14
- * Base error class for CSVibe CLI errors
19
+ * Abstract base error class for CSVibe CLI errors
20
+ * All custom errors should extend this class
15
21
  */
16
- class CsvibeError extends Error {
17
- constructor(message, code, exitCode = 1) {
22
+ class CSVibeError extends Error {
23
+ constructor(message, exitCode = 1) {
18
24
  super(message);
19
- this.code = code;
20
25
  this.exitCode = exitCode;
21
- this.name = 'CsvibeError';
26
+ this.name = this.constructor.name;
27
+ Error.captureStackTrace(this, this.constructor);
22
28
  }
23
29
  }
24
- exports.CsvibeError = CsvibeError;
30
+ exports.CSVibeError = CSVibeError;
25
31
  /**
26
- * Error for gh CLI related issues
32
+ * GitHub authentication error
27
33
  */
28
- class GhCliError extends CsvibeError {
29
- constructor(message, code) {
30
- super(message, code, 1);
31
- this.name = 'GhCliError';
34
+ class GitHubAuthError extends CSVibeError {
35
+ constructor(message = 'GitHub authentication failed') {
36
+ super(message, 1);
37
+ this.code = 'E_GH_AUTH';
38
+ this.recoveryHint = 'Run "gh auth login" to authenticate with GitHub, or set GITHUB_TOKEN environment variable';
32
39
  }
33
40
  }
34
- exports.GhCliError = GhCliError;
41
+ exports.GitHubAuthError = GitHubAuthError;
42
+ /**
43
+ * Project not found error
44
+ */
45
+ class ProjectNotFoundError extends CSVibeError {
46
+ constructor(message = 'Project configuration not found') {
47
+ super(message, 1);
48
+ this.code = 'E_PROJECT_NOT_FOUND';
49
+ this.recoveryHint = 'Ensure you are in a valid project directory with package.json, pyproject.toml, or Cargo.toml';
50
+ }
51
+ }
52
+ exports.ProjectNotFoundError = ProjectNotFoundError;
35
53
  /**
36
- * Error for validation failures
54
+ * Config validation error
37
55
  */
38
- class ValidationError extends CsvibeError {
56
+ class ConfigValidationError extends CSVibeError {
57
+ constructor(message = 'Configuration validation failed') {
58
+ super(message, 1);
59
+ this.code = 'E_CONFIG_INVALID';
60
+ this.recoveryHint = 'Check .csvibe/config.yml for syntax errors or missing required fields';
61
+ }
62
+ }
63
+ exports.ConfigValidationError = ConfigValidationError;
64
+ /**
65
+ * Network error
66
+ */
67
+ class NetworkError extends CSVibeError {
68
+ constructor(message = 'Network request failed') {
69
+ super(message, 1);
70
+ this.code = 'E_NETWORK';
71
+ this.recoveryHint = 'Check your internet connection and GitHub API status (https://www.githubstatus.com)';
72
+ }
73
+ }
74
+ exports.NetworkError = NetworkError;
75
+ /**
76
+ * Dependency error
77
+ */
78
+ class DependencyError extends CSVibeError {
79
+ constructor(message = 'Required dependency not found') {
80
+ super(message, 1);
81
+ this.code = 'E_DEPENDENCY';
82
+ this.recoveryHint = 'Install the missing dependency or ensure it is in your PATH';
83
+ }
84
+ }
85
+ exports.DependencyError = DependencyError;
86
+ /**
87
+ * Legacy error classes for backward compatibility
88
+ */
89
+ class CsvibeError extends CSVibeError {
90
+ constructor(message, code, exitCode = 1) {
91
+ super(message, exitCode);
92
+ this.code = 'E_UNKNOWN';
93
+ this.recoveryHint = 'Please report this issue at https://github.com/thanhvn14/csvibe-engine/issues';
94
+ if (code)
95
+ this.code = code;
96
+ }
97
+ }
98
+ exports.CsvibeError = CsvibeError;
99
+ class GhCliError extends GitHubAuthError {
100
+ constructor(message, _code) {
101
+ super(message);
102
+ }
103
+ }
104
+ exports.GhCliError = GhCliError;
105
+ class ValidationError extends CSVibeError {
39
106
  constructor(message, code) {
40
- super(message, code, 1);
41
- this.name = 'ValidationError';
107
+ super(message, 1);
108
+ this.code = 'E_VALIDATION';
109
+ this.recoveryHint = 'Check the validation error message for details';
110
+ if (code)
111
+ this.code = code;
42
112
  }
43
113
  }
44
114
  exports.ValidationError = ValidationError;
115
+ /**
116
+ * Format error with color-coded output and recovery hints
117
+ */
118
+ function formatError(error) {
119
+ const lines = [
120
+ '',
121
+ chalk_1.default.red.bold('✗ Error: ') + chalk_1.default.white(error.message),
122
+ chalk_1.default.gray(' Code: ') + chalk_1.default.yellow(error.code),
123
+ '',
124
+ chalk_1.default.cyan('💡 Recovery Hint:'),
125
+ chalk_1.default.white(' ' + error.recoveryHint),
126
+ ''
127
+ ];
128
+ if (error.stack && process.env.VERBOSE) {
129
+ lines.push(chalk_1.default.gray('Stack trace:'));
130
+ lines.push(chalk_1.default.gray(error.stack));
131
+ lines.push('');
132
+ }
133
+ return lines.join('\n');
134
+ }
135
+ /**
136
+ * Log error to file for debugging
137
+ */
138
+ async function logError(error) {
139
+ try {
140
+ const logDir = path_1.default.join(os_1.default.homedir(), '.csvibe', 'logs');
141
+ await fs_extra_1.default.ensureDir(logDir);
142
+ const logFile = path_1.default.join(logDir, 'errors.log');
143
+ const timestamp = new Date().toISOString();
144
+ const logEntry = [
145
+ `[${timestamp}] ${error.name}: ${error.message}`,
146
+ error.stack || '',
147
+ '---',
148
+ ''
149
+ ].join('\n');
150
+ await fs_extra_1.default.appendFile(logFile, logEntry);
151
+ }
152
+ catch (logErr) {
153
+ // Silent fail - don't crash on logging errors
154
+ }
155
+ }
45
156
  /**
46
157
  * Global error handler for CLI
47
158
  */
48
159
  function handleError(error) {
49
- if (error instanceof CsvibeError) {
50
- // Custom errors already have formatted messages
51
- console.error('\n' + error.message);
160
+ if (error instanceof CSVibeError) {
161
+ // Format and display custom errors with recovery hints
162
+ console.error(formatError(error));
163
+ logError(error).catch(() => { }); // Async log, don't wait
52
164
  process.exit(error.exitCode);
53
165
  }
54
166
  else if (error instanceof Error) {
55
- // Generic errors
56
- console.error(chalk_1.default.red('\n✗ Error: ') + error.message + '\n');
167
+ // Generic errors - wrap in CSVibeError
168
+ const wrappedError = new CsvibeError(error.message);
169
+ console.error(formatError(wrappedError));
170
+ logError(error).catch(() => { });
57
171
  process.exit(1);
58
172
  }
59
173
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;AAyCH,kCAeC;AAKD,8CAUC;AArED,kDAA0B;AAE1B;;GAEG;AACH,MAAa,WAAY,SAAQ,KAAK;IACpC,YACE,OAAe,EACC,IAAY,EACZ,WAAmB,CAAC;QAEpC,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAQ;QACZ,aAAQ,GAAR,QAAQ,CAAY;QAGpC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AATD,kCASC;AAED;;GAEG;AACH,MAAa,UAAW,SAAQ,WAAW;IACzC,YAAY,OAAe,EAAE,IAAY;QACvC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AALD,gCAKC;AAED;;GAEG;AACH,MAAa,eAAgB,SAAQ,WAAW;IAC9C,YAAY,OAAe,EAAE,IAAY;QACvC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AALD,0CAKC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,KAAc;IACxC,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;QACjC,gDAAgD;QAChD,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;SAAM,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAClC,iBAAiB;QACjB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,iBAAiB;QACjB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAC/B,EAAK;IAEL,OAAO,CAAC,KAAK,EAAE,GAAG,IAAmB,EAAE,EAAE;QACvC,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAM,CAAC;AACV,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  /**
2
2
  * GitHub CLI (gh) validation and operations
3
+ * Now uses multi-tier authentication and @octokit/rest
3
4
  */
4
5
  /**
5
6
  * Check if gh CLI is installed
@@ -21,9 +22,10 @@ export declare function isGhAuthenticated(): Promise<boolean>;
21
22
  */
22
23
  export declare function checkRepoAccess(repo: string): Promise<boolean>;
23
24
  /**
24
- * Validate all gh CLI prerequisites
25
+ * Validate GitHub authentication and repository access
26
+ * Uses multi-tier authentication (gh CLI → env → config → keychain → prompt)
25
27
  * @param repo - Repository to check access (default: csvibe-engine)
26
- * @throws {GhCliError} If validation fails
28
+ * @throws {GitHubAuthError} If validation fails
27
29
  */
28
30
  export declare function validateGhCli(repo?: string): Promise<void>;
29
31
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"gh-cli.d.ts","sourceRoot":"","sources":["../../src/utils/gh-cli.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAOtD;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAS3D;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAO1D;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAYpE;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,IAAI,GAAE,MAA4B,GAAG,OAAO,CAAC,IAAI,CAAC,CAgErF;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAO5D"}
1
+ {"version":3,"file":"gh-cli.d.ts","sourceRoot":"","sources":["../../src/utils/gh-cli.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAOtD;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAS3D;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAO1D;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAYpE;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,IAAI,GAAE,MAA4B,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDrF;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAO5D"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  /**
3
3
  * GitHub CLI (gh) validation and operations
4
+ * Now uses multi-tier authentication and @octokit/rest
4
5
  */
5
6
  var __importDefault = (this && this.__importDefault) || function (mod) {
6
7
  return (mod && mod.__esModule) ? mod : { "default": mod };
@@ -17,6 +18,7 @@ const chalk_1 = __importDefault(require("chalk"));
17
18
  const constants_1 = require("../config/constants");
18
19
  const errors_1 = require("./errors");
19
20
  const logger_1 = require("./logger");
21
+ const github_1 = require("../domains/github");
20
22
  /**
21
23
  * Check if gh CLI is installed
22
24
  */
@@ -76,56 +78,49 @@ async function checkRepoAccess(repo) {
76
78
  }
77
79
  }
78
80
  /**
79
- * Validate all gh CLI prerequisites
81
+ * Validate GitHub authentication and repository access
82
+ * Uses multi-tier authentication (gh CLI → env → config → keychain → prompt)
80
83
  * @param repo - Repository to check access (default: csvibe-engine)
81
- * @throws {GhCliError} If validation fails
84
+ * @throws {GitHubAuthError} If validation fails
82
85
  */
83
86
  async function validateGhCli(repo = constants_1.CONSTANTS.REPO_FULL) {
84
- // Check gh CLI installed
85
- if (!(await isGhInstalled())) {
86
- throw new errors_1.GhCliError(chalk_1.default.red('✗ Error: gh CLI not found\n\n') +
87
- ' CSVibe requires GitHub CLI (gh) to download vibecoding assets.\n\n' +
88
- ' Install gh CLI:\n' +
89
- chalk_1.default.cyan(' • macOS: ') + 'brew install gh\n' +
90
- chalk_1.default.cyan(' • Windows: ') + 'winget install GitHub.cli\n' +
91
- chalk_1.default.cyan(' • Linux: ') + constants_1.CONSTANTS.GH_CLI_INSTALL + '\n\n' +
92
- ' After installing, authenticate:\n' +
93
- chalk_1.default.cyan(' gh auth login'), 'GH_NOT_INSTALLED');
94
- }
95
- // Check authenticated
96
- if (!(await isGhAuthenticated())) {
97
- throw new errors_1.GhCliError(chalk_1.default.red('✗ Error: gh CLI not authenticated\n\n') +
98
- ' Please authenticate GitHub CLI:\n' +
99
- chalk_1.default.cyan(' gh auth login\n\n') +
100
- ' Then try again:\n' +
101
- chalk_1.default.cyan(' csvibe init'), 'GH_NOT_AUTHENTICATED');
102
- }
103
- // Check repo access
104
- const spinner = logger_1.logger.spinner(`Checking access to ${repo}...`);
87
+ const spinner = logger_1.logger.spinner('Authenticating with GitHub...');
105
88
  try {
106
- const hasAccess = await checkRepoAccess(repo);
107
- if (!hasAccess) {
108
- spinner.fail();
109
- throw new errors_1.GhCliError(chalk_1.default.red(`✗ Error: Cannot access private repository '${repo}'\n\n`) +
110
- ' Possible causes:\n' +
111
- ' 1. Repository doesn\'t exist\n' +
112
- ' 2. Your GitHub account lacks access\n' +
113
- ' 3. gh CLI authentication expired\n\n' +
114
- ' Contact repository administrator for access.', 'GH_NO_REPO_ACCESS');
89
+ // Try multi-tier authentication
90
+ const { token, method } = await (0, github_1.getGitHubToken)();
91
+ spinner.succeed(`Authenticated via ${chalk_1.default.cyan((0, github_1.getAuthMethodDescription)(method))}`);
92
+ // Check repo access using GitHub client
93
+ const repoSpinner = logger_1.logger.spinner(`Checking access to ${repo}...`);
94
+ try {
95
+ const client = await github_1.GitHubClient.create();
96
+ const [owner, repoName] = repo.split('/');
97
+ const hasAccess = await client.hasRepoAccess(owner, repoName);
98
+ if (!hasAccess) {
99
+ repoSpinner.fail();
100
+ throw new errors_1.GitHubAuthError(chalk_1.default.red(`✗ Error: Cannot access private repository '${repo}'\n\n`) +
101
+ ' Possible causes:\n' +
102
+ ' 1. Repository doesn\'t exist\n' +
103
+ ' 2. Your GitHub account lacks access\n' +
104
+ ' 3. Token lacks required scopes (needs: repo, read:org)\n\n' +
105
+ ' Contact repository administrator for access.');
106
+ }
107
+ repoSpinner.succeed(`Access to ${repo} verified`);
108
+ }
109
+ catch (error) {
110
+ repoSpinner.fail();
111
+ throw error;
115
112
  }
116
- spinner.succeed(`Access to ${repo} verified`);
117
113
  }
118
114
  catch (error) {
119
115
  spinner.fail();
120
- // Re-throw if already a GhCliError
121
- if (error instanceof errors_1.GhCliError) {
116
+ // Re-throw if already a GitHubAuthError
117
+ if (error instanceof errors_1.GitHubAuthError) {
122
118
  throw error;
123
119
  }
124
120
  // Generic network/API errors
125
- throw new errors_1.GhCliError(chalk_1.default.red(`✗ Error: Failed to check repository access\n\n`) +
126
- ` Repository: ${repo}\n` +
121
+ throw new errors_1.GitHubAuthError(chalk_1.default.red(`✗ Error: Failed to authenticate with GitHub\n\n`) +
127
122
  ` Details: ${error instanceof Error ? error.message : String(error)}\n\n` +
128
- ' Check your internet connection and try again.', 'GH_API_ERROR');
123
+ ' Check your internet connection and authentication method.');
129
124
  }
130
125
  }
131
126
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"gh-cli.js","sourceRoot":"","sources":["../../src/utils/gh-cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gh-cli.js","sourceRoot":"","sources":["../../src/utils/gh-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Progress indicators and spinners using cli-progress
3
+ */
4
+ import * as cliProgress from 'cli-progress';
5
+ export interface ProgressOptions {
6
+ label: string;
7
+ total: number;
8
+ unit?: string;
9
+ }
10
+ /**
11
+ * Create a progress bar with ETA
12
+ */
13
+ export declare function createProgressBar(options: ProgressOptions): cliProgress.SingleBar;
14
+ /**
15
+ * Create a download progress bar with file size
16
+ */
17
+ export declare function createDownloadProgress(label: string, totalBytes: number): cliProgress.SingleBar;
18
+ /**
19
+ * Update download progress with speed calculation
20
+ */
21
+ export declare function updateDownloadProgress(bar: cliProgress.SingleBar, downloaded: number, total: number, startTime: number): void;
22
+ /**
23
+ * Multi-bar progress for parallel operations
24
+ */
25
+ export declare class MultiProgress {
26
+ private multibar;
27
+ constructor();
28
+ /**
29
+ * Add a progress bar to the multi-bar
30
+ */
31
+ addBar(label: string, total: number): cliProgress.SingleBar;
32
+ /**
33
+ * Stop all progress bars
34
+ */
35
+ stop(): void;
36
+ }
37
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/utils/progress.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,WAAW,MAAM,cAAc,CAAC;AAE5C,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,WAAW,CAAC,SAAS,CAiBjF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,CAAC,SAAS,CAoB/F;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,WAAW,CAAC,SAAS,EAC1B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAChB,IAAI,CAUN;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAuB;;IAavC;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC,SAAS;IAI3D;;OAEG;IACH,IAAI,IAAI,IAAI;CAGb"}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ /**
3
+ * Progress indicators and spinners using cli-progress
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.MultiProgress = void 0;
43
+ exports.createProgressBar = createProgressBar;
44
+ exports.createDownloadProgress = createDownloadProgress;
45
+ exports.updateDownloadProgress = updateDownloadProgress;
46
+ const chalk_1 = __importDefault(require("chalk"));
47
+ const cliProgress = __importStar(require("cli-progress"));
48
+ /**
49
+ * Create a progress bar with ETA
50
+ */
51
+ function createProgressBar(options) {
52
+ const { label, total, unit = 'items' } = options;
53
+ const bar = new cliProgress.SingleBar({
54
+ format: `${chalk_1.default.cyan(label)} [{bar}] {percentage}% | ETA: {eta}s | {value}/{total} ${unit}`,
55
+ barCompleteChar: '\u2588',
56
+ barIncompleteChar: '\u2591',
57
+ hideCursor: true,
58
+ clearOnComplete: false,
59
+ stopOnComplete: true,
60
+ }, cliProgress.Presets.shades_classic);
61
+ bar.start(total, 0);
62
+ return bar;
63
+ }
64
+ /**
65
+ * Create a download progress bar with file size
66
+ */
67
+ function createDownloadProgress(label, totalBytes) {
68
+ const bar = new cliProgress.SingleBar({
69
+ format: `${chalk_1.default.cyan(label)} [{bar}] {percentage}% | ETA: {eta}s | {downloadedMB}/{totalMB} MB | {speedMBps} MB/s`,
70
+ barCompleteChar: '\u2588',
71
+ barIncompleteChar: '\u2591',
72
+ hideCursor: true,
73
+ clearOnComplete: false,
74
+ stopOnComplete: true,
75
+ }, cliProgress.Presets.shades_classic);
76
+ bar.start(totalBytes, 0, {
77
+ downloadedMB: '0.00',
78
+ totalMB: (totalBytes / (1024 * 1024)).toFixed(2),
79
+ speedMBps: '0.00',
80
+ });
81
+ return bar;
82
+ }
83
+ /**
84
+ * Update download progress with speed calculation
85
+ */
86
+ function updateDownloadProgress(bar, downloaded, total, startTime) {
87
+ const elapsedSeconds = (Date.now() - startTime) / 1000;
88
+ const speedBytesPerSecond = downloaded / elapsedSeconds;
89
+ const speedMBps = (speedBytesPerSecond / (1024 * 1024)).toFixed(2);
90
+ bar.update(downloaded, {
91
+ downloadedMB: (downloaded / (1024 * 1024)).toFixed(2),
92
+ totalMB: (total / (1024 * 1024)).toFixed(2),
93
+ speedMBps,
94
+ });
95
+ }
96
+ /**
97
+ * Multi-bar progress for parallel operations
98
+ */
99
+ class MultiProgress {
100
+ constructor() {
101
+ this.multibar = new cliProgress.MultiBar({
102
+ clearOnComplete: false,
103
+ hideCursor: true,
104
+ format: '{label} [{bar}] {percentage}% | ETA: {eta}s | {value}/{total}',
105
+ }, cliProgress.Presets.shades_grey);
106
+ }
107
+ /**
108
+ * Add a progress bar to the multi-bar
109
+ */
110
+ addBar(label, total) {
111
+ return this.multibar.create(total, 0, { label: chalk_1.default.cyan(label) });
112
+ }
113
+ /**
114
+ * Stop all progress bars
115
+ */
116
+ stop() {
117
+ this.multibar.stop();
118
+ }
119
+ }
120
+ exports.MultiProgress = MultiProgress;
121
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/utils/progress.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Interactive prompt utilities
2
+ * Interactive prompt utilities using @clack/prompts
3
3
  */
4
4
  export interface JiraCredentials {
5
5
  url: string;
@@ -15,6 +15,10 @@ export declare function promptJiraCredentials(): Promise<JiraCredentials>;
15
15
  * Confirm overwrite of existing setup
16
16
  */
17
17
  export declare function confirmOverwrite(): Promise<boolean>;
18
+ /**
19
+ * Confirm Jira setup (optional configuration)
20
+ */
21
+ export declare function confirmJiraSetup(): Promise<boolean>;
18
22
  /**
19
23
  * Show API token creation instructions
20
24
  */
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,eAAe,CAAC,CA4DtE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAUzD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAM/C"}
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,eAAe,CAAC,CA0EtE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAYzD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAYzD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAa/C"}