@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
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ /**
3
+ * GitHub client with @octokit/rest integration
4
+ * Includes retry logic, rate limit handling, and progress tracking
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.GitHubClient = void 0;
11
+ const rest_1 = require("@octokit/rest");
12
+ const p_retry_1 = __importDefault(require("p-retry"));
13
+ const auth_api_1 = require("./auth-api");
14
+ const errors_1 = require("../../utils/errors");
15
+ /**
16
+ * GitHub client wrapper with resilience patterns
17
+ */
18
+ class GitHubClient {
19
+ constructor(token) {
20
+ this.token = token;
21
+ this.octokit = new rest_1.Octokit({
22
+ auth: token,
23
+ userAgent: 'csvibe-cli',
24
+ request: {
25
+ timeout: 30000,
26
+ },
27
+ });
28
+ }
29
+ /**
30
+ * Create authenticated GitHub client
31
+ */
32
+ static async create() {
33
+ const { token } = await (0, auth_api_1.getGitHubToken)();
34
+ return new GitHubClient(token);
35
+ }
36
+ /**
37
+ * Get current rate limit information
38
+ */
39
+ async getRateLimit() {
40
+ return (0, p_retry_1.default)(async () => {
41
+ const { data } = await this.octokit.rateLimit.get();
42
+ return {
43
+ limit: data.rate.limit,
44
+ remaining: data.rate.remaining,
45
+ reset: new Date(data.rate.reset * 1000),
46
+ used: data.rate.used,
47
+ };
48
+ }, {
49
+ retries: 2,
50
+ onFailedAttempt: (error) => {
51
+ console.warn(`Rate limit check attempt ${error.attemptNumber} failed`);
52
+ },
53
+ });
54
+ }
55
+ /**
56
+ * Download file content from repository
57
+ */
58
+ async downloadFile(owner, repo, path, ref = 'main') {
59
+ return (0, p_retry_1.default)(async () => {
60
+ try {
61
+ const { data } = await this.octokit.repos.getContent({
62
+ owner,
63
+ repo,
64
+ path,
65
+ ref,
66
+ });
67
+ // Handle file content (not directory)
68
+ if ('content' in data && data.type === 'file') {
69
+ return Buffer.from(data.content, 'base64');
70
+ }
71
+ throw new errors_1.NetworkError(`Path ${path} is not a file`);
72
+ }
73
+ catch (error) {
74
+ if (error.status === 404) {
75
+ throw new errors_1.NetworkError(`File not found: ${path}`);
76
+ }
77
+ if (error.status === 403) {
78
+ // Rate limit exceeded
79
+ const resetTime = new Date(error.response.headers['x-ratelimit-reset'] * 1000);
80
+ throw new errors_1.NetworkError(`Rate limit exceeded. Resets at ${resetTime.toLocaleTimeString()}`);
81
+ }
82
+ throw error;
83
+ }
84
+ }, {
85
+ retries: 3,
86
+ onFailedAttempt: (error) => {
87
+ console.warn(`Download attempt ${error.attemptNumber} failed: ${error.message}`);
88
+ },
89
+ });
90
+ }
91
+ /**
92
+ * Download directory contents recursively
93
+ */
94
+ async downloadDirectory(owner, repo, path, ref = 'main') {
95
+ return (0, p_retry_1.default)(async () => {
96
+ const files = [];
97
+ try {
98
+ const { data } = await this.octokit.repos.getContent({
99
+ owner,
100
+ repo,
101
+ path,
102
+ ref,
103
+ });
104
+ // Handle directory
105
+ if (Array.isArray(data)) {
106
+ for (const item of data) {
107
+ if (item.type === 'file' && item.download_url) {
108
+ // Download file
109
+ const content = await this.downloadFile(owner, repo, item.path, ref);
110
+ files.push({ path: item.path, content });
111
+ }
112
+ else if (item.type === 'dir') {
113
+ // Recursively download subdirectory
114
+ const subFiles = await this.downloadDirectory(owner, repo, item.path, ref);
115
+ files.push(...subFiles);
116
+ }
117
+ }
118
+ }
119
+ return files;
120
+ }
121
+ catch (error) {
122
+ if (error.status === 404) {
123
+ throw new errors_1.NetworkError(`Directory not found: ${path}`);
124
+ }
125
+ throw error;
126
+ }
127
+ }, {
128
+ retries: 3,
129
+ onFailedAttempt: (error) => {
130
+ console.warn(`Directory download attempt ${error.attemptNumber} failed: ${error.message}`);
131
+ },
132
+ });
133
+ }
134
+ /**
135
+ * Get repository information
136
+ */
137
+ async getRepository(owner, repo) {
138
+ return (0, p_retry_1.default)(async () => {
139
+ const { data } = await this.octokit.repos.get({
140
+ owner,
141
+ repo,
142
+ });
143
+ return data;
144
+ }, {
145
+ retries: 2,
146
+ });
147
+ }
148
+ /**
149
+ * List repository contents at path
150
+ */
151
+ async listContents(owner, repo, path = '', ref = 'main') {
152
+ return (0, p_retry_1.default)(async () => {
153
+ const { data } = await this.octokit.repos.getContent({
154
+ owner,
155
+ repo,
156
+ path,
157
+ ref,
158
+ });
159
+ if (Array.isArray(data)) {
160
+ return data;
161
+ }
162
+ // Single file, wrap in array
163
+ return [data];
164
+ }, {
165
+ retries: 2,
166
+ });
167
+ }
168
+ /**
169
+ * Check if authenticated user has access to repository
170
+ */
171
+ async hasRepoAccess(owner, repo) {
172
+ try {
173
+ await this.octokit.repos.get({ owner, repo });
174
+ return true;
175
+ }
176
+ catch (error) {
177
+ if (error.status === 404 || error.status === 403) {
178
+ return false;
179
+ }
180
+ throw error;
181
+ }
182
+ }
183
+ /**
184
+ * Get authenticated user information
185
+ */
186
+ async getAuthenticatedUser() {
187
+ const { data } = await this.octokit.users.getAuthenticated();
188
+ return data;
189
+ }
190
+ }
191
+ exports.GitHubClient = GitHubClient;
192
+ //# sourceMappingURL=github-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-client.js","sourceRoot":"","sources":["../../../src/domains/github/github-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * GitHub domain facade
3
+ * Public API for GitHub authentication and client operations
4
+ */
5
+ export { getGitHubToken, validateToken, getAuthMethodDescription } from './auth-api';
6
+ export { GitHubClient } from './github-client';
7
+ export { saveTokenToKeychain, readTokenFromKeychain, deleteTokenFromKeychain } from './keychain';
8
+ export type { AuthMethod, GitHubTokenInfo, RateLimitInfo, DownloadOptions } from './types';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domains/github/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAGrF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAGjG,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ /**
3
+ * GitHub domain facade
4
+ * Public API for GitHub authentication and client operations
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.deleteTokenFromKeychain = exports.readTokenFromKeychain = exports.saveTokenToKeychain = exports.GitHubClient = exports.getAuthMethodDescription = exports.validateToken = exports.getGitHubToken = void 0;
8
+ // Authentication
9
+ var auth_api_1 = require("./auth-api");
10
+ Object.defineProperty(exports, "getGitHubToken", { enumerable: true, get: function () { return auth_api_1.getGitHubToken; } });
11
+ Object.defineProperty(exports, "validateToken", { enumerable: true, get: function () { return auth_api_1.validateToken; } });
12
+ Object.defineProperty(exports, "getAuthMethodDescription", { enumerable: true, get: function () { return auth_api_1.getAuthMethodDescription; } });
13
+ // GitHub Client
14
+ var github_client_1 = require("./github-client");
15
+ Object.defineProperty(exports, "GitHubClient", { enumerable: true, get: function () { return github_client_1.GitHubClient; } });
16
+ // Keychain (public methods only)
17
+ var keychain_1 = require("./keychain");
18
+ Object.defineProperty(exports, "saveTokenToKeychain", { enumerable: true, get: function () { return keychain_1.saveTokenToKeychain; } });
19
+ Object.defineProperty(exports, "readTokenFromKeychain", { enumerable: true, get: function () { return keychain_1.readTokenFromKeychain; } });
20
+ Object.defineProperty(exports, "deleteTokenFromKeychain", { enumerable: true, get: function () { return keychain_1.deleteTokenFromKeychain; } });
21
+ // Note: Internal modules (keychain implementation details) are NOT exported
22
+ // This ensures clean separation and prevents coupling to internal implementation
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domains/github/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,iBAAiB;AACjB,uCAAqF;AAA5E,0GAAA,cAAc,OAAA;AAAE,yGAAA,aAAa,OAAA;AAAE,oHAAA,wBAAwB,OAAA;AAEhE,gBAAgB;AAChB,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AAErB,iCAAiC;AACjC,uCAAiG;AAAxF,+GAAA,mBAAmB,OAAA;AAAE,iHAAA,qBAAqB,OAAA;AAAE,mHAAA,uBAAuB,OAAA;AAK5E,4EAA4E;AAC5E,iFAAiF"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * OS keychain integration for secure token storage
3
+ * Supports macOS Keychain, Windows Credential Manager, Linux Secret Service
4
+ */
5
+ /**
6
+ * Save token to OS keychain
7
+ * Falls back to encrypted file if keychain unavailable
8
+ */
9
+ export declare function saveTokenToKeychain(token: string): Promise<void>;
10
+ /**
11
+ * Read token from OS keychain
12
+ * Falls back to file if keychain unavailable
13
+ */
14
+ export declare function readTokenFromKeychain(): Promise<string | null>;
15
+ /**
16
+ * Delete token from keychain
17
+ */
18
+ export declare function deleteTokenFromKeychain(): Promise<boolean>;
19
+ //# sourceMappingURL=keychain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keychain.d.ts","sourceRoot":"","sources":["../../../src/domains/github/keychain.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAStE;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAWpE;AAED;;GAEG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,OAAO,CAAC,CAgBhE"}
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ /**
3
+ * OS keychain integration for secure token storage
4
+ * Supports macOS Keychain, Windows Credential Manager, Linux Secret Service
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ var __importDefault = (this && this.__importDefault) || function (mod) {
40
+ return (mod && mod.__esModule) ? mod : { "default": mod };
41
+ };
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.saveTokenToKeychain = saveTokenToKeychain;
44
+ exports.readTokenFromKeychain = readTokenFromKeychain;
45
+ exports.deleteTokenFromKeychain = deleteTokenFromKeychain;
46
+ const keytar = __importStar(require("keytar"));
47
+ const fs_extra_1 = __importDefault(require("fs-extra"));
48
+ const path_1 = __importDefault(require("path"));
49
+ const os_1 = __importDefault(require("os"));
50
+ const SERVICE_NAME = 'csvibe-cli';
51
+ const ACCOUNT_NAME = 'github-token';
52
+ const CONFIG_DIR = path_1.default.join(os_1.default.homedir(), '.csvibe');
53
+ const TOKEN_FILE = path_1.default.join(CONFIG_DIR, '.github-token');
54
+ /**
55
+ * Save token to OS keychain
56
+ * Falls back to encrypted file if keychain unavailable
57
+ */
58
+ async function saveTokenToKeychain(token) {
59
+ try {
60
+ // Try OS keychain first
61
+ await keytar.setPassword(SERVICE_NAME, ACCOUNT_NAME, token);
62
+ }
63
+ catch (error) {
64
+ // Fallback: Save to config file with basic obfuscation
65
+ // Note: This is not secure, just better than plain text
66
+ await saveTokenToFile(token);
67
+ }
68
+ }
69
+ /**
70
+ * Read token from OS keychain
71
+ * Falls back to file if keychain unavailable
72
+ */
73
+ async function readTokenFromKeychain() {
74
+ try {
75
+ // Try OS keychain first
76
+ const token = await keytar.getPassword(SERVICE_NAME, ACCOUNT_NAME);
77
+ if (token)
78
+ return token;
79
+ }
80
+ catch (error) {
81
+ // Keychain not available, try file
82
+ }
83
+ // Fallback: Read from config file
84
+ return await readTokenFromFile();
85
+ }
86
+ /**
87
+ * Delete token from keychain
88
+ */
89
+ async function deleteTokenFromKeychain() {
90
+ try {
91
+ // Delete from OS keychain
92
+ await keytar.deletePassword(SERVICE_NAME, ACCOUNT_NAME);
93
+ }
94
+ catch (error) {
95
+ // Ignore keychain errors
96
+ }
97
+ // Also delete file if exists
98
+ try {
99
+ await fs_extra_1.default.remove(TOKEN_FILE);
100
+ }
101
+ catch (error) {
102
+ // Ignore file errors
103
+ }
104
+ return true;
105
+ }
106
+ /**
107
+ * Save token to file with basic obfuscation
108
+ * WARNING: This is not secure, just better than plain text
109
+ */
110
+ async function saveTokenToFile(token) {
111
+ await fs_extra_1.default.ensureDir(CONFIG_DIR);
112
+ // Simple base64 encoding (NOT encryption, just obfuscation)
113
+ const encoded = Buffer.from(token).toString('base64');
114
+ await fs_extra_1.default.writeFile(TOKEN_FILE, encoded, { mode: 0o600 });
115
+ }
116
+ /**
117
+ * Read token from file
118
+ */
119
+ async function readTokenFromFile() {
120
+ try {
121
+ if (!(await fs_extra_1.default.pathExists(TOKEN_FILE))) {
122
+ return null;
123
+ }
124
+ const encoded = await fs_extra_1.default.readFile(TOKEN_FILE, 'utf-8');
125
+ const token = Buffer.from(encoded.trim(), 'base64').toString('utf-8');
126
+ return token || null;
127
+ }
128
+ catch (error) {
129
+ return null;
130
+ }
131
+ }
132
+ //# sourceMappingURL=keychain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keychain.js","sourceRoot":"","sources":["../../../src/domains/github/keychain.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBH,kDASC;AAMD,sDAWC;AAKD,0DAgBC;AA7DD,+CAAiC;AACjC,wDAA0B;AAC1B,gDAAwB;AACxB,4CAAoB;AAEpB,MAAM,YAAY,GAAG,YAAY,CAAC;AAClC,MAAM,YAAY,GAAG,cAAc,CAAC;AACpC,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AACtD,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;AAE1D;;;GAGG;AACI,KAAK,UAAU,mBAAmB,CAAC,KAAa;IACrD,IAAI,CAAC;QACH,wBAAwB;QACxB,MAAM,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,uDAAuD;QACvD,wDAAwD;QACxD,MAAM,eAAe,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,qBAAqB;IACzC,IAAI,CAAC;QACH,wBAAwB;QACxB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QACnE,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,mCAAmC;IACrC,CAAC;IAED,kCAAkC;IAClC,OAAO,MAAM,iBAAiB,EAAE,CAAC;AACnC,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,uBAAuB;IAC3C,IAAI,CAAC;QACH,0BAA0B;QAC1B,MAAM,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,yBAAyB;IAC3B,CAAC;IAED,6BAA6B;IAC7B,IAAI,CAAC;QACH,MAAM,kBAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,qBAAqB;IACvB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,eAAe,CAAC,KAAa;IAC1C,MAAM,kBAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAE/B,4DAA4D;IAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,kBAAE,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB;IAC9B,IAAI,CAAC;QACH,IAAI,CAAC,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAEtE,OAAO,KAAK,IAAI,IAAI,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * GitHub domain types and interfaces
3
+ */
4
+ /**
5
+ * Authentication method used to obtain token
6
+ */
7
+ export type AuthMethod = 'gh-cli' | 'env-var' | 'config' | 'keychain' | 'prompt';
8
+ /**
9
+ * GitHub token with metadata
10
+ */
11
+ export interface GitHubTokenInfo {
12
+ token: string;
13
+ method: AuthMethod;
14
+ }
15
+ /**
16
+ * GitHub API rate limit information
17
+ */
18
+ export interface RateLimitInfo {
19
+ limit: number;
20
+ remaining: number;
21
+ reset: Date;
22
+ used: number;
23
+ }
24
+ /**
25
+ * Download progress callback
26
+ */
27
+ export interface DownloadProgress {
28
+ downloaded: number;
29
+ total: number;
30
+ percentage: number;
31
+ }
32
+ /**
33
+ * Download options
34
+ */
35
+ export interface DownloadOptions {
36
+ onProgress?: (progress: DownloadProgress) => void;
37
+ timeout?: number;
38
+ retries?: number;
39
+ }
40
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/domains/github/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEjF;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,IAAI,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * GitHub domain types and interfaces
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/domains/github/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Auto-fix logic for common issues
3
+ * Attempts to automatically repair fixable health check failures
4
+ */
5
+ import type { Check, FixResult } from './types';
6
+ /**
7
+ * Attempt to auto-fix a check
8
+ */
9
+ export declare function autoFix(check: Check): Promise<FixResult>;
10
+ /**
11
+ * Auto-fix multiple issues
12
+ */
13
+ export declare function autoFixIssues(checks: Check[]): Promise<FixResult[]>;
14
+ //# sourceMappingURL=auto-healer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-healer.d.ts","sourceRoot":"","sources":["../../../src/domains/health-checks/auto-healer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEhD;;GAEG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAiC9D;AAuHD;;GAEG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAWzE"}
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ /**
3
+ * Auto-fix logic for common issues
4
+ * Attempts to automatically repair fixable health check failures
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.autoFix = autoFix;
8
+ exports.autoFixIssues = autoFixIssues;
9
+ const child_process_1 = require("child_process");
10
+ /**
11
+ * Attempt to auto-fix a check
12
+ */
13
+ async function autoFix(check) {
14
+ if (!check.fixable) {
15
+ return {
16
+ success: false,
17
+ message: 'No auto-fix available for this check',
18
+ };
19
+ }
20
+ switch (check.name) {
21
+ case 'GitHub CLI Authentication':
22
+ return await fixGitHubAuth();
23
+ case 'node_modules':
24
+ return await fixNodeModules();
25
+ case 'CSVibe Initialization':
26
+ return await fixCSVibeInit();
27
+ case 'Config File':
28
+ return await fixConfigFile();
29
+ case 'Workspace Structure':
30
+ return await fixWorkspaceStructure();
31
+ case 'Lockfile':
32
+ return await fixLockfile();
33
+ default:
34
+ return {
35
+ success: false,
36
+ message: `No auto-fix handler for: ${check.name}`,
37
+ };
38
+ }
39
+ }
40
+ /**
41
+ * Fix GitHub authentication
42
+ */
43
+ async function fixGitHubAuth() {
44
+ try {
45
+ console.log('\nšŸ”§ Attempting to fix GitHub authentication...');
46
+ (0, child_process_1.execSync)('gh auth login', { stdio: 'inherit' });
47
+ return {
48
+ success: true,
49
+ message: 'GitHub authentication fixed',
50
+ };
51
+ }
52
+ catch (error) {
53
+ return {
54
+ success: false,
55
+ message: 'Failed to authenticate with GitHub',
56
+ error: error instanceof Error ? error.message : String(error),
57
+ };
58
+ }
59
+ }
60
+ /**
61
+ * Fix missing node_modules
62
+ */
63
+ async function fixNodeModules() {
64
+ try {
65
+ console.log('\nšŸ”§ Installing dependencies...');
66
+ // Detect package manager
67
+ const fs = require('fs-extra');
68
+ const path = require('path');
69
+ let packageManager = 'npm';
70
+ if (await fs.pathExists(path.join(process.cwd(), 'yarn.lock'))) {
71
+ packageManager = 'yarn';
72
+ }
73
+ else if (await fs.pathExists(path.join(process.cwd(), 'pnpm-lock.yaml'))) {
74
+ packageManager = 'pnpm';
75
+ }
76
+ (0, child_process_1.execSync)(`${packageManager} install`, { stdio: 'inherit' });
77
+ return {
78
+ success: true,
79
+ message: `Dependencies installed using ${packageManager}`,
80
+ };
81
+ }
82
+ catch (error) {
83
+ return {
84
+ success: false,
85
+ message: 'Failed to install dependencies',
86
+ error: error instanceof Error ? error.message : String(error),
87
+ };
88
+ }
89
+ }
90
+ /**
91
+ * Fix CSVibe initialization
92
+ */
93
+ async function fixCSVibeInit() {
94
+ return {
95
+ success: false,
96
+ message: 'Please run "csvibe init" manually to initialize project',
97
+ };
98
+ }
99
+ /**
100
+ * Fix config file
101
+ */
102
+ async function fixConfigFile() {
103
+ return {
104
+ success: false,
105
+ message: 'Please run "csvibe init" manually to regenerate config',
106
+ };
107
+ }
108
+ /**
109
+ * Fix workspace structure
110
+ */
111
+ async function fixWorkspaceStructure() {
112
+ return {
113
+ success: false,
114
+ message: 'Please run "csvibe init" manually to setup workspace',
115
+ };
116
+ }
117
+ /**
118
+ * Fix lockfile
119
+ */
120
+ async function fixLockfile() {
121
+ try {
122
+ console.log('\nšŸ”§ Syncing lockfile...');
123
+ const fs = require('fs-extra');
124
+ const path = require('path');
125
+ // Detect package manager
126
+ let packageManager = 'npm';
127
+ if (await fs.pathExists(path.join(process.cwd(), 'yarn.lock'))) {
128
+ packageManager = 'yarn';
129
+ }
130
+ else if (await fs.pathExists(path.join(process.cwd(), 'pnpm-lock.yaml'))) {
131
+ packageManager = 'pnpm';
132
+ }
133
+ (0, child_process_1.execSync)(`${packageManager} install`, { stdio: 'inherit' });
134
+ return {
135
+ success: true,
136
+ message: `Lockfile synced using ${packageManager}`,
137
+ };
138
+ }
139
+ catch (error) {
140
+ return {
141
+ success: false,
142
+ message: 'Failed to sync lockfile',
143
+ error: error instanceof Error ? error.message : String(error),
144
+ };
145
+ }
146
+ }
147
+ /**
148
+ * Auto-fix multiple issues
149
+ */
150
+ async function autoFixIssues(checks) {
151
+ const results = [];
152
+ for (const check of checks) {
153
+ if (check.fixable && check.status !== 'pass') {
154
+ const result = await autoFix(check);
155
+ results.push(result);
156
+ }
157
+ }
158
+ return results;
159
+ }
160
+ //# sourceMappingURL=auto-healer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-healer.js","sourceRoot":"","sources":["../../../src/domains/health-checks/auto-healer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Health check orchestrator
3
+ * Runs all health checks and aggregates results
4
+ */
5
+ import type { HealthCheckReport } from './types';
6
+ /**
7
+ * Run all health checks
8
+ */
9
+ export declare function runHealthChecks(): Promise<HealthCheckReport>;
10
+ //# sourceMappingURL=check-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-runner.d.ts","sourceRoot":"","sources":["../../../src/domains/health-checks/check-runner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAkBlE"}