mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-08-28 05:27:24 +00:00
refactor: remove footgun prompting (file-based system prompt override) (#11387)
This commit is contained in:
parent
5800363903
commit
4e659b459d
48 changed files with 23 additions and 720 deletions
|
|
@ -37,7 +37,7 @@ Additionally, you'll find in Docker Desktop that database and redis services are
|
|||
|
||||
Navigate to [localhost:3446](http://localhost:3446/) in your browser and click the 🚀 button.
|
||||
|
||||
By default a evals run will run all programming exercises in [Roo Code Evals](https://github.com/RooCodeInc/Roo-Code-Evals) repository with the Claude Sonnet 4 model and default settings. For basic configuration you can specify the LLM to use and any subset of the exercises you'd like. For advanced configuration you can import a Roo Code settings file which will allow you to run the evals with Roo Code configured any way you'd like (this includes custom modes, a footgun prompt, etc).
|
||||
By default a evals run will run all programming exercises in [Roo Code Evals](https://github.com/RooCodeInc/Roo-Code-Evals) repository with the Claude Sonnet 4 model and default settings. For basic configuration you can specify the LLM to use and any subset of the exercises you'd like. For advanced configuration you can import a Roo Code settings file which will allow you to run the evals with Roo Code configured any way you'd like (this includes custom modes, custom instructions, etc).
|
||||
|
||||
<img width="1053" src="https://github.com/user-attachments/assets/2367eef4-6ae9-4ac2-8ee4-80f981046486" />
|
||||
|
||||
|
|
|
|||
|
|
@ -381,7 +381,6 @@ export type ExtensionState = Pick<
|
|||
lastShownAnnouncementId?: string
|
||||
apiModelId?: string
|
||||
mcpServers?: McpServer[]
|
||||
hasSystemPromptOverride?: boolean
|
||||
mdmCompliant?: boolean
|
||||
remoteControlEnabled: boolean
|
||||
taskSyncEnabled: boolean
|
||||
|
|
@ -645,7 +644,6 @@ export interface WebviewMessage {
|
|||
newSkillModeSlugs?: string[] // For updateSkillModes (new mode restrictions)
|
||||
requestId?: string
|
||||
ids?: string[]
|
||||
hasSystemPromptOverride?: boolean
|
||||
terminalOperation?: "continue" | "abort"
|
||||
messageTs?: number
|
||||
restoreCheckpoint?: boolean
|
||||
|
|
|
|||
|
|
@ -1,201 +0,0 @@
|
|||
// Mocks must come first, before imports
|
||||
vi.mock("vscode", () => ({
|
||||
env: {
|
||||
language: "en",
|
||||
},
|
||||
workspace: {
|
||||
workspaceFolders: [{ uri: { fsPath: "/test/path" } }],
|
||||
getWorkspaceFolder: vi.fn().mockReturnValue({ uri: { fsPath: "/test/path" } }),
|
||||
},
|
||||
window: {
|
||||
activeTextEditor: undefined,
|
||||
},
|
||||
EventEmitter: vi.fn().mockImplementation(() => ({
|
||||
event: vi.fn(),
|
||||
fire: vi.fn(),
|
||||
dispose: vi.fn(),
|
||||
})),
|
||||
}))
|
||||
|
||||
vi.mock("fs/promises", () => {
|
||||
const mockReadFile = vi.fn()
|
||||
const mockMkdir = vi.fn().mockResolvedValue(undefined)
|
||||
const mockAccess = vi.fn().mockResolvedValue(undefined)
|
||||
|
||||
return {
|
||||
default: {
|
||||
readFile: mockReadFile,
|
||||
mkdir: mockMkdir,
|
||||
access: mockAccess,
|
||||
},
|
||||
readFile: mockReadFile,
|
||||
mkdir: mockMkdir,
|
||||
access: mockAccess,
|
||||
}
|
||||
})
|
||||
|
||||
vi.mock("../../../utils/fs", () => ({
|
||||
fileExistsAtPath: vi.fn().mockResolvedValue(true),
|
||||
createDirectoriesForFile: vi.fn().mockResolvedValue([]),
|
||||
}))
|
||||
|
||||
import { SYSTEM_PROMPT } from "../system"
|
||||
import { defaultModeSlug, modes } from "../../../shared/modes"
|
||||
import * as vscode from "vscode"
|
||||
import * as fs from "fs/promises"
|
||||
import { toPosix } from "./utils"
|
||||
|
||||
// Get the mocked fs module
|
||||
const mockedFs = vi.mocked(fs)
|
||||
|
||||
// Create a mock ExtensionContext with relative paths instead of absolute paths
|
||||
const mockContext = {
|
||||
extensionPath: "mock/extension/path",
|
||||
globalStoragePath: "mock/storage/path",
|
||||
storagePath: "mock/storage/path",
|
||||
logPath: "mock/log/path",
|
||||
subscriptions: [],
|
||||
workspaceState: {
|
||||
get: () => undefined,
|
||||
update: () => Promise.resolve(),
|
||||
},
|
||||
globalState: {
|
||||
get: () => undefined,
|
||||
update: () => Promise.resolve(),
|
||||
setKeysForSync: () => {},
|
||||
},
|
||||
extensionUri: { fsPath: "mock/extension/path" },
|
||||
globalStorageUri: { fsPath: "mock/settings/path" },
|
||||
asAbsolutePath: (relativePath: string) => `mock/extension/path/${relativePath}`,
|
||||
extension: {
|
||||
packageJSON: {
|
||||
version: "1.0.0",
|
||||
},
|
||||
},
|
||||
} as unknown as vscode.ExtensionContext
|
||||
|
||||
describe("File-Based Custom System Prompt", () => {
|
||||
beforeEach(() => {
|
||||
// Reset mocks before each test
|
||||
vi.clearAllMocks()
|
||||
|
||||
// Default behavior: file doesn't exist
|
||||
mockedFs.readFile.mockRejectedValue({ code: "ENOENT" })
|
||||
})
|
||||
|
||||
// Skipped on Windows due to timeout/flake issues
|
||||
it.skipIf(process.platform === "win32")(
|
||||
"should use default generation when no file-based system prompt is found",
|
||||
async () => {
|
||||
const customModePrompts = {
|
||||
[defaultModeSlug]: {
|
||||
roleDefinition: "Test role definition",
|
||||
},
|
||||
}
|
||||
|
||||
const prompt = await SYSTEM_PROMPT(
|
||||
mockContext,
|
||||
"test/path", // Using a relative path without leading slash
|
||||
false, // supportsImages
|
||||
undefined, // mcpHub
|
||||
undefined, // diffStrategy
|
||||
undefined, // browserViewportSize
|
||||
defaultModeSlug, // mode
|
||||
customModePrompts, // customModePrompts
|
||||
undefined, // customModes
|
||||
undefined, // globalCustomInstructions
|
||||
undefined, // experiments
|
||||
undefined, // language
|
||||
undefined, // rooIgnoreInstructions
|
||||
undefined, // partialReadsEnabled
|
||||
)
|
||||
|
||||
// Should contain default sections
|
||||
expect(prompt).toContain("TOOL USE")
|
||||
expect(prompt).toContain("CAPABILITIES")
|
||||
expect(prompt).toContain("MODES")
|
||||
expect(prompt).toContain("Test role definition")
|
||||
},
|
||||
)
|
||||
|
||||
it("should use file-based custom system prompt when available", async () => {
|
||||
// Mock the readFile to return content from a file
|
||||
const fileCustomSystemPrompt = "Custom system prompt from file"
|
||||
// When called with utf-8 encoding, return a string
|
||||
mockedFs.readFile.mockImplementation((filePath, options) => {
|
||||
if (toPosix(filePath).includes(`.roo/system-prompt-${defaultModeSlug}`) && options === "utf-8") {
|
||||
return Promise.resolve(fileCustomSystemPrompt)
|
||||
}
|
||||
return Promise.reject({ code: "ENOENT" })
|
||||
})
|
||||
|
||||
const prompt = await SYSTEM_PROMPT(
|
||||
mockContext,
|
||||
"test/path", // Using a relative path without leading slash
|
||||
false, // supportsImages
|
||||
undefined, // mcpHub
|
||||
undefined, // diffStrategy
|
||||
undefined, // browserViewportSize
|
||||
defaultModeSlug, // mode
|
||||
undefined, // customModePrompts
|
||||
undefined, // customModes
|
||||
undefined, // globalCustomInstructions
|
||||
undefined, // experiments
|
||||
undefined, // language
|
||||
undefined, // rooIgnoreInstructions
|
||||
undefined, // partialReadsEnabled
|
||||
)
|
||||
|
||||
// Should contain role definition and file-based system prompt
|
||||
expect(prompt).toContain(modes[0].roleDefinition)
|
||||
expect(prompt).toContain(fileCustomSystemPrompt)
|
||||
|
||||
// Should not contain any of the default sections
|
||||
expect(prompt).not.toContain("CAPABILITIES")
|
||||
expect(prompt).not.toContain("MODES")
|
||||
})
|
||||
|
||||
it("should combine file-based system prompt with role definition and custom instructions", async () => {
|
||||
// Mock the readFile to return content from a file
|
||||
const fileCustomSystemPrompt = "Custom system prompt from file"
|
||||
mockedFs.readFile.mockImplementation((filePath, options) => {
|
||||
if (toPosix(filePath).includes(`.roo/system-prompt-${defaultModeSlug}`) && options === "utf-8") {
|
||||
return Promise.resolve(fileCustomSystemPrompt)
|
||||
}
|
||||
return Promise.reject({ code: "ENOENT" })
|
||||
})
|
||||
|
||||
// Define custom role definition
|
||||
const customRoleDefinition = "Custom role definition"
|
||||
const customModePrompts = {
|
||||
[defaultModeSlug]: {
|
||||
roleDefinition: customRoleDefinition,
|
||||
},
|
||||
}
|
||||
|
||||
const prompt = await SYSTEM_PROMPT(
|
||||
mockContext,
|
||||
"test/path", // Using a relative path without leading slash
|
||||
false, // supportsImages
|
||||
undefined, // mcpHub
|
||||
undefined, // diffStrategy
|
||||
undefined, // browserViewportSize
|
||||
defaultModeSlug, // mode
|
||||
customModePrompts, // customModePrompts
|
||||
undefined, // customModes
|
||||
undefined, // globalCustomInstructions
|
||||
undefined, // experiments
|
||||
undefined, // language
|
||||
undefined, // rooIgnoreInstructions
|
||||
undefined, // partialReadsEnabled
|
||||
)
|
||||
|
||||
// Should contain custom role definition and file-based system prompt
|
||||
expect(prompt).toContain(customRoleDefinition)
|
||||
expect(prompt).toContain(fileCustomSystemPrompt)
|
||||
|
||||
// Should not contain any of the default sections
|
||||
expect(prompt).not.toContain("CAPABILITIES")
|
||||
expect(prompt).not.toContain("MODES")
|
||||
})
|
||||
})
|
||||
|
|
@ -1,134 +0,0 @@
|
|||
// Mocks must come first, before imports
|
||||
|
||||
vi.mock("fs/promises")
|
||||
|
||||
// Then imports
|
||||
import type { Mock } from "vitest"
|
||||
import path from "path"
|
||||
import { readFile } from "fs/promises"
|
||||
import type { Mode } from "../../../../shared/modes" // Type-only import
|
||||
import { loadSystemPromptFile, PromptVariables } from "../custom-system-prompt"
|
||||
|
||||
// Cast the mocked readFile to the correct Mock type
|
||||
const mockedReadFile = readFile as Mock<typeof readFile>
|
||||
|
||||
describe("loadSystemPromptFile", () => {
|
||||
// Corrected PromptVariables type and added mockMode
|
||||
const mockVariables: PromptVariables = {
|
||||
workspace: "/path/to/workspace",
|
||||
}
|
||||
const mockCwd = "/mock/cwd"
|
||||
const mockMode: Mode = "test" // Use Mode type, e.g., 'test'
|
||||
// Corrected expected file path format
|
||||
const expectedFilePath = path.join(mockCwd, ".roo", `system-prompt-${mockMode}`)
|
||||
|
||||
beforeEach(() => {
|
||||
// Clear mocks before each test
|
||||
mockedReadFile.mockClear()
|
||||
})
|
||||
|
||||
it("should return an empty string if the file does not exist (ENOENT)", async () => {
|
||||
const error: NodeJS.ErrnoException = new Error("File not found")
|
||||
error.code = "ENOENT"
|
||||
mockedReadFile.mockRejectedValue(error)
|
||||
|
||||
// Added mockMode argument
|
||||
const result = await loadSystemPromptFile(mockCwd, mockMode, mockVariables)
|
||||
|
||||
expect(result).toBe("")
|
||||
expect(mockedReadFile).toHaveBeenCalledTimes(1)
|
||||
expect(mockedReadFile).toHaveBeenCalledWith(expectedFilePath, "utf-8")
|
||||
})
|
||||
|
||||
// Updated test: should re-throw unexpected errors
|
||||
it("should re-throw unexpected errors from readFile", async () => {
|
||||
const expectedError = new Error("Some other error")
|
||||
mockedReadFile.mockRejectedValue(expectedError)
|
||||
|
||||
// Assert that the promise rejects with the specific error
|
||||
await expect(loadSystemPromptFile(mockCwd, mockMode, mockVariables)).rejects.toThrow(expectedError)
|
||||
|
||||
// Verify readFile was still called correctly
|
||||
expect(mockedReadFile).toHaveBeenCalledTimes(1)
|
||||
expect(mockedReadFile).toHaveBeenCalledWith(expectedFilePath, "utf-8")
|
||||
})
|
||||
|
||||
it("should return an empty string if the file content is empty", async () => {
|
||||
mockedReadFile.mockResolvedValue("")
|
||||
|
||||
// Added mockMode argument
|
||||
const result = await loadSystemPromptFile(mockCwd, mockMode, mockVariables)
|
||||
|
||||
expect(result).toBe("")
|
||||
expect(mockedReadFile).toHaveBeenCalledTimes(1)
|
||||
expect(mockedReadFile).toHaveBeenCalledWith(expectedFilePath, "utf-8")
|
||||
})
|
||||
|
||||
// Updated test to only check workspace interpolation
|
||||
it("should correctly interpolate workspace variable", async () => {
|
||||
const template = "Workspace is: {{workspace}}"
|
||||
mockedReadFile.mockResolvedValue(template)
|
||||
|
||||
// Added mockMode argument
|
||||
const result = await loadSystemPromptFile(mockCwd, mockMode, mockVariables)
|
||||
|
||||
expect(result).toBe("Workspace is: /path/to/workspace")
|
||||
expect(mockedReadFile).toHaveBeenCalledTimes(1)
|
||||
expect(mockedReadFile).toHaveBeenCalledWith(expectedFilePath, "utf-8")
|
||||
})
|
||||
|
||||
// Updated test for multiple occurrences of workspace
|
||||
it("should handle multiple occurrences of the workspace variable", async () => {
|
||||
const template = "Path: {{workspace}}/{{workspace}}"
|
||||
mockedReadFile.mockResolvedValue(template)
|
||||
|
||||
// Added mockMode argument
|
||||
const result = await loadSystemPromptFile(mockCwd, mockMode, mockVariables)
|
||||
|
||||
expect(result).toBe("Path: /path/to/workspace//path/to/workspace")
|
||||
expect(mockedReadFile).toHaveBeenCalledTimes(1)
|
||||
expect(mockedReadFile).toHaveBeenCalledWith(expectedFilePath, "utf-8")
|
||||
})
|
||||
|
||||
// Updated test for mixed used/unused
|
||||
it("should handle mixed used workspace and unused variables", async () => {
|
||||
const template = "Workspace: {{workspace}}, Unused: {{unusedVar}}, Another: {{another}}"
|
||||
mockedReadFile.mockResolvedValue(template)
|
||||
|
||||
// Added mockMode argument
|
||||
const result = await loadSystemPromptFile(mockCwd, mockMode, mockVariables)
|
||||
|
||||
// Unused variables should remain untouched
|
||||
expect(result).toBe("Workspace: /path/to/workspace, Unused: {{unusedVar}}, Another: {{another}}")
|
||||
expect(mockedReadFile).toHaveBeenCalledTimes(1)
|
||||
expect(mockedReadFile).toHaveBeenCalledWith(expectedFilePath, "utf-8")
|
||||
})
|
||||
|
||||
// Test remains valid, just needs the mode argument and updated template
|
||||
it("should handle templates with placeholders not present in variables", async () => {
|
||||
const template = "Workspace: {{workspace}}, Missing: {{missingPlaceholder}}"
|
||||
mockedReadFile.mockResolvedValue(template)
|
||||
|
||||
// Added mockMode argument
|
||||
const result = await loadSystemPromptFile(mockCwd, mockMode, mockVariables)
|
||||
|
||||
expect(result).toBe("Workspace: /path/to/workspace, Missing: {{missingPlaceholder}}")
|
||||
expect(mockedReadFile).toHaveBeenCalledTimes(1)
|
||||
expect(mockedReadFile).toHaveBeenCalledWith(expectedFilePath, "utf-8")
|
||||
})
|
||||
|
||||
// Removed the test for extra keys as PromptVariables is simple now
|
||||
|
||||
// Test remains valid, just needs the mode argument
|
||||
it("should handle template with no variables", async () => {
|
||||
const template = "This is a static prompt."
|
||||
mockedReadFile.mockResolvedValue(template)
|
||||
|
||||
// Added mockMode argument
|
||||
const result = await loadSystemPromptFile(mockCwd, mockMode, mockVariables)
|
||||
|
||||
expect(result).toBe("This is a static prompt.")
|
||||
expect(mockedReadFile).toHaveBeenCalledTimes(1)
|
||||
expect(mockedReadFile).toHaveBeenCalledWith(expectedFilePath, "utf-8")
|
||||
})
|
||||
})
|
||||
|
|
@ -1,87 +0,0 @@
|
|||
import fs from "fs/promises"
|
||||
import path from "path"
|
||||
import { Mode } from "../../../shared/modes"
|
||||
import { fileExistsAtPath } from "../../../utils/fs"
|
||||
|
||||
export type PromptVariables = {
|
||||
workspace?: string
|
||||
mode?: string
|
||||
language?: string
|
||||
shell?: string
|
||||
operatingSystem?: string
|
||||
}
|
||||
|
||||
function interpolatePromptContent(content: string, variables: PromptVariables): string {
|
||||
let interpolatedContent = content
|
||||
for (const key in variables) {
|
||||
if (
|
||||
Object.prototype.hasOwnProperty.call(variables, key) &&
|
||||
variables[key as keyof PromptVariables] !== undefined
|
||||
) {
|
||||
const placeholder = new RegExp(`\\{\\{${key}\\}\\}`, "g")
|
||||
interpolatedContent = interpolatedContent.replace(placeholder, variables[key as keyof PromptVariables]!)
|
||||
}
|
||||
}
|
||||
return interpolatedContent
|
||||
}
|
||||
|
||||
/**
|
||||
* Safely reads a file, returning an empty string if the file doesn't exist
|
||||
*/
|
||||
async function safeReadFile(filePath: string): Promise<string> {
|
||||
try {
|
||||
const content = await fs.readFile(filePath, "utf-8")
|
||||
// When reading with "utf-8" encoding, content should be a string
|
||||
return content.trim()
|
||||
} catch (err) {
|
||||
const errorCode = (err as NodeJS.ErrnoException).code
|
||||
if (!errorCode || !["ENOENT", "EISDIR"].includes(errorCode)) {
|
||||
throw err
|
||||
}
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the path to a system prompt file for a specific mode
|
||||
*/
|
||||
export function getSystemPromptFilePath(cwd: string, mode: Mode): string {
|
||||
return path.join(cwd, ".roo", `system-prompt-${mode}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads custom system prompt from a file at .roo/system-prompt-[mode slug]
|
||||
* If the file doesn't exist, returns an empty string
|
||||
*/
|
||||
export async function loadSystemPromptFile(cwd: string, mode: Mode, variables: PromptVariables): Promise<string> {
|
||||
const filePath = getSystemPromptFilePath(cwd, mode)
|
||||
const rawContent = await safeReadFile(filePath)
|
||||
if (!rawContent) {
|
||||
return ""
|
||||
}
|
||||
const interpolatedContent = interpolatePromptContent(rawContent, variables)
|
||||
return interpolatedContent
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensures the .roo directory exists, creating it if necessary
|
||||
*/
|
||||
export async function ensureRooDirectory(cwd: string): Promise<void> {
|
||||
const rooDir = path.join(cwd, ".roo")
|
||||
|
||||
// Check if directory already exists
|
||||
if (await fileExistsAtPath(rooDir)) {
|
||||
return
|
||||
}
|
||||
|
||||
// Create the directory
|
||||
try {
|
||||
await fs.mkdir(rooDir, { recursive: true })
|
||||
} catch (err) {
|
||||
// If directory already exists (race condition), ignore the error
|
||||
const errorCode = (err as NodeJS.ErrnoException).code
|
||||
if (errorCode !== "EEXIST") {
|
||||
throw err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,4 @@
|
|||
import * as vscode from "vscode"
|
||||
import * as os from "os"
|
||||
|
||||
import { type ModeConfig, type PromptComponent, type CustomModePrompts, type TodoItem } from "@roo-code/types"
|
||||
|
||||
|
|
@ -12,8 +11,6 @@ import { McpHub } from "../../services/mcp/McpHub"
|
|||
import { CodeIndexManager } from "../../services/code-index/manager"
|
||||
import { SkillsManager } from "../../services/skills/SkillsManager"
|
||||
|
||||
import { PromptVariables, loadSystemPromptFile } from "./sections/custom-system-prompt"
|
||||
|
||||
import type { SystemPromptSettings } from "./types"
|
||||
import {
|
||||
getRulesSection,
|
||||
|
|
@ -136,50 +133,12 @@ export const SYSTEM_PROMPT = async (
|
|||
throw new Error("Extension context is required for generating system prompt")
|
||||
}
|
||||
|
||||
// Try to load custom system prompt from file
|
||||
const variablesForPrompt: PromptVariables = {
|
||||
workspace: cwd,
|
||||
mode: mode,
|
||||
language: language ?? formatLanguage(vscode.env.language),
|
||||
shell: vscode.env.shell,
|
||||
operatingSystem: os.type(),
|
||||
}
|
||||
const fileCustomSystemPrompt = await loadSystemPromptFile(cwd, mode, variablesForPrompt)
|
||||
|
||||
// Check if it's a custom mode
|
||||
const promptComponent = getPromptComponent(customModePrompts, mode)
|
||||
|
||||
// Get full mode config from custom modes or fall back to built-in modes
|
||||
const currentMode = getModeBySlug(mode, customModes) || modes.find((m) => m.slug === mode) || modes[0]
|
||||
|
||||
// If a file-based custom system prompt exists, use it
|
||||
if (fileCustomSystemPrompt) {
|
||||
const { roleDefinition, baseInstructions: baseInstructionsForFile } = getModeSelection(
|
||||
mode,
|
||||
promptComponent,
|
||||
customModes,
|
||||
)
|
||||
|
||||
const customInstructions = await addCustomInstructions(
|
||||
baseInstructionsForFile,
|
||||
globalCustomInstructions || "",
|
||||
cwd,
|
||||
mode,
|
||||
{
|
||||
language: language ?? formatLanguage(vscode.env.language),
|
||||
rooIgnoreInstructions,
|
||||
settings,
|
||||
},
|
||||
)
|
||||
|
||||
// For file-based prompts, don't include the tool sections
|
||||
return `${roleDefinition}
|
||||
|
||||
${fileCustomSystemPrompt}
|
||||
|
||||
${customInstructions}`
|
||||
}
|
||||
|
||||
return generatePrompt(
|
||||
context,
|
||||
cwd,
|
||||
|
|
|
|||
|
|
@ -65,6 +65,8 @@ vi.mock("fs/promises", async (importOriginal) => {
|
|||
}),
|
||||
unlink: vi.fn().mockResolvedValue(undefined),
|
||||
rmdir: vi.fn().mockResolvedValue(undefined),
|
||||
stat: vi.fn().mockRejectedValue({ code: "ENOENT" }),
|
||||
readdir: vi.fn().mockResolvedValue([]),
|
||||
}
|
||||
|
||||
return {
|
||||
|
|
@ -962,9 +964,15 @@ describe("Cline", () => {
|
|||
mockProvider = {
|
||||
context: {
|
||||
globalStorageUri: { fsPath: "/test/storage" },
|
||||
globalState: {
|
||||
get: vi.fn().mockImplementation(() => undefined),
|
||||
update: vi.fn().mockResolvedValue(undefined),
|
||||
keys: vi.fn().mockReturnValue([]),
|
||||
},
|
||||
},
|
||||
getState: vi.fn().mockResolvedValue({
|
||||
apiConfiguration: mockApiConfig,
|
||||
mcpEnabled: false,
|
||||
}),
|
||||
getMcpHub: vi.fn().mockReturnValue(undefined),
|
||||
getSkillsManager: vi.fn().mockReturnValue(undefined),
|
||||
|
|
@ -996,6 +1004,7 @@ describe("Cline", () => {
|
|||
task: "parent task",
|
||||
startTask: false,
|
||||
})
|
||||
vi.spyOn(parent as any, "getSystemPrompt").mockResolvedValue("mock system prompt")
|
||||
|
||||
// Mock the API stream response
|
||||
const mockStream = {
|
||||
|
|
@ -1032,6 +1041,7 @@ describe("Cline", () => {
|
|||
rootTask: parent,
|
||||
startTask: false,
|
||||
})
|
||||
vi.spyOn(child as any, "getSystemPrompt").mockResolvedValue("mock system prompt")
|
||||
|
||||
// Spy on child.say to verify the emitted message type
|
||||
const saySpy = vi.spyOn(child, "say")
|
||||
|
|
@ -1083,6 +1093,7 @@ describe("Cline", () => {
|
|||
task: "parent task",
|
||||
startTask: false,
|
||||
})
|
||||
vi.spyOn(parent as any, "getSystemPrompt").mockResolvedValue("mock system prompt")
|
||||
|
||||
// Mock the API stream response
|
||||
const mockStream = {
|
||||
|
|
@ -1121,6 +1132,7 @@ describe("Cline", () => {
|
|||
rootTask: parent,
|
||||
startTask: false,
|
||||
})
|
||||
vi.spyOn(child as any, "getSystemPrompt").mockResolvedValue("mock system prompt")
|
||||
|
||||
vi.spyOn(child.api, "createMessage").mockReturnValue(mockStream)
|
||||
|
||||
|
|
@ -1143,6 +1155,7 @@ describe("Cline", () => {
|
|||
task: "parent task",
|
||||
startTask: false,
|
||||
})
|
||||
vi.spyOn(parent as any, "getSystemPrompt").mockResolvedValue("mock system prompt")
|
||||
|
||||
// Mock the API stream response
|
||||
const mockStream = {
|
||||
|
|
@ -1176,6 +1189,7 @@ describe("Cline", () => {
|
|||
rootTask: parent,
|
||||
startTask: false,
|
||||
})
|
||||
vi.spyOn(child1 as any, "getSystemPrompt").mockResolvedValue("mock system prompt")
|
||||
|
||||
vi.spyOn(child1.api, "createMessage").mockReturnValue(mockStream)
|
||||
|
||||
|
|
@ -1199,6 +1213,7 @@ describe("Cline", () => {
|
|||
rootTask: parent,
|
||||
startTask: false,
|
||||
})
|
||||
vi.spyOn(child2 as any, "getSystemPrompt").mockResolvedValue("mock system prompt")
|
||||
|
||||
vi.spyOn(child2.api, "createMessage").mockReturnValue(mockStream)
|
||||
|
||||
|
|
@ -1215,6 +1230,7 @@ describe("Cline", () => {
|
|||
mockApiConfig.rateLimitSeconds = 0
|
||||
mockProvider.getState.mockResolvedValue({
|
||||
apiConfiguration: mockApiConfig,
|
||||
mcpEnabled: false,
|
||||
})
|
||||
|
||||
// Create parent task
|
||||
|
|
@ -1224,6 +1240,7 @@ describe("Cline", () => {
|
|||
task: "parent task",
|
||||
startTask: false,
|
||||
})
|
||||
vi.spyOn(parent as any, "getSystemPrompt").mockResolvedValue("mock system prompt")
|
||||
|
||||
// Mock the API stream response
|
||||
const mockStream = {
|
||||
|
|
@ -1257,6 +1274,7 @@ describe("Cline", () => {
|
|||
rootTask: parent,
|
||||
startTask: false,
|
||||
})
|
||||
vi.spyOn(child as any, "getSystemPrompt").mockResolvedValue("mock system prompt")
|
||||
|
||||
vi.spyOn(child.api, "createMessage").mockReturnValue(mockStream)
|
||||
|
||||
|
|
@ -1276,6 +1294,7 @@ describe("Cline", () => {
|
|||
task: "test task",
|
||||
startTask: false,
|
||||
})
|
||||
vi.spyOn(task as any, "getSystemPrompt").mockResolvedValue("mock system prompt")
|
||||
|
||||
// Mock the API stream response
|
||||
const mockStream = {
|
||||
|
|
|
|||
|
|
@ -94,7 +94,6 @@ import { ContextProxy } from "../config/ContextProxy"
|
|||
import { ProviderSettingsManager } from "../config/ProviderSettingsManager"
|
||||
import { CustomModesManager } from "../config/CustomModesManager"
|
||||
import { Task } from "../task/Task"
|
||||
import { getSystemPromptFilePath } from "../prompts/sections/custom-system-prompt"
|
||||
|
||||
import { webviewMessageHandler } from "./webviewMessageHandler"
|
||||
import type { ClineMessage, TodoItem } from "@roo-code/types"
|
||||
|
|
@ -2018,14 +2017,6 @@ export class ClineProvider
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if there is a file-based system prompt override for the given mode
|
||||
*/
|
||||
async hasFileBasedSystemPromptOverride(mode: Mode): Promise<boolean> {
|
||||
const promptFilePath = getSystemPromptFilePath(this.cwd, mode)
|
||||
return await fileExistsAtPath(promptFilePath)
|
||||
}
|
||||
|
||||
/**
|
||||
* Merges allowed commands from global state and workspace configuration
|
||||
* with proper validation and deduplication
|
||||
|
|
@ -2204,10 +2195,6 @@ export class ClineProvider
|
|||
const mergedDeniedCommands = this.mergeDeniedCommands(deniedCommands)
|
||||
const cwd = this.cwd
|
||||
|
||||
// Check if there's a system prompt override for the current mode
|
||||
const currentMode = mode ?? defaultModeSlug
|
||||
const hasSystemPromptOverride = await this.hasFileBasedSystemPromptOverride(currentMode)
|
||||
|
||||
return {
|
||||
version: this.context.extension?.packageJSON?.version ?? "",
|
||||
apiConfiguration,
|
||||
|
|
@ -2288,7 +2275,6 @@ export class ClineProvider
|
|||
maxImageFileSize: maxImageFileSize ?? 5,
|
||||
maxTotalImageSize: maxTotalImageSize ?? 20,
|
||||
settingsImportedAt: this.settingsImportedAt,
|
||||
hasSystemPromptOverride,
|
||||
historyPreviewCollapsed: historyPreviewCollapsed ?? false,
|
||||
reasoningBlockCollapsed: reasoningBlockCollapsed ?? true,
|
||||
enterBehavior: enterBehavior ?? "send",
|
||||
|
|
@ -2358,12 +2344,7 @@ export class ClineProvider
|
|||
async getState(): Promise<
|
||||
Omit<
|
||||
ExtensionState,
|
||||
| "clineMessages"
|
||||
| "renderContext"
|
||||
| "hasOpenedModeSelector"
|
||||
| "version"
|
||||
| "shouldShowAnnouncement"
|
||||
| "hasSystemPromptOverride"
|
||||
"clineMessages" | "renderContext" | "hasOpenedModeSelector" | "version" | "shouldShowAnnouncement"
|
||||
>
|
||||
> {
|
||||
const stateValues = this.contextProxy.getValues()
|
||||
|
|
|
|||
|
|
@ -44,7 +44,6 @@ import ChatRow from "./ChatRow"
|
|||
import WarningRow from "./WarningRow"
|
||||
import { ChatTextArea } from "./ChatTextArea"
|
||||
import TaskHeader from "./TaskHeader"
|
||||
import SystemPromptWarning from "./SystemPromptWarning"
|
||||
import ProfileViolationWarning from "./ProfileViolationWarning"
|
||||
import { CheckpointWarning } from "./CheckpointWarning"
|
||||
import { QueuedMessages } from "./QueuedMessages"
|
||||
|
|
@ -92,7 +91,6 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
|
|||
alwaysAllowModeSwitch,
|
||||
customModes,
|
||||
telemetrySetting,
|
||||
hasSystemPromptOverride,
|
||||
soundEnabled,
|
||||
soundVolume,
|
||||
cloudIsAuthenticated,
|
||||
|
|
@ -1707,12 +1705,6 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
|
|||
todos={latestTodos}
|
||||
/>
|
||||
|
||||
{hasSystemPromptOverride && (
|
||||
<div className="px-3">
|
||||
<SystemPromptWarning />
|
||||
</div>
|
||||
)}
|
||||
|
||||
{checkpointWarning && (
|
||||
<div className="px-3">
|
||||
<CheckpointWarning warning={checkpointWarning} />
|
||||
|
|
|
|||
|
|
@ -1,17 +0,0 @@
|
|||
import React from "react"
|
||||
import { useAppTranslation } from "@/i18n/TranslationContext"
|
||||
|
||||
export const SystemPromptWarning: React.FC = () => {
|
||||
const { t } = useAppTranslation()
|
||||
|
||||
return (
|
||||
<div className="flex items-center px-4 py-2 mb-2 text-sm rounded bg-vscode-editorWarning-foreground text-vscode-editor-background">
|
||||
<div className="flex items-center justify-center w-5 h-5 mr-2">
|
||||
<span className="codicon codicon-warning" />
|
||||
</div>
|
||||
<span>{t("chat:systemPromptWarning")}</span>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default SystemPromptWarning
|
||||
|
|
@ -92,7 +92,6 @@ const ModesView = () => {
|
|||
const [isToolsEditMode, setIsToolsEditMode] = useState(false)
|
||||
const [showConfigMenu, setShowConfigMenu] = useState(false)
|
||||
const [isCreateModeDialogOpen, setIsCreateModeDialogOpen] = useState(false)
|
||||
const [isSystemPromptDisclosureOpen, setIsSystemPromptDisclosureOpen] = useState(false)
|
||||
const [isExporting, setIsExporting] = useState(false)
|
||||
const [isImporting, setIsImporting] = useState(false)
|
||||
const [showImportDialog, setShowImportDialog] = useState(false)
|
||||
|
|
@ -1328,67 +1327,6 @@ const ModesView = () => {
|
|||
</Button>
|
||||
</StandardTooltip>
|
||||
</div>
|
||||
|
||||
{/* Advanced Features Disclosure */}
|
||||
<div className="mt-4">
|
||||
<button
|
||||
onClick={() => setIsSystemPromptDisclosureOpen(!isSystemPromptDisclosureOpen)}
|
||||
className="flex items-center text-xs text-vscode-foreground hover:text-vscode-textLink-foreground focus:outline-none"
|
||||
aria-expanded={isSystemPromptDisclosureOpen}>
|
||||
<span
|
||||
className={`codicon codicon-${isSystemPromptDisclosureOpen ? "chevron-down" : "chevron-right"} mr-1`}></span>
|
||||
<span>{t("prompts:advanced.title")}</span>
|
||||
</button>
|
||||
|
||||
{isSystemPromptDisclosureOpen && (
|
||||
<div className="mt-2 ml-5 space-y-4">
|
||||
{/* Override System Prompt Section */}
|
||||
<div>
|
||||
<h4 className="text-xs font-semibold text-vscode-foreground mb-2">
|
||||
Override System Prompt
|
||||
</h4>
|
||||
<div className="text-xs text-vscode-descriptionForeground">
|
||||
<Trans
|
||||
i18nKey="prompts:advancedSystemPrompt.description"
|
||||
values={{
|
||||
slug: getCurrentMode()?.slug || "code",
|
||||
}}
|
||||
components={{
|
||||
span: (
|
||||
<span
|
||||
className="text-vscode-textLink-foreground cursor-pointer underline"
|
||||
onClick={() => {
|
||||
const currentMode = getCurrentMode()
|
||||
if (!currentMode) return
|
||||
|
||||
vscode.postMessage({
|
||||
type: "openFile",
|
||||
text: `./.roo/system-prompt-${currentMode.slug}`,
|
||||
values: {
|
||||
create: true,
|
||||
content: "",
|
||||
},
|
||||
})
|
||||
}}
|
||||
/>
|
||||
),
|
||||
"1": (
|
||||
<VSCodeLink
|
||||
href={buildDocLink(
|
||||
"features/footgun-prompting",
|
||||
"prompts_advanced_system_prompt",
|
||||
)}
|
||||
style={{ display: "inline" }}
|
||||
aria-label="Read important information about overriding system prompts"></VSCodeLink>
|
||||
),
|
||||
"2": <strong />,
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="pb-5">
|
||||
|
|
|
|||
|
|
@ -37,7 +37,6 @@ export interface ExtensionStateContextType extends ExtensionState {
|
|||
showWelcome: boolean
|
||||
theme: any
|
||||
mcpServers: McpServer[]
|
||||
hasSystemPromptOverride?: boolean
|
||||
currentCheckpoint?: string
|
||||
currentTaskTodos?: TodoItem[] // Initial todos for the current task
|
||||
filePaths: string[]
|
||||
|
|
|
|||
1
webview-ui/src/i18n/locales/ca/chat.json
generated
1
webview-ui/src/i18n/locales/ca/chat.json
generated
|
|
@ -408,7 +408,6 @@
|
|||
"copy_code": "Copiar codi"
|
||||
}
|
||||
},
|
||||
"systemPromptWarning": "ADVERTÈNCIA: S'ha activat una substitució personalitzada d'instruccions del sistema. Això pot trencar greument la funcionalitat i causar un comportament impredictible.",
|
||||
"profileViolationWarning": "El perfil actual no és compatible amb la configuració de la teva organització",
|
||||
"shellIntegration": {
|
||||
"title": "Advertència d'execució d'ordres",
|
||||
|
|
|
|||
7
webview-ui/src/i18n/locales/ca/prompts.json
generated
7
webview-ui/src/i18n/locales/ca/prompts.json
generated
|
|
@ -71,9 +71,6 @@
|
|||
"description": "Només disponible en aquest espai de treball. Si el mode exportat contenia fitxers de regles, es tornaran a crear a la carpeta .roo/rules-{slug}/."
|
||||
}
|
||||
},
|
||||
"advanced": {
|
||||
"title": "Avançat"
|
||||
},
|
||||
"globalCustomInstructions": {
|
||||
"title": "Instruccions personalitzades per a tots els modes",
|
||||
"description": "Aquestes instruccions s'apliquen a tots els modes. Proporcionen un conjunt bàsic de comportaments que es poden millorar amb instruccions específiques de cada mode a continuació. <0>Més informació</0>",
|
||||
|
|
@ -146,10 +143,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"advancedSystemPrompt": {
|
||||
"title": "Avançat: Sobreescriure prompt del sistema",
|
||||
"description": "<2>⚠️ Avís:</2> Aquesta funcionalitat avançada eludeix les salvaguardes. <1>LLEGIU AIXÒ ABANS D'UTILITZAR!</1>Sobreescriviu el prompt del sistema per defecte creant un fitxer a <span>.roo/system-prompt-{{slug}}</span>."
|
||||
},
|
||||
"createModeDialog": {
|
||||
"title": "Crear nou mode",
|
||||
"close": "Tancar",
|
||||
|
|
|
|||
1
webview-ui/src/i18n/locales/de/chat.json
generated
1
webview-ui/src/i18n/locales/de/chat.json
generated
|
|
@ -408,7 +408,6 @@
|
|||
"copy_code": "Code kopieren"
|
||||
}
|
||||
},
|
||||
"systemPromptWarning": "WARNUNG: Benutzerdefinierte Systemaufforderung aktiv. Dies kann die Funktionalität erheblich beeinträchtigen und zu unvorhersehbarem Verhalten führen.",
|
||||
"profileViolationWarning": "Das aktuelle Profil ist nicht kompatibel mit den Einstellungen deiner Organisation",
|
||||
"shellIntegration": {
|
||||
"title": "Befehlsausführungswarnung",
|
||||
|
|
|
|||
7
webview-ui/src/i18n/locales/de/prompts.json
generated
7
webview-ui/src/i18n/locales/de/prompts.json
generated
|
|
@ -71,9 +71,6 @@
|
|||
"description": "Nur in diesem Arbeitsbereich verfügbar. Wenn der exportierte Modus Regeldateien enthielt, werden diese im Ordner .roo/rules-{slug}/ neu erstellt."
|
||||
}
|
||||
},
|
||||
"advanced": {
|
||||
"title": "Erweitert"
|
||||
},
|
||||
"globalCustomInstructions": {
|
||||
"title": "Benutzerdefinierte Anweisungen für alle Modi",
|
||||
"description": "Diese Anweisungen gelten für alle Modi. Sie bieten einen grundlegenden Satz von Verhaltensweisen, die durch modusspezifische Anweisungen unten erweitert werden können. <0>Mehr erfahren</0>",
|
||||
|
|
@ -146,10 +143,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"advancedSystemPrompt": {
|
||||
"title": "Erweitert: System-Prompt überschreiben",
|
||||
"description": "<2>⚠️ Warnung:</2> Diese erweiterte Funktion umgeht Sicherheitsvorkehrungen. <1>LESEN SIE DIES VOR DER VERWENDUNG!</1>Überschreiben Sie den Standard-System-Prompt, indem Sie eine Datei unter <span>.roo/system-prompt-{{slug}}</span> erstellen."
|
||||
},
|
||||
"createModeDialog": {
|
||||
"title": "Neuen Modus erstellen",
|
||||
"close": "Schließen",
|
||||
|
|
|
|||
|
|
@ -174,14 +174,14 @@
|
|||
"rateLimitWait": "Rate limiting",
|
||||
"errorTitle": "Provider Error {{code}}",
|
||||
"errorMessage": {
|
||||
"docs": "Docs",
|
||||
"goToSettings": "Settings",
|
||||
"400": "The provider couldn't process the request as made. Stop the task and try a different approach.",
|
||||
"401": "Couldn't authenticate with provider. Please check your API key configuration.",
|
||||
"402": "You seem to have run out of funds/credits in your account. Go to your provider and add more to continue.",
|
||||
"403": "Unauthorized. Your API key is valid, but the provider refused to complete this request.",
|
||||
"429": "Too many requests. You're being rate-limited by the provider. Please wait a bit before your next API call.",
|
||||
"500": "Provider server error. Something is wrong on the provider side, there's nothing wrong with your request.",
|
||||
"docs": "Docs",
|
||||
"goToSettings": "Settings",
|
||||
"connection": "Connection error. Make sure you have a working internet connection.",
|
||||
"unknown": "Unknown API error. Please contact Roo Code support.",
|
||||
"claudeCodeNotAuthenticated": "You need to sign in to use Claude Code. Go to Settings and click \"Sign in to Claude Code\" to authenticate."
|
||||
|
|
@ -435,7 +435,6 @@
|
|||
"copy_code": "Copy code"
|
||||
}
|
||||
},
|
||||
"systemPromptWarning": "WARNING: Custom system prompt override active. This can severely break functionality and cause unpredictable behavior.",
|
||||
"profileViolationWarning": "The current profile isn't compatible with your organization's settings",
|
||||
"shellIntegration": {
|
||||
"title": "Command Execution Warning",
|
||||
|
|
|
|||
|
|
@ -70,9 +70,6 @@
|
|||
"description": "Only available in this workspace. If the exported mode contained rules files, they will be recreated in .roo/rules-{slug}/ folder."
|
||||
}
|
||||
},
|
||||
"advanced": {
|
||||
"title": "Advanced: Override System Prompt"
|
||||
},
|
||||
"globalCustomInstructions": {
|
||||
"title": "Custom Instructions for All Modes",
|
||||
"description": "These instructions apply to all modes. They provide a base set of behaviors that can be enhanced by mode-specific instructions below. <0>Learn more</0>",
|
||||
|
|
@ -145,10 +142,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"advancedSystemPrompt": {
|
||||
"title": "Advanced: Override System Prompt",
|
||||
"description": "<2>⚠️ Warning:</2> This advanced feature bypasses safeguards. <1>READ THIS BEFORE USING!</1>Override the default system prompt by creating a file at <span>.roo/system-prompt-{{slug}}</span>."
|
||||
},
|
||||
"createModeDialog": {
|
||||
"title": "Create New Mode",
|
||||
"close": "Close",
|
||||
|
|
|
|||
1
webview-ui/src/i18n/locales/es/chat.json
generated
1
webview-ui/src/i18n/locales/es/chat.json
generated
|
|
@ -408,7 +408,6 @@
|
|||
"copy_code": "Copiar código"
|
||||
}
|
||||
},
|
||||
"systemPromptWarning": "ADVERTENCIA: Anulación de instrucciones del sistema personalizada activa. Esto puede romper gravemente la funcionalidad y causar un comportamiento impredecible.",
|
||||
"profileViolationWarning": "El perfil actual no es compatible con la configuración de tu organización",
|
||||
"shellIntegration": {
|
||||
"title": "Advertencia de ejecución de comandos",
|
||||
|
|
|
|||
7
webview-ui/src/i18n/locales/es/prompts.json
generated
7
webview-ui/src/i18n/locales/es/prompts.json
generated
|
|
@ -71,9 +71,6 @@
|
|||
"description": "Solo disponible en este espacio de trabajo. Si el modo exportado contenía archivos de reglas, se volverán a crear en la carpeta .roo/rules-{slug}/."
|
||||
}
|
||||
},
|
||||
"advanced": {
|
||||
"title": "Avanzado"
|
||||
},
|
||||
"globalCustomInstructions": {
|
||||
"title": "Instrucciones personalizadas para todos los modos",
|
||||
"description": "Estas instrucciones se aplican a todos los modos. Proporcionan un conjunto base de comportamientos que pueden ser mejorados por instrucciones específicas de cada modo a continuación. <0>Más información</0>",
|
||||
|
|
@ -146,10 +143,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"advancedSystemPrompt": {
|
||||
"title": "Avanzado: Anular solicitud del sistema",
|
||||
"description": "<2>⚠️ Advertencia:</2> Esta función avanzada omite las medidas de seguridad. <1>¡LEE ESTO ANTES DE USAR!</1>Anula la solicitud del sistema predeterminada creando un archivo en <span>.roo/system-prompt-{{slug}}</span>."
|
||||
},
|
||||
"createModeDialog": {
|
||||
"title": "Crear nuevo modo",
|
||||
"close": "Cerrar",
|
||||
|
|
|
|||
1
webview-ui/src/i18n/locales/fr/chat.json
generated
1
webview-ui/src/i18n/locales/fr/chat.json
generated
|
|
@ -408,7 +408,6 @@
|
|||
"copy_code": "Copier le code"
|
||||
}
|
||||
},
|
||||
"systemPromptWarning": "AVERTISSEMENT : Remplacement d'instructions système personnalisées actif. Cela peut gravement perturber la fonctionnalité et provoquer un comportement imprévisible.",
|
||||
"profileViolationWarning": "Le profil actuel n'est pas compatible avec les paramètres de votre organisation",
|
||||
"shellIntegration": {
|
||||
"title": "Avertissement d'exécution de commande",
|
||||
|
|
|
|||
7
webview-ui/src/i18n/locales/fr/prompts.json
generated
7
webview-ui/src/i18n/locales/fr/prompts.json
generated
|
|
@ -71,9 +71,6 @@
|
|||
"description": "Disponible uniquement dans cet espace de travail. Si le mode exporté contenait des fichiers de règles, ils seront recréés dans le dossier .roo/rules-{slug}/."
|
||||
}
|
||||
},
|
||||
"advanced": {
|
||||
"title": "Avancé"
|
||||
},
|
||||
"globalCustomInstructions": {
|
||||
"title": "Instructions personnalisées pour tous les modes",
|
||||
"description": "Ces instructions s'appliquent à tous les modes. Elles fournissent un ensemble de comportements de base qui peuvent être améliorés par des instructions spécifiques au mode ci-dessous. <0>En savoir plus</0>",
|
||||
|
|
@ -146,10 +143,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"advancedSystemPrompt": {
|
||||
"title": "Avancé : Remplacer le prompt système",
|
||||
"description": "<2>⚠️ Attention :</2> Cette fonctionnalité avancée contourne les mesures de protection. <1>LISEZ CECI AVANT UTILISATION !</1>Remplacez le prompt système par défaut en créant un fichier à l'emplacement <span>.roo/system-prompt-{{slug}}</span>."
|
||||
},
|
||||
"createModeDialog": {
|
||||
"title": "Créer un nouveau mode",
|
||||
"close": "Fermer",
|
||||
|
|
|
|||
1
webview-ui/src/i18n/locales/hi/chat.json
generated
1
webview-ui/src/i18n/locales/hi/chat.json
generated
|
|
@ -408,7 +408,6 @@
|
|||
"copy_code": "कोड कॉपी करें"
|
||||
}
|
||||
},
|
||||
"systemPromptWarning": "चेतावनी: कस्टम सिस्टम प्रॉम्प्ट ओवरराइड सक्रिय है। यह कार्यक्षमता को गंभीर रूप से बाधित कर सकता है और अनियमित व्यवहार का कारण बन सकता है.",
|
||||
"profileViolationWarning": "वर्तमान प्रोफ़ाइल आपके संगठन की सेटिंग्स के साथ संगत नहीं है",
|
||||
"shellIntegration": {
|
||||
"title": "कमांड निष्पादन चेतावनी",
|
||||
|
|
|
|||
7
webview-ui/src/i18n/locales/hi/prompts.json
generated
7
webview-ui/src/i18n/locales/hi/prompts.json
generated
|
|
@ -71,9 +71,6 @@
|
|||
"description": "केवल इस कार्यक्षेत्र में उपलब्ध। यदि निर्यात किए गए मोड में नियम फाइलें थीं, तो उन्हें .roo/rules-{slug}/ फ़ोल्डर में फिर से बनाया जाएगा।"
|
||||
}
|
||||
},
|
||||
"advanced": {
|
||||
"title": "उन्नत"
|
||||
},
|
||||
"globalCustomInstructions": {
|
||||
"title": "सभी मोड्स के लिए कस्टम निर्देश",
|
||||
"description": "ये निर्देश सभी मोड्स पर लागू होते हैं। वे व्यवहारों का एक आधार सेट प्रदान करते हैं जिन्हें नीचे दिए गए मोड-विशिष्ट निर्देशों द्वारा बढ़ाया जा सकता है। <0>और जानें</0>",
|
||||
|
|
@ -146,10 +143,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"advancedSystemPrompt": {
|
||||
"title": "उन्नत: सिस्टम प्रॉम्प्ट ओवरराइड करें",
|
||||
"description": "<2>⚠️ चेतावनी:</2> यह उन्नत सुविधा सुरक्षा उपायों को दरकिनार करती है। <1>उपयोग करने से पहले इसे पढ़ें!</1>अपने वर्कस्पेस में <span>.roo/system-prompt-{{slug}}</span> पर एक फ़ाइल बनाकर डिफ़ॉल्ट सिस्टम प्रॉम्प्ट को ओवरराइड करें।"
|
||||
},
|
||||
"createModeDialog": {
|
||||
"title": "नया मोड बनाएँ",
|
||||
"close": "बंद करें",
|
||||
|
|
|
|||
1
webview-ui/src/i18n/locales/id/chat.json
generated
1
webview-ui/src/i18n/locales/id/chat.json
generated
|
|
@ -445,7 +445,6 @@
|
|||
"copy_code": "Salin kode"
|
||||
}
|
||||
},
|
||||
"systemPromptWarning": "PERINGATAN: Override system prompt kustom aktif. Ini dapat merusak fungsionalitas secara serius dan menyebabkan perilaku yang tidak terduga.",
|
||||
"profileViolationWarning": "Profil saat ini tidak kompatibel dengan pengaturan organisasi kamu",
|
||||
"shellIntegration": {
|
||||
"title": "Peringatan Eksekusi Perintah",
|
||||
|
|
|
|||
7
webview-ui/src/i18n/locales/id/prompts.json
generated
7
webview-ui/src/i18n/locales/id/prompts.json
generated
|
|
@ -71,9 +71,6 @@
|
|||
"description": "Hanya tersedia di ruang kerja ini. Jika mode yang diekspor berisi file aturan, file tersebut akan dibuat ulang di folder .roo/rules-{slug}/."
|
||||
}
|
||||
},
|
||||
"advanced": {
|
||||
"title": "Lanjutan"
|
||||
},
|
||||
"globalCustomInstructions": {
|
||||
"title": "Instruksi Kustom untuk Semua Mode",
|
||||
"description": "Instruksi ini berlaku untuk semua mode. Mereka menyediakan set dasar perilaku yang dapat ditingkatkan oleh instruksi khusus mode di bawah. <0>Pelajari lebih lanjut</0>",
|
||||
|
|
@ -146,10 +143,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"advancedSystemPrompt": {
|
||||
"title": "Lanjutan: Override System Prompt",
|
||||
"description": "<2>⚠️ Peringatan:</2> Fitur lanjutan ini melewati pengamanan. <1>BACA INI SEBELUM MENGGUNAKAN!</1>Override system prompt default dengan membuat file di <span>.roo/system-prompt-{{slug}}</span>."
|
||||
},
|
||||
"createModeDialog": {
|
||||
"title": "Buat Mode Baru",
|
||||
"close": "Tutup",
|
||||
|
|
|
|||
1
webview-ui/src/i18n/locales/it/chat.json
generated
1
webview-ui/src/i18n/locales/it/chat.json
generated
|
|
@ -408,7 +408,6 @@
|
|||
"copy_code": "Copia codice"
|
||||
}
|
||||
},
|
||||
"systemPromptWarning": "ATTENZIONE: Sovrascrittura personalizzata delle istruzioni di sistema attiva. Questo può compromettere gravemente le funzionalità e causare comportamenti imprevedibili.",
|
||||
"profileViolationWarning": "Il profilo corrente non è compatibile con le impostazioni della tua organizzazione",
|
||||
"shellIntegration": {
|
||||
"title": "Avviso di esecuzione comando",
|
||||
|
|
|
|||
7
webview-ui/src/i18n/locales/it/prompts.json
generated
7
webview-ui/src/i18n/locales/it/prompts.json
generated
|
|
@ -71,9 +71,6 @@
|
|||
"description": "Disponibile solo in questo spazio di lavoro. Se la modalità esportata conteneva file di regole, verranno ricreati nella cartella .roo/rules-{slug}/."
|
||||
}
|
||||
},
|
||||
"advanced": {
|
||||
"title": "Avanzato"
|
||||
},
|
||||
"globalCustomInstructions": {
|
||||
"title": "Istruzioni personalizzate per tutte le modalità",
|
||||
"description": "Queste istruzioni si applicano a tutte le modalità. Forniscono un insieme base di comportamenti che possono essere migliorati dalle istruzioni specifiche per modalità qui sotto. <0>Scopri di più</0>",
|
||||
|
|
@ -146,10 +143,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"advancedSystemPrompt": {
|
||||
"title": "Avanzato: Sovrascrivi prompt di sistema",
|
||||
"description": "<2>⚠️ Attenzione:</2> Questa funzionalità avanzata bypassa le misure di sicurezza. <1>LEGGI QUESTO PRIMA DI USARE!</1>Sovrascrivi il prompt di sistema predefinito creando un file in <span>.roo/system-prompt-{{slug}}</span>."
|
||||
},
|
||||
"createModeDialog": {
|
||||
"title": "Crea nuova modalità",
|
||||
"close": "Chiudi",
|
||||
|
|
|
|||
1
webview-ui/src/i18n/locales/ja/chat.json
generated
1
webview-ui/src/i18n/locales/ja/chat.json
generated
|
|
@ -408,7 +408,6 @@
|
|||
"copy_code": "コードをコピー"
|
||||
}
|
||||
},
|
||||
"systemPromptWarning": "警告:カスタムシステムプロンプトの上書きが有効です。これにより機能が深刻に損なわれ、予測不可能な動作が発生する可能性があります。",
|
||||
"profileViolationWarning": "現在のプロファイルは組織の設定と互換性がありません",
|
||||
"shellIntegration": {
|
||||
"title": "コマンド実行警告",
|
||||
|
|
|
|||
7
webview-ui/src/i18n/locales/ja/prompts.json
generated
7
webview-ui/src/i18n/locales/ja/prompts.json
generated
|
|
@ -71,9 +71,6 @@
|
|||
"description": "このワークスペースでのみ利用可能です。エクスポートされたモードにルールファイルが含まれていた場合、それらは.roo/rules-{slug}/フォルダに再作成されます。"
|
||||
}
|
||||
},
|
||||
"advanced": {
|
||||
"title": "詳細設定"
|
||||
},
|
||||
"globalCustomInstructions": {
|
||||
"title": "すべてのモードのカスタム指示",
|
||||
"description": "これらの指示はすべてのモードに適用されます。モード固有の指示で強化できる基本的な動作セットを提供します。<0>詳細はこちら</0>",
|
||||
|
|
@ -146,10 +143,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"advancedSystemPrompt": {
|
||||
"title": "詳細設定:システムプロンプトの上書き",
|
||||
"description": "<2>⚠️ 警告:</2> この高度な機能は安全対策をバイパスします。<1>使用前にこれを読んでください!</1>ワークスペースの<span>.roo/system-prompt-{{slug}}</span>にファイルを作成することで、デフォルトのシステムプロンプトを上書きします。"
|
||||
},
|
||||
"createModeDialog": {
|
||||
"title": "新しいモードを作成",
|
||||
"close": "閉じる",
|
||||
|
|
|
|||
1
webview-ui/src/i18n/locales/ko/chat.json
generated
1
webview-ui/src/i18n/locales/ko/chat.json
generated
|
|
@ -408,7 +408,6 @@
|
|||
"copy_code": "코드 복사"
|
||||
}
|
||||
},
|
||||
"systemPromptWarning": "경고: 사용자 정의 시스템 프롬프트 재정의가 활성화되었습니다. 이로 인해 기능이 심각하게 손상되고 예측할 수 없는 동작이 발생할 수 있습니다.",
|
||||
"profileViolationWarning": "현재 프로필이 조직 설정과 호환되지 않습니다",
|
||||
"shellIntegration": {
|
||||
"title": "명령 실행 경고",
|
||||
|
|
|
|||
7
webview-ui/src/i18n/locales/ko/prompts.json
generated
7
webview-ui/src/i18n/locales/ko/prompts.json
generated
|
|
@ -71,9 +71,6 @@
|
|||
"description": "이 작업 공간에서만 사용할 수 있습니다. 내보낸 모드에 규칙 파일이 포함된 경우 .roo/rules-{slug}/ 폴더에 다시 생성됩니다."
|
||||
}
|
||||
},
|
||||
"advanced": {
|
||||
"title": "고급"
|
||||
},
|
||||
"globalCustomInstructions": {
|
||||
"title": "모든 모드에 대한 사용자 지정 지침",
|
||||
"description": "이 지침은 모든 모드에 적용됩니다. 아래의 모드별 지침으로 향상될 수 있는 기본 동작 세트를 제공합니다. <0>더 알아보기</0>",
|
||||
|
|
@ -146,10 +143,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"advancedSystemPrompt": {
|
||||
"title": "고급: 시스템 프롬프트 재정의",
|
||||
"description": "<2>⚠️ 경고:</2> 이 고급 기능은 안전 장치를 우회합니다. <1>사용하기 전에 이것을 읽으십시오!</1>작업 공간의 <span>.roo/system-prompt-{{slug}}</span>에 파일을 생성하여 기본 시스템 프롬프트를 재정의합니다."
|
||||
},
|
||||
"createModeDialog": {
|
||||
"title": "새 모드 만들기",
|
||||
"close": "닫기",
|
||||
|
|
|
|||
1
webview-ui/src/i18n/locales/nl/chat.json
generated
1
webview-ui/src/i18n/locales/nl/chat.json
generated
|
|
@ -408,7 +408,6 @@
|
|||
"copy_code": "Code kopiëren"
|
||||
}
|
||||
},
|
||||
"systemPromptWarning": "WAARSCHUWING: Aangepaste systeemprompt actief. Dit kan de functionaliteit ernstig verstoren en onvoorspelbaar gedrag veroorzaken.",
|
||||
"profileViolationWarning": "Het huidige profiel is niet compatibel met de instellingen van uw organisatie",
|
||||
"shellIntegration": {
|
||||
"title": "Waarschuwing commando-uitvoering",
|
||||
|
|
|
|||
7
webview-ui/src/i18n/locales/nl/prompts.json
generated
7
webview-ui/src/i18n/locales/nl/prompts.json
generated
|
|
@ -71,9 +71,6 @@
|
|||
"description": "Alleen beschikbaar in deze werkruimte. Als de geëxporteerde modus regelbestanden bevatte, worden deze opnieuw gemaakt in de map .roo/rules-{slug}/."
|
||||
}
|
||||
},
|
||||
"advanced": {
|
||||
"title": "Geavanceerd"
|
||||
},
|
||||
"globalCustomInstructions": {
|
||||
"title": "Aangepaste instructies voor alle modi",
|
||||
"description": "Deze instructies gelden voor alle modi. Ze bieden een basisset aan gedragingen die kunnen worden uitgebreid met modusspecifieke instructies hieronder. <0>Meer informatie</0>",
|
||||
|
|
@ -146,10 +143,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"advancedSystemPrompt": {
|
||||
"title": "Geavanceerd: Systeemprompt overschrijven",
|
||||
"description": "<2>⚠️ Waarschuwing:</2> Deze geavanceerde functie omzeilt beveiligingen. <1>LEES DIT VOOR GEBRUIK!</1>Overschrijf de standaard systeemprompt door een bestand aan te maken op <span>.roo/system-prompt-{{slug}}</span>."
|
||||
},
|
||||
"createModeDialog": {
|
||||
"title": "Nieuwe modus aanmaken",
|
||||
"close": "Sluiten",
|
||||
|
|
|
|||
1
webview-ui/src/i18n/locales/pl/chat.json
generated
1
webview-ui/src/i18n/locales/pl/chat.json
generated
|
|
@ -408,7 +408,6 @@
|
|||
"copy_code": "Kopiuj kod"
|
||||
}
|
||||
},
|
||||
"systemPromptWarning": "OSTRZEŻENIE: Aktywne niestandardowe zastąpienie instrukcji systemowych. Może to poważnie zakłócić funkcjonalność i powodować nieprzewidywalne zachowanie.",
|
||||
"profileViolationWarning": "Bieżący profil nie jest kompatybilny z ustawieniami Twojej organizacji",
|
||||
"shellIntegration": {
|
||||
"title": "Ostrzeżenie wykonania polecenia",
|
||||
|
|
|
|||
7
webview-ui/src/i18n/locales/pl/prompts.json
generated
7
webview-ui/src/i18n/locales/pl/prompts.json
generated
|
|
@ -71,9 +71,6 @@
|
|||
"description": "Dostępne tylko w tym obszarze roboczym. Jeśli wyeksportowany tryb zawierał pliki reguł, zostaną one odtworzone w folderze .roo/rules-{slug}/."
|
||||
}
|
||||
},
|
||||
"advanced": {
|
||||
"title": "Zaawansowane"
|
||||
},
|
||||
"globalCustomInstructions": {
|
||||
"title": "Niestandardowe instrukcje dla wszystkich trybów",
|
||||
"description": "Te instrukcje dotyczą wszystkich trybów. Zapewniają podstawowy zestaw zachowań, które mogą być rozszerzone przez instrukcje specyficzne dla trybów poniżej. <0>Dowiedz się więcej</0>",
|
||||
|
|
@ -146,10 +143,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"advancedSystemPrompt": {
|
||||
"title": "Zaawansowane: Zastąp podpowiedź systemową",
|
||||
"description": "<2>⚠️ Ostrzeżenie:</2> Ta zaawansowana funkcja omija zabezpieczenia. <1>PRZECZYTAJ TO PRZED UŻYCIEM!</1>Zastąp domyślną podpowiedź systemową, tworząc plik w <span>.roo/system-prompt-{{slug}}</span>."
|
||||
},
|
||||
"createModeDialog": {
|
||||
"title": "Utwórz nowy tryb",
|
||||
"close": "Zamknij",
|
||||
|
|
|
|||
1
webview-ui/src/i18n/locales/pt-BR/chat.json
generated
1
webview-ui/src/i18n/locales/pt-BR/chat.json
generated
|
|
@ -408,7 +408,6 @@
|
|||
"copy_code": "Copiar código"
|
||||
}
|
||||
},
|
||||
"systemPromptWarning": "AVISO: Substituição personalizada de instrução do sistema ativa. Isso pode comprometer gravemente a funcionalidade e causar comportamento imprevisível.",
|
||||
"profileViolationWarning": "O perfil atual não é compatível com as configurações da sua organização",
|
||||
"shellIntegration": {
|
||||
"title": "Aviso de execução de comando",
|
||||
|
|
|
|||
7
webview-ui/src/i18n/locales/pt-BR/prompts.json
generated
7
webview-ui/src/i18n/locales/pt-BR/prompts.json
generated
|
|
@ -71,9 +71,6 @@
|
|||
"description": "Disponível apenas neste espaço de trabalho. Se o modo exportado continha arquivos de regras, eles serão recriados na pasta .roo/rules-{slug}/."
|
||||
}
|
||||
},
|
||||
"advanced": {
|
||||
"title": "Avançado"
|
||||
},
|
||||
"globalCustomInstructions": {
|
||||
"title": "Instruções personalizadas para todos os modos",
|
||||
"description": "Estas instruções se aplicam a todos os modos. Elas fornecem um conjunto base de comportamentos que podem ser aprimorados por instruções específicas do modo abaixo. <0>Saiba mais</0>",
|
||||
|
|
@ -146,10 +143,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"advancedSystemPrompt": {
|
||||
"title": "Avançado: Substituir prompt do sistema",
|
||||
"description": "<2>⚠️ Aviso:</2> Este recurso avançado ignora as proteções. <1>LEIA ISTO ANTES DE USAR!</1>Substitua o prompt do sistema padrão criando um arquivo em <span>.roo/system-prompt-{{slug}}</span>."
|
||||
},
|
||||
"createModeDialog": {
|
||||
"title": "Criar novo modo",
|
||||
"close": "Fechar",
|
||||
|
|
|
|||
1
webview-ui/src/i18n/locales/ru/chat.json
generated
1
webview-ui/src/i18n/locales/ru/chat.json
generated
|
|
@ -409,7 +409,6 @@
|
|||
"copy_code": "Копировать код"
|
||||
}
|
||||
},
|
||||
"systemPromptWarning": "ПРЕДУПРЕЖДЕНИЕ: Активна пользовательская системная подсказка. Это может серьезно нарушить работу и вызвать непредсказуемое поведение.",
|
||||
"profileViolationWarning": "Текущий профиль несовместим с настройками вашей организации",
|
||||
"shellIntegration": {
|
||||
"title": "Предупреждение о выполнении команды",
|
||||
|
|
|
|||
7
webview-ui/src/i18n/locales/ru/prompts.json
generated
7
webview-ui/src/i18n/locales/ru/prompts.json
generated
|
|
@ -143,10 +143,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"advancedSystemPrompt": {
|
||||
"title": "Дополнительно: переопределить системный промпт",
|
||||
"description": "<2>⚠️ Внимание:</2> Эта расширенная функция обходит средства защиты. <1>ПРОЧТИТЕ ЭТО ПЕРЕД ИСПОЛЬЗОВАНИЕМ!</1>Переопределите системный промпт по умолчанию, создав файл в <span>.roo/system-prompt-{{slug}}</span>."
|
||||
},
|
||||
"createModeDialog": {
|
||||
"title": "Создать новый режим",
|
||||
"close": "Закрыть",
|
||||
|
|
@ -197,9 +193,6 @@
|
|||
"deleteMode": "Удалить режим"
|
||||
},
|
||||
"allFiles": "все файлы",
|
||||
"advanced": {
|
||||
"title": "Дополнительно"
|
||||
},
|
||||
"deleteMode": {
|
||||
"title": "Удалить режим",
|
||||
"message": "Вы уверены, что хотите удалить режим \"{{modeName}}\"?",
|
||||
|
|
|
|||
1
webview-ui/src/i18n/locales/tr/chat.json
generated
1
webview-ui/src/i18n/locales/tr/chat.json
generated
|
|
@ -409,7 +409,6 @@
|
|||
"copy_code": "Kodu kopyala"
|
||||
}
|
||||
},
|
||||
"systemPromptWarning": "UYARI: Özel sistem komut geçersiz kılma aktif. Bu işlevselliği ciddi şekilde bozabilir ve öngörülemeyen davranışlara neden olabilir.",
|
||||
"profileViolationWarning": "Geçerli profil kuruluşunuzun ayarlarıyla uyumlu değil",
|
||||
"shellIntegration": {
|
||||
"title": "Komut Çalıştırma Uyarısı",
|
||||
|
|
|
|||
7
webview-ui/src/i18n/locales/tr/prompts.json
generated
7
webview-ui/src/i18n/locales/tr/prompts.json
generated
|
|
@ -143,10 +143,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"advancedSystemPrompt": {
|
||||
"title": "Gelişmiş: Sistem Promptunu Geçersiz Kıl",
|
||||
"description": "<2>⚠️ Uyarı:</2> Bu gelişmiş özellik güvenlik önlemlerini atlar. <1>KULLANMADAN ÖNCE BUNU OKUYUN!</1>Çalışma alanınızda <span>.roo/system-prompt-{{slug}}</span> adresinde bir dosya oluşturarak varsayılan sistem istemini geçersiz kılın."
|
||||
},
|
||||
"createModeDialog": {
|
||||
"title": "Yeni Mod Oluştur",
|
||||
"close": "Kapat",
|
||||
|
|
@ -197,9 +193,6 @@
|
|||
"deleteMode": "Modu sil"
|
||||
},
|
||||
"allFiles": "tüm dosyalar",
|
||||
"advanced": {
|
||||
"title": "Gelişmiş"
|
||||
},
|
||||
"deleteMode": {
|
||||
"title": "Modu Sil",
|
||||
"message": "\"{{modeName}}\" modunu silmek istediğinizden emin misiniz?",
|
||||
|
|
|
|||
1
webview-ui/src/i18n/locales/vi/chat.json
generated
1
webview-ui/src/i18n/locales/vi/chat.json
generated
|
|
@ -409,7 +409,6 @@
|
|||
"copy_code": "Sao chép mã"
|
||||
}
|
||||
},
|
||||
"systemPromptWarning": "CẢNH BÁO: Đã kích hoạt ghi đè lệnh nhắc hệ thống tùy chỉnh. Điều này có thể phá vỡ nghiêm trọng chức năng và gây ra hành vi không thể dự đoán.",
|
||||
"profileViolationWarning": "Hồ sơ hiện tại không tương thích với cài đặt của tổ chức của bạn",
|
||||
"shellIntegration": {
|
||||
"title": "Cảnh báo thực thi lệnh",
|
||||
|
|
|
|||
7
webview-ui/src/i18n/locales/vi/prompts.json
generated
7
webview-ui/src/i18n/locales/vi/prompts.json
generated
|
|
@ -143,10 +143,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"advancedSystemPrompt": {
|
||||
"title": "Nâng cao: Ghi đè lời nhắc hệ thống",
|
||||
"description": "<2>⚠️ Cảnh báo:</2> Tính năng nâng cao này bỏ qua các biện pháp bảo vệ. <1>ĐỌC KỸ TRƯỚC KHI SỬ DỤNG!</1>Ghi đè lời nhắc hệ thống mặc định bằng cách tạo một tệp tại <span>.roo/system-prompt-{{slug}}</span>."
|
||||
},
|
||||
"createModeDialog": {
|
||||
"title": "Tạo chế độ mới",
|
||||
"close": "Đóng",
|
||||
|
|
@ -197,9 +193,6 @@
|
|||
"deleteMode": "Xóa chế độ"
|
||||
},
|
||||
"allFiles": "tất cả các tệp",
|
||||
"advanced": {
|
||||
"title": "Nâng cao"
|
||||
},
|
||||
"deleteMode": {
|
||||
"title": "Xóa chế độ",
|
||||
"message": "Bạn có chắc chắn muốn xóa chế độ \"{{modeName}}\" không?",
|
||||
|
|
|
|||
1
webview-ui/src/i18n/locales/zh-CN/chat.json
generated
1
webview-ui/src/i18n/locales/zh-CN/chat.json
generated
|
|
@ -409,7 +409,6 @@
|
|||
"copy_code": "复制代码"
|
||||
}
|
||||
},
|
||||
"systemPromptWarning": "警告:自定义系统提示词覆盖已激活。这可能严重破坏功能并导致不可预测的行为。",
|
||||
"profileViolationWarning": "当前配置文件与您的组织设置不兼容",
|
||||
"shellIntegration": {
|
||||
"title": "命令执行警告",
|
||||
|
|
|
|||
7
webview-ui/src/i18n/locales/zh-CN/prompts.json
generated
7
webview-ui/src/i18n/locales/zh-CN/prompts.json
generated
|
|
@ -143,10 +143,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"advancedSystemPrompt": {
|
||||
"title": "高级:覆盖系统提示词",
|
||||
"description": "<2>⚠️ 警告:</2> 此高级功能会绕过安全措施。<1>使用前请阅读!</1>通过在您的工作区中创建文件 <span>.roo/system-prompt-{{slug}}</span> 来覆盖默认系统提示。"
|
||||
},
|
||||
"createModeDialog": {
|
||||
"title": "创建新模式",
|
||||
"close": "关闭",
|
||||
|
|
@ -197,9 +193,6 @@
|
|||
"deleteMode": "删除模式"
|
||||
},
|
||||
"allFiles": "所有文件",
|
||||
"advanced": {
|
||||
"title": "高级"
|
||||
},
|
||||
"deleteMode": {
|
||||
"title": "删除模式",
|
||||
"message": "您确定要删除\"{{modeName}}\"模式吗?",
|
||||
|
|
|
|||
1
webview-ui/src/i18n/locales/zh-TW/chat.json
generated
1
webview-ui/src/i18n/locales/zh-TW/chat.json
generated
|
|
@ -438,7 +438,6 @@
|
|||
"copy_code": "複製程式碼"
|
||||
}
|
||||
},
|
||||
"systemPromptWarning": "警告:自訂系統提示詞覆寫已啟用。這可能嚴重破壞功能並導致不可預測的行為。",
|
||||
"profileViolationWarning": "目前設定檔與您的組織設定不相容",
|
||||
"shellIntegration": {
|
||||
"title": "命令執行警告",
|
||||
|
|
|
|||
7
webview-ui/src/i18n/locales/zh-TW/prompts.json
generated
7
webview-ui/src/i18n/locales/zh-TW/prompts.json
generated
|
|
@ -70,9 +70,6 @@
|
|||
"description": "僅在此工作區可用。如果匯出的模式包含規則檔案,則將在 .roo/rules-{slug}/ 資料夾中重新建立這些檔案。"
|
||||
}
|
||||
},
|
||||
"advanced": {
|
||||
"title": "進階:覆寫系統提示"
|
||||
},
|
||||
"globalCustomInstructions": {
|
||||
"title": "所有模式的自訂指令",
|
||||
"description": "這些指令適用於所有模式。它們提供了一套可透過下方特定模式指令強化的基本行為。<0>了解更多</0>",
|
||||
|
|
@ -145,10 +142,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"advancedSystemPrompt": {
|
||||
"title": "進階:覆寫系統提示詞",
|
||||
"description": "<2>⚠️ 警告:</2> 此進階功能會繞過安全措施。<1>使用前請詳閱!</1>透過在 <span>.roo/system-prompt-{{slug}}</span> 建立檔案來覆寫預設的系統提示詞。"
|
||||
},
|
||||
"createModeDialog": {
|
||||
"title": "建立新模式",
|
||||
"close": "關閉",
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue