mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-08-28 05:27:24 +00:00
chore: remove diffEnabled and fuzzyMatchThreshold settings (#10298)
This commit is contained in:
parent
1daac839ec
commit
85f42dca83
50 changed files with 26 additions and 536 deletions
|
|
@ -94,7 +94,6 @@ export type OrganizationAllowList = z.infer<typeof organizationAllowListSchema>
|
|||
export const organizationDefaultSettingsSchema = globalSettingsSchema
|
||||
.pick({
|
||||
enableCheckpoints: true,
|
||||
fuzzyMatchThreshold: true,
|
||||
maxOpenTabsContext: true,
|
||||
maxReadFileLine: true,
|
||||
maxWorkspaceFiles: true,
|
||||
|
|
|
|||
|
|
@ -162,8 +162,6 @@ export const globalSettingsSchema = z.object({
|
|||
diagnosticsEnabled: z.boolean().optional(),
|
||||
|
||||
rateLimitSeconds: z.number().optional(),
|
||||
diffEnabled: z.boolean().optional(),
|
||||
fuzzyMatchThreshold: z.number().optional(),
|
||||
experiments: experimentsSchema.optional(),
|
||||
|
||||
codebaseIndexModels: codebaseIndexModelsSchema.optional(),
|
||||
|
|
@ -349,9 +347,6 @@ export const EVALS_SETTINGS: RooCodeSettings = {
|
|||
|
||||
diagnosticsEnabled: true,
|
||||
|
||||
diffEnabled: true,
|
||||
fuzzyMatchThreshold: 1,
|
||||
|
||||
enableCheckpoints: false,
|
||||
|
||||
rateLimitSeconds: 0,
|
||||
|
|
|
|||
|
|
@ -168,9 +168,7 @@ export type ProviderSettingsEntry = z.infer<typeof providerSettingsEntrySchema>
|
|||
|
||||
const baseProviderSettingsSchema = z.object({
|
||||
includeMaxTokens: z.boolean().optional(),
|
||||
diffEnabled: z.boolean().optional(),
|
||||
todoListEnabled: z.boolean().optional(),
|
||||
fuzzyMatchThreshold: z.number().optional(),
|
||||
modelTemperature: z.number().nullish(),
|
||||
rateLimitSeconds: z.number().optional(),
|
||||
consecutiveMistakeLimit: z.number().min(0).optional(),
|
||||
|
|
|
|||
|
|
@ -89,9 +89,7 @@ export type TaskProviderEvents = {
|
|||
*/
|
||||
|
||||
export interface CreateTaskOptions {
|
||||
enableDiff?: boolean
|
||||
enableCheckpoints?: boolean
|
||||
fuzzyMatchThreshold?: number
|
||||
consecutiveMistakeLimit?: number
|
||||
experiments?: Record<string, boolean>
|
||||
initialTodos?: TodoItem[]
|
||||
|
|
|
|||
|
|
@ -317,8 +317,6 @@ export type ExtensionState = Pick<
|
|||
| "terminalZdotdir"
|
||||
| "terminalCompressProgressBar"
|
||||
| "diagnosticsEnabled"
|
||||
| "diffEnabled"
|
||||
| "fuzzyMatchThreshold"
|
||||
| "language"
|
||||
| "modeApiConfigs"
|
||||
| "customModePrompts"
|
||||
|
|
@ -369,7 +367,7 @@ export type ExtensionState = Pick<
|
|||
|
||||
mode: string
|
||||
customModes: ModeConfig[]
|
||||
toolRequirements?: Record<string, boolean> // Map of tool names to their requirements (e.g. {"apply_diff": true} if diffEnabled)
|
||||
toolRequirements?: Record<string, boolean> // Map of tool names to their requirements (e.g. {"apply_diff": true})
|
||||
|
||||
cwd?: string // Current working directory
|
||||
telemetrySetting: TelemetrySetting
|
||||
|
|
|
|||
|
|
@ -46,10 +46,8 @@ describe("Single-open-task invariant", () => {
|
|||
getState: vi.fn().mockResolvedValue({
|
||||
apiConfiguration: { apiProvider: "anthropic", consecutiveMistakeLimit: 0 },
|
||||
organizationAllowList: "*",
|
||||
diffEnabled: false,
|
||||
enableCheckpoints: true,
|
||||
checkpointTimeout: 60,
|
||||
fuzzyMatchThreshold: 1.0,
|
||||
cloudUserInfo: null,
|
||||
remoteControlEnabled: false,
|
||||
}),
|
||||
|
|
@ -94,10 +92,8 @@ describe("Single-open-task invariant", () => {
|
|||
},
|
||||
getState: vi.fn().mockResolvedValue({
|
||||
apiConfiguration: { apiProvider: "anthropic", consecutiveMistakeLimit: 0 },
|
||||
diffEnabled: false,
|
||||
enableCheckpoints: true,
|
||||
checkpointTimeout: 60,
|
||||
fuzzyMatchThreshold: 1.0,
|
||||
experiments: {},
|
||||
cloudUserInfo: null,
|
||||
taskSyncEnabled: false,
|
||||
|
|
|
|||
|
|
@ -54,7 +54,6 @@ describe("presentAssistantMessage - Custom Tool Recording", () => {
|
|||
didCompleteReadingStream: false,
|
||||
didRejectTool: false,
|
||||
didAlreadyUseTool: false,
|
||||
diffEnabled: false,
|
||||
consecutiveMistakeCount: 0,
|
||||
clineMessages: [],
|
||||
api: {
|
||||
|
|
|
|||
|
|
@ -41,7 +41,6 @@ describe("presentAssistantMessage - Image Handling in Native Tool Calling", () =
|
|||
didCompleteReadingStream: false,
|
||||
didRejectTool: false,
|
||||
didAlreadyUseTool: false,
|
||||
diffEnabled: false,
|
||||
consecutiveMistakeCount: 0,
|
||||
api: {
|
||||
getModel: () => ({ id: "test-model", info: {} }),
|
||||
|
|
|
|||
|
|
@ -35,7 +35,6 @@ describe("presentAssistantMessage - Unknown Tool Handling", () => {
|
|||
didCompleteReadingStream: false,
|
||||
didRejectTool: false,
|
||||
didAlreadyUseTool: false,
|
||||
diffEnabled: false,
|
||||
consecutiveMistakeCount: 0,
|
||||
clineMessages: [],
|
||||
api: {
|
||||
|
|
|
|||
|
|
@ -650,7 +650,7 @@ export async function presentAssistantMessage(cline: Task) {
|
|||
block.name as ToolName,
|
||||
mode ?? defaultModeSlug,
|
||||
customModes ?? [],
|
||||
{ apply_diff: cline.diffEnabled },
|
||||
{},
|
||||
block.params,
|
||||
stateExperiments,
|
||||
includedTools,
|
||||
|
|
|
|||
|
|
@ -43,7 +43,6 @@ export const providerProfilesSchema = z.object({
|
|||
migrations: z
|
||||
.object({
|
||||
rateLimitSecondsMigrated: z.boolean().optional(),
|
||||
diffSettingsMigrated: z.boolean().optional(),
|
||||
openAiHeadersMigrated: z.boolean().optional(),
|
||||
consecutiveMistakeLimitMigrated: z.boolean().optional(),
|
||||
todoListEnabledMigrated: z.boolean().optional(),
|
||||
|
|
@ -68,7 +67,6 @@ export class ProviderSettingsManager {
|
|||
modeApiConfigs: this.defaultModeApiConfigs,
|
||||
migrations: {
|
||||
rateLimitSecondsMigrated: true, // Mark as migrated on fresh installs
|
||||
diffSettingsMigrated: true, // Mark as migrated on fresh installs
|
||||
openAiHeadersMigrated: true, // Mark as migrated on fresh installs
|
||||
consecutiveMistakeLimitMigrated: true, // Mark as migrated on fresh installs
|
||||
todoListEnabledMigrated: true, // Mark as migrated on fresh installs
|
||||
|
|
@ -141,7 +139,6 @@ export class ProviderSettingsManager {
|
|||
if (!providerProfiles.migrations) {
|
||||
providerProfiles.migrations = {
|
||||
rateLimitSecondsMigrated: false,
|
||||
diffSettingsMigrated: false,
|
||||
openAiHeadersMigrated: false,
|
||||
consecutiveMistakeLimitMigrated: false,
|
||||
todoListEnabledMigrated: false,
|
||||
|
|
@ -156,12 +153,6 @@ export class ProviderSettingsManager {
|
|||
isDirty = true
|
||||
}
|
||||
|
||||
if (!providerProfiles.migrations.diffSettingsMigrated) {
|
||||
await this.migrateDiffSettings(providerProfiles)
|
||||
providerProfiles.migrations.diffSettingsMigrated = true
|
||||
isDirty = true
|
||||
}
|
||||
|
||||
if (!providerProfiles.migrations.openAiHeadersMigrated) {
|
||||
await this.migrateOpenAiHeaders(providerProfiles)
|
||||
providerProfiles.migrations.openAiHeadersMigrated = true
|
||||
|
|
@ -235,41 +226,6 @@ export class ProviderSettingsManager {
|
|||
}
|
||||
}
|
||||
|
||||
private async migrateDiffSettings(providerProfiles: ProviderProfiles) {
|
||||
try {
|
||||
let diffEnabled: boolean | undefined
|
||||
let fuzzyMatchThreshold: number | undefined
|
||||
|
||||
try {
|
||||
diffEnabled = await this.context.globalState.get<boolean>("diffEnabled")
|
||||
fuzzyMatchThreshold = await this.context.globalState.get<number>("fuzzyMatchThreshold")
|
||||
} catch (error) {
|
||||
console.error("[MigrateDiffSettings] Error getting global diff settings:", error)
|
||||
}
|
||||
|
||||
if (diffEnabled === undefined) {
|
||||
// Failed to get the existing value, use the default.
|
||||
diffEnabled = true
|
||||
}
|
||||
|
||||
if (fuzzyMatchThreshold === undefined) {
|
||||
// Failed to get the existing value, use the default.
|
||||
fuzzyMatchThreshold = 1.0
|
||||
}
|
||||
|
||||
for (const [_name, apiConfig] of Object.entries(providerProfiles.apiConfigs)) {
|
||||
if (apiConfig.diffEnabled === undefined) {
|
||||
apiConfig.diffEnabled = diffEnabled
|
||||
}
|
||||
if (apiConfig.fuzzyMatchThreshold === undefined) {
|
||||
apiConfig.fuzzyMatchThreshold = fuzzyMatchThreshold
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`[MigrateDiffSettings] Failed to migrate diff settings:`, error)
|
||||
}
|
||||
}
|
||||
|
||||
private async migrateOpenAiHeaders(providerProfiles: ProviderProfiles) {
|
||||
try {
|
||||
for (const [_name, apiConfig] of Object.entries(providerProfiles.apiConfigs)) {
|
||||
|
|
|
|||
|
|
@ -57,14 +57,11 @@ describe("ProviderSettingsManager", () => {
|
|||
default: {
|
||||
config: {},
|
||||
id: "default",
|
||||
diffEnabled: true,
|
||||
fuzzyMatchThreshold: 1.0,
|
||||
},
|
||||
},
|
||||
modeApiConfigs: {},
|
||||
migrations: {
|
||||
rateLimitSecondsMigrated: true,
|
||||
diffSettingsMigrated: true,
|
||||
openAiHeadersMigrated: true,
|
||||
consecutiveMistakeLimitMigrated: true,
|
||||
todoListEnabledMigrated: true,
|
||||
|
|
@ -93,7 +90,6 @@ describe("ProviderSettingsManager", () => {
|
|||
},
|
||||
migrations: {
|
||||
rateLimitSecondsMigrated: true,
|
||||
diffSettingsMigrated: true,
|
||||
},
|
||||
}),
|
||||
)
|
||||
|
|
@ -170,7 +166,6 @@ describe("ProviderSettingsManager", () => {
|
|||
},
|
||||
migrations: {
|
||||
rateLimitSecondsMigrated: true,
|
||||
diffSettingsMigrated: true,
|
||||
openAiHeadersMigrated: true,
|
||||
consecutiveMistakeLimitMigrated: false,
|
||||
},
|
||||
|
|
@ -211,7 +206,6 @@ describe("ProviderSettingsManager", () => {
|
|||
},
|
||||
migrations: {
|
||||
rateLimitSecondsMigrated: true,
|
||||
diffSettingsMigrated: true,
|
||||
openAiHeadersMigrated: true,
|
||||
consecutiveMistakeLimitMigrated: true,
|
||||
todoListEnabledMigrated: false,
|
||||
|
|
@ -260,7 +254,6 @@ describe("ProviderSettingsManager", () => {
|
|||
},
|
||||
migrations: {
|
||||
rateLimitSecondsMigrated: true,
|
||||
diffSettingsMigrated: true,
|
||||
openAiHeadersMigrated: true,
|
||||
consecutiveMistakeLimitMigrated: true,
|
||||
todoListEnabledMigrated: true,
|
||||
|
|
@ -298,7 +291,6 @@ describe("ProviderSettingsManager", () => {
|
|||
},
|
||||
migrations: {
|
||||
rateLimitSecondsMigrated: true,
|
||||
diffSettingsMigrated: true,
|
||||
openAiHeadersMigrated: true,
|
||||
consecutiveMistakeLimitMigrated: true,
|
||||
todoListEnabledMigrated: true,
|
||||
|
|
@ -329,7 +321,6 @@ describe("ProviderSettingsManager", () => {
|
|||
},
|
||||
migrations: {
|
||||
rateLimitSecondsMigrated: true,
|
||||
diffSettingsMigrated: true,
|
||||
openAiHeadersMigrated: true,
|
||||
consecutiveMistakeLimitMigrated: true,
|
||||
todoListEnabledMigrated: true,
|
||||
|
|
@ -565,7 +556,6 @@ describe("ProviderSettingsManager", () => {
|
|||
apiConfigs: { default: {} },
|
||||
migrations: {
|
||||
rateLimitSecondsMigrated: true,
|
||||
diffSettingsMigrated: true,
|
||||
openAiHeadersMigrated: true,
|
||||
},
|
||||
}),
|
||||
|
|
@ -694,7 +684,6 @@ describe("ProviderSettingsManager", () => {
|
|||
apiConfigs: { test: { apiProvider: "anthropic", id: "test-id" } },
|
||||
migrations: {
|
||||
rateLimitSecondsMigrated: true,
|
||||
diffSettingsMigrated: true,
|
||||
openAiHeadersMigrated: true,
|
||||
},
|
||||
}),
|
||||
|
|
@ -727,7 +716,6 @@ describe("ProviderSettingsManager", () => {
|
|||
},
|
||||
migrations: {
|
||||
rateLimitSecondsMigrated: true,
|
||||
diffSettingsMigrated: true,
|
||||
openAiHeadersMigrated: true,
|
||||
consecutiveMistakeLimitMigrated: true,
|
||||
todoListEnabledMigrated: true,
|
||||
|
|
|
|||
|
|
@ -115,7 +115,6 @@ describe("getEnvironmentDetails", () => {
|
|||
createMessage: vi.fn(),
|
||||
countTokens: vi.fn(),
|
||||
} as unknown as ApiHandler,
|
||||
diffEnabled: true,
|
||||
providerRef: {
|
||||
deref: vi.fn().mockReturnValue(mockProvider),
|
||||
[Symbol.toStringTag]: "WeakRef",
|
||||
|
|
|
|||
|
|
@ -210,7 +210,6 @@ describe("addCustomInstructions", () => {
|
|||
undefined, // customModePrompts
|
||||
undefined, // customModes
|
||||
undefined, // globalCustomInstructions
|
||||
undefined, // diffEnabled
|
||||
undefined, // experiments
|
||||
true, // enableMcpServerCreation
|
||||
undefined, // language
|
||||
|
|
@ -233,7 +232,6 @@ describe("addCustomInstructions", () => {
|
|||
undefined, // customModePrompts
|
||||
undefined, // customModes
|
||||
undefined, // globalCustomInstructions
|
||||
undefined, // diffEnabled
|
||||
undefined, // experiments
|
||||
true, // enableMcpServerCreation
|
||||
undefined, // language
|
||||
|
|
@ -258,7 +256,6 @@ describe("addCustomInstructions", () => {
|
|||
undefined, // customModePrompts
|
||||
undefined, // customModes,
|
||||
undefined, // globalCustomInstructions
|
||||
undefined, // diffEnabled
|
||||
undefined, // experiments
|
||||
true, // enableMcpServerCreation
|
||||
undefined, // language
|
||||
|
|
@ -284,7 +281,6 @@ describe("addCustomInstructions", () => {
|
|||
undefined, // customModePrompts
|
||||
undefined, // customModes,
|
||||
undefined, // globalCustomInstructions
|
||||
undefined, // diffEnabled
|
||||
undefined, // experiments
|
||||
false, // enableMcpServerCreation
|
||||
undefined, // language
|
||||
|
|
@ -308,7 +304,6 @@ describe("addCustomInstructions", () => {
|
|||
undefined, // customModePrompts
|
||||
undefined, // customModes,
|
||||
undefined, // globalCustomInstructions
|
||||
undefined, // diffEnabled
|
||||
undefined, // experiments
|
||||
true, // enableMcpServerCreation
|
||||
undefined, // language
|
||||
|
|
|
|||
|
|
@ -104,7 +104,6 @@ describe("File-Based Custom System Prompt", () => {
|
|||
customModePrompts, // customModePrompts
|
||||
undefined, // customModes
|
||||
undefined, // globalCustomInstructions
|
||||
undefined, // diffEnabled
|
||||
undefined, // experiments
|
||||
true, // enableMcpServerCreation
|
||||
undefined, // language
|
||||
|
|
@ -142,7 +141,6 @@ describe("File-Based Custom System Prompt", () => {
|
|||
undefined, // customModePrompts
|
||||
undefined, // customModes
|
||||
undefined, // globalCustomInstructions
|
||||
undefined, // diffEnabled
|
||||
undefined, // experiments
|
||||
true, // enableMcpServerCreation
|
||||
undefined, // language
|
||||
|
|
@ -188,7 +186,6 @@ describe("File-Based Custom System Prompt", () => {
|
|||
customModePrompts, // customModePrompts
|
||||
undefined, // customModes
|
||||
undefined, // globalCustomInstructions
|
||||
undefined, // diffEnabled
|
||||
undefined, // experiments
|
||||
true, // enableMcpServerCreation
|
||||
undefined, // language
|
||||
|
|
|
|||
|
|
@ -225,7 +225,6 @@ describe("SYSTEM_PROMPT", () => {
|
|||
undefined, // customModePrompts
|
||||
undefined, // customModes
|
||||
undefined, // globalCustomInstructions
|
||||
undefined, // diffEnabled
|
||||
experiments,
|
||||
true, // enableMcpServerCreation
|
||||
undefined, // language
|
||||
|
|
@ -248,7 +247,6 @@ describe("SYSTEM_PROMPT", () => {
|
|||
undefined, // customModePrompts
|
||||
undefined, // customModes,
|
||||
undefined, // globalCustomInstructions
|
||||
undefined, // diffEnabled
|
||||
experiments,
|
||||
true, // enableMcpServerCreation
|
||||
undefined, // language
|
||||
|
|
@ -273,7 +271,6 @@ describe("SYSTEM_PROMPT", () => {
|
|||
undefined, // customModePrompts
|
||||
undefined, // customModes,
|
||||
undefined, // globalCustomInstructions
|
||||
undefined, // diffEnabled
|
||||
experiments,
|
||||
true, // enableMcpServerCreation
|
||||
undefined, // language
|
||||
|
|
@ -296,7 +293,6 @@ describe("SYSTEM_PROMPT", () => {
|
|||
undefined, // customModePrompts
|
||||
undefined, // customModes,
|
||||
undefined, // globalCustomInstructions
|
||||
undefined, // diffEnabled
|
||||
experiments,
|
||||
true, // enableMcpServerCreation
|
||||
undefined, // language
|
||||
|
|
@ -319,7 +315,6 @@ describe("SYSTEM_PROMPT", () => {
|
|||
undefined, // customModePrompts
|
||||
undefined, // customModes,
|
||||
undefined, // globalCustomInstructions
|
||||
undefined, // diffEnabled
|
||||
experiments,
|
||||
true, // enableMcpServerCreation
|
||||
undefined, // language
|
||||
|
|
@ -329,85 +324,6 @@ describe("SYSTEM_PROMPT", () => {
|
|||
|
||||
expect(prompt).toMatchFileSnapshot("./__snapshots__/system-prompt/with-different-viewport-size.snap")
|
||||
})
|
||||
|
||||
it("should include diff strategy tool description when diffEnabled is true", async () => {
|
||||
const prompt = await SYSTEM_PROMPT(
|
||||
mockContext,
|
||||
"/test/path",
|
||||
false,
|
||||
undefined, // mcpHub
|
||||
new MultiSearchReplaceDiffStrategy(), // Use actual diff strategy from the codebase
|
||||
undefined, // browserViewportSize
|
||||
defaultModeSlug, // mode
|
||||
undefined, // customModePrompts
|
||||
undefined, // customModes
|
||||
undefined, // globalCustomInstructions
|
||||
true, // diffEnabled
|
||||
experiments,
|
||||
true, // enableMcpServerCreation
|
||||
undefined, // language
|
||||
undefined, // rooIgnoreInstructions
|
||||
undefined, // partialReadsEnabled
|
||||
)
|
||||
|
||||
// Native-only: tool catalog isn't embedded in the system prompt anymore.
|
||||
expect(prompt).not.toContain("# Tools")
|
||||
expect(prompt).not.toContain("apply_diff")
|
||||
expect(prompt).toMatchFileSnapshot("./__snapshots__/system-prompt/with-diff-enabled-true.snap")
|
||||
})
|
||||
|
||||
it("should exclude diff strategy tool description when diffEnabled is false", async () => {
|
||||
const prompt = await SYSTEM_PROMPT(
|
||||
mockContext,
|
||||
"/test/path",
|
||||
false, // supportsImages
|
||||
undefined, // mcpHub
|
||||
new MultiSearchReplaceDiffStrategy(), // Use actual diff strategy from the codebase
|
||||
undefined, // browserViewportSize
|
||||
defaultModeSlug, // mode
|
||||
undefined, // customModePrompts
|
||||
undefined, // customModes
|
||||
undefined, // globalCustomInstructions
|
||||
false, // diffEnabled
|
||||
experiments,
|
||||
true, // enableMcpServerCreation
|
||||
undefined, // language
|
||||
undefined, // rooIgnoreInstructions
|
||||
undefined, // partialReadsEnabled
|
||||
)
|
||||
|
||||
// Native-only: tool catalog isn't embedded in the system prompt anymore.
|
||||
expect(prompt).not.toContain("# Tools")
|
||||
expect(prompt).not.toContain("apply_diff")
|
||||
expect(prompt).toMatchFileSnapshot("./__snapshots__/system-prompt/with-diff-enabled-false.snap")
|
||||
})
|
||||
|
||||
it("should exclude diff strategy tool description when diffEnabled is undefined", async () => {
|
||||
const prompt = await SYSTEM_PROMPT(
|
||||
mockContext,
|
||||
"/test/path",
|
||||
false,
|
||||
undefined, // mcpHub
|
||||
new MultiSearchReplaceDiffStrategy(), // Use actual diff strategy from the codebase
|
||||
undefined, // browserViewportSize
|
||||
defaultModeSlug, // mode
|
||||
undefined, // customModePrompts
|
||||
undefined, // customModes
|
||||
undefined, // globalCustomInstructions
|
||||
undefined, // diffEnabled
|
||||
experiments,
|
||||
true, // enableMcpServerCreation
|
||||
undefined, // language
|
||||
undefined, // rooIgnoreInstructions
|
||||
undefined, // partialReadsEnabled
|
||||
)
|
||||
|
||||
// Native-only: tool catalog isn't embedded in the system prompt anymore.
|
||||
expect(prompt).not.toContain("# Tools")
|
||||
expect(prompt).not.toContain("apply_diff")
|
||||
expect(prompt).toMatchFileSnapshot("./__snapshots__/system-prompt/with-diff-enabled-undefined.snap")
|
||||
})
|
||||
|
||||
it("should include vscode language in custom instructions", async () => {
|
||||
// Mock vscode.env.language
|
||||
const vscode = vi.mocked(await import("vscode")) as any
|
||||
|
|
@ -447,7 +363,6 @@ describe("SYSTEM_PROMPT", () => {
|
|||
undefined, // customModePrompts
|
||||
undefined, // customModes
|
||||
undefined, // globalCustomInstructions
|
||||
undefined, // diffEnabled
|
||||
undefined, // experiments
|
||||
true, // enableMcpServerCreation
|
||||
undefined, // language
|
||||
|
|
@ -508,7 +423,6 @@ describe("SYSTEM_PROMPT", () => {
|
|||
undefined, // customModePrompts
|
||||
customModes, // customModes
|
||||
"Global instructions", // globalCustomInstructions
|
||||
undefined, // diffEnabled
|
||||
experiments,
|
||||
true, // enableMcpServerCreation
|
||||
undefined, // language
|
||||
|
|
@ -546,7 +460,6 @@ describe("SYSTEM_PROMPT", () => {
|
|||
customModePrompts, // customModePrompts
|
||||
undefined, // customModes
|
||||
undefined, // globalCustomInstructions
|
||||
undefined, // diffEnabled
|
||||
undefined, // experiments
|
||||
false, // enableMcpServerCreation
|
||||
undefined, // language
|
||||
|
|
@ -579,7 +492,6 @@ describe("SYSTEM_PROMPT", () => {
|
|||
customModePrompts, // customModePrompts
|
||||
undefined, // customModes
|
||||
undefined, // globalCustomInstructions
|
||||
undefined, // diffEnabled
|
||||
undefined, // experiments
|
||||
false, // enableMcpServerCreation
|
||||
undefined, // language
|
||||
|
|
@ -610,7 +522,6 @@ describe("SYSTEM_PROMPT", () => {
|
|||
undefined, // customModePrompts
|
||||
undefined, // customModes
|
||||
undefined, // globalCustomInstructions
|
||||
undefined, // diffEnabled
|
||||
experiments,
|
||||
true, // enableMcpServerCreation
|
||||
undefined, // language
|
||||
|
|
@ -643,7 +554,6 @@ describe("SYSTEM_PROMPT", () => {
|
|||
undefined, // customModePrompts
|
||||
undefined, // customModes
|
||||
undefined, // globalCustomInstructions
|
||||
undefined, // diffEnabled
|
||||
experiments,
|
||||
true, // enableMcpServerCreation
|
||||
undefined, // language
|
||||
|
|
@ -676,7 +586,6 @@ describe("SYSTEM_PROMPT", () => {
|
|||
undefined, // customModePrompts
|
||||
undefined, // customModes
|
||||
undefined, // globalCustomInstructions
|
||||
undefined, // diffEnabled
|
||||
experiments,
|
||||
true, // enableMcpServerCreation
|
||||
undefined, // language
|
||||
|
|
@ -709,7 +618,6 @@ describe("SYSTEM_PROMPT", () => {
|
|||
undefined, // customModePrompts
|
||||
undefined, // customModes
|
||||
undefined, // globalCustomInstructions
|
||||
undefined, // diffEnabled
|
||||
experiments,
|
||||
true, // enableMcpServerCreation
|
||||
undefined, // language
|
||||
|
|
@ -746,7 +654,6 @@ describe("SYSTEM_PROMPT", () => {
|
|||
expect(prompt).toContain("SYSTEM INFORMATION")
|
||||
expect(prompt).toContain("OBJECTIVE")
|
||||
})
|
||||
|
||||
afterAll(() => {
|
||||
vi.restoreAllMocks()
|
||||
})
|
||||
|
|
|
|||
|
|
@ -53,7 +53,6 @@ async function generatePrompt(
|
|||
promptComponent?: PromptComponent,
|
||||
customModeConfigs?: ModeConfig[],
|
||||
globalCustomInstructions?: string,
|
||||
diffEnabled?: boolean,
|
||||
experiments?: Record<string, boolean>,
|
||||
enableMcpServerCreation?: boolean,
|
||||
language?: string,
|
||||
|
|
@ -68,9 +67,6 @@ async function generatePrompt(
|
|||
throw new Error("Extension context is required for generating system prompt")
|
||||
}
|
||||
|
||||
// If diff is disabled, don't pass the diffStrategy
|
||||
const effectiveDiffStrategy = diffEnabled ? diffStrategy : undefined
|
||||
|
||||
// Get the full mode config to ensure we have the role definition (used for groups, etc.)
|
||||
const modeConfig = getModeBySlug(mode, customModeConfigs) || modes.find((m) => m.slug === mode) || modes[0]
|
||||
const { roleDefinition, baseInstructions } = getModeSelection(mode, promptComponent, customModeConfigs)
|
||||
|
|
@ -85,7 +81,7 @@ async function generatePrompt(
|
|||
const [modesSection, mcpServersSection, skillsSection] = await Promise.all([
|
||||
getModesSection(context),
|
||||
shouldIncludeMcp
|
||||
? getMcpServersSection(mcpHub, effectiveDiffStrategy, enableMcpServerCreation, false)
|
||||
? getMcpServersSection(mcpHub, diffStrategy, enableMcpServerCreation, false)
|
||||
: Promise.resolve(""),
|
||||
getSkillsSection(skillsManager, mode as string),
|
||||
])
|
||||
|
|
@ -133,7 +129,6 @@ export const SYSTEM_PROMPT = async (
|
|||
customModePrompts?: CustomModePrompts,
|
||||
customModes?: ModeConfig[],
|
||||
globalCustomInstructions?: string,
|
||||
diffEnabled?: boolean,
|
||||
experiments?: Record<string, boolean>,
|
||||
enableMcpServerCreation?: boolean,
|
||||
language?: string,
|
||||
|
|
@ -192,21 +187,17 @@ ${fileCustomSystemPrompt}
|
|||
${customInstructions}`
|
||||
}
|
||||
|
||||
// If diff is disabled, don't pass the diffStrategy
|
||||
const effectiveDiffStrategy = diffEnabled ? diffStrategy : undefined
|
||||
|
||||
return generatePrompt(
|
||||
context,
|
||||
cwd,
|
||||
supportsComputerUse,
|
||||
currentMode.slug,
|
||||
mcpHub,
|
||||
effectiveDiffStrategy,
|
||||
diffStrategy,
|
||||
browserViewportSize,
|
||||
promptComponent,
|
||||
customModes,
|
||||
globalCustomInstructions,
|
||||
diffEnabled,
|
||||
experiments,
|
||||
enableMcpServerCreation,
|
||||
language,
|
||||
|
|
|
|||
|
|
@ -296,11 +296,6 @@ export function filterNativeToolsForMode(
|
|||
allowedToolNames.delete("browser_action")
|
||||
}
|
||||
|
||||
// Conditionally exclude apply_diff if diffs are disabled
|
||||
if (settings?.diffEnabled === false) {
|
||||
allowedToolNames.delete("apply_diff")
|
||||
}
|
||||
|
||||
// Conditionally exclude access_mcp_resource if MCP is not enabled or there are no resources
|
||||
if (!mcpHub || !hasAnyMcpResources(mcpHub)) {
|
||||
allowedToolNames.delete("access_mcp_resource")
|
||||
|
|
|
|||
|
|
@ -142,11 +142,9 @@ const MAX_CONTEXT_WINDOW_RETRIES = 3 // Maximum retries for context window error
|
|||
export interface TaskOptions extends CreateTaskOptions {
|
||||
provider: ClineProvider
|
||||
apiConfiguration: ProviderSettings
|
||||
enableDiff?: boolean
|
||||
enableCheckpoints?: boolean
|
||||
checkpointTimeout?: number
|
||||
enableBridge?: boolean
|
||||
fuzzyMatchThreshold?: number
|
||||
consecutiveMistakeLimit?: number
|
||||
task?: string
|
||||
images?: string[]
|
||||
|
|
@ -311,8 +309,6 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
|
|||
// Editing
|
||||
diffViewProvider: DiffViewProvider
|
||||
diffStrategy?: DiffStrategy
|
||||
diffEnabled: boolean = false
|
||||
fuzzyMatchThreshold: number
|
||||
didEditFile: boolean = false
|
||||
|
||||
// LLM Messages & Chat Messages
|
||||
|
|
@ -418,11 +414,9 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
|
|||
constructor({
|
||||
provider,
|
||||
apiConfiguration,
|
||||
enableDiff = false,
|
||||
enableCheckpoints = true,
|
||||
checkpointTimeout = DEFAULT_CHECKPOINT_TIMEOUT_SECONDS,
|
||||
enableBridge = false,
|
||||
fuzzyMatchThreshold = 1.0,
|
||||
consecutiveMistakeLimit = DEFAULT_CONSECUTIVE_MISTAKE_LIMIT,
|
||||
task,
|
||||
images,
|
||||
|
|
@ -510,8 +504,6 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
|
|||
}
|
||||
}
|
||||
})
|
||||
this.diffEnabled = enableDiff
|
||||
this.fuzzyMatchThreshold = fuzzyMatchThreshold
|
||||
this.consecutiveMistakeLimit = consecutiveMistakeLimit ?? DEFAULT_CONSECUTIVE_MISTAKE_LIMIT
|
||||
this.providerRef = new WeakRef(provider)
|
||||
this.globalStoragePath = provider.context.globalStorageUri.fsPath
|
||||
|
|
@ -556,23 +548,20 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
|
|||
// Listen for provider profile changes to update parser state
|
||||
this.setupProviderProfileChangeListener(provider)
|
||||
|
||||
// Only set up diff strategy if diff is enabled.
|
||||
if (this.diffEnabled) {
|
||||
// Default to old strategy, will be updated if experiment is enabled.
|
||||
this.diffStrategy = new MultiSearchReplaceDiffStrategy(this.fuzzyMatchThreshold)
|
||||
// Always set up diff strategy - default to old strategy, will be updated if experiment is enabled.
|
||||
this.diffStrategy = new MultiSearchReplaceDiffStrategy()
|
||||
|
||||
// Check experiment asynchronously and update strategy if needed.
|
||||
provider.getState().then((state) => {
|
||||
const isMultiFileApplyDiffEnabled = experiments.isEnabled(
|
||||
state.experiments ?? {},
|
||||
EXPERIMENT_IDS.MULTI_FILE_APPLY_DIFF,
|
||||
)
|
||||
// Check experiment asynchronously and update strategy if needed.
|
||||
provider.getState().then((state) => {
|
||||
const isMultiFileApplyDiffEnabled = experiments.isEnabled(
|
||||
state.experiments ?? {},
|
||||
EXPERIMENT_IDS.MULTI_FILE_APPLY_DIFF,
|
||||
)
|
||||
|
||||
if (isMultiFileApplyDiffEnabled) {
|
||||
this.diffStrategy = new MultiFileSearchReplaceDiffStrategy(this.fuzzyMatchThreshold)
|
||||
}
|
||||
})
|
||||
}
|
||||
if (isMultiFileApplyDiffEnabled) {
|
||||
this.diffStrategy = new MultiFileSearchReplaceDiffStrategy()
|
||||
}
|
||||
})
|
||||
|
||||
this.toolRepetitionDetector = new ToolRepetitionDetector(this.consecutiveMistakeLimit)
|
||||
|
||||
|
|
@ -1608,7 +1597,6 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
|
|||
maxConcurrentFileReads: state?.maxConcurrentFileReads ?? 5,
|
||||
browserToolEnabled: state?.browserToolEnabled ?? true,
|
||||
modelInfo,
|
||||
diffEnabled: this.diffEnabled,
|
||||
includeAllToolsWithRestrictions: false,
|
||||
})
|
||||
allTools = toolsResult.tools
|
||||
|
|
@ -3681,7 +3669,6 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
|
|||
customModePrompts,
|
||||
customModes,
|
||||
customInstructions,
|
||||
this.diffEnabled,
|
||||
experiments,
|
||||
enableMcpServerCreation,
|
||||
language,
|
||||
|
|
@ -3755,7 +3742,6 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
|
|||
maxConcurrentFileReads: state?.maxConcurrentFileReads ?? 5,
|
||||
browserToolEnabled: state?.browserToolEnabled ?? true,
|
||||
modelInfo,
|
||||
diffEnabled: this.diffEnabled,
|
||||
includeAllToolsWithRestrictions: false,
|
||||
})
|
||||
allTools = toolsResult.tools
|
||||
|
|
@ -3972,7 +3958,6 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
|
|||
maxConcurrentFileReads: state?.maxConcurrentFileReads ?? 5,
|
||||
browserToolEnabled: state?.browserToolEnabled ?? true,
|
||||
modelInfo,
|
||||
diffEnabled: this.diffEnabled,
|
||||
includeAllToolsWithRestrictions: false,
|
||||
})
|
||||
contextMgmtTools = toolsResult.tools
|
||||
|
|
@ -4129,7 +4114,6 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
|
|||
maxConcurrentFileReads: state?.maxConcurrentFileReads ?? 5,
|
||||
browserToolEnabled: state?.browserToolEnabled ?? true,
|
||||
modelInfo,
|
||||
diffEnabled: this.diffEnabled,
|
||||
includeAllToolsWithRestrictions: supportsAllowedFunctionNames,
|
||||
})
|
||||
allTools = toolsResult.tools
|
||||
|
|
|
|||
|
|
@ -313,31 +313,15 @@ describe("Cline", () => {
|
|||
})
|
||||
|
||||
describe("constructor", () => {
|
||||
it("should respect provided settings", async () => {
|
||||
it("should always have diff strategy defined", async () => {
|
||||
const cline = new Task({
|
||||
provider: mockProvider,
|
||||
apiConfiguration: mockApiConfig,
|
||||
fuzzyMatchThreshold: 0.95,
|
||||
task: "test task",
|
||||
startTask: false,
|
||||
})
|
||||
|
||||
expect(cline.diffEnabled).toBe(false)
|
||||
})
|
||||
|
||||
it("should use default fuzzy match threshold when not provided", async () => {
|
||||
const cline = new Task({
|
||||
provider: mockProvider,
|
||||
apiConfiguration: mockApiConfig,
|
||||
enableDiff: true,
|
||||
fuzzyMatchThreshold: 0.95,
|
||||
task: "test task",
|
||||
startTask: false,
|
||||
})
|
||||
|
||||
expect(cline.diffEnabled).toBe(true)
|
||||
|
||||
// The diff strategy should be created with default threshold (1.0).
|
||||
// Diff is always enabled - diffStrategy should be defined
|
||||
expect(cline.diffStrategy).toBeDefined()
|
||||
})
|
||||
|
||||
|
|
@ -1355,7 +1339,6 @@ describe("Cline", () => {
|
|||
const task = new Task({
|
||||
provider: mockProvider,
|
||||
apiConfiguration: mockApiConfig,
|
||||
enableDiff: true,
|
||||
task: "test task",
|
||||
startTask: false,
|
||||
})
|
||||
|
|
@ -1375,7 +1358,6 @@ describe("Cline", () => {
|
|||
const task = new Task({
|
||||
provider: mockProvider,
|
||||
apiConfiguration: mockApiConfig,
|
||||
enableDiff: true,
|
||||
task: "test task",
|
||||
startTask: false,
|
||||
})
|
||||
|
|
@ -1397,7 +1379,6 @@ describe("Cline", () => {
|
|||
const task = new Task({
|
||||
provider: mockProvider,
|
||||
apiConfiguration: mockApiConfig,
|
||||
enableDiff: true,
|
||||
task: "test task",
|
||||
startTask: false,
|
||||
})
|
||||
|
|
@ -1412,19 +1393,6 @@ describe("Cline", () => {
|
|||
expect(task.diffStrategy).toBeInstanceOf(MultiSearchReplaceDiffStrategy)
|
||||
expect(task.diffStrategy?.getName()).toBe("MultiSearchReplace")
|
||||
})
|
||||
|
||||
it("should not create diff strategy when enableDiff is false", async () => {
|
||||
const task = new Task({
|
||||
provider: mockProvider,
|
||||
apiConfiguration: mockApiConfig,
|
||||
enableDiff: false,
|
||||
task: "test task",
|
||||
startTask: false,
|
||||
})
|
||||
|
||||
expect(task.diffEnabled).toBe(false)
|
||||
expect(task.diffStrategy).toBeUndefined()
|
||||
})
|
||||
})
|
||||
|
||||
describe("getApiProtocol", () => {
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@ interface BuildToolsOptions {
|
|||
maxConcurrentFileReads: number
|
||||
browserToolEnabled: boolean
|
||||
modelInfo?: ModelInfo
|
||||
diffEnabled: boolean
|
||||
/**
|
||||
* If true, returns all tools without mode filtering, but also includes
|
||||
* the list of allowed tool names for use with allowedFunctionNames.
|
||||
|
|
@ -94,7 +93,6 @@ export async function buildNativeToolsArrayWithRestrictions(options: BuildToolsO
|
|||
maxConcurrentFileReads,
|
||||
browserToolEnabled,
|
||||
modelInfo,
|
||||
diffEnabled,
|
||||
includeAllToolsWithRestrictions,
|
||||
} = options
|
||||
|
||||
|
|
@ -109,7 +107,6 @@ export async function buildNativeToolsArrayWithRestrictions(options: BuildToolsO
|
|||
todoListEnabled: apiConfiguration?.todoListEnabled ?? true,
|
||||
browserToolEnabled: browserToolEnabled ?? true,
|
||||
modelInfo,
|
||||
diffEnabled,
|
||||
}
|
||||
|
||||
// Determine if partial reads are enabled based on maxReadFileLine setting.
|
||||
|
|
|
|||
|
|
@ -970,24 +970,14 @@ export class ClineProvider
|
|||
}
|
||||
}
|
||||
|
||||
const {
|
||||
apiConfiguration,
|
||||
diffEnabled: enableDiff,
|
||||
enableCheckpoints,
|
||||
checkpointTimeout,
|
||||
fuzzyMatchThreshold,
|
||||
experiments,
|
||||
cloudUserInfo,
|
||||
taskSyncEnabled,
|
||||
} = await this.getState()
|
||||
const { apiConfiguration, enableCheckpoints, checkpointTimeout, experiments, cloudUserInfo, taskSyncEnabled } =
|
||||
await this.getState()
|
||||
|
||||
const task = new Task({
|
||||
provider: this,
|
||||
apiConfiguration,
|
||||
enableDiff,
|
||||
enableCheckpoints,
|
||||
checkpointTimeout,
|
||||
fuzzyMatchThreshold,
|
||||
consecutiveMistakeLimit: apiConfiguration.consecutiveMistakeLimit,
|
||||
historyItem,
|
||||
experiments,
|
||||
|
|
@ -1980,7 +1970,6 @@ export class ClineProvider
|
|||
soundEnabled,
|
||||
ttsEnabled,
|
||||
ttsSpeed,
|
||||
diffEnabled,
|
||||
enableCheckpoints,
|
||||
checkpointTimeout,
|
||||
taskHistory,
|
||||
|
|
@ -2001,7 +1990,6 @@ export class ClineProvider
|
|||
terminalZshOhMy,
|
||||
terminalZshP10k,
|
||||
terminalZdotdir,
|
||||
fuzzyMatchThreshold,
|
||||
mcpEnabled,
|
||||
enableMcpServerCreation,
|
||||
currentApiConfigName,
|
||||
|
|
@ -2120,7 +2108,6 @@ export class ClineProvider
|
|||
soundEnabled: soundEnabled ?? false,
|
||||
ttsEnabled: ttsEnabled ?? false,
|
||||
ttsSpeed: ttsSpeed ?? 1.0,
|
||||
diffEnabled: diffEnabled ?? true,
|
||||
enableCheckpoints: enableCheckpoints ?? true,
|
||||
checkpointTimeout: checkpointTimeout ?? DEFAULT_CHECKPOINT_TIMEOUT_SECONDS,
|
||||
shouldShowAnnouncement:
|
||||
|
|
@ -2144,7 +2131,6 @@ export class ClineProvider
|
|||
terminalZshOhMy: terminalZshOhMy ?? false,
|
||||
terminalZshP10k: terminalZshP10k ?? false,
|
||||
terminalZdotdir: terminalZdotdir ?? false,
|
||||
fuzzyMatchThreshold: fuzzyMatchThreshold ?? 1.0,
|
||||
mcpEnabled: mcpEnabled ?? true,
|
||||
enableMcpServerCreation: enableMcpServerCreation ?? true,
|
||||
currentApiConfigName: currentApiConfigName ?? "default",
|
||||
|
|
@ -2372,7 +2358,6 @@ export class ClineProvider
|
|||
soundEnabled: stateValues.soundEnabled ?? false,
|
||||
ttsEnabled: stateValues.ttsEnabled ?? false,
|
||||
ttsSpeed: stateValues.ttsSpeed ?? 1.0,
|
||||
diffEnabled: stateValues.diffEnabled ?? true,
|
||||
enableCheckpoints: stateValues.enableCheckpoints ?? true,
|
||||
checkpointTimeout: stateValues.checkpointTimeout ?? DEFAULT_CHECKPOINT_TIMEOUT_SECONDS,
|
||||
soundVolume: stateValues.soundVolume,
|
||||
|
|
@ -2381,7 +2366,6 @@ export class ClineProvider
|
|||
remoteBrowserHost: stateValues.remoteBrowserHost,
|
||||
remoteBrowserEnabled: stateValues.remoteBrowserEnabled ?? false,
|
||||
cachedChromeHostUrl: stateValues.cachedChromeHostUrl as string | undefined,
|
||||
fuzzyMatchThreshold: stateValues.fuzzyMatchThreshold ?? 1.0,
|
||||
writeDelayMs: stateValues.writeDelayMs ?? DEFAULT_WRITE_DELAY_MS,
|
||||
terminalOutputLineLimit: stateValues.terminalOutputLineLimit ?? 500,
|
||||
terminalOutputCharacterLimit:
|
||||
|
|
@ -2872,10 +2856,8 @@ export class ClineProvider
|
|||
const {
|
||||
apiConfiguration,
|
||||
organizationAllowList,
|
||||
diffEnabled: enableDiff,
|
||||
enableCheckpoints,
|
||||
checkpointTimeout,
|
||||
fuzzyMatchThreshold,
|
||||
experiments,
|
||||
cloudUserInfo,
|
||||
remoteControlEnabled,
|
||||
|
|
@ -2897,10 +2879,8 @@ export class ClineProvider
|
|||
const task = new Task({
|
||||
provider: this,
|
||||
apiConfiguration,
|
||||
enableDiff,
|
||||
enableCheckpoints,
|
||||
checkpointTimeout,
|
||||
fuzzyMatchThreshold,
|
||||
consecutiveMistakeLimit: apiConfiguration.consecutiveMistakeLimit,
|
||||
task: text,
|
||||
images,
|
||||
|
|
|
|||
|
|
@ -554,11 +554,9 @@ describe("ClineProvider", () => {
|
|||
uriScheme: "vscode",
|
||||
soundEnabled: false,
|
||||
ttsEnabled: false,
|
||||
diffEnabled: false,
|
||||
enableCheckpoints: false,
|
||||
writeDelayMs: 1000,
|
||||
browserViewportSize: "900x600",
|
||||
fuzzyMatchThreshold: 1.0,
|
||||
mcpEnabled: true,
|
||||
enableMcpServerCreation: false,
|
||||
mode: defaultModeSlug,
|
||||
|
|
@ -767,7 +765,6 @@ describe("ClineProvider", () => {
|
|||
expect(state).toHaveProperty("taskHistory")
|
||||
expect(state).toHaveProperty("soundEnabled")
|
||||
expect(state).toHaveProperty("ttsEnabled")
|
||||
expect(state).toHaveProperty("diffEnabled")
|
||||
expect(state).toHaveProperty("writeDelayMs")
|
||||
})
|
||||
|
||||
|
|
@ -779,15 +776,6 @@ describe("ClineProvider", () => {
|
|||
expect(state.language).toBe("pt-BR")
|
||||
})
|
||||
|
||||
test("diffEnabled defaults to true when not set", async () => {
|
||||
// Mock globalState.get to return undefined for diffEnabled
|
||||
;(mockContext.globalState.get as any).mockReturnValue(undefined)
|
||||
|
||||
const state = await provider.getState()
|
||||
|
||||
expect(state.diffEnabled).toBe(true)
|
||||
})
|
||||
|
||||
test("writeDelayMs defaults to 1000ms", async () => {
|
||||
// Mock globalState.get to return undefined for writeDelayMs
|
||||
;(mockContext.globalState.get as any).mockImplementation((key: string) =>
|
||||
|
|
@ -1444,10 +1432,10 @@ describe("ClineProvider", () => {
|
|||
)
|
||||
})
|
||||
|
||||
test("generates system prompt with diff enabled", async () => {
|
||||
test("generates system prompt with various configurations", async () => {
|
||||
await provider.resolveWebviewView(mockWebviewView)
|
||||
|
||||
// Mock getState to return diffEnabled: true
|
||||
// Mock getState with typical configuration
|
||||
vi.spyOn(provider, "getState").mockResolvedValue({
|
||||
apiConfiguration: {
|
||||
apiProvider: "openrouter",
|
||||
|
|
@ -1458,8 +1446,6 @@ describe("ClineProvider", () => {
|
|||
enableMcpServerCreation: true,
|
||||
mcpEnabled: false,
|
||||
browserViewportSize: "900x600",
|
||||
diffEnabled: true,
|
||||
fuzzyMatchThreshold: 0.8,
|
||||
experiments: experimentDefault,
|
||||
browserToolEnabled: true,
|
||||
} as any)
|
||||
|
|
@ -1478,40 +1464,6 @@ describe("ClineProvider", () => {
|
|||
)
|
||||
})
|
||||
|
||||
test("generates system prompt with diff disabled", async () => {
|
||||
await provider.resolveWebviewView(mockWebviewView)
|
||||
|
||||
// Mock getState to return diffEnabled: false
|
||||
vi.spyOn(provider, "getState").mockResolvedValue({
|
||||
apiConfiguration: {
|
||||
apiProvider: "openrouter",
|
||||
apiModelId: "test-model",
|
||||
},
|
||||
customModePrompts: {},
|
||||
mode: "code",
|
||||
mcpEnabled: false,
|
||||
browserViewportSize: "900x600",
|
||||
diffEnabled: false,
|
||||
fuzzyMatchThreshold: 0.8,
|
||||
experiments: experimentDefault,
|
||||
enableMcpServerCreation: true,
|
||||
browserToolEnabled: false,
|
||||
} as any)
|
||||
|
||||
// Trigger getSystemPrompt
|
||||
const handler = getMessageHandler()
|
||||
await handler({ type: "getSystemPrompt", mode: "code" })
|
||||
|
||||
// Verify system prompt was generated and sent
|
||||
expect(mockPostMessage).toHaveBeenCalledWith(
|
||||
expect.objectContaining({
|
||||
type: "systemPrompt",
|
||||
text: expect.any(String),
|
||||
mode: "code",
|
||||
}),
|
||||
)
|
||||
})
|
||||
|
||||
test("uses correct mode-specific instructions when mode is specified", async () => {
|
||||
await provider.resolveWebviewView(mockWebviewView)
|
||||
|
||||
|
|
|
|||
|
|
@ -58,9 +58,7 @@ function makeProviderStub() {
|
|||
customModePrompts: undefined,
|
||||
customInstructions: undefined,
|
||||
browserViewportSize: "900x600",
|
||||
diffEnabled: false,
|
||||
mcpEnabled: false,
|
||||
fuzzyMatchThreshold: 1.0,
|
||||
experiments: {},
|
||||
enableMcpServerCreation: false,
|
||||
browserToolEnabled: true, // critical: enabled in settings
|
||||
|
|
|
|||
|
|
@ -17,9 +17,7 @@ export const generateSystemPrompt = async (provider: ClineProvider, message: Web
|
|||
customModePrompts,
|
||||
customInstructions,
|
||||
browserViewportSize,
|
||||
diffEnabled,
|
||||
mcpEnabled,
|
||||
fuzzyMatchThreshold,
|
||||
experiments,
|
||||
enableMcpServerCreation,
|
||||
browserToolEnabled,
|
||||
|
|
@ -36,8 +34,8 @@ export const generateSystemPrompt = async (provider: ClineProvider, message: Web
|
|||
)
|
||||
|
||||
const diffStrategy = isMultiFileApplyDiffEnabled
|
||||
? new MultiFileSearchReplaceDiffStrategy(fuzzyMatchThreshold)
|
||||
: new MultiSearchReplaceDiffStrategy(fuzzyMatchThreshold)
|
||||
? new MultiFileSearchReplaceDiffStrategy()
|
||||
: new MultiSearchReplaceDiffStrategy()
|
||||
|
||||
const cwd = provider.cwd
|
||||
|
||||
|
|
@ -80,7 +78,6 @@ export const generateSystemPrompt = async (provider: ClineProvider, message: Web
|
|||
customModePrompts,
|
||||
customModes,
|
||||
customInstructions,
|
||||
diffEnabled,
|
||||
experiments,
|
||||
enableMcpServerCreation,
|
||||
language,
|
||||
|
|
|
|||
|
|
@ -114,7 +114,6 @@ import { ModelPicker } from "./ModelPicker"
|
|||
import { ApiErrorMessage } from "./ApiErrorMessage"
|
||||
import { ThinkingBudget } from "./ThinkingBudget"
|
||||
import { Verbosity } from "./Verbosity"
|
||||
import { DiffSettingsControl } from "./DiffSettingsControl"
|
||||
import { TodoListSettingsControl } from "./TodoListSettingsControl"
|
||||
import { TemperatureControl } from "./TemperatureControl"
|
||||
import { RateLimitSecondsControl } from "./RateLimitSecondsControl"
|
||||
|
|
@ -818,11 +817,6 @@ const ApiOptions = ({
|
|||
todoListEnabled={apiConfiguration.todoListEnabled}
|
||||
onChange={(field, value) => setApiConfigurationField(field, value)}
|
||||
/>
|
||||
<DiffSettingsControl
|
||||
diffEnabled={apiConfiguration.diffEnabled}
|
||||
fuzzyMatchThreshold={apiConfiguration.fuzzyMatchThreshold}
|
||||
onChange={(field, value) => setApiConfigurationField(field, value)}
|
||||
/>
|
||||
{selectedModelInfo?.supportsTemperature !== false && (
|
||||
<TemperatureControl
|
||||
value={apiConfiguration.modelTemperature}
|
||||
|
|
|
|||
|
|
@ -1,68 +0,0 @@
|
|||
import React, { useCallback } from "react"
|
||||
import { Slider } from "@/components/ui"
|
||||
import { useAppTranslation } from "@/i18n/TranslationContext"
|
||||
import { VSCodeCheckbox } from "@vscode/webview-ui-toolkit/react"
|
||||
|
||||
interface DiffSettingsControlProps {
|
||||
diffEnabled?: boolean
|
||||
fuzzyMatchThreshold?: number
|
||||
onChange: (field: "diffEnabled" | "fuzzyMatchThreshold", value: any) => void
|
||||
}
|
||||
|
||||
export const DiffSettingsControl: React.FC<DiffSettingsControlProps> = ({
|
||||
diffEnabled = true,
|
||||
fuzzyMatchThreshold = 1.0,
|
||||
onChange,
|
||||
}) => {
|
||||
const { t } = useAppTranslation()
|
||||
|
||||
const handleDiffEnabledChange = useCallback(
|
||||
(e: any) => {
|
||||
onChange("diffEnabled", e.target.checked)
|
||||
},
|
||||
[onChange],
|
||||
)
|
||||
|
||||
const handleThresholdChange = useCallback(
|
||||
(newValue: number[]) => {
|
||||
onChange("fuzzyMatchThreshold", newValue[0])
|
||||
},
|
||||
[onChange],
|
||||
)
|
||||
|
||||
return (
|
||||
<div className="flex flex-col gap-1">
|
||||
<div>
|
||||
<VSCodeCheckbox checked={diffEnabled} onChange={handleDiffEnabledChange}>
|
||||
<span className="font-medium">{t("settings:advanced.diff.label")}</span>
|
||||
</VSCodeCheckbox>
|
||||
<div className="text-vscode-descriptionForeground text-sm">
|
||||
{t("settings:advanced.diff.description")}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{diffEnabled && (
|
||||
<div className="flex flex-col gap-3 pl-3 border-l-2 border-vscode-button-background">
|
||||
<div>
|
||||
<label className="block font-medium mb-1">
|
||||
{t("settings:advanced.diff.matchPrecision.label")}
|
||||
</label>
|
||||
<div className="flex items-center gap-2">
|
||||
<Slider
|
||||
min={0.8}
|
||||
max={1}
|
||||
step={0.005}
|
||||
value={[fuzzyMatchThreshold]}
|
||||
onValueChange={handleThresholdChange}
|
||||
/>
|
||||
<span className="w-10">{Math.round(fuzzyMatchThreshold * 100)}%</span>
|
||||
</div>
|
||||
<div className="text-vscode-descriptionForeground text-sm mt-1">
|
||||
{t("settings:advanced.diff.matchPrecision.description")}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
|
@ -165,9 +165,7 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
|
|||
browserViewportSize,
|
||||
enableCheckpoints,
|
||||
checkpointTimeout,
|
||||
diffEnabled,
|
||||
experiments,
|
||||
fuzzyMatchThreshold,
|
||||
maxOpenTabsContext,
|
||||
maxWorkspaceFiles,
|
||||
mcpEnabled,
|
||||
|
|
@ -383,13 +381,11 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
|
|||
soundVolume: soundVolume ?? 0.5,
|
||||
ttsEnabled,
|
||||
ttsSpeed,
|
||||
diffEnabled: diffEnabled ?? true,
|
||||
enableCheckpoints: enableCheckpoints ?? false,
|
||||
checkpointTimeout: checkpointTimeout ?? DEFAULT_CHECKPOINT_TIMEOUT_SECONDS,
|
||||
browserViewportSize: browserViewportSize ?? "900x600",
|
||||
remoteBrowserHost: remoteBrowserEnabled ? remoteBrowserHost : undefined,
|
||||
remoteBrowserEnabled: remoteBrowserEnabled ?? false,
|
||||
fuzzyMatchThreshold: fuzzyMatchThreshold ?? 1.0,
|
||||
writeDelayMs,
|
||||
screenshotQuality: screenshotQuality ?? 75,
|
||||
terminalOutputLineLimit: terminalOutputLineLimit ?? 500,
|
||||
|
|
|
|||
|
|
@ -158,33 +158,6 @@ vi.mock("../RateLimitSecondsControl", () => ({
|
|||
),
|
||||
}))
|
||||
|
||||
// Mock DiffSettingsControl for tests
|
||||
vi.mock("../DiffSettingsControl", () => ({
|
||||
DiffSettingsControl: ({ diffEnabled, fuzzyMatchThreshold, onChange }: any) => (
|
||||
<div data-testid="diff-settings-control">
|
||||
<label>
|
||||
Enable editing through diffs
|
||||
<input
|
||||
type="checkbox"
|
||||
checked={diffEnabled}
|
||||
onChange={(e) => onChange("diffEnabled", e.target.checked)}
|
||||
/>
|
||||
</label>
|
||||
<div>
|
||||
Fuzzy match threshold
|
||||
<input
|
||||
type="range"
|
||||
value={fuzzyMatchThreshold || 1.0}
|
||||
onChange={(e) => onChange("fuzzyMatchThreshold", parseFloat(e.target.value))}
|
||||
min={0.8}
|
||||
max={1}
|
||||
step={0.005}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
),
|
||||
}))
|
||||
|
||||
// Mock TodoListSettingsControl for tests
|
||||
vi.mock("../TodoListSettingsControl", () => ({
|
||||
TodoListSettingsControl: ({ todoListEnabled, onChange }: any) => (
|
||||
|
|
@ -323,23 +296,16 @@ describe("ApiOptions", () => {
|
|||
expect(mockSetApiConfigurationField).toHaveBeenCalledWith("apiModelId", openAiCodexDefaultModelId, false)
|
||||
})
|
||||
|
||||
it("shows diff settings, temperature and rate limit controls by default", () => {
|
||||
it("shows temperature and rate limit controls by default", () => {
|
||||
renderApiOptions({
|
||||
apiConfiguration: {
|
||||
diffEnabled: true,
|
||||
fuzzyMatchThreshold: 0.95,
|
||||
},
|
||||
apiConfiguration: {},
|
||||
})
|
||||
// Check for DiffSettingsControl by looking for text content
|
||||
expect(screen.getByText(/enable editing through diffs/i)).toBeInTheDocument()
|
||||
expect(screen.getByTestId("temperature-control")).toBeInTheDocument()
|
||||
expect(screen.getByTestId("rate-limit-seconds-control")).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it("hides all controls when fromWelcomeView is true", () => {
|
||||
renderApiOptions({ fromWelcomeView: true })
|
||||
// Check for absence of DiffSettingsControl text
|
||||
expect(screen.queryByText(/enable editing through diffs/i)).not.toBeInTheDocument()
|
||||
expect(screen.queryByTestId("temperature-control")).not.toBeInTheDocument()
|
||||
expect(screen.queryByTestId("rate-limit-seconds-control")).not.toBeInTheDocument()
|
||||
})
|
||||
|
|
|
|||
|
|
@ -161,9 +161,7 @@ describe("SettingsView - Change Detection Fix", () => {
|
|||
browserToolEnabled: false,
|
||||
browserViewportSize: "1280x720",
|
||||
enableCheckpoints: false,
|
||||
diffEnabled: true,
|
||||
experiments: {},
|
||||
fuzzyMatchThreshold: 1.0,
|
||||
maxOpenTabsContext: 10,
|
||||
maxWorkspaceFiles: 200,
|
||||
mcpEnabled: false,
|
||||
|
|
|
|||
|
|
@ -166,9 +166,7 @@ describe("SettingsView - Unsaved Changes Detection", () => {
|
|||
browserToolEnabled: false,
|
||||
browserViewportSize: "1280x720",
|
||||
enableCheckpoints: false,
|
||||
diffEnabled: true,
|
||||
experiments: {},
|
||||
fuzzyMatchThreshold: 1.0,
|
||||
maxOpenTabsContext: 10,
|
||||
maxWorkspaceFiles: 200,
|
||||
mcpEnabled: false,
|
||||
|
|
|
|||
|
|
@ -89,12 +89,10 @@ export interface ExtensionStateContextType extends ExtensionState {
|
|||
setTerminalZdotdir: (value: boolean) => void
|
||||
setTtsEnabled: (value: boolean) => void
|
||||
setTtsSpeed: (value: number) => void
|
||||
setDiffEnabled: (value: boolean) => void
|
||||
setEnableCheckpoints: (value: boolean) => void
|
||||
checkpointTimeout: number
|
||||
setCheckpointTimeout: (value: number) => void
|
||||
setBrowserViewportSize: (value: string) => void
|
||||
setFuzzyMatchThreshold: (value: number) => void
|
||||
setWriteDelayMs: (value: number) => void
|
||||
screenshotQuality?: number
|
||||
setScreenshotQuality: (value: number) => void
|
||||
|
|
@ -207,10 +205,8 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode
|
|||
isBrowserSessionActive: false,
|
||||
ttsEnabled: false,
|
||||
ttsSpeed: 1.0,
|
||||
diffEnabled: false,
|
||||
enableCheckpoints: true,
|
||||
checkpointTimeout: DEFAULT_CHECKPOINT_TIMEOUT_SECONDS, // Default to 15 seconds
|
||||
fuzzyMatchThreshold: 1.0,
|
||||
language: "en", // Default language code
|
||||
writeDelayMs: 1000,
|
||||
browserViewportSize: "900x600",
|
||||
|
|
@ -499,7 +495,6 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode
|
|||
commands,
|
||||
soundVolume: state.soundVolume,
|
||||
ttsSpeed: state.ttsSpeed,
|
||||
fuzzyMatchThreshold: state.fuzzyMatchThreshold,
|
||||
writeDelayMs: state.writeDelayMs,
|
||||
screenshotQuality: state.screenshotQuality,
|
||||
routerModels: extensionRouterModels,
|
||||
|
|
@ -541,12 +536,10 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode
|
|||
setSoundVolume: (value) => setState((prevState) => ({ ...prevState, soundVolume: value })),
|
||||
setTtsEnabled: (value) => setState((prevState) => ({ ...prevState, ttsEnabled: value })),
|
||||
setTtsSpeed: (value) => setState((prevState) => ({ ...prevState, ttsSpeed: value })),
|
||||
setDiffEnabled: (value) => setState((prevState) => ({ ...prevState, diffEnabled: value })),
|
||||
setEnableCheckpoints: (value) => setState((prevState) => ({ ...prevState, enableCheckpoints: value })),
|
||||
setCheckpointTimeout: (value) => setState((prevState) => ({ ...prevState, checkpointTimeout: value })),
|
||||
setBrowserViewportSize: (value: string) =>
|
||||
setState((prevState) => ({ ...prevState, browserViewportSize: value })),
|
||||
setFuzzyMatchThreshold: (value) => setState((prevState) => ({ ...prevState, fuzzyMatchThreshold: value })),
|
||||
setWriteDelayMs: (value) => setState((prevState) => ({ ...prevState, writeDelayMs: value })),
|
||||
setScreenshotQuality: (value) => setState((prevState) => ({ ...prevState, screenshotQuality: value })),
|
||||
setTerminalOutputLineLimit: (value) =>
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/ca/settings.json
generated
4
webview-ui/src/i18n/locales/ca/settings.json
generated
|
|
@ -783,10 +783,6 @@
|
|||
"unified": "L'estratègia de diff unificat pren múltiples enfocaments per aplicar diffs i tria el millor enfocament.",
|
||||
"multiBlock": "L'estratègia de diff multi-bloc permet actualitzar múltiples blocs de codi en un fitxer en una sola sol·licitud."
|
||||
}
|
||||
},
|
||||
"matchPrecision": {
|
||||
"label": "Precisió de coincidència",
|
||||
"description": "Aquest control lliscant controla amb quina precisió han de coincidir les seccions de codi en aplicar diffs. Valors més baixos permeten coincidències més flexibles però augmenten el risc de reemplaçaments incorrectes. Utilitzeu valors per sota del 100% amb extrema precaució."
|
||||
}
|
||||
},
|
||||
"todoList": {
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/de/settings.json
generated
4
webview-ui/src/i18n/locales/de/settings.json
generated
|
|
@ -783,10 +783,6 @@
|
|||
"unified": "Die einheitliche Diff-Strategie wendet mehrere Ansätze zur Anwendung von Diffs an und wählt den besten Ansatz.",
|
||||
"multiBlock": "Die Mehrblock-Diff-Strategie ermöglicht das Aktualisieren mehrerer Codeblöcke in einer Datei in einer Anfrage."
|
||||
}
|
||||
},
|
||||
"matchPrecision": {
|
||||
"label": "Übereinstimmungspräzision",
|
||||
"description": "Dieser Schieberegler steuert, wie genau Codeabschnitte bei der Anwendung von Diffs übereinstimmen müssen. Niedrigere Werte ermöglichen eine flexiblere Übereinstimmung, erhöhen aber das Risiko falscher Ersetzungen. Verwenden Sie Werte unter 100 % mit äußerster Vorsicht."
|
||||
}
|
||||
},
|
||||
"todoList": {
|
||||
|
|
|
|||
|
|
@ -792,10 +792,6 @@
|
|||
"unified": "Unified diff strategy takes multiple approaches to applying diffs and chooses the best approach.",
|
||||
"multiBlock": "Multi-block diff strategy allows updating multiple code blocks in a file in one request."
|
||||
}
|
||||
},
|
||||
"matchPrecision": {
|
||||
"label": "Match precision",
|
||||
"description": "This slider controls how precisely code sections must match when applying diffs. Lower values allow more flexible matching but increase the risk of incorrect replacements. Use values below 100% with extreme caution."
|
||||
}
|
||||
},
|
||||
"todoList": {
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/es/settings.json
generated
4
webview-ui/src/i18n/locales/es/settings.json
generated
|
|
@ -783,10 +783,6 @@
|
|||
"unified": "La estrategia de diff unificado toma múltiples enfoques para aplicar diffs y elige el mejor enfoque.",
|
||||
"multiBlock": "La estrategia de diff multi-bloque permite actualizar múltiples bloques de código en un archivo en una sola solicitud."
|
||||
}
|
||||
},
|
||||
"matchPrecision": {
|
||||
"label": "Precisión de coincidencia",
|
||||
"description": "Este control deslizante controla cuán precisamente deben coincidir las secciones de código al aplicar diffs. Valores más bajos permiten coincidencias más flexibles pero aumentan el riesgo de reemplazos incorrectos. Use valores por debajo del 100% con extrema precaución."
|
||||
}
|
||||
},
|
||||
"todoList": {
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/fr/settings.json
generated
4
webview-ui/src/i18n/locales/fr/settings.json
generated
|
|
@ -783,10 +783,6 @@
|
|||
"unified": "La stratégie de diff unifié prend plusieurs approches pour appliquer les diffs et choisit la meilleure approche.",
|
||||
"multiBlock": "La stratégie de diff multi-blocs permet de mettre à jour plusieurs blocs de code dans un fichier en une seule requête."
|
||||
}
|
||||
},
|
||||
"matchPrecision": {
|
||||
"label": "Précision de correspondance",
|
||||
"description": "Ce curseur contrôle la précision avec laquelle les sections de code doivent correspondre lors de l'application des diffs. Des valeurs plus basses permettent des correspondances plus flexibles mais augmentent le risque de remplacements incorrects. Utilisez des valeurs inférieures à 100 % avec une extrême prudence."
|
||||
}
|
||||
},
|
||||
"todoList": {
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/hi/settings.json
generated
4
webview-ui/src/i18n/locales/hi/settings.json
generated
|
|
@ -784,10 +784,6 @@
|
|||
"unified": "एकीकृत diff रणनीति diffs लागू करने के लिए कई दृष्टिकोण लेती है और सर्वोत्तम दृष्टिकोण चुनती है।",
|
||||
"multiBlock": "मल्टी-ब्लॉक diff रणनीति एक अनुरोध में एक फाइल में कई कोड ब्लॉक अपडेट करने की अनुमति देती है।"
|
||||
}
|
||||
},
|
||||
"matchPrecision": {
|
||||
"label": "मिलान सटीकता",
|
||||
"description": "यह स्लाइडर नियंत्रित करता है कि diffs लागू करते समय कोड अनुभागों को कितनी सटीकता से मेल खाना चाहिए। निम्न मान अधिक लचीले मिलान की अनुमति देते हैं लेकिन गलत प्रतिस्थापन का जोखिम बढ़ाते हैं। 100% से नीचे के मानों का उपयोग अत्यधिक सावधानी के साथ करें।"
|
||||
}
|
||||
},
|
||||
"todoList": {
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/id/settings.json
generated
4
webview-ui/src/i18n/locales/id/settings.json
generated
|
|
@ -788,10 +788,6 @@
|
|||
"unified": "Strategi unified diff mengambil beberapa pendekatan untuk menerapkan diff dan memilih pendekatan terbaik.",
|
||||
"multiBlock": "Strategi multi-block diff memungkinkan memperbarui beberapa blok kode dalam file dalam satu permintaan."
|
||||
}
|
||||
},
|
||||
"matchPrecision": {
|
||||
"label": "Presisi pencocokan",
|
||||
"description": "Slider ini mengontrol seberapa tepat bagian kode harus cocok saat menerapkan diff. Nilai yang lebih rendah memungkinkan pencocokan yang lebih fleksibel tetapi meningkatkan risiko penggantian yang salah. Gunakan nilai di bawah 100% dengan sangat hati-hati."
|
||||
}
|
||||
},
|
||||
"todoList": {
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/it/settings.json
generated
4
webview-ui/src/i18n/locales/it/settings.json
generated
|
|
@ -784,10 +784,6 @@
|
|||
"unified": "La strategia diff unificato adotta diversi approcci per applicare i diff e sceglie il migliore.",
|
||||
"multiBlock": "La strategia diff multi-blocco consente di aggiornare più blocchi di codice in un file in una singola richiesta."
|
||||
}
|
||||
},
|
||||
"matchPrecision": {
|
||||
"label": "Precisione corrispondenza",
|
||||
"description": "Questo cursore controlla quanto precisamente le sezioni di codice devono corrispondere quando si applicano i diff. Valori più bassi consentono corrispondenze più flessibili ma aumentano il rischio di sostituzioni errate. Usa valori inferiori al 100% con estrema cautela."
|
||||
}
|
||||
},
|
||||
"todoList": {
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/ja/settings.json
generated
4
webview-ui/src/i18n/locales/ja/settings.json
generated
|
|
@ -784,10 +784,6 @@
|
|||
"unified": "統合diff戦略はdiffを適用するための複数のアプローチを取り、最良のアプローチを選択します。",
|
||||
"multiBlock": "マルチブロックdiff戦略は、1つのリクエストでファイル内の複数のコードブロックを更新できます。"
|
||||
}
|
||||
},
|
||||
"matchPrecision": {
|
||||
"label": "マッチ精度",
|
||||
"description": "このスライダーは、diffを適用する際にコードセクションがどれだけ正確に一致する必要があるかを制御します。低い値はより柔軟なマッチングを可能にしますが、誤った置換のリスクが高まります。100%未満の値は細心の注意を払って使用してください。"
|
||||
}
|
||||
},
|
||||
"todoList": {
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/ko/settings.json
generated
4
webview-ui/src/i18n/locales/ko/settings.json
generated
|
|
@ -784,10 +784,6 @@
|
|||
"unified": "통합 diff 전략은 diff를 적용하는 여러 접근 방식을 취하고 최상의 접근 방식을 선택합니다.",
|
||||
"multiBlock": "다중 블록 diff 전략은 하나의 요청으로 파일의 여러 코드 블록을 업데이트할 수 있습니다."
|
||||
}
|
||||
},
|
||||
"matchPrecision": {
|
||||
"label": "일치 정확도",
|
||||
"description": "이 슬라이더는 diff를 적용할 때 코드 섹션이 얼마나 정확하게 일치해야 하는지 제어합니다. 낮은 값은 더 유연한 일치를 허용하지만 잘못된 교체 위험이 증가합니다. 100% 미만의 값은 극도로 주의해서 사용하세요."
|
||||
}
|
||||
},
|
||||
"todoList": {
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/nl/settings.json
generated
4
webview-ui/src/i18n/locales/nl/settings.json
generated
|
|
@ -784,10 +784,6 @@
|
|||
"unified": "Unified diff-strategie gebruikt meerdere methoden om diffs toe te passen en kiest de beste aanpak.",
|
||||
"multiBlock": "Multi-block diff-strategie laat toe om meerdere codeblokken in één verzoek bij te werken."
|
||||
}
|
||||
},
|
||||
"matchPrecision": {
|
||||
"label": "Matchnauwkeurigheid",
|
||||
"description": "Deze schuifregelaar bepaalt hoe nauwkeurig codeblokken moeten overeenkomen bij het toepassen van diffs. Lagere waarden laten flexibelere matching toe maar verhogen het risico op verkeerde vervangingen. Gebruik waarden onder 100% met uiterste voorzichtigheid."
|
||||
}
|
||||
},
|
||||
"todoList": {
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/pl/settings.json
generated
4
webview-ui/src/i18n/locales/pl/settings.json
generated
|
|
@ -784,10 +784,6 @@
|
|||
"unified": "Strategia diff ujednoliconego stosuje wiele podejść do zastosowania różnic i wybiera najlepsze podejście.",
|
||||
"multiBlock": "Strategia diff wieloblokowego pozwala na aktualizację wielu bloków kodu w pliku w jednym żądaniu."
|
||||
}
|
||||
},
|
||||
"matchPrecision": {
|
||||
"label": "Precyzja dopasowania",
|
||||
"description": "Ten suwak kontroluje, jak dokładnie sekcje kodu muszą pasować podczas stosowania różnic. Niższe wartości umożliwiają bardziej elastyczne dopasowywanie, ale zwiększają ryzyko nieprawidłowych zamian. Używaj wartości poniżej 100% z najwyższą ostrożnością."
|
||||
}
|
||||
},
|
||||
"todoList": {
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/pt-BR/settings.json
generated
4
webview-ui/src/i18n/locales/pt-BR/settings.json
generated
|
|
@ -784,10 +784,6 @@
|
|||
"unified": "A estratégia de diff unificado adota várias abordagens para aplicar diffs e escolhe a melhor abordagem.",
|
||||
"multiBlock": "A estratégia de diff multi-bloco permite atualizar vários blocos de código em um arquivo em uma única requisição."
|
||||
}
|
||||
},
|
||||
"matchPrecision": {
|
||||
"label": "Precisão de correspondência",
|
||||
"description": "Este controle deslizante controla quão precisamente as seções de código devem corresponder ao aplicar diffs. Valores mais baixos permitem correspondências mais flexíveis, mas aumentam o risco de substituições incorretas. Use valores abaixo de 100% com extrema cautela."
|
||||
}
|
||||
},
|
||||
"todoList": {
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/ru/settings.json
generated
4
webview-ui/src/i18n/locales/ru/settings.json
generated
|
|
@ -784,10 +784,6 @@
|
|||
"unified": "Унифицированная стратегия использует несколько подходов к применению диффов и выбирает лучший.",
|
||||
"multiBlock": "Мультиблочная стратегия позволяет обновлять несколько блоков кода в файле за один запрос."
|
||||
}
|
||||
},
|
||||
"matchPrecision": {
|
||||
"label": "Точность совпадения",
|
||||
"description": "Этот ползунок управляет точностью совпадения секций кода при применении диффов. Меньшие значения позволяют более гибкое совпадение, но увеличивают риск неверной замены. Используйте значения ниже 100% с осторожностью."
|
||||
}
|
||||
},
|
||||
"todoList": {
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/tr/settings.json
generated
4
webview-ui/src/i18n/locales/tr/settings.json
generated
|
|
@ -784,10 +784,6 @@
|
|||
"unified": "Birleştirilmiş diff stratejisi, diff'leri uygulamak için birden çok yaklaşım benimser ve en iyi yaklaşımı seçer.",
|
||||
"multiBlock": "Çoklu blok diff stratejisi, tek bir istekte bir dosyadaki birden çok kod bloğunu güncellemenize olanak tanır."
|
||||
}
|
||||
},
|
||||
"matchPrecision": {
|
||||
"label": "Eşleşme hassasiyeti",
|
||||
"description": "Bu kaydırıcı, diff'ler uygulanırken kod bölümlerinin ne kadar hassas bir şekilde eşleşmesi gerektiğini kontrol eder. Daha düşük değerler daha esnek eşleşmeye izin verir ancak yanlış değiştirme riskini artırır. %100'ün altındaki değerleri son derece dikkatli kullanın."
|
||||
}
|
||||
},
|
||||
"todoList": {
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/vi/settings.json
generated
4
webview-ui/src/i18n/locales/vi/settings.json
generated
|
|
@ -784,10 +784,6 @@
|
|||
"unified": "Chiến lược diff thống nhất thực hiện nhiều cách tiếp cận để áp dụng diff và chọn cách tiếp cận tốt nhất.",
|
||||
"multiBlock": "Chiến lược diff đa khối cho phép cập nhật nhiều khối mã trong một tệp trong một yêu cầu."
|
||||
}
|
||||
},
|
||||
"matchPrecision": {
|
||||
"label": "Độ chính xác khớp",
|
||||
"description": "Thanh trượt này kiểm soát mức độ chính xác các phần mã phải khớp khi áp dụng diff. Giá trị thấp hơn cho phép khớp linh hoạt hơn nhưng tăng nguy cơ thay thế không chính xác. Sử dụng giá trị dưới 100% với sự thận trọng cao."
|
||||
}
|
||||
},
|
||||
"todoList": {
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/zh-CN/settings.json
generated
4
webview-ui/src/i18n/locales/zh-CN/settings.json
generated
|
|
@ -784,10 +784,6 @@
|
|||
"unified": "统一 diff 策略采用多种方法应用差异并选择最佳方法。",
|
||||
"multiBlock": "多块 diff 策略允许在一个请求中更新文件中的多个代码块。"
|
||||
}
|
||||
},
|
||||
"matchPrecision": {
|
||||
"label": "匹配精度",
|
||||
"description": "控制代码匹配的精确程度。数值越低匹配越宽松(容错率高但风险大),建议保持100%以确保安全。"
|
||||
}
|
||||
},
|
||||
"todoList": {
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/zh-TW/settings.json
generated
4
webview-ui/src/i18n/locales/zh-TW/settings.json
generated
|
|
@ -784,10 +784,6 @@
|
|||
"unified": "統一差異策略會嘗試多種比對方式,並選擇最佳方案。",
|
||||
"multiBlock": "多區塊策略可在單一請求中更新檔案內的多個程式碼區塊。"
|
||||
}
|
||||
},
|
||||
"matchPrecision": {
|
||||
"label": "比對精確度",
|
||||
"description": "此滑桿控制套用差異時程式碼區段的比對精確度。較低的數值允許更彈性的比對,但也會增加錯誤取代的風險。使用低於 100% 的數值時請特別謹慎。"
|
||||
}
|
||||
},
|
||||
"todoList": {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue