@thanhvn14/csvibe 0.1.1 → 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 (173) 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/domains/config/generator.d.ts +17 -0
  63. package/dist/domains/config/generator.d.ts.map +1 -0
  64. package/dist/domains/config/generator.js +67 -0
  65. package/dist/domains/config/generator.js.map +1 -0
  66. package/dist/domains/config/index.d.ts +8 -0
  67. package/dist/domains/config/index.d.ts.map +1 -0
  68. package/dist/domains/config/index.js +15 -0
  69. package/dist/domains/config/index.js.map +1 -0
  70. package/dist/domains/config/types.d.ts +39 -0
  71. package/dist/domains/config/types.d.ts.map +1 -0
  72. package/dist/domains/config/types.js +6 -0
  73. package/dist/domains/config/types.js.map +1 -0
  74. package/dist/domains/config/validator.d.ts +17 -0
  75. package/dist/domains/config/validator.d.ts.map +1 -0
  76. package/dist/domains/config/validator.js +54 -0
  77. package/dist/domains/config/validator.js.map +1 -0
  78. package/dist/domains/github/auth-api.d.ts +19 -0
  79. package/dist/domains/github/auth-api.d.ts.map +1 -0
  80. package/dist/domains/github/auth-api.js +196 -0
  81. package/dist/domains/github/auth-api.js.map +1 -0
  82. package/dist/domains/github/github-client.d.ts +323 -0
  83. package/dist/domains/github/github-client.d.ts.map +1 -0
  84. package/dist/domains/github/github-client.js +192 -0
  85. package/dist/domains/github/github-client.js.map +1 -0
  86. package/dist/domains/github/index.d.ts +9 -0
  87. package/dist/domains/github/index.d.ts.map +1 -0
  88. package/dist/domains/github/index.js +23 -0
  89. package/dist/domains/github/index.js.map +1 -0
  90. package/dist/domains/github/keychain.d.ts +19 -0
  91. package/dist/domains/github/keychain.d.ts.map +1 -0
  92. package/dist/domains/github/keychain.js +132 -0
  93. package/dist/domains/github/keychain.js.map +1 -0
  94. package/dist/domains/github/types.d.ts +40 -0
  95. package/dist/domains/github/types.d.ts.map +1 -0
  96. package/dist/domains/github/types.js +6 -0
  97. package/dist/domains/github/types.js.map +1 -0
  98. package/dist/domains/health-checks/auto-healer.d.ts +14 -0
  99. package/dist/domains/health-checks/auto-healer.d.ts.map +1 -0
  100. package/dist/domains/health-checks/auto-healer.js +160 -0
  101. package/dist/domains/health-checks/auto-healer.js.map +1 -0
  102. package/dist/domains/health-checks/check-runner.d.ts +10 -0
  103. package/dist/domains/health-checks/check-runner.d.ts.map +1 -0
  104. package/dist/domains/health-checks/check-runner.js +31 -0
  105. package/dist/domains/health-checks/check-runner.js.map +1 -0
  106. package/dist/domains/health-checks/checkers/auth-checker.d.ts +10 -0
  107. package/dist/domains/health-checks/checkers/auth-checker.d.ts.map +1 -0
  108. package/dist/domains/health-checks/checkers/auth-checker.js +90 -0
  109. package/dist/domains/health-checks/checkers/auth-checker.js.map +1 -0
  110. package/dist/domains/health-checks/checkers/deps-checker.d.ts +10 -0
  111. package/dist/domains/health-checks/checkers/deps-checker.d.ts.map +1 -0
  112. package/dist/domains/health-checks/checkers/deps-checker.js +150 -0
  113. package/dist/domains/health-checks/checkers/deps-checker.js.map +1 -0
  114. package/dist/domains/health-checks/checkers/project-checker.d.ts +10 -0
  115. package/dist/domains/health-checks/checkers/project-checker.d.ts.map +1 -0
  116. package/dist/domains/health-checks/checkers/project-checker.js +124 -0
  117. package/dist/domains/health-checks/checkers/project-checker.js.map +1 -0
  118. package/dist/domains/health-checks/checkers/system-checker.d.ts +10 -0
  119. package/dist/domains/health-checks/checkers/system-checker.d.ts.map +1 -0
  120. package/dist/domains/health-checks/checkers/system-checker.js +135 -0
  121. package/dist/domains/health-checks/checkers/system-checker.js.map +1 -0
  122. package/dist/domains/health-checks/index.d.ts +9 -0
  123. package/dist/domains/health-checks/index.d.ts.map +1 -0
  124. package/dist/domains/health-checks/index.js +21 -0
  125. package/dist/domains/health-checks/index.js.map +1 -0
  126. package/dist/domains/health-checks/report-generator.d.ts +18 -0
  127. package/dist/domains/health-checks/report-generator.d.ts.map +1 -0
  128. package/dist/domains/health-checks/report-generator.js +117 -0
  129. package/dist/domains/health-checks/report-generator.js.map +1 -0
  130. package/dist/domains/health-checks/types.d.ts +35 -0
  131. package/dist/domains/health-checks/types.d.ts.map +1 -0
  132. package/dist/domains/health-checks/types.js +6 -0
  133. package/dist/domains/health-checks/types.js.map +1 -0
  134. package/dist/index.js +33 -0
  135. package/dist/index.js.map +1 -1
  136. package/dist/utils/approaches-validator.d.ts +40 -0
  137. package/dist/utils/approaches-validator.d.ts.map +1 -0
  138. package/dist/utils/approaches-validator.js +101 -0
  139. package/dist/utils/approaches-validator.js.map +1 -0
  140. package/dist/utils/dependency-analyzer.d.ts +31 -0
  141. package/dist/utils/dependency-analyzer.d.ts.map +1 -0
  142. package/dist/utils/dependency-analyzer.js +294 -0
  143. package/dist/utils/dependency-analyzer.js.map +1 -0
  144. package/dist/utils/directory-analyzer.d.ts +23 -0
  145. package/dist/utils/directory-analyzer.d.ts.map +1 -0
  146. package/dist/utils/directory-analyzer.js +81 -0
  147. package/dist/utils/directory-analyzer.js.map +1 -0
  148. package/dist/utils/downloader.d.ts +3 -3
  149. package/dist/utils/downloader.d.ts.map +1 -1
  150. package/dist/utils/downloader.js +35 -65
  151. package/dist/utils/downloader.js.map +1 -1
  152. package/dist/utils/errors.d.ts +64 -10
  153. package/dist/utils/errors.d.ts.map +1 -1
  154. package/dist/utils/errors.js +136 -22
  155. package/dist/utils/errors.js.map +1 -1
  156. package/dist/utils/gh-cli.d.ts +4 -2
  157. package/dist/utils/gh-cli.d.ts.map +1 -1
  158. package/dist/utils/gh-cli.js +33 -38
  159. package/dist/utils/gh-cli.js.map +1 -1
  160. package/dist/utils/progress.d.ts +37 -0
  161. package/dist/utils/progress.d.ts.map +1 -0
  162. package/dist/utils/progress.js +121 -0
  163. package/dist/utils/progress.js.map +1 -0
  164. package/dist/utils/prompts.d.ts +5 -1
  165. package/dist/utils/prompts.d.ts.map +1 -1
  166. package/dist/utils/prompts.js +124 -64
  167. package/dist/utils/prompts.js.map +1 -1
  168. package/package.json +7 -3
  169. package/test-jira-prompt.js +32 -0
  170. package/dist/commands/init.d.ts +0 -6
  171. package/dist/commands/init.d.ts.map +0 -1
  172. package/dist/commands/init.js +0 -147
  173. package/dist/commands/init.js.map +0 -1
@@ -0,0 +1,323 @@
1
+ /**
2
+ * GitHub client with @octokit/rest integration
3
+ * Includes retry logic, rate limit handling, and progress tracking
4
+ */
5
+ import type { RateLimitInfo } from './types';
6
+ /**
7
+ * GitHub client wrapper with resilience patterns
8
+ */
9
+ export declare class GitHubClient {
10
+ private octokit;
11
+ private token;
12
+ private constructor();
13
+ /**
14
+ * Create authenticated GitHub client
15
+ */
16
+ static create(): Promise<GitHubClient>;
17
+ /**
18
+ * Get current rate limit information
19
+ */
20
+ getRateLimit(): Promise<RateLimitInfo>;
21
+ /**
22
+ * Download file content from repository
23
+ */
24
+ downloadFile(owner: string, repo: string, path: string, ref?: string): Promise<Buffer>;
25
+ /**
26
+ * Download directory contents recursively
27
+ */
28
+ downloadDirectory(owner: string, repo: string, path: string, ref?: string): Promise<Array<{
29
+ path: string;
30
+ content: Buffer;
31
+ }>>;
32
+ /**
33
+ * Get repository information
34
+ */
35
+ getRepository(owner: string, repo: string): Promise<{
36
+ id: number;
37
+ node_id: string;
38
+ name: string;
39
+ full_name: string;
40
+ owner: import("@octokit/openapi-types").components["schemas"]["simple-user"];
41
+ private: boolean;
42
+ html_url: string;
43
+ description: string | null;
44
+ fork: boolean;
45
+ url: string;
46
+ archive_url: string;
47
+ assignees_url: string;
48
+ blobs_url: string;
49
+ branches_url: string;
50
+ collaborators_url: string;
51
+ comments_url: string;
52
+ commits_url: string;
53
+ compare_url: string;
54
+ contents_url: string;
55
+ contributors_url: string;
56
+ deployments_url: string;
57
+ downloads_url: string;
58
+ events_url: string;
59
+ forks_url: string;
60
+ git_commits_url: string;
61
+ git_refs_url: string;
62
+ git_tags_url: string;
63
+ git_url: string;
64
+ issue_comment_url: string;
65
+ issue_events_url: string;
66
+ issues_url: string;
67
+ keys_url: string;
68
+ labels_url: string;
69
+ languages_url: string;
70
+ merges_url: string;
71
+ milestones_url: string;
72
+ notifications_url: string;
73
+ pulls_url: string;
74
+ releases_url: string;
75
+ ssh_url: string;
76
+ stargazers_url: string;
77
+ statuses_url: string;
78
+ subscribers_url: string;
79
+ subscription_url: string;
80
+ tags_url: string;
81
+ teams_url: string;
82
+ trees_url: string;
83
+ clone_url: string;
84
+ mirror_url: string | null;
85
+ hooks_url: string;
86
+ svn_url: string;
87
+ homepage: string | null;
88
+ language: string | null;
89
+ forks_count: number;
90
+ stargazers_count: number;
91
+ watchers_count: number;
92
+ size: number;
93
+ default_branch: string;
94
+ open_issues_count: number;
95
+ is_template?: boolean;
96
+ topics?: string[];
97
+ has_issues: boolean;
98
+ has_projects: boolean;
99
+ has_wiki: boolean;
100
+ has_pages: boolean;
101
+ has_downloads?: boolean;
102
+ has_discussions: boolean;
103
+ archived: boolean;
104
+ disabled: boolean;
105
+ visibility?: string;
106
+ pushed_at: string;
107
+ created_at: string;
108
+ updated_at: string;
109
+ permissions?: {
110
+ admin: boolean;
111
+ maintain?: boolean;
112
+ push: boolean;
113
+ triage?: boolean;
114
+ pull: boolean;
115
+ };
116
+ allow_rebase_merge?: boolean;
117
+ template_repository?: import("@octokit/openapi-types").components["schemas"]["nullable-repository"];
118
+ temp_clone_token?: string | null;
119
+ allow_squash_merge?: boolean;
120
+ allow_auto_merge?: boolean;
121
+ delete_branch_on_merge?: boolean;
122
+ allow_merge_commit?: boolean;
123
+ allow_update_branch?: boolean;
124
+ use_squash_pr_title_as_default?: boolean;
125
+ squash_merge_commit_title?: "PR_TITLE" | "COMMIT_OR_PR_TITLE";
126
+ squash_merge_commit_message?: "PR_BODY" | "COMMIT_MESSAGES" | "BLANK";
127
+ merge_commit_title?: "PR_TITLE" | "MERGE_MESSAGE";
128
+ merge_commit_message?: "PR_BODY" | "PR_TITLE" | "BLANK";
129
+ allow_forking?: boolean;
130
+ web_commit_signoff_required?: boolean;
131
+ subscribers_count: number;
132
+ network_count: number;
133
+ license: import("@octokit/openapi-types").components["schemas"]["nullable-license-simple"];
134
+ organization?: import("@octokit/openapi-types").components["schemas"]["nullable-simple-user"];
135
+ parent?: import("@octokit/openapi-types").components["schemas"]["repository"];
136
+ source?: import("@octokit/openapi-types").components["schemas"]["repository"];
137
+ forks: number;
138
+ master_branch?: string;
139
+ open_issues: number;
140
+ watchers: number;
141
+ anonymous_access_enabled?: boolean;
142
+ code_of_conduct?: import("@octokit/openapi-types").components["schemas"]["code-of-conduct-simple"];
143
+ security_and_analysis?: import("@octokit/openapi-types").components["schemas"]["security-and-analysis"];
144
+ custom_properties?: {
145
+ [key: string]: unknown;
146
+ };
147
+ }>;
148
+ /**
149
+ * List repository contents at path
150
+ */
151
+ listContents(owner: string, repo: string, path?: string, ref?: string): Promise<{
152
+ type: "dir" | "file" | "submodule" | "symlink";
153
+ size: number;
154
+ name: string;
155
+ path: string;
156
+ content?: string;
157
+ sha: string;
158
+ url: string;
159
+ git_url: string | null;
160
+ html_url: string | null;
161
+ download_url: string | null;
162
+ _links: {
163
+ git: string | null;
164
+ html: string | null;
165
+ self: string;
166
+ };
167
+ }[] | ({
168
+ type: "file";
169
+ encoding: string;
170
+ size: number;
171
+ name: string;
172
+ path: string;
173
+ content: string;
174
+ sha: string;
175
+ url: string;
176
+ git_url: string | null;
177
+ html_url: string | null;
178
+ download_url: string | null;
179
+ _links: {
180
+ git: string | null;
181
+ html: string | null;
182
+ self: string;
183
+ };
184
+ target?: string;
185
+ submodule_git_url?: string;
186
+ } | {
187
+ type: "symlink";
188
+ target: string;
189
+ size: number;
190
+ name: string;
191
+ path: string;
192
+ sha: string;
193
+ url: string;
194
+ git_url: string | null;
195
+ html_url: string | null;
196
+ download_url: string | null;
197
+ _links: {
198
+ git: string | null;
199
+ html: string | null;
200
+ self: string;
201
+ };
202
+ } | {
203
+ type: "submodule";
204
+ submodule_git_url: string;
205
+ size: number;
206
+ name: string;
207
+ path: string;
208
+ sha: string;
209
+ url: string;
210
+ git_url: string | null;
211
+ html_url: string | null;
212
+ download_url: string | null;
213
+ _links: {
214
+ git: string | null;
215
+ html: string | null;
216
+ self: string;
217
+ };
218
+ })[]>;
219
+ /**
220
+ * Check if authenticated user has access to repository
221
+ */
222
+ hasRepoAccess(owner: string, repo: string): Promise<boolean>;
223
+ /**
224
+ * Get authenticated user information
225
+ */
226
+ getAuthenticatedUser(): Promise<{
227
+ login: string;
228
+ id: number;
229
+ user_view_type?: string;
230
+ node_id: string;
231
+ avatar_url: string;
232
+ gravatar_id: string | null;
233
+ url: string;
234
+ html_url: string;
235
+ followers_url: string;
236
+ following_url: string;
237
+ gists_url: string;
238
+ starred_url: string;
239
+ subscriptions_url: string;
240
+ organizations_url: string;
241
+ repos_url: string;
242
+ events_url: string;
243
+ received_events_url: string;
244
+ type: string;
245
+ site_admin: boolean;
246
+ name: string | null;
247
+ company: string | null;
248
+ blog: string | null;
249
+ location: string | null;
250
+ email: string | null;
251
+ notification_email?: string | null;
252
+ hireable: boolean | null;
253
+ bio: string | null;
254
+ twitter_username?: string | null;
255
+ public_repos: number;
256
+ public_gists: number;
257
+ followers: number;
258
+ following: number;
259
+ created_at: string;
260
+ updated_at: string;
261
+ private_gists: number;
262
+ total_private_repos: number;
263
+ owned_private_repos: number;
264
+ disk_usage: number;
265
+ collaborators: number;
266
+ two_factor_authentication: boolean;
267
+ plan?: {
268
+ collaborators: number;
269
+ name: string;
270
+ space: number;
271
+ private_repos: number;
272
+ };
273
+ business_plus?: boolean;
274
+ ldap_dn?: string;
275
+ } | {
276
+ login: string;
277
+ id: number;
278
+ user_view_type?: string;
279
+ node_id: string;
280
+ avatar_url: string;
281
+ gravatar_id: string | null;
282
+ url: string;
283
+ html_url: string;
284
+ followers_url: string;
285
+ following_url: string;
286
+ gists_url: string;
287
+ starred_url: string;
288
+ subscriptions_url: string;
289
+ organizations_url: string;
290
+ repos_url: string;
291
+ events_url: string;
292
+ received_events_url: string;
293
+ type: string;
294
+ site_admin: boolean;
295
+ name: string | null;
296
+ company: string | null;
297
+ blog: string | null;
298
+ location: string | null;
299
+ email: string | null;
300
+ notification_email?: string | null;
301
+ hireable: boolean | null;
302
+ bio: string | null;
303
+ twitter_username?: string | null;
304
+ public_repos: number;
305
+ public_gists: number;
306
+ followers: number;
307
+ following: number;
308
+ created_at: string;
309
+ updated_at: string;
310
+ plan?: {
311
+ collaborators: number;
312
+ name: string;
313
+ space: number;
314
+ private_repos: number;
315
+ };
316
+ private_gists?: number;
317
+ total_private_repos?: number;
318
+ owned_private_repos?: number;
319
+ disk_usage?: number;
320
+ collaborators?: number;
321
+ }>;
322
+ }
323
+ //# sourceMappingURL=github-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-client.d.ts","sourceRoot":"","sources":["../../../src/domains/github/github-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,SAAS,CAAC;AAE9D;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,KAAK,CAAS;IAEtB,OAAO;IAWP;;OAEG;WACU,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;IAK5C;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,aAAa,CAAC;IAoB5C;;OAEG;IACG,YAAY,CAChB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,GAAG,GAAE,MAAe,GACnB,OAAO,CAAC,MAAM,CAAC;IAwClB;;OAEG;IACG,iBAAiB,CACrB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,GAAG,GAAE,MAAe,GACnB,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IA+CpD;;OAEG;IACG,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;;eAgE6qk7B,sDAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAA2nO,CAAC;;kBAAgD,CAAC;;;;8BAAqI,sDAAsB;;;;;;;;;;;;;;;;iBAAsyE,sDAAsB;uBAAiD,sDAAsB;iBAAwC,sDAAsB;iBAA8B,sDAAsB;;;;;;0BAAiS,sDAAsB;gCAAyD,sDAAsB;;;;;IAjDr747B;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,EAAE,GAAG,GAAE,MAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuBvF;;OAEG;IACG,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYlE;;OAEG;IACG,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAI3B"}
@@ -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"}