@ariso-ai/ivan 1.0.32 → 1.0.34
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.
- package/dist/database/migration.d.ts +2 -2
- package/dist/database/migration.d.ts.map +1 -1
- package/dist/database/migration.js.map +1 -1
- package/dist/database/migrations/017_create_pr_reviews_table.d.ts +3 -0
- package/dist/database/migrations/017_create_pr_reviews_table.d.ts.map +1 -0
- package/dist/database/migrations/017_create_pr_reviews_table.js +23 -0
- package/dist/database/migrations/017_create_pr_reviews_table.js.map +1 -0
- package/dist/database/migrations/index.d.ts.map +1 -1
- package/dist/database/migrations/index.js +3 -1
- package/dist/database/migrations/index.js.map +1 -1
- package/dist/database/types.d.ts +13 -0
- package/dist/database/types.d.ts.map +1 -1
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -1
- package/dist/learnings/csv.d.ts +3 -0
- package/dist/learnings/csv.d.ts.map +1 -0
- package/dist/learnings/csv.js +51 -0
- package/dist/learnings/csv.js.map +1 -0
- package/dist/learnings/database.d.ts.map +1 -1
- package/dist/learnings/database.js.map +1 -1
- package/dist/learnings/import-learnings-command.d.ts +7 -0
- package/dist/learnings/import-learnings-command.d.ts.map +1 -0
- package/dist/learnings/import-learnings-command.js +165 -0
- package/dist/learnings/import-learnings-command.js.map +1 -0
- package/dist/services/address-executor.d.ts.map +1 -1
- package/dist/services/address-executor.js.map +1 -1
- package/dist/services/claude-executor.d.ts.map +1 -1
- package/dist/services/claude-executor.js +6 -0
- package/dist/services/claude-executor.js.map +1 -1
- package/dist/services/git-interfaces.d.ts.map +1 -1
- package/dist/services/openai-service.d.ts +6 -0
- package/dist/services/openai-service.d.ts.map +1 -1
- package/dist/services/openai-service.js +75 -0
- package/dist/services/openai-service.js.map +1 -1
- package/dist/services/pr-service-cli.d.ts.map +1 -1
- package/dist/services/pr-service-cli.js.map +1 -1
- package/dist/services/pr-service-pat.d.ts.map +1 -1
- package/dist/services/pr-service-pat.js.map +1 -1
- package/dist/services/review-executor.d.ts +12 -2
- package/dist/services/review-executor.d.ts.map +1 -1
- package/dist/services/review-executor.js +289 -113
- package/dist/services/review-executor.js.map +1 -1
- package/dist/web-server.d.ts +1 -0
- package/dist/web-server.d.ts.map +1 -1
- package/dist/web-server.js +393 -200
- package/dist/web-server.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,159 +1,335 @@
|
|
|
1
|
+
import { randomUUID } from 'crypto';
|
|
1
2
|
import { execSync } from 'child_process';
|
|
3
|
+
import { writeFileSync, unlinkSync } from 'fs';
|
|
4
|
+
import { join } from 'path';
|
|
5
|
+
import { tmpdir } from 'os';
|
|
2
6
|
import chalk from 'chalk';
|
|
3
|
-
import { randomUUID } from 'crypto';
|
|
4
7
|
import { DatabaseManager } from '../database.js';
|
|
5
8
|
import { ExecutorFactory } from './executor-factory.js';
|
|
9
|
+
import { OpenAIService } from './openai-service.js';
|
|
10
|
+
import { createGitManager, createRepositoryManager } from './service-factory.js';
|
|
11
|
+
import { queryLearnings } from '../learnings/index.js';
|
|
12
|
+
const REVIEW_SYSTEM_PROMPT = `You are a principal engineer helping a human reviewer understand and evaluate a pull request.
|
|
13
|
+
|
|
14
|
+
Your primary goal is to set the human reviewer up for success — not to rubber-stamp the PR, but to give them everything they need to make a confident, informed decision. Structure your output so they know exactly where to focus their attention.
|
|
15
|
+
|
|
16
|
+
Your review should:
|
|
17
|
+
1. **Summarize what the PR does** — a concise description of the intent and approach, so the reviewer isn't starting cold.
|
|
18
|
+
2. **Call out critical spots to check** — specific files, functions, or logic paths that carry the most risk and deserve careful human scrutiny. Explain *why* each one matters.
|
|
19
|
+
3. **Flag real issues** — bugs, security holes, performance problems, or correctness failures you found. Be concrete: file name, line range, what's wrong, why it matters, how to fix it.
|
|
20
|
+
4. **Note conventions and patterns** — deviations from existing codebase conventions worth discussing.
|
|
21
|
+
5. **Surface anything surprising** — side effects, missing tests for tricky logic, assumptions baked into the implementation.
|
|
22
|
+
|
|
23
|
+
Severity levels: **critical** (must fix before merge), **major** (should fix), **minor** (worth discussing), **nit** (optional polish).
|
|
24
|
+
|
|
25
|
+
Be direct and specific. Reference exact file paths and line numbers. If something looks fine, say so — don't pad with generic praise.`;
|
|
26
|
+
// Kept as reference for the prompt contract passed to OpenAI in extractPrComments()
|
|
27
|
+
export const COMMENT_SYSTEM_PROMPT = `You are a principal engineer leaving inline review comments on a GitHub pull request.
|
|
28
|
+
|
|
29
|
+
You have already produced a written review summary. Your task now is to translate the actionable findings from that review into structured inline comments to post on the PR via the GitHub CLI.
|
|
30
|
+
|
|
31
|
+
For each comment you want to leave:
|
|
32
|
+
- Identify the exact file path and line number (use the line from the PR diff perspective)
|
|
33
|
+
- Write a concise, helpful comment that explains the issue and, where possible, how to fix it
|
|
34
|
+
- Only comment on lines that appear in the PR diff (changed lines or their immediate context)
|
|
35
|
+
- Skip issues that are too vague to pin to a specific location
|
|
36
|
+
|
|
37
|
+
Output a JSON array of comment objects with this shape:
|
|
38
|
+
[
|
|
39
|
+
{
|
|
40
|
+
"path": "src/some/file.ts",
|
|
41
|
+
"line": 42,
|
|
42
|
+
"body": "This function doesn't handle the case where X is null — if Y calls this with an uninitialized value it will throw. Consider adding a guard here."
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
|
|
46
|
+
Return ONLY valid JSON — no prose, no markdown fences, just the raw array.`;
|
|
6
47
|
export class ReviewExecutor {
|
|
7
48
|
dbManager;
|
|
49
|
+
claudeExecutor;
|
|
50
|
+
repositoryManager;
|
|
51
|
+
openAIService;
|
|
8
52
|
constructor() {
|
|
9
53
|
this.dbManager = new DatabaseManager();
|
|
54
|
+
this.claudeExecutor = ExecutorFactory.getExecutor();
|
|
55
|
+
this.repositoryManager = createRepositoryManager();
|
|
56
|
+
this.openAIService = new OpenAIService();
|
|
10
57
|
}
|
|
11
|
-
async executeReviews(prNumbers) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
58
|
+
async executeReviews(prNumbers, leaveComments = false) {
|
|
59
|
+
try {
|
|
60
|
+
await this.claudeExecutor.validateClaudeCodeInstallation();
|
|
61
|
+
console.log(chalk.green('✅ Claude Code SDK configured'));
|
|
62
|
+
const workingDir = await this.repositoryManager.getValidWorkingDirectory();
|
|
63
|
+
const gitManager = createGitManager(workingDir);
|
|
64
|
+
gitManager.validateGitHubCliInstallation();
|
|
65
|
+
console.log(chalk.green('✅ GitHub CLI is installed'));
|
|
66
|
+
gitManager.validateGitHubCliAuthentication();
|
|
67
|
+
console.log(chalk.green('✅ GitHub CLI is authenticated'));
|
|
68
|
+
const repoInfo = this.repositoryManager.getRepositoryInfo(workingDir);
|
|
69
|
+
console.log(chalk.blue(`📂 Working in: ${repoInfo.name}`));
|
|
17
70
|
console.log('');
|
|
71
|
+
const repository = await this.repositoryManager.getOrCreateRepository(workingDir);
|
|
72
|
+
const jobUuid = randomUUID();
|
|
73
|
+
const jobDescription = `PR Review - ${prNumbers.map((n) => `#${n}`).join(', ')} - ${new Date().toLocaleDateString()}`;
|
|
74
|
+
const db = this.dbManager.getKysely();
|
|
75
|
+
await db
|
|
76
|
+
.insertInto('jobs')
|
|
77
|
+
.values({
|
|
78
|
+
uuid: jobUuid,
|
|
79
|
+
description: jobDescription,
|
|
80
|
+
created_at: new Date().toISOString(),
|
|
81
|
+
directory: workingDir,
|
|
82
|
+
repository_id: repository.id
|
|
83
|
+
})
|
|
84
|
+
.execute();
|
|
85
|
+
console.log(chalk.blue.bold(`📝 Starting reviews for ${prNumbers.length} PR(s)...`));
|
|
86
|
+
console.log('');
|
|
87
|
+
for (const prNumber of prNumbers) {
|
|
88
|
+
await this.reviewPR(prNumber, jobUuid, repository.id, workingDir, gitManager, leaveComments);
|
|
89
|
+
}
|
|
90
|
+
console.log('');
|
|
91
|
+
console.log(chalk.green.bold('🎉 All reviews completed!'));
|
|
92
|
+
}
|
|
93
|
+
finally {
|
|
94
|
+
this.dbManager.close();
|
|
95
|
+
this.repositoryManager.close();
|
|
18
96
|
}
|
|
19
|
-
this.dbManager.close();
|
|
20
|
-
console.log(chalk.green.bold('✅ All reviews completed!'));
|
|
21
|
-
console.log(chalk.gray('Run "ivan web" to view reviews in the dashboard.'));
|
|
22
97
|
}
|
|
23
|
-
async reviewPR(prNumber, workingDir) {
|
|
24
|
-
|
|
25
|
-
const now = new Date().toISOString();
|
|
98
|
+
async reviewPR(prNumber, jobUuid, repositoryId, workingDir, gitManager, leaveComments) {
|
|
99
|
+
console.log(chalk.blue.bold(`🔍 Reviewing PR #${prNumber}...`));
|
|
26
100
|
const reviewUuid = randomUUID();
|
|
27
|
-
|
|
28
|
-
// Fetch PR metadata
|
|
29
|
-
let prUrl = null;
|
|
101
|
+
const db = this.dbManager.getKysely();
|
|
30
102
|
let prTitle = null;
|
|
31
|
-
let
|
|
32
|
-
|
|
33
|
-
const prJson = execSync(`gh pr view ${prNumber} --json number,title,url`, { cwd: workingDir, encoding: 'utf-8' });
|
|
34
|
-
const pr = JSON.parse(prJson);
|
|
35
|
-
prUrl = pr.url;
|
|
36
|
-
prTitle = pr.title;
|
|
37
|
-
console.log(chalk.gray(` Title: ${prTitle}`));
|
|
38
|
-
console.log(chalk.gray(` URL: ${prUrl}`));
|
|
39
|
-
}
|
|
40
|
-
catch (error) {
|
|
41
|
-
console.error(chalk.red(`❌ Failed to fetch PR #${prNumber} metadata:`), error);
|
|
42
|
-
}
|
|
43
|
-
// Look up repository_id from the DB
|
|
103
|
+
let prUrl = null;
|
|
104
|
+
let prBranch = null;
|
|
44
105
|
try {
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
repositoryId = repo.id;
|
|
106
|
+
const prJson = execSync(`gh pr view ${prNumber} --json number,title,url,state,headRefName`, { cwd: workingDir, encoding: 'utf-8' });
|
|
107
|
+
const prInfo = JSON.parse(prJson);
|
|
108
|
+
if (prInfo.state !== 'OPEN') {
|
|
109
|
+
console.log(chalk.yellow(`⚠️ PR #${prNumber} is not open (status: ${prInfo.state}), skipping`));
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
prTitle = prInfo.title;
|
|
113
|
+
prUrl = prInfo.url;
|
|
114
|
+
prBranch = prInfo.headRefName;
|
|
115
|
+
console.log(chalk.gray(` ${prTitle} (${prBranch})`));
|
|
56
116
|
}
|
|
57
|
-
catch {
|
|
58
|
-
|
|
117
|
+
catch (err) {
|
|
118
|
+
console.log(chalk.red(`❌ Could not fetch PR #${prNumber}: ${err}`));
|
|
119
|
+
return;
|
|
59
120
|
}
|
|
60
|
-
|
|
61
|
-
await db
|
|
62
|
-
.insertInto('reviews')
|
|
63
|
-
.values({
|
|
121
|
+
const review = {
|
|
64
122
|
uuid: reviewUuid,
|
|
123
|
+
job_uuid: jobUuid,
|
|
65
124
|
pr_number: prNumber,
|
|
66
125
|
pr_url: prUrl,
|
|
67
126
|
pr_title: prTitle,
|
|
127
|
+
status: 'not_started',
|
|
128
|
+
review_log: null,
|
|
129
|
+
review_output: null,
|
|
68
130
|
repository_id: repositoryId,
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
131
|
+
created_at: new Date().toISOString()
|
|
132
|
+
};
|
|
133
|
+
await db.insertInto('pr_reviews').values(review).execute();
|
|
134
|
+
await db
|
|
135
|
+
.updateTable('pr_reviews')
|
|
136
|
+
.set({ status: 'active' })
|
|
137
|
+
.where('uuid', '=', reviewUuid)
|
|
75
138
|
.execute();
|
|
76
|
-
//
|
|
77
|
-
let
|
|
78
|
-
let prFiles = '';
|
|
139
|
+
// Create a worktree for the PR branch so Claude can read the actual code
|
|
140
|
+
let worktreePath = null;
|
|
79
141
|
try {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
maxBuffer: 10 * 1024 * 1024
|
|
84
|
-
});
|
|
142
|
+
console.log(chalk.cyan(` Creating worktree for branch: ${prBranch}`));
|
|
143
|
+
worktreePath = await gitManager.createWorktree(prBranch ?? '');
|
|
144
|
+
gitManager.switchToWorktree(worktreePath);
|
|
85
145
|
}
|
|
86
|
-
catch (
|
|
87
|
-
console.
|
|
146
|
+
catch (err) {
|
|
147
|
+
console.log(chalk.red(`❌ Could not create worktree for PR #${prNumber}: ${err}`));
|
|
148
|
+
await db
|
|
149
|
+
.updateTable('pr_reviews')
|
|
150
|
+
.set({ status: 'failed', review_log: String(err) })
|
|
151
|
+
.where('uuid', '=', reviewUuid)
|
|
152
|
+
.execute();
|
|
153
|
+
return;
|
|
88
154
|
}
|
|
89
155
|
try {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
catch {
|
|
93
|
-
// Ignore
|
|
94
|
-
}
|
|
95
|
-
const prompt = `You are a senior software engineer performing a thorough code review of PR #${prNumber}.
|
|
156
|
+
const learningsSection = await this.buildLearningsSection(prNumber, prTitle, workingDir);
|
|
157
|
+
const reviewPrompt = `Please review PR #${prNumber}: "${prTitle}" (${prUrl}).
|
|
96
158
|
|
|
97
|
-
|
|
98
|
-
${prUrl ? `PR URL: ${prUrl}` : ''}
|
|
99
|
-
${prFiles ? `\nChanged files:\n${prFiles}` : ''}
|
|
159
|
+
You are currently checked out on the PR branch \`${prBranch}\`. Use your tools to read the code and understand what this PR changes. Start by running \`git log --oneline main..HEAD\` and \`git diff main...HEAD\` to see what changed, then read the relevant files to understand the full context.
|
|
100
160
|
|
|
101
|
-
|
|
161
|
+
Your review should help a human reviewer know exactly what to look at and what to watch out for. Structure it as follows:
|
|
102
162
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
5. Suggestions for improvement
|
|
109
|
-
6. Overall verdict: Approve / Request Changes / Comment
|
|
163
|
+
1. **What this PR does** — a concise summary of the intent and implementation approach
|
|
164
|
+
2. **Critical spots to check** — specific files and functions the reviewer should scrutinize closely, with a brief explanation of why each one carries risk
|
|
165
|
+
3. **Issues found** — concrete bugs, security concerns, performance problems, or correctness failures, each with file path, line range, a criticality level (trivial/low/medium/urgent/critical), and a suggested fix
|
|
166
|
+
4. **Convention notes** — anything that deviates from existing patterns in the codebase
|
|
167
|
+
5. **Overall assessment** — approve, request changes, or needs discussion
|
|
110
168
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
// Extract the review content from the last message or log
|
|
118
|
-
const reviewContent = this.extractReviewContent(lastMessage, log, prNumber);
|
|
169
|
+
Be specific. Reference exact file paths and line numbers. If the PR looks solid in a particular area, say so briefly.${learningsSection}`;
|
|
170
|
+
const result = await this.claudeExecutor.executeTurn(reviewPrompt, worktreePath, {
|
|
171
|
+
systemPrompt: REVIEW_SYSTEM_PROMPT,
|
|
172
|
+
readOnly: true,
|
|
173
|
+
permissionMode: 'plan'
|
|
174
|
+
});
|
|
119
175
|
await db
|
|
120
|
-
.updateTable('
|
|
176
|
+
.updateTable('pr_reviews')
|
|
121
177
|
.set({
|
|
122
178
|
status: 'completed',
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
updated_at: new Date().toISOString()
|
|
179
|
+
review_log: result.log,
|
|
180
|
+
review_output: result.lastMessage
|
|
126
181
|
})
|
|
127
182
|
.where('uuid', '=', reviewUuid)
|
|
128
183
|
.execute();
|
|
129
|
-
console.log(chalk.green(
|
|
184
|
+
console.log(chalk.green(`✅ Review completed for PR #${prNumber}`));
|
|
185
|
+
if (leaveComments && result.lastMessage) {
|
|
186
|
+
await this.postInlineComments(prNumber, result.lastMessage, workingDir);
|
|
187
|
+
}
|
|
130
188
|
}
|
|
131
|
-
catch (
|
|
132
|
-
|
|
189
|
+
catch (err) {
|
|
190
|
+
console.log(chalk.red(`❌ Review failed for PR #${prNumber}: ${err}`));
|
|
133
191
|
await db
|
|
134
|
-
.updateTable('
|
|
135
|
-
.set({
|
|
136
|
-
status: 'failed',
|
|
137
|
-
execution_log: errorMsg,
|
|
138
|
-
updated_at: new Date().toISOString()
|
|
139
|
-
})
|
|
192
|
+
.updateTable('pr_reviews')
|
|
193
|
+
.set({ status: 'failed', review_log: String(err) })
|
|
140
194
|
.where('uuid', '=', reviewUuid)
|
|
141
195
|
.execute();
|
|
142
|
-
|
|
196
|
+
}
|
|
197
|
+
finally {
|
|
198
|
+
// Always clean up the worktree
|
|
199
|
+
if (worktreePath) {
|
|
200
|
+
try {
|
|
201
|
+
gitManager.switchToOriginalDir();
|
|
202
|
+
await gitManager.removeWorktree(prBranch ?? '');
|
|
203
|
+
}
|
|
204
|
+
catch (err) {
|
|
205
|
+
console.log(chalk.yellow(`⚠️ Could not clean up worktree: ${err}`));
|
|
206
|
+
}
|
|
207
|
+
}
|
|
143
208
|
}
|
|
144
209
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
210
|
+
/**
|
|
211
|
+
* Queries the repo's learnings database (.ivan/db.sqlite) with the PR title and
|
|
212
|
+
* changed file paths, and formats the closest matches as a prompt section.
|
|
213
|
+
* Returns an empty string when there is no learnings store or nothing matches.
|
|
214
|
+
*/
|
|
215
|
+
async buildLearningsSection(prNumber, prTitle, workingDir) {
|
|
216
|
+
let queryText = prTitle ?? '';
|
|
217
|
+
try {
|
|
218
|
+
const filesJson = execSync(`gh pr view ${prNumber} --json files`, {
|
|
219
|
+
cwd: workingDir,
|
|
220
|
+
encoding: 'utf-8'
|
|
221
|
+
});
|
|
222
|
+
const files = JSON.parse(filesJson).files ?? [];
|
|
223
|
+
queryText = [queryText, ...files.slice(0, 50).map((f) => f.path)]
|
|
224
|
+
.filter(Boolean)
|
|
225
|
+
.join('\n');
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
// Changed-file lookup is best-effort; the title alone is still a usable query.
|
|
229
|
+
}
|
|
230
|
+
let learnings = [];
|
|
231
|
+
try {
|
|
232
|
+
learnings = await queryLearnings(workingDir, queryText, { limit: 10 });
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
// No learnings store, or it failed to open — reviews still work without it.
|
|
236
|
+
return '';
|
|
237
|
+
}
|
|
238
|
+
if (learnings.length === 0) {
|
|
239
|
+
return '';
|
|
240
|
+
}
|
|
241
|
+
console.log(chalk.cyan(` Including ${learnings.length} relevant learning(s) from past reviews`));
|
|
242
|
+
const formatted = learnings
|
|
243
|
+
.map((l) => {
|
|
244
|
+
const label = l.title || l.kind;
|
|
245
|
+
const parts = [`- [${label}] ${l.statement}`];
|
|
246
|
+
if (l.rationale)
|
|
247
|
+
parts.push(` Why: ${l.rationale}`);
|
|
248
|
+
if (l.applicability)
|
|
249
|
+
parts.push(` When: ${l.applicability}`);
|
|
250
|
+
if (l.source_url)
|
|
251
|
+
parts.push(` Source: ${l.source_url}`);
|
|
252
|
+
return parts.join('\n');
|
|
253
|
+
})
|
|
254
|
+
.join('\n');
|
|
255
|
+
return `
|
|
256
|
+
|
|
257
|
+
## Learnings from past reviews
|
|
258
|
+
|
|
259
|
+
The following learnings were distilled from this team's past code reviews and repository history. They are the most contextually relevant to this PR. Apply them while reviewing: check whether the changes violate any of them, and cite the learning when you flag an issue based on one.
|
|
260
|
+
|
|
261
|
+
${formatted}`;
|
|
262
|
+
}
|
|
263
|
+
async postInlineComments(prNumber, reviewOutput, workingDir) {
|
|
264
|
+
console.log(chalk.cyan(` Extracting inline comments for PR #${prNumber} via OpenAI...`));
|
|
265
|
+
let comments;
|
|
266
|
+
try {
|
|
267
|
+
comments = await this.openAIService.extractPrComments(reviewOutput, prNumber);
|
|
268
|
+
}
|
|
269
|
+
catch (err) {
|
|
270
|
+
console.log(chalk.yellow(`⚠️ Could not extract inline comments: ${err}`));
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
if (comments.length === 0) {
|
|
274
|
+
console.log(chalk.gray(` No inline comments to post for PR #${prNumber}`));
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
// GitHub's pull review comment API requires the head commit SHA
|
|
278
|
+
let commitId;
|
|
279
|
+
try {
|
|
280
|
+
const prJson = execSync(`gh pr view ${prNumber} --json headRefOid`, {
|
|
281
|
+
cwd: workingDir,
|
|
282
|
+
encoding: 'utf-8'
|
|
283
|
+
});
|
|
284
|
+
commitId = JSON.parse(prJson).headRefOid;
|
|
285
|
+
if (!commitId)
|
|
286
|
+
throw new Error('headRefOid was empty');
|
|
287
|
+
}
|
|
288
|
+
catch (err) {
|
|
289
|
+
console.log(chalk.yellow(`⚠️ Could not fetch PR head SHA, aborting inline comments: ${err}`));
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
console.log(chalk.cyan(` Posting ${comments.length} inline comment(s) on PR #${prNumber}...`));
|
|
293
|
+
const CRITICALITY_EMOJI = {
|
|
294
|
+
trivial: '🔵',
|
|
295
|
+
low: '🟢',
|
|
296
|
+
medium: '🟡',
|
|
297
|
+
urgent: '🟠',
|
|
298
|
+
critical: '🔴'
|
|
299
|
+
};
|
|
300
|
+
let posted = 0;
|
|
301
|
+
let failed = 0;
|
|
302
|
+
for (const comment of comments) {
|
|
303
|
+
const emoji = CRITICALITY_EMOJI[comment.criticality] ?? '⚪';
|
|
304
|
+
const header = `${emoji} **${comment.criticality.charAt(0).toUpperCase() + comment.criticality.slice(1)}**`;
|
|
305
|
+
const fullBody = `${header}\n\n${comment.body}`;
|
|
306
|
+
const tmpFile = join(tmpdir(), `ivan-comment-${randomUUID()}.txt`);
|
|
307
|
+
try {
|
|
308
|
+
writeFileSync(tmpFile, fullBody, 'utf-8');
|
|
309
|
+
try {
|
|
310
|
+
execSync(`gh api repos/:owner/:repo/pulls/${prNumber}/comments --method POST` +
|
|
311
|
+
` -f commit_id=${commitId}` +
|
|
312
|
+
` -f path=${comment.path}` +
|
|
313
|
+
` -F line=${comment.line}` +
|
|
314
|
+
` -f side=RIGHT` +
|
|
315
|
+
` -F body=@"${tmpFile}"`, { cwd: workingDir, encoding: 'utf-8', stdio: 'pipe' });
|
|
316
|
+
posted++;
|
|
317
|
+
}
|
|
318
|
+
catch (err) {
|
|
319
|
+
console.log(chalk.yellow(` ⚠️ Could not post inline comment for ${comment.path}:${comment.line}: ${err}`));
|
|
320
|
+
failed++;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
finally {
|
|
324
|
+
try {
|
|
325
|
+
unlinkSync(tmpFile);
|
|
326
|
+
}
|
|
327
|
+
catch {
|
|
328
|
+
/* ignore */
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
console.log(chalk.green(` ✅ Posted ${posted} comment(s)${failed > 0 ? `, ${failed} failed` : ''} on PR #${prNumber}`));
|
|
157
333
|
}
|
|
158
334
|
}
|
|
159
335
|
//# sourceMappingURL=review-executor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-executor.js","sourceRoot":"","sources":["../../src/services/review-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,OAAO,cAAc;IACjB,SAAS,CAAkB;IAEnC;QACE,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,SAAmB;QACtC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAEjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,SAAS,CAAC,MAAM,WAAW,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC,CAAC;IAC9E,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,UAAkB;QACzD,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC;QAEhC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,QAAQ,KAAK,CAAC,CAAC,CAAC;QAE3D,oBAAoB;QACpB,IAAI,KAAK,GAAkB,IAAI,CAAC;QAChC,IAAI,OAAO,GAAkB,IAAI,CAAC;QAClC,IAAI,YAAY,GAAkB,IAAI,CAAC;QAEvC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CACrB,cAAc,QAAQ,0BAA0B,EAChD,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,CACvC,CAAC;YACF,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC9B,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC;YACf,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,QAAQ,YAAY,CAAC,EAAE,KAAK,CAAC,CAAC;QACjF,CAAC;QAED,oCAAoC;QACpC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,QAAQ,CAAC,oCAAoC,EAAE;gBAC/D,GAAG,EAAE,UAAU;gBACf,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,GAAG,MAAM,EAAE;iBAClB,UAAU,CAAC,cAAc,CAAC;iBAC1B,MAAM,CAAC,IAAI,CAAC;iBACZ,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,SAAS,CAAC;iBACnC,gBAAgB,EAAE,CAAC;YACtB,IAAI,IAAI;gBAAE,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,4CAA4C;QAC9C,CAAC;QAED,wCAAwC;QACxC,MAAM,EAAE;aACL,UAAU,CAAC,SAAS,CAAC;aACrB,MAAM,CAAC;YACN,IAAI,EAAE,UAAU;YAChB,SAAS,EAAE,QAAQ;YACnB,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,OAAO;YACjB,aAAa,EAAE,YAAY;YAC3B,MAAM,EAAE,SAAS;YACjB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;YACnB,UAAU,EAAE,GAAG;YACf,UAAU,EAAE,GAAG;SAChB,CAAC;aACD,OAAO,EAAE,CAAC;QAEb,4CAA4C;QAC5C,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,GAAG,QAAQ,CAAC,cAAc,QAAQ,EAAE,EAAE;gBAC1C,GAAG,EAAE,UAAU;gBACf,QAAQ,EAAE,OAAO;gBACjB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;aAC5B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,sCAAsC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC/E,CAAC;QAED,IAAI,CAAC;YACH,OAAO,GAAG,QAAQ,CAChB,cAAc,QAAQ,oCAAoC,EAC1D,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,CACvC,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,+EAA+E,QAAQ;;EAExG,OAAO,CAAC,CAAC,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;EACrC,KAAK,CAAC,CAAC,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;EAC/B,OAAO,CAAC,CAAC,CAAC,qBAAqB,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;;EAE7C,MAAM,CAAC,CAAC,CAAC,wBAAwB,MAAM,UAAU,CAAC,CAAC,CAAC,oDAAoD;;;;;;;;;;;mHAWS,QAAQ,GAAG,CAAC;QAE3H,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;YAC/C,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC;YAE3B,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAE5E,0DAA0D;YAC1D,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;YAE5E,MAAM,EAAE;iBACL,WAAW,CAAC,SAAS,CAAC;iBACtB,GAAG,CAAC;gBACH,MAAM,EAAE,WAAW;gBACnB,cAAc,EAAE,aAAa;gBAC7B,aAAa,EAAE,GAAG;gBAClB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACrC,CAAC;iBACD,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC;iBAC9B,OAAO,EAAE,CAAC;YAEb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,QAAQ,aAAa,CAAC,CAAC,CAAC;QACxE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxE,MAAM,EAAE;iBACL,WAAW,CAAC,SAAS,CAAC;iBACtB,GAAG,CAAC;gBACH,MAAM,EAAE,QAAQ;gBAChB,aAAa,EAAE,QAAQ;gBACvB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACrC,CAAC;iBACD,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC;iBAC9B,OAAO,EAAE,CAAC;YAEb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,QAAQ,YAAY,QAAQ,EAAE,CAAC,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAEO,oBAAoB,CAAC,WAAmB,EAAE,GAAW,EAAE,QAAgB;QAC7E,MAAM,MAAM,GAAG,uBAAuB,QAAQ,EAAE,CAAC;QAEjD,8DAA8D;QAC9D,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,MAAM,KAAK,CAAC,CAAC;YAAE,OAAO,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEpD,0CAA0C;QAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAE1C,iEAAiE;QACjE,OAAO,WAAW,IAAI,GAAG,CAAC;IAC5B,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"review-executor.js","sourceRoot":"","sources":["../../src/services/review-executor.ts"],"names":[],"mappings":"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"}
|
package/dist/web-server.d.ts
CHANGED
package/dist/web-server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-server.d.ts","sourceRoot":"","sources":["../src/web-server.ts"],"names":[],"mappings":"AAIA,qBAAa,SAAS;IACpB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,IAAI,CAAS;gBAET,IAAI,GAAE,MAAa;IAQ/B,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,WAAW;
|
|
1
|
+
{"version":3,"file":"web-server.d.ts","sourceRoot":"","sources":["../src/web-server.ts"],"names":[],"mappings":"AAIA,qBAAa,SAAS;IACpB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,IAAI,CAAS;gBAET,IAAI,GAAE,MAAa;IAQ/B,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,WAAW;YAYL,OAAO;YAmBP,WAAW;YAgCX,aAAa;IAgC3B,OAAO,CAAC,WAAW;IAijBZ,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBf,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAIpC"}
|