Roo-Code/src/shared/support-prompt.ts
2025-05-21 23:16:43 -07:00

154 lines
4 KiB
TypeScript

// Support prompts
type PromptParams = Record<string, string | any[]>
const generateDiagnosticText = (diagnostics?: any[]) => {
if (!diagnostics?.length) return ""
return `\nCurrent problems detected:\n${diagnostics
.map((d) => `- [${d.source || "Error"}] ${d.message}${d.code ? ` (${d.code})` : ""}`)
.join("\n")}`
}
export const createPrompt = (template: string, params: PromptParams): string => {
return template.replace(/\${(.*?)}/g, (_, key) => {
if (key === "diagnosticText") {
return generateDiagnosticText(params["diagnostics"] as any[])
// eslint-disable-next-line no-prototype-builtins
} else if (params.hasOwnProperty(key)) {
// Ensure the value is treated as a string for replacement
const value = params[key]
if (typeof value === "string") {
return value
} else {
// Convert non-string values to string for replacement
return String(value)
}
} else {
// If the placeholder key is not in params, replace with empty string
return ""
}
})
}
interface SupportPromptConfig {
template: string
}
type SupportPromptType =
| "ENHANCE"
| "EXPLAIN"
| "FIX"
| "IMPROVE"
| "ADD_TO_CONTEXT"
| "TERMINAL_ADD_TO_CONTEXT"
| "TERMINAL_FIX"
| "TERMINAL_EXPLAIN"
| "NEW_TASK"
const supportPromptConfigs: Record<SupportPromptType, SupportPromptConfig> = {
ENHANCE: {
template: `Generate an enhanced version of this prompt (reply with only the enhanced prompt - no conversation, explanations, lead-in, bullet points, placeholders, or surrounding quotes):
\${userInput}`,
},
EXPLAIN: {
template: `Explain the following code from file path \${filePath}:\${startLine}-\${endLine}
\${userInput}
\`\`\`
\${selectedText}
\`\`\`
Please provide a clear and concise explanation of what this code does, including:
1. The purpose and functionality
2. Key components and their interactions
3. Important patterns or techniques used`,
},
FIX: {
template: `Fix any issues in the following code from file path \${filePath}:\${startLine}-\${endLine}
\${diagnosticText}
\${userInput}
\`\`\`
\${selectedText}
\`\`\`
Please:
1. Address all detected problems listed above (if any)
2. Identify any other potential bugs or issues
3. Provide corrected code
4. Explain what was fixed and why`,
},
IMPROVE: {
template: `Improve the following code from file path \${filePath}:\${startLine}-\${endLine}
\${userInput}
\`\`\`
\${selectedText}
\`\`\`
Please suggest improvements for:
1. Code readability and maintainability
2. Performance optimization
3. Best practices and patterns
4. Error handling and edge cases
Provide the improved code along with explanations for each enhancement.`,
},
ADD_TO_CONTEXT: {
template: `\${filePath}:\${startLine}-\${endLine}
\`\`\`
\${selectedText}
\`\`\``,
},
TERMINAL_ADD_TO_CONTEXT: {
template: `\${userInput}
Terminal output:
\`\`\`
\${terminalContent}
\`\`\``,
},
TERMINAL_FIX: {
template: `\${userInput}
Fix this terminal command:
\`\`\`
\${terminalContent}
\`\`\`
Please:
1. Identify any issues in the command
2. Provide the corrected command
3. Explain what was fixed and why`,
},
TERMINAL_EXPLAIN: {
template: `\${userInput}
Explain this terminal command:
\`\`\`
\${terminalContent}
\`\`\`
Please provide:
1. What the command does
2. Explanation of each part/flag
3. Expected output and behavior`,
},
NEW_TASK: {
template: `\${userInput}`,
},
} as const
export const supportPrompt = {
default: Object.fromEntries(Object.entries(supportPromptConfigs).map(([key, config]) => [key, config.template])),
get: (customSupportPrompts: Record<string, any> | undefined, type: SupportPromptType): string => {
return customSupportPrompts?.[type] ?? supportPromptConfigs[type].template
},
create: (type: SupportPromptType, params: PromptParams, customSupportPrompts?: Record<string, any>): string => {
const template = supportPrompt.get(customSupportPrompts, type)
return createPrompt(template, params)
},
} as const
export type { SupportPromptType }
export type CustomSupportPrompts = {
[key: string]: string | undefined
}