in src/github/junie/new-prompt-formatter.ts [28:64]
async generatePrompt(context: JunieExecutionContext, fetchedData: FetchedData, userPrompt?: string, attachGithubContextToCustomPrompt: boolean = true) {
// If user provided custom prompt and doesn't want GitHub context, sanitize and return it
if (userPrompt && !attachGithubContextToCustomPrompt) {
return sanitizeContent(userPrompt);
}
// Handle Jira issue integration
if (isJiraWorkflowDispatchEvent(context)) {
return await this.generateJiraPrompt(context);
}
const repositoryInfo = this.getRepositoryInfo(context);
const actorInfo = this.getActorInfo(context);
const userInstruction = this.getUserInstruction(context, userPrompt)
const prOrIssueInfo = this.getPrOrIssueInfo(context, fetchedData);
const commitsInfo = this.getCommitsInfo(fetchedData);
const timelineInfo = this.getTimelineInfo(fetchedData);
const reviewsInfo = this.getReviewsInfo(fetchedData);
const changedFilesInfo = this.getChangedFilesInfo(fetchedData);
// Build the final prompt
const prompt = `You were triggered as a GitHub AI Assistant by ${context.eventName} action. Your task is to:
${userInstruction ? userInstruction : ""}
${repositoryInfo ? repositoryInfo : ""}
${prOrIssueInfo ? prOrIssueInfo : ""}
${commitsInfo ? commitsInfo : ""}
${timelineInfo ? timelineInfo : ""}
${reviewsInfo ? reviewsInfo : ""}
${changedFilesInfo ? changedFilesInfo : ""}
${actorInfo ? actorInfo : ""}
`;
// Sanitize the entire prompt once to prevent prompt injection attacks
// This removes HTML comments, invisible characters, obfuscated entities, etc.
return sanitizeContent(prompt);
}