@ariso-ai/ivan 1.0.4 → 1.0.6
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/README.md +7 -21
- package/dist/config.d.ts +14 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +245 -4
- package/dist/config.js.map +1 -1
- package/dist/database/migrations/009_create_memory_tables.d.ts +3 -0
- package/dist/database/migrations/009_create_memory_tables.d.ts.map +1 -0
- package/dist/database/migrations/009_create_memory_tables.js +35 -0
- package/dist/database/migrations/009_create_memory_tables.js.map +1 -0
- package/dist/database/migrations/{006_add_comment_url_and_commit_to_tasks.d.ts → 009_create_repository_table.d.ts} +1 -1
- package/dist/database/migrations/009_create_repository_table.d.ts.map +1 -0
- package/dist/database/migrations/009_create_repository_table.js +15 -0
- package/dist/database/migrations/009_create_repository_table.js.map +1 -0
- package/dist/database/migrations/010_add_repository_id_to_jobs_and_tasks.d.ts +3 -0
- package/dist/database/migrations/010_add_repository_id_to_jobs_and_tasks.d.ts.map +1 -0
- package/dist/database/migrations/010_add_repository_id_to_jobs_and_tasks.js +13 -0
- package/dist/database/migrations/010_add_repository_id_to_jobs_and_tasks.js.map +1 -0
- package/dist/database/migrations/011_create_learnings_table.d.ts +3 -0
- package/dist/database/migrations/011_create_learnings_table.d.ts.map +1 -0
- package/dist/database/migrations/011_create_learnings_table.js +16 -0
- package/dist/database/migrations/011_create_learnings_table.js.map +1 -0
- package/dist/database/migrations/012_create_learning_embeddings_table.d.ts +3 -0
- package/dist/database/migrations/012_create_learning_embeddings_table.d.ts.map +1 -0
- package/dist/database/migrations/012_create_learning_embeddings_table.js +13 -0
- package/dist/database/migrations/012_create_learning_embeddings_table.js.map +1 -0
- package/dist/database/migrations/index.d.ts.map +1 -1
- package/dist/database/migrations/index.js +5 -1
- package/dist/database/migrations/index.js.map +1 -1
- package/dist/database/types.d.ts +11 -0
- package/dist/database/types.d.ts.map +1 -1
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/dist/services/address-executor.d.ts.map +1 -1
- package/dist/services/address-executor.js +8 -21
- package/dist/services/address-executor.js.map +1 -1
- package/dist/services/address-task-executor.d.ts.map +1 -1
- package/dist/services/address-task-executor.js +10 -9
- package/dist/services/address-task-executor.js.map +1 -1
- package/dist/services/embedding-service.d.ts +12 -0
- package/dist/services/embedding-service.d.ts.map +1 -0
- package/dist/services/embedding-service.js +51 -0
- package/dist/services/embedding-service.js.map +1 -0
- package/dist/services/git-interfaces.d.ts +67 -0
- package/dist/services/git-interfaces.d.ts.map +1 -0
- package/dist/services/git-interfaces.js +2 -0
- package/dist/services/git-interfaces.js.map +1 -0
- package/dist/services/git-manager-cli.d.ts +33 -0
- package/dist/services/git-manager-cli.d.ts.map +1 -0
- package/dist/services/git-manager-cli.js +734 -0
- package/dist/services/git-manager-cli.js.map +1 -0
- package/dist/services/git-manager-pat.d.ts +36 -0
- package/dist/services/git-manager-pat.d.ts.map +1 -0
- package/dist/services/git-manager-pat.js +667 -0
- package/dist/services/git-manager-pat.js.map +1 -0
- package/dist/services/git-manager.d.ts +1 -0
- package/dist/services/git-manager.d.ts.map +1 -1
- package/dist/services/git-manager.js +10 -4
- package/dist/services/git-manager.js.map +1 -1
- package/dist/services/github-api-client.d.ts +115 -0
- package/dist/services/github-api-client.d.ts.map +1 -0
- package/dist/services/github-api-client.js +256 -0
- package/dist/services/github-api-client.js.map +1 -0
- package/dist/services/index.d.ts +9 -2
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +12 -2
- package/dist/services/index.js.map +1 -1
- package/dist/services/job-manager.d.ts +3 -4
- package/dist/services/job-manager.d.ts.map +1 -1
- package/dist/services/job-manager.js +14 -19
- package/dist/services/job-manager.js.map +1 -1
- package/dist/services/learn-executor.d.ts +13 -0
- package/dist/services/learn-executor.d.ts.map +1 -0
- package/dist/services/learn-executor.js +293 -0
- package/dist/services/learn-executor.js.map +1 -0
- package/dist/services/learning-service.d.ts +30 -0
- package/dist/services/learning-service.d.ts.map +1 -0
- package/dist/services/learning-service.js +88 -0
- package/dist/services/learning-service.js.map +1 -0
- package/dist/services/memory-service.d.ts +26 -0
- package/dist/services/memory-service.d.ts.map +1 -0
- package/dist/services/memory-service.js +128 -0
- package/dist/services/memory-service.js.map +1 -0
- package/dist/services/pr-service-cli.d.ts +12 -0
- package/dist/services/pr-service-cli.d.ts.map +1 -0
- package/dist/services/pr-service-cli.js +291 -0
- package/dist/services/pr-service-cli.js.map +1 -0
- package/dist/services/pr-service-pat.d.ts +15 -0
- package/dist/services/pr-service-pat.d.ts.map +1 -0
- package/dist/services/pr-service-pat.js +255 -0
- package/dist/services/pr-service-pat.js.map +1 -0
- package/dist/services/repository-manager-cli.d.ts +17 -0
- package/dist/services/repository-manager-cli.d.ts.map +1 -0
- package/dist/services/repository-manager-cli.js +148 -0
- package/dist/services/repository-manager-cli.js.map +1 -0
- package/dist/services/repository-manager-pat.d.ts +17 -0
- package/dist/services/repository-manager-pat.d.ts.map +1 -0
- package/dist/services/repository-manager-pat.js +148 -0
- package/dist/services/repository-manager-pat.js.map +1 -0
- package/dist/services/repository-manager.d.ts +7 -0
- package/dist/services/repository-manager.d.ts.map +1 -1
- package/dist/services/repository-manager.js +47 -0
- package/dist/services/repository-manager.js.map +1 -1
- package/dist/services/service-factory.d.ts +27 -0
- package/dist/services/service-factory.d.ts.map +1 -0
- package/dist/services/service-factory.js +79 -0
- package/dist/services/service-factory.js.map +1 -0
- package/dist/services/task-executor.d.ts.map +1 -1
- package/dist/services/task-executor.js +42 -75
- package/dist/services/task-executor.js.map +1 -1
- package/package.json +2 -2
- package/dist/agent.d.ts +0 -11
- package/dist/agent.d.ts.map +0 -1
- package/dist/agent.js +0 -48
- package/dist/agent.js.map +0 -1
- package/dist/config/config.d.ts +0 -20
- package/dist/config/config.d.ts.map +0 -1
- package/dist/config/config.js +0 -187
- package/dist/config/config.js.map +0 -1
- package/dist/database/database.d.ts +0 -12
- package/dist/database/database.d.ts.map +0 -1
- package/dist/database/database.js +0 -45
- package/dist/database/database.js.map +0 -1
- package/dist/database/migrations/001_initial_schema.d.ts +0 -3
- package/dist/database/migrations/001_initial_schema.d.ts.map +0 -1
- package/dist/database/migrations/001_initial_schema.js +0 -66
- package/dist/database/migrations/001_initial_schema.js.map +0 -1
- package/dist/database/migrations/006_add_comment_url_and_commit_to_tasks.d.ts.map +0 -1
- package/dist/database/migrations/006_add_comment_url_and_commit_to_tasks.js +0 -15
- package/dist/database/migrations/006_add_comment_url_and_commit_to_tasks.js.map +0 -1
- package/dist/scripts/task-executor.d.ts +0 -3
- package/dist/scripts/task-executor.d.ts.map +0 -1
- package/dist/scripts/task-executor.js +0 -139
- package/dist/scripts/task-executor.js.map +0 -1
- package/dist/scripts/task-planner.d.ts +0 -3
- package/dist/scripts/task-planner.d.ts.map +0 -1
- package/dist/scripts/task-planner.js +0 -81
- package/dist/scripts/task-planner.js.map +0 -1
- package/dist/services/claude-planner.d.ts +0 -15
- package/dist/services/claude-planner.d.ts.map +0 -1
- package/dist/services/claude-planner.js +0 -107
- package/dist/services/claude-planner.js.map +0 -1
- package/dist/services/docker-orchestrator.d.ts +0 -11
- package/dist/services/docker-orchestrator.d.ts.map +0 -1
- package/dist/services/docker-orchestrator.js +0 -85
- package/dist/services/docker-orchestrator.js.map +0 -1
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { OpenAIService } from './openai-service.js';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
export class LearningService {
|
|
4
|
+
dbManager;
|
|
5
|
+
openaiService;
|
|
6
|
+
constructor(dbManager) {
|
|
7
|
+
this.dbManager = dbManager;
|
|
8
|
+
this.openaiService = new OpenAIService();
|
|
9
|
+
}
|
|
10
|
+
async saveLearning(learning) {
|
|
11
|
+
console.log(chalk.blue('💾 Saving learning to database...'));
|
|
12
|
+
const db = this.dbManager.getKysely();
|
|
13
|
+
// Insert the learning
|
|
14
|
+
const result = await db
|
|
15
|
+
.insertInto('learnings')
|
|
16
|
+
.values({
|
|
17
|
+
repository_id: learning.repositoryId,
|
|
18
|
+
text: `Q: ${learning.question}\n\nA: ${learning.answer}`,
|
|
19
|
+
files: JSON.stringify(learning.files)
|
|
20
|
+
})
|
|
21
|
+
.executeTakeFirst();
|
|
22
|
+
if (result.insertId === undefined) {
|
|
23
|
+
throw new Error('Failed to insert learning: no insertId returned');
|
|
24
|
+
}
|
|
25
|
+
const learningId = Number(result.insertId);
|
|
26
|
+
console.log(chalk.green(`✅ Learning saved with ID: ${learningId}`));
|
|
27
|
+
// Generate and store embeddings
|
|
28
|
+
await this.generateAndStoreEmbedding(learningId, learning.question, learning.answer);
|
|
29
|
+
return learningId;
|
|
30
|
+
}
|
|
31
|
+
async generateAndStoreEmbedding(learningId, question, answer) {
|
|
32
|
+
console.log(chalk.blue('🔮 Generating embeddings...'));
|
|
33
|
+
try {
|
|
34
|
+
const openai = await this.openaiService.getClient();
|
|
35
|
+
// Combine question and answer for embedding
|
|
36
|
+
const textToEmbed = `${question}\n\n${answer}`;
|
|
37
|
+
const embeddingResponse = await openai.embeddings.create({
|
|
38
|
+
model: 'text-embedding-3-large',
|
|
39
|
+
input: textToEmbed,
|
|
40
|
+
dimensions: 3072
|
|
41
|
+
});
|
|
42
|
+
const embedding = embeddingResponse.data[0].embedding;
|
|
43
|
+
console.log(chalk.blue('💾 Storing embeddings...'));
|
|
44
|
+
// Convert to Float32Array for sqlite-vec
|
|
45
|
+
const embeddingArray = new Float32Array(embedding);
|
|
46
|
+
// Use DatabaseManager's vector insert method
|
|
47
|
+
this.dbManager.executeVectorInsert(embeddingArray.buffer, learningId, textToEmbed);
|
|
48
|
+
console.log(chalk.green('✅ Embeddings stored successfully'));
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
console.error(chalk.red('❌ Failed to generate or store embeddings:'), error);
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async getRepositoryLearnings(repositoryId) {
|
|
56
|
+
const db = this.dbManager.getKysely();
|
|
57
|
+
const learnings = await db
|
|
58
|
+
.selectFrom('learnings')
|
|
59
|
+
.selectAll()
|
|
60
|
+
.where('repository_id', '=', repositoryId)
|
|
61
|
+
.orderBy('created_at', 'desc')
|
|
62
|
+
.execute();
|
|
63
|
+
return learnings;
|
|
64
|
+
}
|
|
65
|
+
async searchSimilarLearnings(repositoryId, queryText, limit = 5) {
|
|
66
|
+
console.log(chalk.blue('🔍 Searching for similar learnings...'));
|
|
67
|
+
try {
|
|
68
|
+
const openai = await this.openaiService.getClient();
|
|
69
|
+
// Generate embedding for the query
|
|
70
|
+
const embeddingResponse = await openai.embeddings.create({
|
|
71
|
+
model: 'text-embedding-3-large',
|
|
72
|
+
input: queryText,
|
|
73
|
+
dimensions: 3072
|
|
74
|
+
});
|
|
75
|
+
const queryEmbedding = embeddingResponse.data[0].embedding;
|
|
76
|
+
const embeddingArray = new Float32Array(queryEmbedding);
|
|
77
|
+
// Use DatabaseManager's vector search method
|
|
78
|
+
const results = this.dbManager.executeVectorSearch(embeddingArray.buffer, repositoryId, limit);
|
|
79
|
+
console.log(chalk.green(`✅ Found ${results.length} similar learnings`));
|
|
80
|
+
return results;
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
console.error(chalk.red('❌ Failed to search similar learnings:'), error);
|
|
84
|
+
throw error;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=learning-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learning-service.js","sourceRoot":"","sources":["../../src/services/learning-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface CaptureMemoryParams {
|
|
2
|
+
prNumber: number;
|
|
3
|
+
commentAuthor: string;
|
|
4
|
+
commentText: string;
|
|
5
|
+
filePath: string | null;
|
|
6
|
+
prDescription: string;
|
|
7
|
+
repository: string;
|
|
8
|
+
}
|
|
9
|
+
export interface MemoryWithContext {
|
|
10
|
+
id: string;
|
|
11
|
+
commentText: string;
|
|
12
|
+
filePath: string | null;
|
|
13
|
+
prDescription: string;
|
|
14
|
+
commentAuthor: string;
|
|
15
|
+
relevantChunk: string;
|
|
16
|
+
distance: number;
|
|
17
|
+
}
|
|
18
|
+
export declare class MemoryService {
|
|
19
|
+
private dbManager;
|
|
20
|
+
private embeddingService;
|
|
21
|
+
constructor();
|
|
22
|
+
captureMemory(params: CaptureMemoryParams): Promise<string>;
|
|
23
|
+
retrieveSimilarMemories(query: string, repository: string, limit?: number): Promise<MemoryWithContext[]>;
|
|
24
|
+
private condensePRDescription;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=memory-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-service.d.ts","sourceRoot":"","sources":["../../src/services/memory-service.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,gBAAgB,CAAmB;;IAOrC,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;IAiD3D,uBAAuB,CAC3B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE,MAAU,GAChB,OAAO,CAAC,iBAAiB,EAAE,CAAC;YAyCjB,qBAAqB;CAkCpC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { randomUUID } from 'crypto';
|
|
2
|
+
import { sql } from 'kysely';
|
|
3
|
+
import { DatabaseManager } from '../database.js';
|
|
4
|
+
import { EmbeddingService } from './embedding-service.js';
|
|
5
|
+
import { OpenAIService } from './openai-service.js';
|
|
6
|
+
export class MemoryService {
|
|
7
|
+
dbManager;
|
|
8
|
+
embeddingService;
|
|
9
|
+
constructor() {
|
|
10
|
+
this.dbManager = new DatabaseManager();
|
|
11
|
+
this.embeddingService = new EmbeddingService();
|
|
12
|
+
}
|
|
13
|
+
async captureMemory(params) {
|
|
14
|
+
try {
|
|
15
|
+
// 1. Condense PR description if needed
|
|
16
|
+
const condensed = await this.condensePRDescription(params.prDescription);
|
|
17
|
+
// 2. Create memory item
|
|
18
|
+
const memoryId = randomUUID();
|
|
19
|
+
const db = this.dbManager.getKysely();
|
|
20
|
+
await db
|
|
21
|
+
.insertInto('memory_items')
|
|
22
|
+
.values({
|
|
23
|
+
id: memoryId,
|
|
24
|
+
pr_number: params.prNumber,
|
|
25
|
+
comment_author: params.commentAuthor,
|
|
26
|
+
comment_text: params.commentText,
|
|
27
|
+
file_path: params.filePath,
|
|
28
|
+
pr_description: condensed,
|
|
29
|
+
resolution_summary: null,
|
|
30
|
+
repository: params.repository,
|
|
31
|
+
created_at: new Date().toISOString()
|
|
32
|
+
})
|
|
33
|
+
.execute();
|
|
34
|
+
// 3. Chunk and embed combined text
|
|
35
|
+
const combinedText = `${condensed}\n\nComment: ${params.commentText}`;
|
|
36
|
+
const chunks = await this.embeddingService.chunkAndEmbed(combinedText);
|
|
37
|
+
// 4. Store embeddings
|
|
38
|
+
for (let i = 0; i < chunks.length; i++) {
|
|
39
|
+
await db
|
|
40
|
+
.insertInto('memory_embeddings')
|
|
41
|
+
.values({
|
|
42
|
+
id: randomUUID(),
|
|
43
|
+
memory_item_id: memoryId,
|
|
44
|
+
chunk_text: chunks[i].text,
|
|
45
|
+
chunk_index: i,
|
|
46
|
+
embedding: JSON.stringify(chunks[i].embedding)
|
|
47
|
+
})
|
|
48
|
+
.execute();
|
|
49
|
+
}
|
|
50
|
+
return memoryId;
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
console.error('Error capturing memory:', error);
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async retrieveSimilarMemories(query, repository, limit = 3) {
|
|
58
|
+
try {
|
|
59
|
+
// Generate query embedding
|
|
60
|
+
const queryEmbedding = await this.embeddingService.generateEmbedding(query);
|
|
61
|
+
// Search using cosine similarity
|
|
62
|
+
const db = this.dbManager.getKysely();
|
|
63
|
+
const results = await db
|
|
64
|
+
.selectFrom('memory_embeddings as me')
|
|
65
|
+
.innerJoin('memory_items as mi', 'mi.id', 'me.memory_item_id')
|
|
66
|
+
.select([
|
|
67
|
+
'mi.id',
|
|
68
|
+
'mi.comment_text',
|
|
69
|
+
'mi.file_path',
|
|
70
|
+
'mi.pr_description',
|
|
71
|
+
'mi.comment_author',
|
|
72
|
+
'me.chunk_text',
|
|
73
|
+
sql `vec_distance_cosine(me.embedding, ${JSON.stringify(queryEmbedding)})`.as('distance')
|
|
74
|
+
])
|
|
75
|
+
.where('mi.repository', '=', repository)
|
|
76
|
+
.orderBy('distance', 'asc')
|
|
77
|
+
.limit(limit)
|
|
78
|
+
.execute();
|
|
79
|
+
return results.map(r => ({
|
|
80
|
+
id: r.id,
|
|
81
|
+
commentText: r.comment_text,
|
|
82
|
+
filePath: r.file_path,
|
|
83
|
+
prDescription: r.pr_description,
|
|
84
|
+
commentAuthor: r.comment_author,
|
|
85
|
+
relevantChunk: r.chunk_text,
|
|
86
|
+
distance: r.distance
|
|
87
|
+
}));
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
console.error('Error retrieving similar memories:', error);
|
|
91
|
+
// Return empty array on error - memory failures should not block execution
|
|
92
|
+
return [];
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async condensePRDescription(desc) {
|
|
96
|
+
// If description is short enough, return as-is
|
|
97
|
+
if (desc.length <= 500) {
|
|
98
|
+
return desc;
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
const openaiService = new OpenAIService();
|
|
102
|
+
const client = await openaiService.getClient();
|
|
103
|
+
const completion = await client.chat.completions.create({
|
|
104
|
+
model: 'gpt-4o-mini',
|
|
105
|
+
messages: [
|
|
106
|
+
{
|
|
107
|
+
role: 'system',
|
|
108
|
+
content: 'Condense this PR description to 2-3 clear sentences that capture the main purpose and changes.'
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
role: 'user',
|
|
112
|
+
content: desc
|
|
113
|
+
}
|
|
114
|
+
],
|
|
115
|
+
temperature: 0.3,
|
|
116
|
+
max_tokens: 150
|
|
117
|
+
});
|
|
118
|
+
const condensed = completion.choices[0]?.message?.content?.trim();
|
|
119
|
+
return condensed || desc;
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
console.error('Failed to condense PR description, using original:', error);
|
|
123
|
+
// If condensing fails, just truncate to 500 chars
|
|
124
|
+
return desc.substring(0, 500) + '...';
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=memory-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-service.js","sourceRoot":"","sources":["../../src/services/memory-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAqBpD,MAAM,OAAO,aAAa;IAChB,SAAS,CAAkB;IAC3B,gBAAgB,CAAmB;IAE3C;QACE,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,EAAE,CAAC;QACvC,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,MAA2B;QAC7C,IAAI,CAAC;YACH,uCAAuC;YACvC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAEzE,wBAAwB;YACxB,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;YAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;YAEtC,MAAM,EAAE;iBACL,UAAU,CAAC,cAAc,CAAC;iBAC1B,MAAM,CAAC;gBACN,EAAE,EAAE,QAAQ;gBACZ,SAAS,EAAE,MAAM,CAAC,QAAQ;gBAC1B,cAAc,EAAE,MAAM,CAAC,aAAa;gBACpC,YAAY,EAAE,MAAM,CAAC,WAAW;gBAChC,SAAS,EAAE,MAAM,CAAC,QAAQ;gBAC1B,cAAc,EAAE,SAAS;gBACzB,kBAAkB,EAAE,IAAI;gBACxB,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACrC,CAAC;iBACD,OAAO,EAAE,CAAC;YAEb,mCAAmC;YACnC,MAAM,YAAY,GAAG,GAAG,SAAS,gBAAgB,MAAM,CAAC,WAAW,EAAE,CAAC;YACtE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YAEvE,sBAAsB;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,MAAM,EAAE;qBACL,UAAU,CAAC,mBAAmB,CAAC;qBAC/B,MAAM,CAAC;oBACN,EAAE,EAAE,UAAU,EAAE;oBAChB,cAAc,EAAE,QAAQ;oBACxB,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;oBAC1B,WAAW,EAAE,CAAC;oBACd,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;iBAC/C,CAAC;qBACD,OAAO,EAAE,CAAC;YACf,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAChD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,uBAAuB,CAC3B,KAAa,EACb,UAAkB,EAClB,QAAgB,CAAC;QAEjB,IAAI,CAAC;YACH,2BAA2B;YAC3B,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAE5E,iCAAiC;YACjC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;YAEtC,MAAM,OAAO,GAAG,MAAM,EAAE;iBACrB,UAAU,CAAC,yBAAyB,CAAC;iBACrC,SAAS,CAAC,oBAAoB,EAAE,OAAO,EAAE,mBAAmB,CAAC;iBAC7D,MAAM,CAAC;gBACN,OAAO;gBACP,iBAAiB;gBACjB,cAAc;gBACd,mBAAmB;gBACnB,mBAAmB;gBACnB,eAAe;gBACf,GAAG,CAAQ,qCAAqC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC;aACjG,CAAC;iBACD,KAAK,CAAC,eAAe,EAAE,GAAG,EAAE,UAAU,CAAC;iBACvC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;iBAC1B,KAAK,CAAC,KAAK,CAAC;iBACZ,OAAO,EAAE,CAAC;YAEb,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACvB,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,WAAW,EAAE,CAAC,CAAC,YAAY;gBAC3B,QAAQ,EAAE,CAAC,CAAC,SAAS;gBACrB,aAAa,EAAE,CAAC,CAAC,cAAc;gBAC/B,aAAa,EAAE,CAAC,CAAC,cAAc;gBAC/B,aAAa,EAAE,CAAC,CAAC,UAAU;gBAC3B,QAAQ,EAAE,CAAC,CAAC,QAAQ;aACrB,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;YAC3D,2EAA2E;YAC3E,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,qBAAqB,CAAC,IAAY;QAC9C,+CAA+C;QAC/C,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,CAAC;YAE/C,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACtD,KAAK,EAAE,aAAa;gBACpB,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,gGAAgG;qBAC1G;oBACD;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,IAAI;qBACd;iBACF;gBACD,WAAW,EAAE,GAAG;gBAChB,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;YAEH,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAClE,OAAO,SAAS,IAAI,IAAI,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,oDAAoD,EAAE,KAAK,CAAC,CAAC;YAC3E,kDAAkD;YAClD,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;QACxC,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { IPRService, PullRequest, PRComment } from './git-interfaces.js';
|
|
2
|
+
export declare class PRServiceCLI implements IPRService {
|
|
3
|
+
private workingDir;
|
|
4
|
+
constructor(workingDir: string);
|
|
5
|
+
getSpecificPRWithIssues(prNumber: number): Promise<PullRequest[]>;
|
|
6
|
+
getOpenPRsWithIssues(fromUser?: string): Promise<PullRequest[]>;
|
|
7
|
+
getUnaddressedComments(prNumber: number): Promise<PRComment[]>;
|
|
8
|
+
private getFailingChecks;
|
|
9
|
+
checkoutPRBranch(prNumber: number): Promise<void>;
|
|
10
|
+
getFailingActionLogs(prNumber: number): Promise<string>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=pr-service-cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr-service-cli.d.ts","sourceRoot":"","sources":["../../src/services/pr-service-cli.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEzE,qBAAa,YAAa,YAAW,UAAU;IAC7C,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,EAAE,MAAM;IAIxB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAgEjE,oBAAoB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA6D/D,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;YA0FtD,gBAAgB;IAkDxB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjD,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAwD9D"}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
export class PRServiceCLI {
|
|
4
|
+
workingDir;
|
|
5
|
+
constructor(workingDir) {
|
|
6
|
+
this.workingDir = workingDir;
|
|
7
|
+
}
|
|
8
|
+
async getSpecificPRWithIssues(prNumber) {
|
|
9
|
+
try {
|
|
10
|
+
// Get specific PR
|
|
11
|
+
const prJson = execSync(`gh pr view ${prNumber} --json number,title,headRefName,url,state`, {
|
|
12
|
+
cwd: this.workingDir,
|
|
13
|
+
encoding: 'utf-8'
|
|
14
|
+
});
|
|
15
|
+
const pr = JSON.parse(prJson);
|
|
16
|
+
// Check if PR is open
|
|
17
|
+
if (pr.state !== 'OPEN') {
|
|
18
|
+
console.log(chalk.yellow(`⚠️ PR #${prNumber} is not open (status: ${pr.state})`));
|
|
19
|
+
return [];
|
|
20
|
+
}
|
|
21
|
+
const pullRequest = {
|
|
22
|
+
number: pr.number,
|
|
23
|
+
title: pr.title,
|
|
24
|
+
branch: pr.headRefName,
|
|
25
|
+
url: pr.url,
|
|
26
|
+
hasUnaddressedComments: false,
|
|
27
|
+
hasFailingChecks: false,
|
|
28
|
+
unaddressedComments: [],
|
|
29
|
+
failingChecks: [],
|
|
30
|
+
hasTestOrLintFailures: false,
|
|
31
|
+
testOrLintFailures: []
|
|
32
|
+
};
|
|
33
|
+
// Check for unaddressed comments
|
|
34
|
+
const comments = await this.getUnaddressedComments(pr.number);
|
|
35
|
+
if (comments.length > 0) {
|
|
36
|
+
pullRequest.hasUnaddressedComments = true;
|
|
37
|
+
pullRequest.unaddressedComments = comments;
|
|
38
|
+
}
|
|
39
|
+
// Check for failing checks
|
|
40
|
+
const { allFailures, testOrLintFailures } = await this.getFailingChecks(pr.number);
|
|
41
|
+
if (allFailures.length > 0) {
|
|
42
|
+
pullRequest.hasFailingChecks = true;
|
|
43
|
+
pullRequest.failingChecks = allFailures;
|
|
44
|
+
}
|
|
45
|
+
if (testOrLintFailures.length > 0) {
|
|
46
|
+
pullRequest.hasTestOrLintFailures = true;
|
|
47
|
+
pullRequest.testOrLintFailures = testOrLintFailures;
|
|
48
|
+
}
|
|
49
|
+
// Only include PR if it has issues
|
|
50
|
+
if (pullRequest.hasUnaddressedComments || pullRequest.hasFailingChecks) {
|
|
51
|
+
return [pullRequest];
|
|
52
|
+
}
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
57
|
+
if (errorMessage.includes('no pull requests found')) {
|
|
58
|
+
console.error(chalk.red(`❌ PR #${prNumber} not found`));
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
console.error(chalk.red(`Error fetching PR #${prNumber}:`), error);
|
|
62
|
+
}
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
async getOpenPRsWithIssues(fromUser) {
|
|
67
|
+
try {
|
|
68
|
+
// Get all open PRs, optionally filtered by author
|
|
69
|
+
let command = 'gh pr list --state open --json number,title,headRefName,url,author';
|
|
70
|
+
if (fromUser) {
|
|
71
|
+
command += ` --author ${fromUser}`;
|
|
72
|
+
}
|
|
73
|
+
const prsJson = execSync(command, {
|
|
74
|
+
cwd: this.workingDir,
|
|
75
|
+
encoding: 'utf-8'
|
|
76
|
+
});
|
|
77
|
+
const prs = JSON.parse(prsJson);
|
|
78
|
+
const pullRequests = [];
|
|
79
|
+
for (const pr of prs) {
|
|
80
|
+
const pullRequest = {
|
|
81
|
+
number: pr.number,
|
|
82
|
+
title: pr.title,
|
|
83
|
+
branch: pr.headRefName,
|
|
84
|
+
url: pr.url,
|
|
85
|
+
hasUnaddressedComments: false,
|
|
86
|
+
hasFailingChecks: false,
|
|
87
|
+
unaddressedComments: [],
|
|
88
|
+
failingChecks: [],
|
|
89
|
+
hasTestOrLintFailures: false,
|
|
90
|
+
testOrLintFailures: []
|
|
91
|
+
};
|
|
92
|
+
// Check for unaddressed comments
|
|
93
|
+
const comments = await this.getUnaddressedComments(pr.number);
|
|
94
|
+
if (comments.length > 0) {
|
|
95
|
+
pullRequest.hasUnaddressedComments = true;
|
|
96
|
+
pullRequest.unaddressedComments = comments;
|
|
97
|
+
}
|
|
98
|
+
// Check for failing checks
|
|
99
|
+
const { allFailures, testOrLintFailures } = await this.getFailingChecks(pr.number);
|
|
100
|
+
if (allFailures.length > 0) {
|
|
101
|
+
pullRequest.hasFailingChecks = true;
|
|
102
|
+
pullRequest.failingChecks = allFailures;
|
|
103
|
+
}
|
|
104
|
+
if (testOrLintFailures.length > 0) {
|
|
105
|
+
pullRequest.hasTestOrLintFailures = true;
|
|
106
|
+
pullRequest.testOrLintFailures = testOrLintFailures;
|
|
107
|
+
}
|
|
108
|
+
// Only include PRs that have issues
|
|
109
|
+
if (pullRequest.hasUnaddressedComments || pullRequest.hasFailingChecks) {
|
|
110
|
+
pullRequests.push(pullRequest);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return pullRequests;
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
console.error(chalk.red('Error fetching PRs:'), error);
|
|
117
|
+
throw error;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
async getUnaddressedComments(prNumber) {
|
|
121
|
+
try {
|
|
122
|
+
// Get PR owner and repo name
|
|
123
|
+
const repoInfo = execSync('gh repo view --json owner,name', {
|
|
124
|
+
cwd: this.workingDir,
|
|
125
|
+
encoding: 'utf-8'
|
|
126
|
+
});
|
|
127
|
+
const { owner, name: repoName } = JSON.parse(repoInfo);
|
|
128
|
+
// Use GraphQL to get review threads with resolved status
|
|
129
|
+
const graphqlQuery = `
|
|
130
|
+
query {
|
|
131
|
+
repository(owner: "${owner.login}", name: "${repoName}") {
|
|
132
|
+
pullRequest(number: ${prNumber}) {
|
|
133
|
+
reviewThreads(first: 100) {
|
|
134
|
+
nodes {
|
|
135
|
+
isResolved
|
|
136
|
+
comments(first: 100) {
|
|
137
|
+
nodes {
|
|
138
|
+
id
|
|
139
|
+
databaseId
|
|
140
|
+
body
|
|
141
|
+
author {
|
|
142
|
+
login
|
|
143
|
+
}
|
|
144
|
+
createdAt
|
|
145
|
+
path
|
|
146
|
+
line
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
`;
|
|
155
|
+
const graphqlResult = execSync(`gh api graphql -f query='${graphqlQuery}'`, {
|
|
156
|
+
cwd: this.workingDir,
|
|
157
|
+
encoding: 'utf-8'
|
|
158
|
+
});
|
|
159
|
+
const result = JSON.parse(graphqlResult);
|
|
160
|
+
const threads = result.data?.repository?.pullRequest?.reviewThreads?.nodes || [];
|
|
161
|
+
const unaddressedComments = [];
|
|
162
|
+
// Process each thread
|
|
163
|
+
for (const thread of threads) {
|
|
164
|
+
// Skip resolved threads
|
|
165
|
+
if (thread.isResolved) {
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
const comments = thread.comments?.nodes || [];
|
|
169
|
+
if (comments.length === 0) {
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
// Get the first comment (the main review comment)
|
|
173
|
+
const firstComment = comments[0];
|
|
174
|
+
// Check if there are replies (more than one comment in thread)
|
|
175
|
+
const hasReplies = comments.length > 1;
|
|
176
|
+
if (!hasReplies && firstComment.path) {
|
|
177
|
+
// Only include if it's an inline code comment (has a path) and has no replies
|
|
178
|
+
unaddressedComments.push({
|
|
179
|
+
id: firstComment.databaseId ? firstComment.databaseId.toString() : firstComment.id,
|
|
180
|
+
author: firstComment.author.login,
|
|
181
|
+
body: firstComment.body,
|
|
182
|
+
createdAt: firstComment.createdAt,
|
|
183
|
+
path: firstComment.path,
|
|
184
|
+
line: firstComment.line
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return unaddressedComments;
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
// If there's an error fetching comments, return empty array
|
|
192
|
+
return [];
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
async getFailingChecks(prNumber) {
|
|
196
|
+
try {
|
|
197
|
+
const checksJson = execSync(`gh pr checks ${prNumber} --json name,state`, {
|
|
198
|
+
cwd: this.workingDir,
|
|
199
|
+
encoding: 'utf-8'
|
|
200
|
+
});
|
|
201
|
+
const checks = JSON.parse(checksJson);
|
|
202
|
+
const failingChecks = [];
|
|
203
|
+
const testOrLintFailures = [];
|
|
204
|
+
for (const check of checks) {
|
|
205
|
+
if (check.state === 'FAILURE' || check.state === 'ERROR') {
|
|
206
|
+
failingChecks.push(check.name);
|
|
207
|
+
// Check if this is a test or lint failure
|
|
208
|
+
const checkNameLower = check.name.toLowerCase();
|
|
209
|
+
if (checkNameLower.includes('test') ||
|
|
210
|
+
checkNameLower.includes('lint') ||
|
|
211
|
+
checkNameLower.includes('eslint') ||
|
|
212
|
+
checkNameLower.includes('prettier') ||
|
|
213
|
+
checkNameLower.includes('jest') ||
|
|
214
|
+
checkNameLower.includes('mocha') ||
|
|
215
|
+
checkNameLower.includes('pytest') ||
|
|
216
|
+
checkNameLower.includes('ruff') ||
|
|
217
|
+
checkNameLower.includes('black') ||
|
|
218
|
+
checkNameLower.includes('flake8') ||
|
|
219
|
+
checkNameLower.includes('mypy') ||
|
|
220
|
+
checkNameLower.includes('typecheck') ||
|
|
221
|
+
checkNameLower.includes('type-check') ||
|
|
222
|
+
checkNameLower.includes('tsc') ||
|
|
223
|
+
checkNameLower.includes('clippy') ||
|
|
224
|
+
checkNameLower.includes('rustfmt')) {
|
|
225
|
+
testOrLintFailures.push(check.name);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return { allFailures: failingChecks, testOrLintFailures };
|
|
230
|
+
}
|
|
231
|
+
catch {
|
|
232
|
+
// If there's an error fetching checks, return empty arrays
|
|
233
|
+
return { allFailures: [], testOrLintFailures: [] };
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
async checkoutPRBranch(prNumber) {
|
|
237
|
+
execSync(`gh pr checkout ${prNumber}`, {
|
|
238
|
+
cwd: this.workingDir,
|
|
239
|
+
stdio: 'inherit'
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
async getFailingActionLogs(prNumber) {
|
|
243
|
+
try {
|
|
244
|
+
// Get the checks with their workflow information
|
|
245
|
+
const checksJson = execSync(`gh pr checks ${prNumber} --json name,state,link,workflow`, {
|
|
246
|
+
cwd: this.workingDir,
|
|
247
|
+
encoding: 'utf-8'
|
|
248
|
+
});
|
|
249
|
+
const checks = JSON.parse(checksJson);
|
|
250
|
+
let failingLogs = '';
|
|
251
|
+
for (const check of checks) {
|
|
252
|
+
if (check.state === 'FAILURE' || check.state === 'ERROR') {
|
|
253
|
+
// Extract run ID from the link (format: https://github.com/owner/repo/actions/runs/123456789/job/987654321)
|
|
254
|
+
const runIdMatch = check.link?.match(/\/runs\/(\d+)/);
|
|
255
|
+
if (runIdMatch) {
|
|
256
|
+
const runId = runIdMatch[1];
|
|
257
|
+
try {
|
|
258
|
+
// Get the failed logs for this run
|
|
259
|
+
const logs = execSync(`gh run view ${runId} --log-failed`, {
|
|
260
|
+
cwd: this.workingDir,
|
|
261
|
+
encoding: 'utf-8',
|
|
262
|
+
maxBuffer: 10 * 1024 * 1024 // 10MB buffer for large logs
|
|
263
|
+
});
|
|
264
|
+
if (logs) {
|
|
265
|
+
failingLogs += `\n\n=== Failed logs for ${check.name} ===\n`;
|
|
266
|
+
// Truncate logs if too large (keep last 5000 chars per check)
|
|
267
|
+
if (logs.length > 5000) {
|
|
268
|
+
failingLogs += '... (truncated) ...\n';
|
|
269
|
+
failingLogs += logs.substring(logs.length - 5000);
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
failingLogs += logs;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
catch (error) {
|
|
277
|
+
// If we can't get logs for this specific run, continue with others
|
|
278
|
+
console.error(`Failed to get logs for run ${runId}:`, error);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return failingLogs;
|
|
284
|
+
}
|
|
285
|
+
catch (error) {
|
|
286
|
+
console.error('Error fetching action logs:', error);
|
|
287
|
+
return '';
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=pr-service-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr-service-cli.js","sourceRoot":"","sources":["../../src/services/pr-service-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { IPRService, PullRequest, PRComment } from './git-interfaces.js';
|
|
2
|
+
export declare class PRServicePAT implements IPRService {
|
|
3
|
+
private workingDir;
|
|
4
|
+
private githubClient;
|
|
5
|
+
private owner;
|
|
6
|
+
private repo;
|
|
7
|
+
constructor(workingDir: string, pat: string);
|
|
8
|
+
getSpecificPRWithIssues(prNumber: number): Promise<PullRequest[]>;
|
|
9
|
+
getOpenPRsWithIssues(fromUser?: string): Promise<PullRequest[]>;
|
|
10
|
+
getUnaddressedComments(prNumber: number): Promise<PRComment[]>;
|
|
11
|
+
private getFailingChecks;
|
|
12
|
+
checkoutPRBranch(prNumber: number): Promise<void>;
|
|
13
|
+
getFailingActionLogs(prNumber: number): Promise<string>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=pr-service-pat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr-service-pat.d.ts","sourceRoot":"","sources":["../../src/services/pr-service-pat.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGzE,qBAAa,YAAa,YAAW,UAAU;IAC7C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,IAAI,CAAS;gBAET,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAUrC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA4DjE,oBAAoB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAuD/D,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;YA4CtD,gBAAgB;IA2CxB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBjD,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAuC9D"}
|