@@ -2,7 +2,7 @@ import * as core from '@actions/core';
22import { ActionConfig , PullRequestInfo } from '../types/index.js' ;
33import { GitHubService } from '../github/github-service.js' ;
44import { LlmService } from '../modules/llm/llm.service.js' ;
5- import { CodeReviewResponse } from '../modules/llm/entities/index.js' ;
5+ import { PullRequestSummaryResponse } from '../modules/llm/entities/index.js' ;
66import { LlmRepository } from '../modules/llm/llm.repository.js' ;
77
88export class WorkflowService {
@@ -31,10 +31,20 @@ export class WorkflowService {
3131 const prWithContents = await this . githubService . loadFileContents ( pullRequestInfo ) ;
3232 core . info ( `Loaded content for ${ prWithContents . files . length } changed files` ) ;
3333
34- const reviewResult = await this . llmService . reviewCode ( prWithContents ) ;
34+ const commitMessages = await this . githubService . getCommitMessages ( owner , repo , prNumber ) ;
3535
36- core . info ( 'Posting review results...' ) ;
37- await this . postReviewComment ( prWithContents , reviewResult ) ;
36+ core . info ( `Loaded ${ commitMessages . length } commit messages` ) ;
37+
38+ core . info ( 'Generating PR summary...' ) ;
39+ const outputLanguage = this . config . llm . outputLanguage || 'en' ;
40+ const summaryResult = await this . llmService . summarizePullRequest (
41+ prWithContents ,
42+ outputLanguage ,
43+ commitMessages
44+ ) ;
45+
46+ core . info ( 'Posting summary comment...' ) ;
47+ await this . postSummaryComment ( prWithContents , summaryResult ) ;
3848
3949 core . info ( 'Code review completed successfully' ) ;
4050 } catch ( error ) {
@@ -43,102 +53,25 @@ export class WorkflowService {
4353 }
4454 }
4555
46- private async postReviewComment ( pullRequest : PullRequestInfo , reviewResult : CodeReviewResponse ) : Promise < void > {
47- let comment = this . buildReviewComment ( reviewResult ) ;
48-
49- if ( this . config . llm . outputLanguage && this . config . llm . outputLanguage !== 'en' ) {
50- comment = await this . llmService . translateText ( comment , this . config . llm . outputLanguage ) ;
51- }
52-
56+ private async postSummaryComment (
57+ pullRequest : PullRequestInfo ,
58+ summaryResult : PullRequestSummaryResponse
59+ ) : Promise < void > {
60+ const comment = this . buildSummaryComment ( summaryResult ) ;
5361
5462 await this . githubService . createReview (
5563 pullRequest . owner ,
5664 pullRequest . repo ,
5765 pullRequest . prNumber ,
5866 pullRequest . headSha ,
59- comment ,
67+ comment
6068 ) ;
6169 }
6270
63- private buildReviewComment ( reviewResult : CodeReviewResponse ) : string {
64- const summary = this . buildSummarySection ( reviewResult ) ;
65- const suggestions = this . buildSuggestionsSection ( reviewResult ) ;
66- const issues = this . buildIssuesSection ( reviewResult ) ;
67- const watermark = '\n\n---\n*Reviewed by flash* ✨' ;
68-
69- return `${ summary } \n\n${ suggestions } \n\n${ issues } \n${ watermark } ` ;
70- }
71-
72- private buildSummarySection ( reviewResult : CodeReviewResponse ) : string {
73- return `# Flash Review \n\n${ reviewResult . summary } \n\n` ;
74- }
75-
76- private buildSuggestionsSection ( reviewResult : CodeReviewResponse ) : string {
77- const sections = [ ] ;
78-
79- if ( reviewResult . suggestions . critical . length > 0 ) {
80- sections . push (
81- '## Critical Issues 🚨\n' +
82- reviewResult . suggestions . critical
83- . map (
84- ( suggestion ) =>
85- `- **${ suggestion . category } ** (${ suggestion . file } :${ suggestion . location } ):\n ${ suggestion . description } `
86- )
87- . join ( '\n' )
88- ) ;
89- }
90-
91- if ( reviewResult . suggestions . important . length > 0 ) {
92- sections . push (
93- '## Important Improvements ⚠️\n' +
94- reviewResult . suggestions . important
95- . map (
96- ( suggestion ) =>
97- `- **${ suggestion . category } ** (${ suggestion . file } :${ suggestion . location } ):\n ${ suggestion . description } `
98- )
99- . join ( '\n' )
100- ) ;
101- }
102-
103- return sections . length > 0 ? sections . join ( '\n\n' ) : '' ;
104- }
105-
106- private buildIssuesSection ( reviewResult : CodeReviewResponse ) : string {
107- const sections = [ ] ;
108-
109- if ( reviewResult . issues . security . length > 0 ) {
110- sections . push (
111- `## Security Issues\n${ reviewResult . issues . security . map ( ( issue : string ) => `- ${ issue } ` ) . join ( '\n' ) } `
112- ) ;
113- }
114-
115- if ( reviewResult . issues . performance . length > 0 ) {
116- sections . push (
117- `## Performance Issues\n${ reviewResult . issues . performance . map ( ( issue : string ) => `- ${ issue } ` ) . join ( '\n' ) } `
118- ) ;
119- }
120-
121- if ( reviewResult . issues . typescript . length > 0 ) {
122- sections . push (
123- `## TypeScript Issues\n${ reviewResult . issues . typescript . map ( ( issue : string ) => `- ${ issue } ` ) . join ( '\n' ) } `
124- ) ;
125- }
126-
127- return sections . length > 0 ? `\n\n${ sections . join ( '\n\n' ) } ` : '' ;
128- }
129-
130- private buildTokenUsageSection ( reviewResult : CodeReviewResponse ) : void {
131- if ( ! reviewResult . usageMetadata ) {
132- return ;
133- }
134-
135- core . info ( `## Token Usage
71+ private buildSummaryComment ( summaryResult : PullRequestSummaryResponse ) : string {
72+ const header = '# ✨ Flash Code Review' ;
73+ const summary = `\n\n${ summaryResult . summary } ` ;
13674
137- | Model | Prompt Tokens | Completion Tokens | Total Tokens |
138- |-------|--------------|-------------------|--------------|
139- | ${ this . config . llm . model } | ${ reviewResult . usageMetadata . promptTokens }
140- | ${ reviewResult . usageMetadata . completionTokens }
141- | ${ reviewResult . usageMetadata . totalTokens } |`
142- )
75+ return `${ header } ${ summary } ` ;
14376 }
14477}
0 commit comments