async generatePrompt()

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);
    }