geeto 0.12.0 → 0.13.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"prompts-embedded.d.ts","sourceRoot":"","sources":["../../src/utils/prompts-embedded.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAiLnD,CAAA"}
1
+ {"version":3,"file":"prompts-embedded.d.ts","sourceRoot":"","sources":["../../src/utils/prompts-embedded.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA4MnD,CAAA"}
@@ -25,6 +25,19 @@ refactor(ai): migrate providers to SDKs
25
25
  Replaces direct API/CLI calls for Copilot and Gemini with SDK integrations.
26
26
  This simplifies code, improves maintainability, and adds dynamic model
27
27
  fetching. Updates .gitignore for geeto binaries.
28
+ `,
29
+ 'issue-prompt-review.md': `Act as a project issue reviewer. Review the provided issue title and description/body.
30
+ Keep the tone natural, conversational, and direct, like a friendly project maintainer or senior engineer checking an issue submitted by a user. Avoid boilerplate structures, long greeting summaries, or repetitive list labels unless requested.
31
+
32
+ Perform the following assessment and provide a concise structured feedback to help triage:
33
+
34
+ 1. Identify/verify the issue category: bug, feature, docs, or usage. State it clearly, e.g. "I've labeled this as [category]. The team will review and follow up with next steps."
35
+ 2. For bugs: state severity (low/med/high) and check if reproduction steps are present or missing.
36
+ 3. Suggest 1-3 labels (e.g. bug, feature, improvement, triage).
37
+ 4. Suggest next steps or ask up to 3 questions if info is missing. State that we are waiting for the author or reviewer to reply to proceed.
38
+
39
+ Your feedback must be formatted in clean Markdown.
40
+ Start by thanking/greeting the user using their handle if available (e.g., "Thanks for opening this issue, @author!"). Keep it helpful and concise.
28
41
  `,
29
42
  'issue-prompt.md': `Generate a GitHub Issue title and body from this description.
30
43
  IMPORTANT: Always write in English regardless of the input language.
@@ -81,7 +94,7 @@ BODY:
81
94
 
82
95
  For the given issue ({{input}}), perform the following checks and provide a concise structured output.
83
96
 
84
- 1) Categorize the issue as one of: \`bug\`, \`feature request\`, \`docs\`, \`usage/help\`, or \`other\`.
97
+ 1) Categorize the issue as one of: \`bug\`, \`feature request\`, \`docs\`, \`usage/help\`, or \`other\`. State it clearly, e.g. "I've labeled this as [category]. The team will review and follow up with next steps."
85
98
 
86
99
  2) For BUGs:
87
100
  - Determine severity: \`critical\` / \`high\` / \`medium\` / \`low\`.
@@ -97,7 +110,7 @@ BODY:
97
110
 
98
111
  4) For ALL issues:
99
112
  - If relevant, extract a brief \`How to use (from README):\` block (2–6 commands) to help reproduce or test, but keep it short.
100
- - Ask up to 3 direct QUESTIONS if information is missing.
113
+ - Ask up to 3 direct QUESTIONS if information is missing. State that we are waiting for the author or reviewer to reply to proceed.
101
114
  - Suggest 1–3 short labels (single words) such as \`bug\`, \`feature\`, \`docs\`, \`usage\`, \`help\`, \`tool\`.
102
115
 
103
116
  5) Format output in the following structured sections (concise and clear):
@@ -176,6 +189,20 @@ Formatting (follow EXACTLY — this is markdownlint-compliant):
176
189
  - Improvement here
177
190
  `,
178
191
  'repo-description-prompt.md': `Analyze this README and write a short GitHub repo description (max 150 chars). Concise, informative. Output ONLY the text, no quotes.
192
+ `,
193
+ 'review-prompt.md': `Act as a code reviewer. Review the provided git diff for a Pull Request / Merge Request.
194
+ Start the review by mentioning the author using their handler (e.g. "Hi @author, ..."). Keep the tone natural, conversational, and direct, like a human senior engineer reviewing a teammate's PR. Avoid rigid academic formats, excessive robotic lists, or boilerplate summaries. Write clearly and concisely.
195
+
196
+ Focus on:
197
+
198
+ 1. Potential bugs, logic errors, and edge cases.
199
+ 2. Code quality, readability, maintainability, and clean code principles.
200
+ 3. Performance issues or unnecessary resource usage.
201
+ 4. Security vulnerabilities.
202
+
203
+ Provide constructive feedback. Group by files if appropriate.
204
+ Your output must be formatted in Markdown.
205
+ If the changes are good, praise the author and approve clearly.
179
206
  `,
180
207
  };
181
208
  //# sourceMappingURL=prompts-embedded.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompts-embedded.js","sourceRoot":"","sources":["../../src/utils/prompts-embedded.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,8CAA8C;AAE9C,MAAM,CAAC,MAAM,gBAAgB,GAA2B;IACtD,uBAAuB,EAAE;;;;CAI1B;IACC,0BAA0B,EAAE;;;;;;;;;;;;;;;;;;;CAmB7B;IACC,iBAAiB,EAAE;;;;;;;;;;;;;;;;;;;CAmBpB;IACC,sCAAsC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6EzC;IACC,cAAc,EAAE;;;;;;;;;;;;;;CAcjB;IACC,yBAAyB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmC5B;IACC,4BAA4B,EAAE;CAC/B;CACA,CAAA"}
1
+ {"version":3,"file":"prompts-embedded.js","sourceRoot":"","sources":["../../src/utils/prompts-embedded.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,8CAA8C;AAE9C,MAAM,CAAC,MAAM,gBAAgB,GAA2B;IACtD,uBAAuB,EAAE;;;;CAI1B;IACC,0BAA0B,EAAE;;;;;;;;;;;;;;;;;;;CAmB7B;IACC,wBAAwB,EAAE;;;;;;;;;;;;CAY3B;IACC,iBAAiB,EAAE;;;;;;;;;;;;;;;;;;;CAmBpB;IACC,sCAAsC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6EzC;IACC,cAAc,EAAE;;;;;;;;;;;;;;CAcjB;IACC,yBAAyB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmC5B;IACC,4BAA4B,EAAE;CAC/B;IACC,kBAAkB,EAAE;;;;;;;;;;;;;CAarB;CACA,CAAA"}
package/lib/version.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  /** Auto-generated version constant. Updated by the release workflow. */
2
- export declare const VERSION = "0.12.0";
2
+ export declare const VERSION = "0.13.0";
3
3
  //# sourceMappingURL=version.d.ts.map
package/lib/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  /** Auto-generated version constant. Updated by the release workflow. */
2
- export const VERSION = '0.12.0';
2
+ export const VERSION = '0.13.0';
3
3
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dry-run.d.ts","sourceRoot":"","sources":["../../src/workflows/dry-run.ts"],"names":[],"mappings":"AAAA;;GAEG;AA2BH,eAAO,MAAM,gBAAgB,QAAa,OAAO,CAAC,IAAI,CA4GrD,CAAA"}
1
+ {"version":3,"file":"dry-run.d.ts","sourceRoot":"","sources":["../../src/workflows/dry-run.ts"],"names":[],"mappings":"AAAA;;GAEG;AA2BH,eAAO,MAAM,gBAAgB,QAAa,OAAO,CAAC,IAAI,CAsHrD,CAAA"}
@@ -93,6 +93,16 @@ export const handleDryRunMenu = async () => {
93
93
  await m.handleCreatePR();
94
94
  break;
95
95
  }
96
+ case 'review-pr': {
97
+ const m = await import('./review-pr.js');
98
+ await m.handleReviewPR();
99
+ break;
100
+ }
101
+ case 'review-issue': {
102
+ const m = await import('./review-issue.js');
103
+ await m.handleReviewIssue();
104
+ break;
105
+ }
96
106
  case 'issue': {
97
107
  const m = await import('./issue.js');
98
108
  await m.handleCreateIssue();
@@ -1 +1 @@
1
- {"version":3,"file":"dry-run.js","sourceRoot":"","sources":["../../src/workflows/dry-run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dry-run.js","sourceRoot":"","sources":["../../src/workflows/dry-run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * AI-powered Issue review workflow
3
+ */
4
+ /**
5
+ * Interactive Review Issue workflow
6
+ */
7
+ export declare const handleReviewIssue: () => Promise<void>;
8
+ //# sourceMappingURL=review-issue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-issue.d.ts","sourceRoot":"","sources":["../../src/workflows/review-issue.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoEH;;GAEG;AACH,eAAO,MAAM,iBAAiB,QAAa,OAAO,CAAC,IAAI,CAoNtD,CAAA"}
@@ -0,0 +1,214 @@
1
+ /**
2
+ * AI-powered Issue review workflow
3
+ */
4
+ import { getPlatformAPI } from '../api/platform.js';
5
+ import { select } from '../cli/menu.js';
6
+ import { getConfiguredAIProvider, getModelForProvider, updateModelInState, } from '../utils/ai-workflow.js';
7
+ import { colors } from '../utils/colors.js';
8
+ import { generateTextWithProvider, getAIProviderShortName, isContextLimitFailure, isTransientAIFailure, } from '../utils/git-ai.js';
9
+ import { getPlatformRepoFromRemote, validatePlatformConfig } from '../utils/github-helpers.js';
10
+ import { log } from '../utils/logging.js';
11
+ import { loadPrompt } from '../utils/prompt-loader.js';
12
+ import { loadState, saveState } from '../utils/state.js';
13
+ /**
14
+ * Generate Issue review using AI
15
+ */
16
+ const callAIForIssueReview = async (title, body, author, provider, model, correction) => {
17
+ const promptBase = [
18
+ loadPrompt('issue-prompt-review.md'),
19
+ '',
20
+ `Author: @${author}`,
21
+ `Issue Title: ${title}`,
22
+ `Issue Body:\n${body}`,
23
+ ].join('\n');
24
+ const prompt = correction ? `${promptBase}\n\nAdjustment: ${correction}` : promptBase;
25
+ const providerName = getAIProviderShortName(provider);
26
+ const modelDisplay = model ? ` (${model})` : '';
27
+ const spinner = log.spinner();
28
+ spinner.start(`Analyzing Issue with ${providerName}${modelDisplay}...`);
29
+ try {
30
+ const result = await generateTextWithProvider(provider, prompt, model, model, model ?? 'gemini-2.5-flash', model);
31
+ spinner.stop();
32
+ return result;
33
+ }
34
+ catch {
35
+ spinner.fail('AI analysis failed');
36
+ return null;
37
+ }
38
+ };
39
+ /**
40
+ * Interactive Review Issue workflow
41
+ */
42
+ export const handleReviewIssue = async () => {
43
+ log.banner();
44
+ const platformRepo = getPlatformRepoFromRemote();
45
+ if (!platformRepo)
46
+ return;
47
+ if (!validatePlatformConfig(platformRepo.platform))
48
+ return;
49
+ const api = getPlatformAPI(platformRepo.platform);
50
+ const issueLabelFull = platformRepo.platform === 'gitlab' ? 'GitLab Issue' : 'GitHub Issue';
51
+ log.step(`${colors.cyan}AI ${issueLabelFull} Review${colors.reset}\n`);
52
+ const spinner = log.spinner();
53
+ spinner.start(`Fetching open Issues...`);
54
+ const openIssues = await api.listIssues(platformRepo.projectPath, platformRepo.owner, platformRepo.repo);
55
+ spinner.stop();
56
+ if (openIssues.length === 0) {
57
+ log.warn(`No open Issues found in this repository.`);
58
+ return;
59
+ }
60
+ const issueOptions = openIssues.map((issue) => ({
61
+ label: `#${issue.number} ${issue.title} (${colors.gray}by @${issue.author}${colors.reset})`,
62
+ value: String(issue.number),
63
+ }));
64
+ const selectedIssueValue = await select(`Select an Issue to review:`, issueOptions);
65
+ if (!selectedIssueValue)
66
+ return;
67
+ const selectedIssueNumber = Number.parseInt(selectedIssueValue, 10);
68
+ const selectedIssue = openIssues.find((issue) => issue.number === selectedIssueNumber);
69
+ if (!selectedIssue)
70
+ return;
71
+ const state = loadState();
72
+ let aiProvider = getConfiguredAIProvider(state);
73
+ if (!aiProvider) {
74
+ log.error('AI provider is not configured. Run `gt --settings` to setup AI.');
75
+ return;
76
+ }
77
+ let currentModel = getModelForProvider(aiProvider, state);
78
+ let aiDone = false;
79
+ let reviewText = '';
80
+ let correction = '';
81
+ while (!aiDone) {
82
+ const result = await callAIForIssueReview(selectedIssue.title, selectedIssue.body, selectedIssue.author, aiProvider, currentModel, correction);
83
+ const failed = !result || isTransientAIFailure(result) || isContextLimitFailure(result);
84
+ if (failed) {
85
+ log.warn('AI analysis failed or hit context limits.');
86
+ const failureAction = await select('How would you like to continue?', [
87
+ { label: 'Change model and retry', value: 'change-model' },
88
+ { label: 'Change AI provider and retry', value: 'change-provider' },
89
+ { label: 'Cancel', value: 'cancel' },
90
+ ]);
91
+ if (failureAction === 'change-model') {
92
+ const { chooseModelForProvider } = await import('../utils/git-ai.js');
93
+ const chosen = await chooseModelForProvider(aiProvider, 'Choose model:', 'Back');
94
+ if (chosen && chosen !== 'back') {
95
+ currentModel = chosen;
96
+ updateModelInState(state, aiProvider, chosen);
97
+ }
98
+ correction = '';
99
+ continue;
100
+ }
101
+ if (failureAction === 'change-provider') {
102
+ const prov = await select('Choose AI provider:', [
103
+ { label: 'Gemini', value: 'gemini' },
104
+ { label: 'GitHub Copilot', value: 'copilot' },
105
+ { label: 'OpenRouter', value: 'openrouter' },
106
+ { label: 'Groq', value: 'groq' },
107
+ { label: 'Codex', value: 'codex' },
108
+ { label: 'Back', value: 'back' },
109
+ ]);
110
+ if (prov !== 'back') {
111
+ const { chooseModelForProvider } = await import('../utils/git-ai.js');
112
+ const chosen = await chooseModelForProvider(prov, 'Choose model:', 'Back');
113
+ if (chosen && chosen !== 'back') {
114
+ aiProvider = prov;
115
+ currentModel = chosen;
116
+ if (state) {
117
+ state.aiProvider = aiProvider;
118
+ updateModelInState(state, aiProvider, chosen);
119
+ saveState(state);
120
+ }
121
+ }
122
+ }
123
+ correction = '';
124
+ continue;
125
+ }
126
+ return;
127
+ }
128
+ reviewText = result ?? '';
129
+ console.log('');
130
+ console.log(`${colors.cyan}┌──────────────────────────────────────────────┐${colors.reset}`);
131
+ console.log(`${colors.cyan}│${colors.reset} ${colors.bright}AI Review Findings${colors.reset}`);
132
+ console.log(`${colors.cyan}├──────────────────────────────────────────────┤${colors.reset}`);
133
+ const lines = reviewText.split('\n');
134
+ for (const line of lines) {
135
+ console.log(`${colors.cyan}│${colors.reset} ${line}`);
136
+ }
137
+ console.log(`${colors.cyan}└──────────────────────────────────────────────┘${colors.reset}`);
138
+ console.log('');
139
+ const action = await select(`Accept this Issue review?`, [
140
+ { label: 'Yes, post it', value: 'accept' },
141
+ { label: 'Regenerate', value: 'regenerate' },
142
+ { label: 'Correct AI (give feedback)', value: 'correct' },
143
+ { label: 'Change model', value: 'change-model' },
144
+ { label: 'Change AI provider', value: 'change-provider' },
145
+ { label: 'Discard & cancel', value: 'discard' },
146
+ ]);
147
+ switch (action) {
148
+ case 'accept': {
149
+ aiDone = true;
150
+ break;
151
+ }
152
+ case 'regenerate': {
153
+ correction = '';
154
+ continue;
155
+ }
156
+ case 'correct': {
157
+ const { askQuestion } = await import('../cli/input.js');
158
+ if (process.stdin.isTTY)
159
+ process.stdin.setRawMode(false);
160
+ correction = askQuestion('Corrections for AI: ');
161
+ continue;
162
+ }
163
+ case 'change-model': {
164
+ const { chooseModelForProvider } = await import('../utils/git-ai.js');
165
+ const chosen = await chooseModelForProvider(aiProvider, 'Choose model:', 'Back');
166
+ if (chosen && chosen !== 'back') {
167
+ currentModel = chosen;
168
+ updateModelInState(state, aiProvider, chosen);
169
+ }
170
+ correction = '';
171
+ continue;
172
+ }
173
+ case 'change-provider': {
174
+ const prov = await select('Choose AI provider:', [
175
+ { label: 'Gemini', value: 'gemini' },
176
+ { label: 'GitHub Copilot', value: 'copilot' },
177
+ { label: 'OpenRouter', value: 'openrouter' },
178
+ { label: 'Groq', value: 'groq' },
179
+ { label: 'Codex', value: 'codex' },
180
+ { label: 'Back', value: 'back' },
181
+ ]);
182
+ if (prov !== 'back') {
183
+ const { chooseModelForProvider } = await import('../utils/git-ai.js');
184
+ const chosen = await chooseModelForProvider(prov, 'Choose model:', 'Back');
185
+ if (chosen && chosen !== 'back') {
186
+ aiProvider = prov;
187
+ currentModel = chosen;
188
+ if (state) {
189
+ state.aiProvider = aiProvider;
190
+ updateModelInState(state, aiProvider, chosen);
191
+ saveState(state);
192
+ }
193
+ }
194
+ }
195
+ correction = '';
196
+ continue;
197
+ }
198
+ default: {
199
+ log.info('Review analysis discarded.');
200
+ return;
201
+ }
202
+ }
203
+ }
204
+ spinner.start(`Posting review comment...`);
205
+ const success = await api.createIssueComment(platformRepo.projectPath, selectedIssueNumber, reviewText, platformRepo.owner, platformRepo.repo);
206
+ if (success) {
207
+ spinner.succeed(`Review comment successfully posted!`);
208
+ console.log(` ${colors.cyan}${selectedIssue.url}${colors.reset}\n`);
209
+ }
210
+ else {
211
+ spinner.fail(`Failed to post review comment.`);
212
+ }
213
+ };
214
+ //# sourceMappingURL=review-issue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-issue.js","sourceRoot":"","sources":["../../src/workflows/review-issue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * AI-powered Pull Request / Merge Request review workflow
3
+ */
4
+ /**
5
+ * Interactive Review PR workflow
6
+ */
7
+ export declare const handleReviewPR: () => Promise<void>;
8
+ //# sourceMappingURL=review-pr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-pr.d.ts","sourceRoot":"","sources":["../../src/workflows/review-pr.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkEH;;GAEG;AACH,eAAO,MAAM,cAAc,QAAa,OAAO,CAAC,IAAI,CAkOnD,CAAA"}
@@ -0,0 +1,220 @@
1
+ /**
2
+ * AI-powered Pull Request / Merge Request review workflow
3
+ */
4
+ import { getPlatformAPI } from '../api/platform.js';
5
+ import { select } from '../cli/menu.js';
6
+ import { getConfiguredAIProvider, getModelForProvider, updateModelInState, } from '../utils/ai-workflow.js';
7
+ import { colors } from '../utils/colors.js';
8
+ import { generateTextWithProvider, getAIProviderShortName, isContextLimitFailure, isTransientAIFailure, } from '../utils/git-ai.js';
9
+ import { getPlatformRepoFromRemote, validatePlatformConfig } from '../utils/github-helpers.js';
10
+ import { log } from '../utils/logging.js';
11
+ import { loadPrompt } from '../utils/prompt-loader.js';
12
+ import { loadState, saveState } from '../utils/state.js';
13
+ /**
14
+ * Generate PR review using AI
15
+ */
16
+ const callAIForReview = async (diff, provider, model, author, correction) => {
17
+ const promptBase = [
18
+ loadPrompt('review-prompt.md'),
19
+ '',
20
+ `Author: @${author}`,
21
+ `Diff:\n${diff}`,
22
+ ].join('\n');
23
+ const prompt = correction ? `${promptBase}\n\nAdjustment: ${correction}` : promptBase;
24
+ const providerName = getAIProviderShortName(provider);
25
+ const modelDisplay = model ? ` (${model})` : '';
26
+ const spinner = log.spinner();
27
+ spinner.start(`Analyzing PR with ${providerName}${modelDisplay}...`);
28
+ try {
29
+ const result = await generateTextWithProvider(provider, prompt, model, model, model ?? 'gemini-2.5-flash', model);
30
+ spinner.stop();
31
+ return result;
32
+ }
33
+ catch {
34
+ spinner.fail('AI analysis failed');
35
+ return null;
36
+ }
37
+ };
38
+ /**
39
+ * Interactive Review PR workflow
40
+ */
41
+ export const handleReviewPR = async () => {
42
+ log.banner();
43
+ const platformRepo = getPlatformRepoFromRemote();
44
+ if (!platformRepo)
45
+ return;
46
+ if (!validatePlatformConfig(platformRepo.platform))
47
+ return;
48
+ const api = getPlatformAPI(platformRepo.platform);
49
+ const prLabel = platformRepo.platform === 'gitlab' ? 'MR' : 'PR';
50
+ const prLabelFull = platformRepo.platform === 'gitlab' ? 'Merge Request' : 'Pull Request';
51
+ log.step(`${colors.cyan}AI ${prLabelFull} Review${colors.reset}\n`);
52
+ const spinner = log.spinner();
53
+ spinner.start(`Fetching open ${prLabel}s...`);
54
+ const openPRs = await api.listPRs(platformRepo.projectPath, undefined, platformRepo.owner, platformRepo.repo);
55
+ spinner.stop();
56
+ if (openPRs.length === 0) {
57
+ log.warn(`No open ${prLabel}s found in this repository.`);
58
+ return;
59
+ }
60
+ const prOptions = openPRs.map((pr) => ({
61
+ label: `#${pr.number} ${pr.title} (${colors.gray}by @${pr.author}${colors.reset})`,
62
+ value: String(pr.number),
63
+ }));
64
+ const selectedPRValue = await select(`Select a ${prLabel} to review:`, prOptions);
65
+ if (!selectedPRValue)
66
+ return;
67
+ const selectedPRNumber = Number.parseInt(selectedPRValue, 10);
68
+ const selectedPR = openPRs.find((pr) => pr.number === selectedPRNumber);
69
+ if (!selectedPR)
70
+ return;
71
+ spinner.start(`Downloading diff for ${prLabel} #${selectedPRNumber}...`);
72
+ const diff = await api.getPRDiff(platformRepo.projectPath, selectedPRNumber, platformRepo.owner, platformRepo.repo);
73
+ spinner.stop();
74
+ if (!diff) {
75
+ log.error(`Could not download diff for ${prLabel} #${selectedPRNumber}.`);
76
+ return;
77
+ }
78
+ const state = loadState();
79
+ let aiProvider = getConfiguredAIProvider(state);
80
+ if (!aiProvider) {
81
+ log.error('AI provider is not configured. Run `gt --settings` to setup AI.');
82
+ return;
83
+ }
84
+ let currentModel = getModelForProvider(aiProvider, state);
85
+ let aiDone = false;
86
+ let reviewText = '';
87
+ let correction = '';
88
+ while (!aiDone) {
89
+ const result = await callAIForReview(diff, aiProvider, currentModel, selectedPR.author, correction);
90
+ const failed = !result || isTransientAIFailure(result) || isContextLimitFailure(result);
91
+ if (failed) {
92
+ log.warn('AI analysis failed or hit context limits.');
93
+ const failureAction = await select('How would you like to continue?', [
94
+ { label: 'Change model and retry', value: 'change-model' },
95
+ { label: 'Change AI provider and retry', value: 'change-provider' },
96
+ { label: 'Cancel', value: 'cancel' },
97
+ ]);
98
+ if (failureAction === 'change-model') {
99
+ const { chooseModelForProvider } = await import('../utils/git-ai.js');
100
+ const chosen = await chooseModelForProvider(aiProvider, 'Choose model:', 'Back');
101
+ if (chosen && chosen !== 'back') {
102
+ currentModel = chosen;
103
+ updateModelInState(state, aiProvider, chosen);
104
+ }
105
+ correction = '';
106
+ continue;
107
+ }
108
+ if (failureAction === 'change-provider') {
109
+ const prov = await select('Choose AI provider:', [
110
+ { label: 'Gemini', value: 'gemini' },
111
+ { label: 'GitHub Copilot', value: 'copilot' },
112
+ { label: 'OpenRouter', value: 'openrouter' },
113
+ { label: 'Groq', value: 'groq' },
114
+ { label: 'Codex', value: 'codex' },
115
+ { label: 'Back', value: 'back' },
116
+ ]);
117
+ if (prov !== 'back') {
118
+ const { chooseModelForProvider } = await import('../utils/git-ai.js');
119
+ const chosen = await chooseModelForProvider(prov, 'Choose model:', 'Back');
120
+ if (chosen && chosen !== 'back') {
121
+ aiProvider = prov;
122
+ currentModel = chosen;
123
+ if (state) {
124
+ state.aiProvider = aiProvider;
125
+ updateModelInState(state, aiProvider, chosen);
126
+ saveState(state);
127
+ }
128
+ }
129
+ }
130
+ correction = '';
131
+ continue;
132
+ }
133
+ return;
134
+ }
135
+ reviewText = result ?? '';
136
+ console.log('');
137
+ console.log(`${colors.cyan}┌──────────────────────────────────────────────┐${colors.reset}`);
138
+ console.log(`${colors.cyan}│${colors.reset} ${colors.bright}AI Review Findings${colors.reset}`);
139
+ console.log(`${colors.cyan}├──────────────────────────────────────────────┤${colors.reset}`);
140
+ const lines = reviewText.split('\n');
141
+ for (const line of lines) {
142
+ console.log(`${colors.cyan}│${colors.reset} ${line}`);
143
+ }
144
+ console.log(`${colors.cyan}└──────────────────────────────────────────────┘${colors.reset}`);
145
+ console.log('');
146
+ const action = await select(`Accept this ${prLabel} review?`, [
147
+ { label: 'Yes, post it', value: 'accept' },
148
+ { label: 'Regenerate', value: 'regenerate' },
149
+ { label: 'Correct AI (give feedback)', value: 'correct' },
150
+ { label: 'Change model', value: 'change-model' },
151
+ { label: 'Change AI provider', value: 'change-provider' },
152
+ { label: 'Discard & cancel', value: 'discard' },
153
+ ]);
154
+ switch (action) {
155
+ case 'accept': {
156
+ aiDone = true;
157
+ break;
158
+ }
159
+ case 'regenerate': {
160
+ correction = '';
161
+ continue;
162
+ }
163
+ case 'correct': {
164
+ const { askQuestion } = await import('../cli/input.js');
165
+ if (process.stdin.isTTY)
166
+ process.stdin.setRawMode(false);
167
+ correction = askQuestion('Corrections for AI: ');
168
+ continue;
169
+ }
170
+ case 'change-model': {
171
+ const { chooseModelForProvider } = await import('../utils/git-ai.js');
172
+ const chosen = await chooseModelForProvider(aiProvider, 'Choose model:', 'Back');
173
+ if (chosen && chosen !== 'back') {
174
+ currentModel = chosen;
175
+ updateModelInState(state, aiProvider, chosen);
176
+ }
177
+ correction = '';
178
+ continue;
179
+ }
180
+ case 'change-provider': {
181
+ const prov = await select('Choose AI provider:', [
182
+ { label: 'Gemini', value: 'gemini' },
183
+ { label: 'GitHub Copilot', value: 'copilot' },
184
+ { label: 'OpenRouter', value: 'openrouter' },
185
+ { label: 'Groq', value: 'groq' },
186
+ { label: 'Codex', value: 'codex' },
187
+ { label: 'Back', value: 'back' },
188
+ ]);
189
+ if (prov !== 'back') {
190
+ const { chooseModelForProvider } = await import('../utils/git-ai.js');
191
+ const chosen = await chooseModelForProvider(prov, 'Choose model:', 'Back');
192
+ if (chosen && chosen !== 'back') {
193
+ aiProvider = prov;
194
+ currentModel = chosen;
195
+ if (state) {
196
+ state.aiProvider = aiProvider;
197
+ updateModelInState(state, aiProvider, chosen);
198
+ }
199
+ }
200
+ }
201
+ correction = '';
202
+ continue;
203
+ }
204
+ default: {
205
+ log.info('Review analysis discarded.');
206
+ return;
207
+ }
208
+ }
209
+ }
210
+ spinner.start(`Posting review comment...`);
211
+ const success = await api.createPRComment(platformRepo.projectPath, selectedPRNumber, reviewText, platformRepo.owner, platformRepo.repo);
212
+ if (success) {
213
+ spinner.succeed(`Review comment successfully posted!`);
214
+ console.log(` ${colors.cyan}${selectedPR.url}${colors.reset}\n`);
215
+ }
216
+ else {
217
+ spinner.fail(`Failed to post review comment.`);
218
+ }
219
+ };
220
+ //# sourceMappingURL=review-pr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-pr.js","sourceRoot":"","sources":["../../src/workflows/review-pr.ts"],"names":[],"mappings":"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"}