@kodus/cli 0.4.8 → 0.4.9

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 (316) hide show
  1. package/README.md +77 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +2 -1
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/config.d.ts +1 -5
  6. package/dist/commands/config.d.ts.map +1 -1
  7. package/dist/commands/config.js +10 -71
  8. package/dist/commands/config.js.map +1 -1
  9. package/dist/commands/hook/install.d.ts +1 -1
  10. package/dist/commands/hook/install.d.ts.map +1 -1
  11. package/dist/commands/hook/uninstall.d.ts +1 -1
  12. package/dist/commands/hook/uninstall.d.ts.map +1 -1
  13. package/dist/commands/memory/disable.d.ts +1 -1
  14. package/dist/commands/memory/disable.d.ts.map +1 -1
  15. package/dist/commands/pr.d.ts +1 -2
  16. package/dist/commands/pr.d.ts.map +1 -1
  17. package/dist/commands/pr.js +1 -243
  18. package/dist/commands/pr.js.map +1 -1
  19. package/dist/commands/review.d.ts +1 -2
  20. package/dist/commands/review.d.ts.map +1 -1
  21. package/dist/commands/review.js +1 -314
  22. package/dist/commands/review.js.map +1 -1
  23. package/dist/commands/status.d.ts.map +1 -1
  24. package/dist/commands/status.js +2 -14
  25. package/dist/commands/status.js.map +1 -1
  26. package/dist/commands/update.d.ts +1 -0
  27. package/dist/commands/update.d.ts.map +1 -1
  28. package/dist/commands/update.js +24 -1
  29. package/dist/commands/update.js.map +1 -1
  30. package/dist/features/pr/command.d.ts +4 -0
  31. package/dist/features/pr/command.d.ts.map +1 -0
  32. package/dist/features/pr/command.js +222 -0
  33. package/dist/features/pr/command.js.map +1 -0
  34. package/dist/features/repo-config/actions.d.ts +33 -0
  35. package/dist/features/repo-config/actions.d.ts.map +1 -0
  36. package/dist/features/repo-config/actions.js +260 -0
  37. package/dist/features/repo-config/actions.js.map +1 -0
  38. package/dist/features/repo-config/command.d.ts +15 -0
  39. package/dist/features/repo-config/command.d.ts.map +1 -0
  40. package/dist/features/repo-config/command.js +135 -0
  41. package/dist/features/repo-config/command.js.map +1 -0
  42. package/dist/features/review/command.d.ts +4 -0
  43. package/dist/features/review/command.d.ts.map +1 -0
  44. package/dist/features/review/command.js +248 -0
  45. package/dist/features/review/command.js.map +1 -0
  46. package/dist/features/review/diff.d.ts +23 -0
  47. package/dist/features/review/diff.d.ts.map +1 -0
  48. package/dist/features/review/diff.js +47 -0
  49. package/dist/features/review/diff.js.map +1 -0
  50. package/dist/features/review/errors.d.ts +3 -0
  51. package/dist/features/review/errors.d.ts.map +1 -0
  52. package/dist/features/review/errors.js +26 -0
  53. package/dist/features/review/errors.js.map +1 -0
  54. package/dist/features/review/no-changes.d.ts +6 -0
  55. package/dist/features/review/no-changes.d.ts.map +1 -0
  56. package/dist/features/review/no-changes.js +31 -0
  57. package/dist/features/review/no-changes.js.map +1 -0
  58. package/dist/features/review/options.d.ts +7 -0
  59. package/dist/features/review/options.d.ts.map +1 -0
  60. package/dist/features/review/options.js +18 -0
  61. package/dist/features/review/options.js.map +1 -0
  62. package/dist/features/review/result.d.ts +11 -0
  63. package/dist/features/review/result.d.ts.map +1 -0
  64. package/dist/features/review/result.js +49 -0
  65. package/dist/features/review/result.js.map +1 -0
  66. package/dist/formatters/json.d.ts +1 -1
  67. package/dist/formatters/json.d.ts.map +1 -1
  68. package/dist/formatters/markdown.d.ts +1 -1
  69. package/dist/formatters/markdown.d.ts.map +1 -1
  70. package/dist/formatters/markdown.js.map +1 -1
  71. package/dist/formatters/prompt.d.ts +1 -1
  72. package/dist/formatters/prompt.d.ts.map +1 -1
  73. package/dist/formatters/repo-config.d.ts +7 -0
  74. package/dist/formatters/repo-config.d.ts.map +1 -0
  75. package/dist/formatters/repo-config.js +99 -0
  76. package/dist/formatters/repo-config.js.map +1 -0
  77. package/dist/formatters/terminal.d.ts +1 -1
  78. package/dist/formatters/terminal.d.ts.map +1 -1
  79. package/dist/formatters/terminal.js.map +1 -1
  80. package/dist/index.js +2 -0
  81. package/dist/index.js.map +1 -1
  82. package/dist/services/api/api-core.d.ts +15 -0
  83. package/dist/services/api/api-core.d.ts.map +1 -0
  84. package/dist/services/api/api-core.js +292 -0
  85. package/dist/services/api/api-core.js.map +1 -0
  86. package/dist/services/api/api.interface.d.ts +16 -1
  87. package/dist/services/api/api.interface.d.ts.map +1 -1
  88. package/dist/services/api/api.real.d.ts +12 -20
  89. package/dist/services/api/api.real.d.ts.map +1 -1
  90. package/dist/services/api/api.real.js +8 -545
  91. package/dist/services/api/api.real.js.map +1 -1
  92. package/dist/services/api/auth.api.d.ts +17 -0
  93. package/dist/services/api/auth.api.d.ts.map +1 -0
  94. package/dist/services/api/auth.api.js +73 -0
  95. package/dist/services/api/auth.api.js.map +1 -0
  96. package/dist/services/api/config.api.d.ts +24 -0
  97. package/dist/services/api/config.api.d.ts.map +1 -0
  98. package/dist/services/api/config.api.js +78 -0
  99. package/dist/services/api/config.api.js.map +1 -0
  100. package/dist/services/api/memory.api.d.ts +10 -0
  101. package/dist/services/api/memory.api.d.ts.map +1 -0
  102. package/dist/services/api/memory.api.js +19 -0
  103. package/dist/services/api/memory.api.js.map +1 -0
  104. package/dist/services/api/review.api.d.ts +26 -0
  105. package/dist/services/api/review.api.d.ts.map +1 -0
  106. package/dist/services/api/review.api.js +117 -0
  107. package/dist/services/api/review.api.js.map +1 -0
  108. package/dist/services/api/sessions.api.js +1 -1
  109. package/dist/services/api/sessions.api.js.map +1 -1
  110. package/dist/services/api/trial.api.d.ts +10 -0
  111. package/dist/services/api/trial.api.d.ts.map +1 -0
  112. package/dist/services/api/trial.api.js +11 -0
  113. package/dist/services/api/trial.api.js.map +1 -0
  114. package/dist/services/auth.service.d.ts +1 -1
  115. package/dist/services/auth.service.d.ts.map +1 -1
  116. package/dist/services/auth.service.js +1 -1
  117. package/dist/services/auth.service.js.map +1 -1
  118. package/dist/services/context.service.d.ts +1 -1
  119. package/dist/services/context.service.d.ts.map +1 -1
  120. package/dist/services/fix.service.d.ts +1 -1
  121. package/dist/services/fix.service.d.ts.map +1 -1
  122. package/dist/services/git.service.d.ts +2 -2
  123. package/dist/services/git.service.d.ts.map +1 -1
  124. package/dist/services/git.service.js +25 -172
  125. package/dist/services/git.service.js.map +1 -1
  126. package/dist/services/lifecycle-events.d.ts +49 -0
  127. package/dist/services/lifecycle-events.d.ts.map +1 -0
  128. package/dist/services/lifecycle-events.js +86 -0
  129. package/dist/services/lifecycle-events.js.map +1 -0
  130. package/dist/services/lifecycle-git-context.d.ts +15 -0
  131. package/dist/services/lifecycle-git-context.d.ts.map +1 -0
  132. package/dist/services/lifecycle-git-context.js +23 -0
  133. package/dist/services/lifecycle-git-context.js.map +1 -0
  134. package/dist/services/lifecycle-local-turn-state.d.ts +14 -0
  135. package/dist/services/lifecycle-local-turn-state.d.ts.map +1 -0
  136. package/dist/services/lifecycle-local-turn-state.js +18 -0
  137. package/dist/services/lifecycle-local-turn-state.js.map +1 -0
  138. package/dist/services/lifecycle-transcript.d.ts +25 -0
  139. package/dist/services/lifecycle-transcript.d.ts.map +1 -0
  140. package/dist/services/lifecycle-transcript.js +29 -0
  141. package/dist/services/lifecycle-transcript.js.map +1 -0
  142. package/dist/services/lifecycle-turn-data.d.ts +11 -0
  143. package/dist/services/lifecycle-turn-data.d.ts.map +1 -0
  144. package/dist/services/lifecycle-turn-data.js +23 -0
  145. package/dist/services/lifecycle-turn-data.js.map +1 -0
  146. package/dist/services/lifecycle.service.d.ts.map +1 -1
  147. package/dist/services/lifecycle.service.js +63 -132
  148. package/dist/services/lifecycle.service.js.map +1 -1
  149. package/dist/services/repo-config.service.d.ts.map +1 -1
  150. package/dist/services/repo-config.service.js +2 -8
  151. package/dist/services/repo-config.service.js.map +1 -1
  152. package/dist/services/repo-settings-wizard.service.d.ts +19 -0
  153. package/dist/services/repo-settings-wizard.service.d.ts.map +1 -0
  154. package/dist/services/repo-settings-wizard.service.js +260 -0
  155. package/dist/services/repo-settings-wizard.service.js.map +1 -0
  156. package/dist/services/repo-settings.service.d.ts +20 -0
  157. package/dist/services/repo-settings.service.d.ts.map +1 -0
  158. package/dist/services/repo-settings.service.js +86 -0
  159. package/dist/services/repo-settings.service.js.map +1 -0
  160. package/dist/services/review-auth-fallback.d.ts +7 -0
  161. package/dist/services/review-auth-fallback.d.ts.map +1 -0
  162. package/dist/services/review-auth-fallback.js +25 -0
  163. package/dist/services/review-auth-fallback.js.map +1 -0
  164. package/dist/services/review-config-builder.d.ts +19 -0
  165. package/dist/services/review-config-builder.d.ts.map +1 -0
  166. package/dist/services/review-config-builder.js +17 -0
  167. package/dist/services/review-config-builder.js.map +1 -0
  168. package/dist/services/review-file-filter.d.ts +3 -0
  169. package/dist/services/review-file-filter.d.ts.map +1 -0
  170. package/dist/services/review-file-filter.js +35 -0
  171. package/dist/services/review-file-filter.js.map +1 -0
  172. package/dist/services/review-normalizer.d.ts +6 -0
  173. package/dist/services/review-normalizer.d.ts.map +1 -0
  174. package/dist/services/review-normalizer.js +62 -0
  175. package/dist/services/review-normalizer.js.map +1 -0
  176. package/dist/services/review-verbose.d.ts +28 -0
  177. package/dist/services/review-verbose.d.ts.map +1 -0
  178. package/dist/services/review-verbose.js +52 -0
  179. package/dist/services/review-verbose.js.map +1 -0
  180. package/dist/services/review.service.d.ts +1 -5
  181. package/dist/services/review.service.d.ts.map +1 -1
  182. package/dist/services/review.service.js +55 -182
  183. package/dist/services/review.service.js.map +1 -1
  184. package/dist/types/auth.d.ts +18 -0
  185. package/dist/types/auth.d.ts.map +1 -0
  186. package/dist/types/auth.js +2 -0
  187. package/dist/types/auth.js.map +1 -0
  188. package/dist/types/cli.d.ts +33 -0
  189. package/dist/types/cli.d.ts.map +1 -0
  190. package/dist/types/cli.js +2 -0
  191. package/dist/types/cli.js.map +1 -0
  192. package/dist/types/config.d.ts +47 -0
  193. package/dist/types/config.d.ts.map +1 -0
  194. package/dist/types/config.js +2 -0
  195. package/dist/types/config.js.map +1 -0
  196. package/dist/types/errors.d.ts +8 -0
  197. package/dist/types/errors.d.ts.map +1 -0
  198. package/dist/types/errors.js +15 -0
  199. package/dist/types/errors.js.map +1 -0
  200. package/dist/types/index.d.ts +8 -191
  201. package/dist/types/index.d.ts.map +1 -1
  202. package/dist/types/index.js +1 -14
  203. package/dist/types/index.js.map +1 -1
  204. package/dist/types/repo-config.d.ts +24 -0
  205. package/dist/types/repo-config.d.ts.map +1 -0
  206. package/dist/types/repo-config.js +2 -0
  207. package/dist/types/repo-config.js.map +1 -0
  208. package/dist/types/review.d.ts +112 -0
  209. package/dist/types/review.d.ts.map +1 -0
  210. package/dist/types/review.js +2 -0
  211. package/dist/types/review.js.map +1 -0
  212. package/dist/types/trial.d.ts +10 -0
  213. package/dist/types/trial.d.ts.map +1 -0
  214. package/dist/types/trial.js +2 -0
  215. package/dist/types/trial.js.map +1 -0
  216. package/dist/ui/interactive-formatters.d.ts +6 -0
  217. package/dist/ui/interactive-formatters.d.ts.map +1 -0
  218. package/dist/ui/interactive-formatters.js +61 -0
  219. package/dist/ui/interactive-formatters.js.map +1 -0
  220. package/dist/ui/interactive-helpers.d.ts +12 -0
  221. package/dist/ui/interactive-helpers.d.ts.map +1 -0
  222. package/dist/ui/interactive-helpers.js +51 -0
  223. package/dist/ui/interactive-helpers.js.map +1 -0
  224. package/dist/ui/interactive-renderers.d.ts +6 -0
  225. package/dist/ui/interactive-renderers.d.ts.map +1 -0
  226. package/dist/ui/interactive-renderers.js +82 -0
  227. package/dist/ui/interactive-renderers.js.map +1 -0
  228. package/dist/ui/interactive.d.ts +1 -9
  229. package/dist/ui/interactive.d.ts.map +1 -1
  230. package/dist/ui/interactive.js +11 -187
  231. package/dist/ui/interactive.js.map +1 -1
  232. package/dist/utils/auth-mode.d.ts +7 -0
  233. package/dist/utils/auth-mode.d.ts.map +1 -0
  234. package/dist/utils/auth-mode.js +42 -0
  235. package/dist/utils/auth-mode.js.map +1 -0
  236. package/dist/utils/banner.d.ts.map +1 -1
  237. package/dist/utils/banner.js +2 -14
  238. package/dist/utils/banner.js.map +1 -1
  239. package/dist/utils/command-context.d.ts +1 -1
  240. package/dist/utils/command-context.d.ts.map +1 -1
  241. package/dist/utils/command-errors.d.ts.map +1 -1
  242. package/dist/utils/command-errors.js +25 -1
  243. package/dist/utils/command-errors.js.map +1 -1
  244. package/dist/utils/commander-errors.d.ts +8 -0
  245. package/dist/utils/commander-errors.d.ts.map +1 -0
  246. package/dist/utils/commander-errors.js +79 -0
  247. package/dist/utils/commander-errors.js.map +1 -0
  248. package/dist/utils/commander-setup.d.ts +3 -0
  249. package/dist/utils/commander-setup.d.ts.map +1 -0
  250. package/dist/utils/commander-setup.js +10 -0
  251. package/dist/utils/commander-setup.js.map +1 -0
  252. package/dist/utils/credentials.d.ts +1 -1
  253. package/dist/utils/credentials.d.ts.map +1 -1
  254. package/dist/utils/git-diff.d.ts +5 -0
  255. package/dist/utils/git-diff.d.ts.map +1 -0
  256. package/dist/utils/git-diff.js +14 -0
  257. package/dist/utils/git-diff.js.map +1 -0
  258. package/dist/utils/git-file-reader.d.ts +22 -0
  259. package/dist/utils/git-file-reader.d.ts.map +1 -0
  260. package/dist/utils/git-file-reader.js +45 -0
  261. package/dist/utils/git-file-reader.js.map +1 -0
  262. package/dist/utils/git-file-selection.d.ts +14 -0
  263. package/dist/utils/git-file-selection.d.ts.map +1 -0
  264. package/dist/utils/git-file-selection.js +20 -0
  265. package/dist/utils/git-file-selection.js.map +1 -0
  266. package/dist/utils/git-file-targets.d.ts +4 -0
  267. package/dist/utils/git-file-targets.d.ts.map +1 -0
  268. package/dist/utils/git-file-targets.js +11 -0
  269. package/dist/utils/git-file-targets.js.map +1 -0
  270. package/dist/utils/git-remote.d.ts +7 -0
  271. package/dist/utils/git-remote.d.ts.map +1 -0
  272. package/dist/utils/git-remote.js +60 -0
  273. package/dist/utils/git-remote.js.map +1 -0
  274. package/dist/utils/git-status.d.ts +7 -0
  275. package/dist/utils/git-status.d.ts.map +1 -0
  276. package/dist/utils/git-status.js +36 -0
  277. package/dist/utils/git-status.js.map +1 -0
  278. package/dist/utils/input-validation.d.ts +1 -1
  279. package/dist/utils/input-validation.d.ts.map +1 -1
  280. package/dist/utils/rate-limit.d.ts +1 -1
  281. package/dist/utils/repo-settings-dashboard.d.ts +6 -0
  282. package/dist/utils/repo-settings-dashboard.d.ts.map +1 -0
  283. package/dist/utils/repo-settings-dashboard.js +36 -0
  284. package/dist/utils/repo-settings-dashboard.js.map +1 -0
  285. package/dist/utils/repo-settings-patterns.d.ts +7 -0
  286. package/dist/utils/repo-settings-patterns.d.ts.map +1 -0
  287. package/dist/utils/repo-settings-patterns.js +66 -0
  288. package/dist/utils/repo-settings-patterns.js.map +1 -0
  289. package/dist/utils/repo-settings-schema.d.ts +6 -0
  290. package/dist/utils/repo-settings-schema.d.ts.map +1 -0
  291. package/dist/utils/repo-settings-schema.js +70 -0
  292. package/dist/utils/repo-settings-schema.js.map +1 -0
  293. package/dist/utils/review-output.d.ts +4 -0
  294. package/dist/utils/review-output.d.ts.map +1 -0
  295. package/dist/utils/review-output.js +18 -0
  296. package/dist/utils/review-output.js.map +1 -0
  297. package/dist/utils/skills-sync-manifest.d.ts +5 -0
  298. package/dist/utils/skills-sync-manifest.d.ts.map +1 -0
  299. package/dist/utils/skills-sync-manifest.js +39 -0
  300. package/dist/utils/skills-sync-manifest.js.map +1 -0
  301. package/dist/utils/skills-sync-paths.d.ts +5 -0
  302. package/dist/utils/skills-sync-paths.d.ts.map +1 -0
  303. package/dist/utils/skills-sync-paths.js +60 -0
  304. package/dist/utils/skills-sync-paths.js.map +1 -0
  305. package/dist/utils/skills-sync-targets.d.ts +3 -0
  306. package/dist/utils/skills-sync-targets.d.ts.map +1 -0
  307. package/dist/utils/skills-sync-targets.js +211 -0
  308. package/dist/utils/skills-sync-targets.js.map +1 -0
  309. package/dist/utils/skills-sync.d.ts.map +1 -1
  310. package/dist/utils/skills-sync.js +4 -253
  311. package/dist/utils/skills-sync.js.map +1 -1
  312. package/dist/utils/team-key-auth.d.ts +5 -0
  313. package/dist/utils/team-key-auth.d.ts.map +1 -0
  314. package/dist/utils/team-key-auth.js +14 -0
  315. package/dist/utils/team-key-auth.js.map +1 -0
  316. package/package.json +4 -4
@@ -0,0 +1,260 @@
1
+ import { checkbox, input, select } from '@inquirer/prompts';
2
+ import { formatRepositorySetupSection } from '../formatters/repo-config.js';
3
+ import { parseRepositoryPatternList } from '../utils/repo-settings-schema.js';
4
+ const RECOMMENDED_IGNORED_FILE_PATTERNS = [
5
+ 'yarn.lock',
6
+ 'package-lock.json',
7
+ 'package.json',
8
+ '.env',
9
+ '**/*.json',
10
+ ];
11
+ const COMMON_IGNORED_FILE_PATTERNS = [
12
+ ...RECOMMENDED_IGNORED_FILE_PATTERNS,
13
+ 'dist/**',
14
+ 'coverage/**',
15
+ '**/generated/**',
16
+ ];
17
+ const COMMON_BASE_BRANCH_PATTERNS = [
18
+ 'main',
19
+ 'develop',
20
+ 'release/*',
21
+ 'hotfix/*',
22
+ ];
23
+ const COMMON_IGNORED_TITLE_PATTERNS = [
24
+ 'wip*',
25
+ 'draft*',
26
+ 'chore(release)*',
27
+ 'release:*',
28
+ ];
29
+ function summarizePatterns(patterns) {
30
+ return patterns.length > 0 ? patterns.join(', ') : '(none)';
31
+ }
32
+ function summarizePatternOption(patterns, maxItems = 3) {
33
+ if (patterns.length === 0) {
34
+ return '(none)';
35
+ }
36
+ const visible = patterns.slice(0, maxItems);
37
+ const remaining = patterns.length - visible.length;
38
+ if (remaining <= 0) {
39
+ return visible.join(', ');
40
+ }
41
+ return `${visible.join(', ')} +${remaining} more`;
42
+ }
43
+ class RepositorySettingsWizardService {
44
+ async collectSettings(current, options = {}, section = 'all') {
45
+ if (options.yes) {
46
+ return current;
47
+ }
48
+ if (section === 'general') {
49
+ return this.collectGeneralSettings(current, options);
50
+ }
51
+ if (section === 'patterns') {
52
+ return this.collectPatternSettings(current, options);
53
+ }
54
+ const withGeneral = await this.collectGeneralSettings(current, options);
55
+ return this.collectPatternSettings(withGeneral, options);
56
+ }
57
+ async collectGeneralSettings(current, options = {}) {
58
+ const writeLine = options.writeLine ?? (() => { });
59
+ for (const line of formatRepositorySetupSection('General', 'Choose the review behaviors you want for this repository.')) {
60
+ writeLine(line);
61
+ }
62
+ writeLine('Kody automatically reviews pull requests when they are opened or updated.');
63
+ writeLine('When disabled, you can still trigger a review manually with @kody start-review.');
64
+ const reviewEnabled = await select({
65
+ message: 'Automated code review',
66
+ default: current.reviewEnabled,
67
+ choices: [
68
+ { name: 'Enabled', value: true },
69
+ { name: 'Disabled', value: false },
70
+ ],
71
+ });
72
+ writeLine('Automatically approves the pull request when the review finishes without issues.');
73
+ const autoApproveEnabled = await select({
74
+ message: 'Pull request approval',
75
+ default: current.autoApproveEnabled,
76
+ choices: [
77
+ { name: 'Enabled', value: true },
78
+ { name: 'Disabled', value: false },
79
+ ],
80
+ });
81
+ writeLine('Only suggestions at or above this severity will be posted.');
82
+ const requestChangesMinSeverity = await select({
83
+ message: 'Minimum severity level',
84
+ default: current.requestChangesMinSeverity,
85
+ choices: [
86
+ { name: 'Low', value: 'low' },
87
+ { name: 'Medium', value: 'medium' },
88
+ { name: 'High', value: 'high' },
89
+ { name: 'Critical', value: 'critical' },
90
+ ],
91
+ });
92
+ return {
93
+ ...current,
94
+ reviewEnabled,
95
+ autoApproveEnabled,
96
+ requestChangesMinSeverity: requestChangesMinSeverity,
97
+ };
98
+ }
99
+ async collectPatternSettings(current, options = {}) {
100
+ const writeLine = options.writeLine ?? (() => { });
101
+ for (const line of formatRepositorySetupSection('Patterns', 'Files and titles can use glob patterns. Branches accept branch names or expressions like release/*.')) {
102
+ writeLine(line);
103
+ }
104
+ writeLine('Files matching these glob patterns will be skipped during review.');
105
+ writeLine(`Current ignored files: ${summarizePatterns(current.ignoredFilePatterns)}`);
106
+ writeLine('Examples: yarn.lock, package-lock.json, .env, **/*.json');
107
+ const ignoredFilePatterns = await this.collectIgnoredFilePatterns(current.ignoredFilePatterns);
108
+ writeLine('Additional base branches that Kody should review against.');
109
+ writeLine(`Current base branches: ${summarizePatterns(current.baseBranchPatterns)}`);
110
+ writeLine('Examples: main, develop, release/*');
111
+ const baseBranchPatterns = await this.collectPatternList({
112
+ fieldLabel: 'Base branches',
113
+ customMessage: 'Base branches (comma-separated or one per line)',
114
+ current: current.baseBranchPatterns,
115
+ commonPatterns: COMMON_BASE_BRANCH_PATTERNS,
116
+ });
117
+ writeLine('Kody skips the review when the pull request title matches one of these patterns.');
118
+ writeLine(`Current ignored title patterns: ${summarizePatterns(current.ignoredTitlePatterns)}`);
119
+ writeLine('Case-insensitive. Examples: wip*, draft*, chore(release)*');
120
+ const ignoredTitlePatterns = await this.collectPatternList({
121
+ fieldLabel: 'Ignored title patterns',
122
+ customMessage: 'Ignored title patterns (comma-separated or one per line)',
123
+ current: current.ignoredTitlePatterns,
124
+ commonPatterns: COMMON_IGNORED_TITLE_PATTERNS,
125
+ });
126
+ return {
127
+ ...current,
128
+ ignoredFilePatterns,
129
+ baseBranchPatterns,
130
+ ignoredTitlePatterns,
131
+ };
132
+ }
133
+ async collectIgnoredFilePatterns(current) {
134
+ while (true) {
135
+ const mode = await this.selectPatternMode('Ignored files', current, COMMON_IGNORED_FILE_PATTERNS.length, true);
136
+ switch (mode) {
137
+ case 'recommended':
138
+ return [...RECOMMENDED_IGNORED_FILE_PATTERNS];
139
+ case 'common': {
140
+ const selected = await checkbox({
141
+ message: 'Choose the file patterns to ignore',
142
+ choices: COMMON_IGNORED_FILE_PATTERNS.map((pattern) => ({
143
+ name: pattern,
144
+ value: pattern,
145
+ checked: current.includes(pattern),
146
+ })),
147
+ });
148
+ if (await this.shouldUseSelectedPatterns()) {
149
+ return selected;
150
+ }
151
+ continue;
152
+ }
153
+ case 'custom':
154
+ {
155
+ const customPatterns = parseRepositoryPatternList(await input({
156
+ message: 'Ignored file patterns (comma-separated or one per line)',
157
+ default: current.join('\n'),
158
+ }));
159
+ if (await this.confirmPatternDraft(customPatterns)) {
160
+ return customPatterns;
161
+ }
162
+ }
163
+ continue;
164
+ case 'clear':
165
+ return [];
166
+ case 'keep-current':
167
+ default:
168
+ return current;
169
+ }
170
+ }
171
+ }
172
+ async collectPatternList(options) {
173
+ while (true) {
174
+ const mode = await this.selectPatternMode(options.fieldLabel, options.current, options.commonPatterns.length);
175
+ switch (mode) {
176
+ case 'common': {
177
+ const selected = await checkbox({
178
+ message: `Choose ${options.fieldLabel.toLowerCase()}`,
179
+ choices: options.commonPatterns.map((pattern) => ({
180
+ name: pattern,
181
+ value: pattern,
182
+ checked: options.current.includes(pattern),
183
+ })),
184
+ });
185
+ if (await this.shouldUseSelectedPatterns()) {
186
+ return selected;
187
+ }
188
+ continue;
189
+ }
190
+ case 'custom':
191
+ {
192
+ const customPatterns = parseRepositoryPatternList(await input({
193
+ message: options.customMessage,
194
+ default: options.current.join('\n'),
195
+ }));
196
+ if (await this.confirmPatternDraft(customPatterns)) {
197
+ return customPatterns;
198
+ }
199
+ }
200
+ continue;
201
+ case 'clear':
202
+ return [];
203
+ case 'keep-current':
204
+ default:
205
+ return options.current;
206
+ }
207
+ }
208
+ }
209
+ async shouldUseSelectedPatterns() {
210
+ const nextAction = await select({
211
+ message: 'What do you want to do with this selection?',
212
+ default: 'apply',
213
+ choices: [
214
+ { name: 'Use selected patterns', value: 'apply' },
215
+ { name: 'Back to pattern options', value: 'back' },
216
+ ],
217
+ });
218
+ return nextAction === 'apply';
219
+ }
220
+ async confirmPatternDraft(patterns) {
221
+ const nextAction = await select({
222
+ message: 'What do you want to do with these patterns?',
223
+ default: 'apply',
224
+ choices: [
225
+ {
226
+ name: `Use these patterns (${summarizePatterns(patterns)})`,
227
+ value: 'apply',
228
+ },
229
+ { name: 'Back to pattern options', value: 'back' },
230
+ ],
231
+ });
232
+ return nextAction === 'apply';
233
+ }
234
+ async selectPatternMode(fieldLabel, current, commonPatternCount, includeRecommended = false) {
235
+ const choices = [
236
+ {
237
+ name: `Keep current value (${summarizePatterns(current)})`,
238
+ value: 'keep-current',
239
+ },
240
+ ];
241
+ if (includeRecommended) {
242
+ choices.push({
243
+ name: `Use recommended defaults (${summarizePatternOption(RECOMMENDED_IGNORED_FILE_PATTERNS)})`,
244
+ value: 'recommended',
245
+ });
246
+ }
247
+ choices.push({
248
+ name: `Choose common patterns (${commonPatternCount} available)`,
249
+ value: 'common',
250
+ }, { name: 'Enter custom patterns', value: 'custom' }, { name: 'Clear patterns ((none))', value: 'clear' });
251
+ return await select({
252
+ message: fieldLabel,
253
+ default: 'keep-current',
254
+ choices,
255
+ });
256
+ }
257
+ }
258
+ export { RepositorySettingsWizardService };
259
+ export const repositorySettingsWizardService = new RepositorySettingsWizardService();
260
+ //# sourceMappingURL=repo-settings-wizard.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-settings-wizard.service.js","sourceRoot":"","sources":["../../src/services/repo-settings-wizard.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { RepositorySettings } from '../types/repo-config.js';
2
+ export type RepositorySettingsResult = {
3
+ repositoryId: string;
4
+ repositoryFullName: string;
5
+ settings: RepositorySettings;
6
+ };
7
+ declare class RepositorySettingsService {
8
+ getRepositorySettings(target: string): Promise<RepositorySettingsResult>;
9
+ updateRepositorySettings(target: string, settings: RepositorySettings): Promise<RepositorySettingsResult>;
10
+ private resolveConfiguredRepository;
11
+ private requireTeamKey;
12
+ private getRepositorySettingsWithTeamKey;
13
+ private updateRepositorySettingsWithTeamKey;
14
+ private resolveRepositoryReference;
15
+ private findRepositoryMatch;
16
+ private toRepositoryFullName;
17
+ }
18
+ export { RepositorySettingsService };
19
+ export declare const repositorySettingsService: RepositorySettingsService;
20
+ //# sourceMappingURL=repo-settings.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-settings.service.d.ts","sourceRoot":"","sources":["../../src/services/repo-settings.service.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGlE,MAAM,MAAM,wBAAwB,GAAG;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,kBAAkB,CAAC;CAChC,CAAC;AAEF,cAAM,yBAAyB;IACrB,qBAAqB,CACvB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,wBAAwB,CAAC;IAK9B,wBAAwB,CAC1B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,kBAAkB,GAC7B,OAAO,CAAC,wBAAwB,CAAC;YAStB,2BAA2B;YA2B3B,cAAc;YAad,gCAAgC;YAoBhC,mCAAmC;YAsBnC,0BAA0B;IAuCxC,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,oBAAoB;CAM/B;AAED,OAAO,EAAE,yBAAyB,EAAE,CAAC;AACrC,eAAO,MAAM,yBAAyB,2BAAkC,CAAC"}
@@ -0,0 +1,86 @@
1
+ import { api } from './api/index.js';
2
+ import { authService } from './auth.service.js';
3
+ import { gitService } from './git.service.js';
4
+ import { CommandError } from '../utils/command-errors.js';
5
+ class RepositorySettingsService {
6
+ async getRepositorySettings(target) {
7
+ const teamKey = await this.requireTeamKey();
8
+ return this.getRepositorySettingsWithTeamKey(target, teamKey);
9
+ }
10
+ async updateRepositorySettings(target, settings) {
11
+ const teamKey = await this.requireTeamKey();
12
+ return this.updateRepositorySettingsWithTeamKey(target, teamKey, settings);
13
+ }
14
+ async resolveConfiguredRepository(target, accessToken) {
15
+ const repositoryRef = await this.resolveRepositoryReference(target);
16
+ const repositories = await api.config.getSelectedRepositories(accessToken);
17
+ const matchedRepository = this.findRepositoryMatch(repositoryRef, repositories);
18
+ if (!matchedRepository) {
19
+ throw new CommandError('INVALID_INPUT', `Repository '${repositoryRef}' is not configured in Kodus yet. Run 'kodus config add -r ${target}' first.`);
20
+ }
21
+ return {
22
+ matchedRepository,
23
+ };
24
+ }
25
+ async requireTeamKey() {
26
+ const accessToken = await authService.getValidToken();
27
+ if (accessToken.startsWith('kodus_')) {
28
+ return accessToken;
29
+ }
30
+ throw new CommandError('AUTH_REQUIRED', 'Repository settings require team-key auth. Run: kodus auth team-key --key <your-key>.');
31
+ }
32
+ async getRepositorySettingsWithTeamKey(target, teamKey) {
33
+ const { matchedRepository } = await this.resolveConfiguredRepository(target, teamKey);
34
+ const settings = await api.config.getRepositorySettings(teamKey, matchedRepository.id);
35
+ return {
36
+ repositoryId: matchedRepository.id,
37
+ repositoryFullName: this.toRepositoryFullName(matchedRepository),
38
+ settings,
39
+ };
40
+ }
41
+ async updateRepositorySettingsWithTeamKey(target, teamKey, settings) {
42
+ const { matchedRepository } = await this.resolveConfiguredRepository(target, teamKey);
43
+ const updatedSettings = await api.config.updateRepositorySettings(teamKey, matchedRepository.id, settings);
44
+ return {
45
+ repositoryId: matchedRepository.id,
46
+ repositoryFullName: this.toRepositoryFullName(matchedRepository),
47
+ settings: updatedSettings,
48
+ };
49
+ }
50
+ async resolveRepositoryReference(target) {
51
+ if (target !== '.') {
52
+ const normalized = target.trim().replace(/^\/+|\/+$/g, '');
53
+ if (!normalized || !normalized.includes('/')) {
54
+ throw new CommandError('INVALID_INPUT', "Pass '.' for the current repository or use 'owner/repo'.");
55
+ }
56
+ return normalized.toLowerCase();
57
+ }
58
+ const isRepo = await gitService.isGitRepository();
59
+ if (!isRepo) {
60
+ throw new CommandError('NOT_IN_GIT_REPO', 'Current directory is not a git repository. Run this command inside a repository or pass owner/repo explicitly.');
61
+ }
62
+ const remoteUrl = await gitService.getRemoteUrl();
63
+ if (!remoteUrl) {
64
+ throw new CommandError('INVALID_INPUT', "No git remote found for this repository. Configure 'origin' or pass owner/repo explicitly.");
65
+ }
66
+ const orgRepo = await gitService.extractOrgRepo();
67
+ if (!orgRepo) {
68
+ throw new CommandError('INVALID_INPUT', `Could not resolve repository from git remote '${remoteUrl}'. Pass owner/repo explicitly.`);
69
+ }
70
+ return `${orgRepo.org}/${orgRepo.repo}`.toLowerCase();
71
+ }
72
+ findRepositoryMatch(repositoryRef, repositories) {
73
+ const normalizedTarget = repositoryRef.toLowerCase();
74
+ return repositories.find((repository) => {
75
+ const fullName = this.toRepositoryFullName(repository).toLowerCase();
76
+ return fullName === normalizedTarget;
77
+ });
78
+ }
79
+ toRepositoryFullName(repository) {
80
+ return (repository.full_name ||
81
+ `${repository.organizationName}/${repository.name}`);
82
+ }
83
+ }
84
+ export { RepositorySettingsService };
85
+ export const repositorySettingsService = new RepositorySettingsService();
86
+ //# sourceMappingURL=repo-settings.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-settings.service.js","sourceRoot":"","sources":["../../src/services/repo-settings.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAQ1D,MAAM,yBAAyB;IAC3B,KAAK,CAAC,qBAAqB,CACvB,MAAc;QAEd,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC,gCAAgC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,wBAAwB,CAC1B,MAAc,EACd,QAA4B;QAE5B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC,mCAAmC,CAC3C,MAAM,EACN,OAAO,EACP,QAAQ,CACX,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,2BAA2B,CACrC,MAAc,EACd,WAAmB;QAInB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QACpE,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,uBAAuB,CACzD,WAAW,CACd,CAAC;QACF,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAC9C,aAAa,EACb,YAAY,CACf,CAAC;QAEF,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACrB,MAAM,IAAI,YAAY,CAClB,eAAe,EACf,eAAe,aAAa,8DAA8D,MAAM,UAAU,CAC7G,CAAC;QACN,CAAC;QAED,OAAO;YACH,iBAAiB;SACpB,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,cAAc;QACxB,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,aAAa,EAAE,CAAC;QAEtD,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC,OAAO,WAAW,CAAC;QACvB,CAAC;QAED,MAAM,IAAI,YAAY,CAClB,eAAe,EACf,uFAAuF,CAC1F,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,gCAAgC,CAC1C,MAAc,EACd,OAAe;QAEf,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,IAAI,CAAC,2BAA2B,CAChE,MAAM,EACN,OAAO,CACV,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,qBAAqB,CACnD,OAAO,EACP,iBAAiB,CAAC,EAAE,CACvB,CAAC;QAEF,OAAO;YACH,YAAY,EAAE,iBAAiB,CAAC,EAAE;YAClC,kBAAkB,EAAE,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;YAChE,QAAQ;SACX,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,mCAAmC,CAC7C,MAAc,EACd,OAAe,EACf,QAA4B;QAE5B,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,IAAI,CAAC,2BAA2B,CAChE,MAAM,EACN,OAAO,CACV,CAAC;QACF,MAAM,eAAe,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,wBAAwB,CAC7D,OAAO,EACP,iBAAiB,CAAC,EAAE,EACpB,QAAQ,CACX,CAAC;QAEF,OAAO;YACH,YAAY,EAAE,iBAAiB,CAAC,EAAE;YAClC,kBAAkB,EAAE,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;YAChE,QAAQ,EAAE,eAAe;SAC5B,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,0BAA0B,CAAC,MAAc;QACnD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACjB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3C,MAAM,IAAI,YAAY,CAClB,eAAe,EACf,0DAA0D,CAC7D,CAAC;YACN,CAAC;YACD,OAAO,UAAU,CAAC,WAAW,EAAE,CAAC;QACpC,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,eAAe,EAAE,CAAC;QAClD,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,YAAY,CAClB,iBAAiB,EACjB,gHAAgH,CACnH,CAAC;QACN,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE,CAAC;QAClD,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,MAAM,IAAI,YAAY,CAClB,eAAe,EACf,4FAA4F,CAC/F,CAAC;QACN,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,cAAc,EAAE,CAAC;QAClD,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,IAAI,YAAY,CAClB,eAAe,EACf,iDAAiD,SAAS,gCAAgC,CAC7F,CAAC;QACN,CAAC;QAED,OAAO,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1D,CAAC;IAEO,mBAAmB,CACvB,aAAqB,EACrB,YAAgC;QAEhC,MAAM,gBAAgB,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;QACrD,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;YACpC,MAAM,QAAQ,GACV,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;YACxD,OAAO,QAAQ,KAAK,gBAAgB,CAAC;QACzC,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,oBAAoB,CAAC,UAA4B;QACrD,OAAO,CACH,UAAU,CAAC,SAAS;YACpB,GAAG,UAAU,CAAC,gBAAgB,IAAI,UAAU,CAAC,IAAI,EAAE,CACtD,CAAC;IACN,CAAC;CACJ;AAED,OAAO,EAAE,yBAAyB,EAAE,CAAC;AACrC,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,yBAAyB,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { CliConfig } from '../utils/config.js';
2
+ export declare function withTeamKeyFallback<T>({ token, loadConfig, operation, }: {
3
+ token: string;
4
+ loadConfig: () => Promise<CliConfig | null>;
5
+ operation: (token: string) => Promise<T>;
6
+ }): Promise<T>;
7
+ //# sourceMappingURL=review-auth-fallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-auth-fallback.d.ts","sourceRoot":"","sources":["../../src/services/review-auth-fallback.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,wBAAsB,mBAAmB,CAAC,CAAC,EAAE,EACzC,KAAK,EACL,UAAU,EACV,SAAS,GACZ,EAAE;IACC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAC5C,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CAC5C,GAAG,OAAO,CAAC,CAAC,CAAC,CAwBb"}
@@ -0,0 +1,25 @@
1
+ import { ApiError } from '../types/errors.js';
2
+ export async function withTeamKeyFallback({ token, loadConfig, operation, }) {
3
+ try {
4
+ return await operation(token);
5
+ }
6
+ catch (error) {
7
+ const canFallbackToTeamKey = error instanceof ApiError &&
8
+ error.statusCode === 401 &&
9
+ !token.startsWith('kodus_');
10
+ if (!canFallbackToTeamKey) {
11
+ throw error;
12
+ }
13
+ const config = await loadConfig();
14
+ if (!config?.teamKey) {
15
+ throw error;
16
+ }
17
+ try {
18
+ return await operation(config.teamKey);
19
+ }
20
+ catch (fallbackError) {
21
+ throw fallbackError;
22
+ }
23
+ }
24
+ }
25
+ //# sourceMappingURL=review-auth-fallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-auth-fallback.js","sourceRoot":"","sources":["../../src/services/review-auth-fallback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAI,EACzC,KAAK,EACL,UAAU,EACV,SAAS,GAKZ;IACG,IAAI,CAAC;QACD,OAAO,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,oBAAoB,GACtB,KAAK,YAAY,QAAQ;YACzB,KAAK,CAAC,UAAU,KAAK,GAAG;YACxB,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAEhC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACxB,MAAM,KAAK,CAAC;QAChB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;YACnB,MAAM,KAAK,CAAC;QAChB,CAAC;QAED,IAAI,CAAC;YACD,OAAO,MAAM,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,aAAa,EAAE,CAAC;YACrB,MAAM,aAAa,CAAC;QACxB,CAAC;IACL,CAAC;AACL,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { FileContent, ReviewConfig } from '../types/review.js';
2
+ export declare function buildReviewConfig({ rulesOnly, fast, options, getFullFileContents, filterFiles, }: {
3
+ rulesOnly?: boolean;
4
+ fast?: boolean;
5
+ options?: {
6
+ files?: string[];
7
+ staged?: boolean;
8
+ commit?: string;
9
+ branch?: string;
10
+ quiet?: boolean;
11
+ };
12
+ getFullFileContents: (files?: string[], options?: {
13
+ staged?: boolean;
14
+ commit?: string;
15
+ branch?: string;
16
+ }) => Promise<FileContent[]>;
17
+ filterFiles: (files: FileContent[], quiet?: boolean) => FileContent[];
18
+ }): Promise<ReviewConfig>;
19
+ //# sourceMappingURL=review-config-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-config-builder.d.ts","sourceRoot":"","sources":["../../src/services/review-config-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEpE,wBAAsB,iBAAiB,CAAC,EACpC,SAAS,EACT,IAAI,EACJ,OAAO,EACP,mBAAmB,EACnB,WAAW,GACd,EAAE;IACC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE;QACN,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,mBAAmB,EAAE,CACjB,KAAK,CAAC,EAAE,MAAM,EAAE,EAChB,OAAO,CAAC,EAAE;QACN,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;KACnB,KACA,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5B,WAAW,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,WAAW,EAAE,CAAC;CACzE,GAAG,OAAO,CAAC,YAAY,CAAC,CAmBxB"}
@@ -0,0 +1,17 @@
1
+ export async function buildReviewConfig({ rulesOnly, fast, options, getFullFileContents, filterFiles, }) {
2
+ const reviewConfig = {
3
+ rulesOnly,
4
+ fast,
5
+ };
6
+ if (fast) {
7
+ return reviewConfig;
8
+ }
9
+ const allFiles = await getFullFileContents(options?.files, {
10
+ staged: options?.staged,
11
+ commit: options?.commit,
12
+ branch: options?.branch,
13
+ });
14
+ reviewConfig.files = filterFiles(allFiles, options?.quiet ?? false);
15
+ return reviewConfig;
16
+ }
17
+ //# sourceMappingURL=review-config-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-config-builder.js","sourceRoot":"","sources":["../../src/services/review-config-builder.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EACpC,SAAS,EACT,IAAI,EACJ,OAAO,EACP,mBAAmB,EACnB,WAAW,GAoBd;IACG,MAAM,YAAY,GAAiB;QAC/B,SAAS;QACT,IAAI;KACP,CAAC;IAEF,IAAI,IAAI,EAAE,CAAC;QACP,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,KAAK,EAAE;QACvD,MAAM,EAAE,OAAO,EAAE,MAAM;QACvB,MAAM,EAAE,OAAO,EAAE,MAAM;QACvB,MAAM,EAAE,OAAO,EAAE,MAAM;KAC1B,CAAC,CAAC;IAEH,YAAY,CAAC,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,CAAC,CAAC;IAEpE,OAAO,YAAY,CAAC;AACxB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { FileContent } from '../types/review.js';
2
+ export declare function filterReviewFiles(files: FileContent[], quiet?: boolean): FileContent[];
3
+ //# sourceMappingURL=review-file-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-file-filter.d.ts","sourceRoot":"","sources":["../../src/services/review-file-filter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAMtD,wBAAgB,iBAAiB,CAC7B,KAAK,EAAE,WAAW,EAAE,EACpB,KAAK,UAAQ,GACd,WAAW,EAAE,CA8Cf"}
@@ -0,0 +1,35 @@
1
+ import chalk from 'chalk';
2
+ import { cliWarn } from '../utils/logger.js';
3
+ const MAX_FILES = 500;
4
+ const MAX_DIFF_SIZE = 1024 * 1024; // 1MB
5
+ const MAX_CONTENT_SIZE = 5 * 1024 * 1024; // 5MB
6
+ export function filterReviewFiles(files, quiet = false) {
7
+ const skipped = [];
8
+ const filtered = files.filter((file) => {
9
+ const diffBytes = Buffer.byteLength(file.diff, 'utf8');
10
+ const contentBytes = Buffer.byteLength(file.content, 'utf8');
11
+ if (diffBytes > MAX_DIFF_SIZE) {
12
+ const sizeKB = Math.round(diffBytes / 1024);
13
+ skipped.push(` - ${file.path} (diff: ${sizeKB}KB, max: ${MAX_DIFF_SIZE / 1024}KB)`);
14
+ return false;
15
+ }
16
+ if (contentBytes > MAX_CONTENT_SIZE) {
17
+ const sizeMB = (contentBytes / (1024 * 1024)).toFixed(1);
18
+ skipped.push(` - ${file.path} (content: ${sizeMB}MB, max: ${MAX_CONTENT_SIZE / (1024 * 1024)}MB)`);
19
+ return false;
20
+ }
21
+ return true;
22
+ });
23
+ if (!quiet && skipped.length > 0) {
24
+ cliWarn(chalk.yellow(`⚠ Skipped ${skipped.length} file(s) exceeding size limits:`));
25
+ skipped.forEach((message) => cliWarn(chalk.yellow(message)));
26
+ }
27
+ if (filtered.length > MAX_FILES) {
28
+ if (!quiet) {
29
+ cliWarn(chalk.yellow(`⚠ Too many files (${filtered.length}), sending first ${MAX_FILES}`));
30
+ }
31
+ return filtered.slice(0, MAX_FILES);
32
+ }
33
+ return filtered;
34
+ }
35
+ //# sourceMappingURL=review-file-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-file-filter.js","sourceRoot":"","sources":["../../src/services/review-file-filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAG7C,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM;AACzC,MAAM,gBAAgB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM;AAEhD,MAAM,UAAU,iBAAiB,CAC7B,KAAoB,EACpB,KAAK,GAAG,KAAK;IAEb,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACnC,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACvD,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAE7D,IAAI,SAAS,GAAG,aAAa,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;YAC5C,OAAO,CAAC,IAAI,CACR,OAAO,IAAI,CAAC,IAAI,WAAW,MAAM,YAAY,aAAa,GAAG,IAAI,KAAK,CACzE,CAAC;YACF,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,YAAY,GAAG,gBAAgB,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,CAAC,YAAY,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,IAAI,CACR,OAAO,IAAI,CAAC,IAAI,cAAc,MAAM,YAAY,gBAAgB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CACxF,CAAC;YACF,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,CACH,KAAK,CAAC,MAAM,CACR,aAAa,OAAO,CAAC,MAAM,iCAAiC,CAC/D,CACJ,CAAC;QACF,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO,CACH,KAAK,CAAC,MAAM,CACR,qBAAqB,QAAQ,CAAC,MAAM,oBAAoB,SAAS,EAAE,CACtE,CACJ,CAAC;QACN,CAAC;QACD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { ApiFileSuggestion, ApiPrLevelSuggestion, PullRequestSuggestionsResponse, ReviewIssue, ReviewResult, Severity } from '../types/review.js';
2
+ export declare function normalizeSeverity(severity?: string): Severity;
3
+ export declare function mapFileSuggestions(files: ApiFileSuggestion[]): ReviewIssue[];
4
+ export declare function mapPrLevelSuggestions(prLevel: ApiPrLevelSuggestion[]): ReviewIssue[];
5
+ export declare function normalizeSuggestionsResponse(response: PullRequestSuggestionsResponse): ReviewResult;
6
+ //# sourceMappingURL=review-normalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-normalizer.d.ts","sourceRoot":"","sources":["../../src/services/review-normalizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,iBAAiB,EACjB,oBAAoB,EAEpB,8BAA8B,EAC9B,WAAW,EACX,YAAY,EACZ,QAAQ,EACX,MAAM,oBAAoB,CAAC;AAE5B,wBAAgB,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,CAe7D;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,WAAW,EAAE,CAU5E;AAED,wBAAgB,qBAAqB,CACjC,OAAO,EAAE,oBAAoB,EAAE,GAChC,WAAW,EAAE,CASf;AAED,wBAAgB,4BAA4B,CACxC,QAAQ,EAAE,8BAA8B,GACzC,YAAY,CA0Bd"}
@@ -0,0 +1,62 @@
1
+ export function normalizeSeverity(severity) {
2
+ if (!severity) {
3
+ return 'info';
4
+ }
5
+ const normalized = severity.toLowerCase();
6
+ if (normalized === 'critical') {
7
+ return 'critical';
8
+ }
9
+ if (normalized === 'high' || normalized === 'error') {
10
+ return 'error';
11
+ }
12
+ if (normalized === 'medium' || normalized === 'warning') {
13
+ return 'warning';
14
+ }
15
+ return 'info';
16
+ }
17
+ export function mapFileSuggestions(files) {
18
+ return files.map((suggestion) => ({
19
+ file: suggestion.filePath ?? suggestion.relevantFile,
20
+ line: suggestion.relevantLinesStart ?? 1,
21
+ endLine: suggestion.relevantLinesEnd,
22
+ severity: normalizeSeverity(suggestion.severity),
23
+ message: suggestion.suggestionContent,
24
+ suggestion: suggestion.oneSentenceSummary,
25
+ ruleId: suggestion.label,
26
+ }));
27
+ }
28
+ export function mapPrLevelSuggestions(prLevel) {
29
+ return prLevel.map((suggestion) => ({
30
+ file: 'PR',
31
+ line: 0,
32
+ severity: normalizeSeverity(suggestion.severity),
33
+ message: suggestion.suggestionContent,
34
+ suggestion: suggestion.oneSentenceSummary,
35
+ ruleId: suggestion.label,
36
+ }));
37
+ }
38
+ export function normalizeSuggestionsResponse(response) {
39
+ let issues = [];
40
+ if (Array.isArray(response.issues)) {
41
+ issues = response.issues;
42
+ }
43
+ else if (Array.isArray(response.suggestions)) {
44
+ issues = response.suggestions;
45
+ }
46
+ else if (response.suggestions &&
47
+ typeof response.suggestions === 'object') {
48
+ const suggestionsObj = response.suggestions;
49
+ issues = [
50
+ ...mapFileSuggestions(suggestionsObj.files ?? []),
51
+ ...mapPrLevelSuggestions(suggestionsObj.prLevel ?? []),
52
+ ];
53
+ }
54
+ return {
55
+ summary: response.summary ?? 'Pull request suggestions',
56
+ issues,
57
+ filesAnalyzed: response.filesAnalyzed ??
58
+ new Set(issues.map((issue) => issue.file)).size,
59
+ duration: response.duration ?? 0,
60
+ };
61
+ }
62
+ //# sourceMappingURL=review-normalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-normalizer.js","sourceRoot":"","sources":["../../src/services/review-normalizer.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,iBAAiB,CAAC,QAAiB;IAC/C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC1C,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;QAC5B,OAAO,UAAU,CAAC;IACtB,CAAC;IACD,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QAClD,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QACtD,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAA0B;IACzD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC9B,IAAI,EAAE,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,YAAY;QACpD,IAAI,EAAE,UAAU,CAAC,kBAAkB,IAAI,CAAC;QACxC,OAAO,EAAE,UAAU,CAAC,gBAAgB;QACpC,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,QAAQ,CAAC;QAChD,OAAO,EAAE,UAAU,CAAC,iBAAiB;QACrC,UAAU,EAAE,UAAU,CAAC,kBAAkB;QACzC,MAAM,EAAE,UAAU,CAAC,KAAK;KAC3B,CAAC,CAAC,CAAC;AACR,CAAC;AAED,MAAM,UAAU,qBAAqB,CACjC,OAA+B;IAE/B,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAChC,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,CAAC;QACP,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,QAAQ,CAAC;QAChD,OAAO,EAAE,UAAU,CAAC,iBAAiB;QACrC,UAAU,EAAE,UAAU,CAAC,kBAAkB;QACzC,MAAM,EAAE,UAAU,CAAC,KAAK;KAC3B,CAAC,CAAC,CAAC;AACR,CAAC;AAED,MAAM,UAAU,4BAA4B,CACxC,QAAwC;IAExC,IAAI,MAAM,GAAkB,EAAE,CAAC;IAE/B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC7B,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7C,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC;IAClC,CAAC;SAAM,IACH,QAAQ,CAAC,WAAW;QACpB,OAAO,QAAQ,CAAC,WAAW,KAAK,QAAQ,EAC1C,CAAC;QACC,MAAM,cAAc,GAAG,QAAQ,CAAC,WAAmC,CAAC;QACpE,MAAM,GAAG;YACL,GAAG,kBAAkB,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE,CAAC;YACjD,GAAG,qBAAqB,CAAC,cAAc,CAAC,OAAO,IAAI,EAAE,CAAC;SACzD,CAAC;IACN,CAAC;IAED,OAAO;QACH,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,0BAA0B;QACvD,MAAM;QACN,aAAa,EACT,QAAQ,CAAC,aAAa;YACtB,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;QACnD,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,CAAC;KACnC,CAAC;AACN,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { FileContent, ReviewConfig } from '../types/review.js';
2
+ export declare function createAnalyzeStartVerboseMessages({ diff, rulesOnly, fast, }: {
3
+ diff: string;
4
+ rulesOnly?: boolean;
5
+ fast?: boolean;
6
+ }): string[];
7
+ export declare function createFullFileContentsVerboseMessages(files: FileContent[] | undefined): string[];
8
+ export declare function createAnalyzeApiRequestVerboseMessages({ diff, reviewConfig, mode, gitInfo, }: {
9
+ diff: string;
10
+ reviewConfig: ReviewConfig;
11
+ mode: 'team-key' | 'personal-token';
12
+ gitInfo?: {
13
+ branch?: string;
14
+ remote?: string | null;
15
+ };
16
+ }): string[];
17
+ export declare function createAnalyzeApiResponseVerboseMessages({ summary, issuesCount, filesAnalyzed, }: {
18
+ summary: string;
19
+ issuesCount: number;
20
+ filesAnalyzed: number;
21
+ }): string[];
22
+ export declare function createTrialAnalyzeStartVerboseMessages(diff: string): string[];
23
+ export declare function createTrialAnalyzeResponseVerboseMessages({ summary, issuesCount, filesAnalyzed, }: {
24
+ summary: string;
25
+ issuesCount: number;
26
+ filesAnalyzed: number;
27
+ }): string[];
28
+ //# sourceMappingURL=review-verbose.d.ts.map