diff --git a/src/core/Cline.ts b/src/core/Cline.ts index ab0ab26..cbac9df 100644 --- a/src/core/Cline.ts +++ b/src/core/Cline.ts @@ -107,8 +107,12 @@ export class Cline { task?: string | undefined, images?: string[] | undefined, historyItem?: HistoryItem | undefined, - experimentalDiffStrategy?: boolean, + experimentalDiffStrategy: boolean = false, ) { + if (!task && !images && !historyItem) { + throw new Error('Either historyItem or task/images must be provided'); + } + this.taskId = crypto.randomUUID() this.api = buildApiHandler(apiConfiguration) this.terminalManager = new TerminalManager() @@ -119,7 +123,7 @@ export class Cline { // Prioritize experimentalDiffStrategy from history item if available const effectiveExperimentalDiffStrategy = historyItem?.experimentalDiffStrategy ?? experimentalDiffStrategy - this.diffStrategy = getDiffStrategy(this.api.getModel().id, fuzzyMatchThreshold, effectiveExperimentalDiffStrategy) + this.diffStrategy = getDiffStrategy(this.api.getModel().id, fuzzyMatchThreshold ?? 1.0, effectiveExperimentalDiffStrategy) this.diffViewProvider = new DiffViewProvider(cwd) this.providerRef = new WeakRef(provider) diff --git a/src/core/__tests__/Cline.test.ts b/src/core/__tests__/Cline.test.ts index 66bdbf7..11e9f9d 100644 --- a/src/core/__tests__/Cline.test.ts +++ b/src/core/__tests__/Cline.test.ts @@ -322,7 +322,7 @@ describe('Cline', () => { expect(cline.diffEnabled).toBe(true); expect(cline.diffStrategy).toBeDefined(); - expect(getDiffStrategySpy).toHaveBeenCalledWith('claude-3-5-sonnet-20241022', 0.9); + expect(getDiffStrategySpy).toHaveBeenCalledWith('claude-3-5-sonnet-20241022', 0.9, false); getDiffStrategySpy.mockRestore(); }); @@ -341,7 +341,7 @@ describe('Cline', () => { expect(cline.diffEnabled).toBe(true); expect(cline.diffStrategy).toBeDefined(); - expect(getDiffStrategySpy).toHaveBeenCalledWith('claude-3-5-sonnet-20241022', 1.0); + expect(getDiffStrategySpy).toHaveBeenCalledWith('claude-3-5-sonnet-20241022', 1.0, false); getDiffStrategySpy.mockRestore(); }); diff --git a/src/core/diff/DiffStrategy.ts b/src/core/diff/DiffStrategy.ts index 2a05417..ac3a0c4 100644 --- a/src/core/diff/DiffStrategy.ts +++ b/src/core/diff/DiffStrategy.ts @@ -7,14 +7,11 @@ import { NewUnifiedDiffStrategy } from './strategies/new-unified' * @param model The name of the model being used (e.g., 'gpt-4', 'claude-3-opus') * @returns The appropriate diff strategy for the model */ -export function getDiffStrategy(model: string, fuzzyMatchThreshold?: number, experimentalDiffStrategy?: boolean): DiffStrategy { +export function getDiffStrategy(model: string, fuzzyMatchThreshold?: number, experimentalDiffStrategy: boolean = false): DiffStrategy { if (experimentalDiffStrategy) { - // Use the fuzzyMatchThreshold with a minimum of 0.8 (80%) - const threshold = Math.max(fuzzyMatchThreshold ?? 1.0, 0.8) - return new NewUnifiedDiffStrategy(threshold) + return new NewUnifiedDiffStrategy(fuzzyMatchThreshold) } - // Default to the stable SearchReplaceDiffStrategy - return new SearchReplaceDiffStrategy() + return new SearchReplaceDiffStrategy(fuzzyMatchThreshold) } export type { DiffStrategy } diff --git a/src/core/diff/strategies/__tests__/new-unified.test.ts b/src/core/diff/strategies/__tests__/new-unified.test.ts index e1d568e..f8cb51d 100644 --- a/src/core/diff/strategies/__tests__/new-unified.test.ts +++ b/src/core/diff/strategies/__tests__/new-unified.test.ts @@ -11,7 +11,7 @@ describe('main', () => { describe('constructor', () => { it('should use default confidence threshold when not provided', () => { const defaultStrategy = new NewUnifiedDiffStrategy() - expect(defaultStrategy['confidenceThreshold']).toBe(0.9) + expect(defaultStrategy['confidenceThreshold']).toBe(1) }) it('should use provided confidence threshold', () => { diff --git a/src/core/diff/strategies/new-unified/index.ts b/src/core/diff/strategies/new-unified/index.ts index 3e70d98..c8ca119 100644 --- a/src/core/diff/strategies/new-unified/index.ts +++ b/src/core/diff/strategies/new-unified/index.ts @@ -6,8 +6,8 @@ import { DiffResult, DiffStrategy } from "../../types" export class NewUnifiedDiffStrategy implements DiffStrategy { private readonly confidenceThreshold: number - constructor(confidenceThreshold: number = 0.9) { - this.confidenceThreshold = Math.max(confidenceThreshold, 0.8) + constructor(confidenceThreshold: number = 1) { + this.confidenceThreshold = Math.max(confidenceThreshold, 0.8); } private parseUnifiedDiff(diff: string): Diff { diff --git a/src/core/webview/__tests__/ClineProvider.test.ts b/src/core/webview/__tests__/ClineProvider.test.ts index ddcd7e1..389f333 100644 --- a/src/core/webview/__tests__/ClineProvider.test.ts +++ b/src/core/webview/__tests__/ClineProvider.test.ts @@ -610,6 +610,8 @@ describe('ClineProvider', () => { true, 1.0, 'Test task', + undefined, + undefined, undefined ); });