mirror of
https://github.com/pacnpal/Roo-Code.git
synced 2025-12-20 04:11:10 -05:00
refactor: consolidate prompt functionality into support-prompt module
- Move code action prompts from core/prompts to shared/support-prompt - Migrate enhance prompt functionality from modes to support-prompt - Add UI for managing code action prompts in PromptsView - Update types and interfaces for better prompt management
This commit is contained in:
@@ -8,14 +8,14 @@ import {
|
||||
VSCodeCheckbox,
|
||||
} from "@vscode/webview-ui-toolkit/react"
|
||||
import { useExtensionState } from "../../context/ExtensionStateContext"
|
||||
import { Mode, PromptComponent, getRoleDefinition, getAllModes, ModeConfig } from "../../../../src/shared/modes"
|
||||
import {
|
||||
Mode,
|
||||
PromptComponent,
|
||||
getRoleDefinition,
|
||||
getAllModes,
|
||||
ModeConfig,
|
||||
enhancePrompt,
|
||||
} from "../../../../src/shared/modes"
|
||||
codeActionPrompt,
|
||||
CodeActionType,
|
||||
codeActionLabels,
|
||||
} from "../../../../src/shared/support-prompt"
|
||||
|
||||
import { TOOL_GROUPS, GROUP_DISPLAY_NAMES, ToolGroup } from "../../../../src/shared/tool-groups"
|
||||
import { vscode } from "../../utils/vscode"
|
||||
|
||||
@@ -50,11 +50,12 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
|
||||
const [selectedPromptTitle, setSelectedPromptTitle] = useState("")
|
||||
const [isToolsEditMode, setIsToolsEditMode] = useState(false)
|
||||
const [isCreateModeDialogOpen, setIsCreateModeDialogOpen] = useState(false)
|
||||
const [activeCodeActionTab, setActiveCodeActionTab] = useState<CodeActionType>("FIX")
|
||||
|
||||
// Direct update functions
|
||||
const updateAgentPrompt = useCallback(
|
||||
(mode: Mode, promptData: PromptComponent) => {
|
||||
const existingPrompt = customPrompts?.[mode]
|
||||
const existingPrompt = customPrompts?.[mode] as PromptComponent
|
||||
const updatedPrompt = { ...existingPrompt, ...promptData }
|
||||
|
||||
// Only include properties that differ from defaults
|
||||
@@ -256,8 +257,19 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
|
||||
|
||||
const updateEnhancePrompt = (value: string | undefined) => {
|
||||
vscode.postMessage({
|
||||
type: "updateEnhancedPrompt",
|
||||
text: value,
|
||||
type: "updateSupportPrompt",
|
||||
values: {
|
||||
enhance: value,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
const updateCodeActionPrompt = (type: CodeActionType, value: string | undefined) => {
|
||||
vscode.postMessage({
|
||||
type: "updateSupportPrompt",
|
||||
values: {
|
||||
[type]: value,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
@@ -271,7 +283,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
|
||||
|
||||
const handleAgentReset = (modeSlug: string) => {
|
||||
// Only reset role definition for built-in modes
|
||||
const existingPrompt = customPrompts?.[modeSlug]
|
||||
const existingPrompt = customPrompts?.[modeSlug] as PromptComponent
|
||||
updateAgentPrompt(modeSlug, {
|
||||
...existingPrompt,
|
||||
roleDefinition: undefined,
|
||||
@@ -279,13 +291,27 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
|
||||
}
|
||||
|
||||
const handleEnhanceReset = () => {
|
||||
updateEnhancePrompt(undefined)
|
||||
vscode.postMessage({
|
||||
type: "resetSupportPrompt",
|
||||
text: "enhance",
|
||||
})
|
||||
}
|
||||
|
||||
const handleCodeActionReset = (type: CodeActionType) => {
|
||||
vscode.postMessage({
|
||||
type: "resetSupportPrompt",
|
||||
text: type,
|
||||
})
|
||||
}
|
||||
|
||||
const getEnhancePromptValue = (): string => {
|
||||
return enhancePrompt.get(customPrompts)
|
||||
}
|
||||
|
||||
const getCodeActionPromptValue = (type: CodeActionType): string => {
|
||||
return codeActionPrompt.get(customPrompts, type)
|
||||
}
|
||||
|
||||
const handleTestEnhancement = () => {
|
||||
if (!testPrompt.trim()) return
|
||||
|
||||
@@ -563,7 +589,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
|
||||
<VSCodeTextArea
|
||||
value={(() => {
|
||||
const customMode = findModeBySlug(mode, customModes)
|
||||
const prompt = customPrompts?.[mode]
|
||||
const prompt = customPrompts?.[mode] as PromptComponent
|
||||
return customMode?.roleDefinition ?? prompt?.roleDefinition ?? getRoleDefinition(mode)
|
||||
})()}
|
||||
onChange={(e) => {
|
||||
@@ -680,7 +706,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
|
||||
<VSCodeTextArea
|
||||
value={(() => {
|
||||
const customMode = findModeBySlug(mode, customModes)
|
||||
const prompt = customPrompts?.[mode]
|
||||
const prompt = customPrompts?.[mode] as PromptComponent
|
||||
return customMode?.customInstructions ?? prompt?.customInstructions ?? ""
|
||||
})()}
|
||||
onChange={(e) => {
|
||||
@@ -696,7 +722,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
|
||||
})
|
||||
} else {
|
||||
// For built-in modes, update the prompts
|
||||
const existingPrompt = customPrompts?.[mode]
|
||||
const existingPrompt = customPrompts?.[mode] as PromptComponent
|
||||
updateAgentPrompt(mode, {
|
||||
...existingPrompt,
|
||||
customInstructions: value.trim() || undefined,
|
||||
@@ -759,6 +785,77 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
|
||||
</VSCodeButton>
|
||||
</div>
|
||||
|
||||
<div style={{ marginBottom: "20px" }}>
|
||||
<div style={{ fontWeight: "bold", marginBottom: "12px" }}>Code Action Prompts</div>
|
||||
<div
|
||||
style={{
|
||||
display: "flex",
|
||||
gap: "16px",
|
||||
alignItems: "center",
|
||||
marginBottom: "12px",
|
||||
overflowX: "auto",
|
||||
flexWrap: "nowrap",
|
||||
paddingBottom: "4px",
|
||||
paddingRight: "20px",
|
||||
}}>
|
||||
{Object.keys(codeActionPrompt.default).map((type) => (
|
||||
<button
|
||||
key={type}
|
||||
data-testid={`${type}-tab`}
|
||||
data-active={activeCodeActionTab === type ? "true" : "false"}
|
||||
onClick={() => setActiveCodeActionTab(type as CodeActionType)}
|
||||
style={{
|
||||
padding: "4px 8px",
|
||||
border: "none",
|
||||
background:
|
||||
activeCodeActionTab === type ? "var(--vscode-button-background)" : "none",
|
||||
color:
|
||||
activeCodeActionTab === type
|
||||
? "var(--vscode-button-foreground)"
|
||||
: "var(--vscode-foreground)",
|
||||
cursor: "pointer",
|
||||
opacity: activeCodeActionTab === type ? 1 : 0.8,
|
||||
borderRadius: "3px",
|
||||
fontWeight: "bold",
|
||||
}}>
|
||||
{codeActionLabels[type as CodeActionType]}
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
|
||||
{/* Show active tab content */}
|
||||
<div key={activeCodeActionTab}>
|
||||
<div
|
||||
style={{
|
||||
display: "flex",
|
||||
justifyContent: "space-between",
|
||||
alignItems: "center",
|
||||
marginBottom: "4px",
|
||||
}}>
|
||||
<div style={{ fontWeight: "bold" }}>{activeCodeActionTab} Prompt</div>
|
||||
<VSCodeButton
|
||||
appearance="icon"
|
||||
onClick={() => handleCodeActionReset(activeCodeActionTab)}
|
||||
title={`Reset ${activeCodeActionTab} prompt to default`}>
|
||||
<span className="codicon codicon-discard"></span>
|
||||
</VSCodeButton>
|
||||
</div>
|
||||
<VSCodeTextArea
|
||||
value={getCodeActionPromptValue(activeCodeActionTab)}
|
||||
onChange={(e) => {
|
||||
const value =
|
||||
(e as CustomEvent)?.detail?.target?.value ||
|
||||
((e as any).target as HTMLTextAreaElement).value
|
||||
const trimmedValue = value.trim()
|
||||
updateCodeActionPrompt(activeCodeActionTab, trimmedValue || undefined)
|
||||
}}
|
||||
rows={4}
|
||||
resize="vertical"
|
||||
style={{ width: "100%" }}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h3 style={{ color: "var(--vscode-foreground)", margin: "40px 0 20px 0" }}>Prompt Enhancement</h3>
|
||||
|
||||
<div
|
||||
|
||||
Reference in New Issue
Block a user