22 LONG_DEFAULT_BRANCH_TEMPLATE ,
33 SHORT_DEFAULT_BRANCH_TEMPLATE ,
44 LONG_DEFAULT_COMMIT_TEMPLATE ,
5- SHORT_DEFAULT_COMMIT_TEMPLATE
5+ SHORT_DEFAULT_COMMIT_TEMPLATE ,
6+ SHORT_DEFAULT_PR_TEMPLATE
67} from '$lib/ai/prompts' ;
78import { InjectionToken } from '@gitbutler/core/context' ;
89import { persisted , type Persisted } from '@gitbutler/shared/persisted' ;
@@ -11,7 +12,8 @@ import type { Prompt, Prompts, UserPrompt } from '$lib/ai/types';
1112
1213enum PromptPersistedKey {
1314 Branch = 'aiBranchPrompts' ,
14- Commit = 'aiCommitPrompts'
15+ Commit = 'aiCommitPrompts' ,
16+ PullRequest = 'aiPullRequestPrompts'
1517}
1618
1719export const PROMPT_SERVICE = new InjectionToken < PromptService > ( 'PromptService' ) ;
@@ -31,6 +33,13 @@ export class PromptService {
3133 } ;
3234 }
3335
36+ get prPrompts ( ) : Prompts {
37+ return {
38+ defaultPrompt : SHORT_DEFAULT_PR_TEMPLATE ,
39+ userPrompts : persisted < UserPrompt [ ] > ( [ ] , PromptPersistedKey . PullRequest )
40+ } ;
41+ }
42+
3443 selectedBranchPromptId ( projectId : string ) : Persisted < string | undefined > {
3544 return persisted < string | undefined > ( undefined , `${ PromptPersistedKey . Branch } -${ projectId } ` ) ;
3645 }
@@ -55,6 +64,21 @@ export class PromptService {
5564 return this . findPrompt ( get ( this . commitPrompts . userPrompts ) , id ) ;
5665 }
5766
67+ selectedPrPromptId ( projectId : string ) : Persisted < string | undefined > {
68+ return persisted < string | undefined > (
69+ undefined ,
70+ `${ PromptPersistedKey . PullRequest } -${ projectId } `
71+ ) ;
72+ }
73+
74+ selectedPrPrompt ( projectId : string ) : Prompt | undefined {
75+ const id = get ( this . selectedPrPromptId ( projectId ) ) ;
76+
77+ if ( ! id ) return ;
78+
79+ return this . findPrompt ( get ( this . prPrompts . userPrompts ) , id ) ;
80+ }
81+
5882 findPrompt ( prompts : UserPrompt [ ] , promptId : string ) {
5983 const prompt = prompts . find ( ( userPrompt ) => userPrompt . id === promptId ) ?. prompt ;
6084
@@ -89,11 +113,16 @@ export class PromptService {
89113 return false ;
90114 }
91115
92- createDefaultUserPrompt ( type : 'commits' | 'branches' ) : UserPrompt {
116+ createDefaultUserPrompt ( type : 'commits' | 'branches' | 'pullRequests' ) : UserPrompt {
93117 return {
94118 id : crypto . randomUUID ( ) ,
95119 name : 'My prompt' ,
96- prompt : type === 'branches' ? SHORT_DEFAULT_BRANCH_TEMPLATE : SHORT_DEFAULT_COMMIT_TEMPLATE
120+ prompt :
121+ type === 'branches'
122+ ? SHORT_DEFAULT_BRANCH_TEMPLATE
123+ : type === 'commits'
124+ ? SHORT_DEFAULT_COMMIT_TEMPLATE
125+ : SHORT_DEFAULT_PR_TEMPLATE
97126 } ;
98127 }
99128}
0 commit comments