Skip to content

Commit 86add68

Browse files
committed
settings bug fixes.
Added handlers for FilesChangedEnabled so settings work properly.
1 parent 52900cf commit 86add68

File tree

6 files changed

+51
-16
lines changed

6 files changed

+51
-16
lines changed

src/core/checkpoints/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ export function getCheckpointService(cline: Task) {
117117
baseHash,
118118
cline.taskId,
119119
provider.context.globalStorageUri.fsPath,
120+
provider,
120121
)
121122
log(`[Task#getCheckpointService] FileChangeManager created with baseline: ${baseHash}`)
122123
} catch (error) {

src/core/webview/webviewMessageHandler.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -720,6 +720,11 @@ export const webviewMessageHandler = async (
720720
await updateGlobalState("soundEnabled", soundEnabled)
721721
await provider.postStateToWebview()
722722
break
723+
case "filesChangedEnabled":
724+
const filesChangedEnabled = message.bool ?? true
725+
await updateGlobalState("filesChangedEnabled", filesChangedEnabled)
726+
await provider.postStateToWebview()
727+
break
723728
case "soundVolume":
724729
const soundVolume = message.value ?? 0.5
725730
await updateGlobalState("soundVolume", soundVolume)

src/integrations/editor/DiffViewProvider.ts

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -234,18 +234,21 @@ export class DiffViewProvider {
234234
lineDiff.linesRemoved,
235235
)
236236

237-
// Notify the webview about the file changes
238-
const updatedChangeset = task.fileChangeManager.getChanges()
237+
// Notify the webview about the file changes (only if tracking is enabled)
239238
const provider = task.providerRef.deref()
240-
if (provider && updatedChangeset.files.length > 0) {
241-
const serializableChangeset = {
242-
...updatedChangeset,
243-
files: Array.from(updatedChangeset.files.values()),
239+
const filesChangedEnabled = provider?.getValue("filesChangedEnabled") ?? true
240+
if (provider && filesChangedEnabled) {
241+
const updatedChangeset = task.fileChangeManager.getChanges()
242+
if (updatedChangeset.files.length > 0) {
243+
const serializableChangeset = {
244+
...updatedChangeset,
245+
files: Array.from(updatedChangeset.files.values()),
246+
}
247+
provider.postMessageToWebview({
248+
type: "filesChanged",
249+
filesChanged: serializableChangeset,
250+
})
244251
}
245-
provider.postMessageToWebview({
246-
type: "filesChanged",
247-
filesChanged: serializableChangeset,
248-
})
249252
}
250253

251254
console.log(

src/services/file-changes/FileChangeManager.ts

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ import * as fs from "fs/promises"
44
import * as path from "path"
55
import { EventEmitter } from "vscode"
66

7+
// Type imports for provider reference
8+
import type { ClineProvider } from "../../core/webview/ClineProvider"
9+
710
// Error types for better error handling
811
export enum FileChangeErrorType {
912
PERSISTENCE_FAILED = "PERSISTENCE_FAILED",
@@ -41,15 +44,17 @@ export class FileChangeManager {
4144
private persistenceInProgress = false
4245
private pendingPersistence = false
4346
private errorHandler?: FileChangeErrorHandler
47+
private providerRef?: WeakRef<ClineProvider>
4448

45-
constructor(baseCheckpoint: string, taskId?: string, globalStoragePath?: string) {
49+
constructor(baseCheckpoint: string, taskId?: string, globalStoragePath?: string, provider?: ClineProvider) {
4650
this.instanceId = crypto.randomUUID()
4751
this.changeset = {
4852
baseCheckpoint,
4953
files: new Map<string, FileChange>(),
5054
}
5155
this.taskId = taskId || ""
5256
this.globalStoragePath = globalStoragePath || ""
57+
this.providerRef = provider ? new WeakRef(provider) : undefined
5358

5459
console.log(`[DEBUG] FileChangeManager created for task ${this.taskId}. Instance ID: ${this.instanceId}`)
5560

@@ -69,6 +74,25 @@ export class FileChangeManager {
6974
this.errorHandler = handler
7075
}
7176

77+
/**
78+
* Check if file change tracking is enabled
79+
*/
80+
private isFileChangeTrackingEnabled(): boolean {
81+
const provider = this.providerRef?.deref()
82+
if (!provider) {
83+
// If no provider reference, default to enabled for backward compatibility
84+
return true
85+
}
86+
87+
try {
88+
return provider.getValue("filesChangedEnabled") ?? true
89+
} catch (error) {
90+
// If we can't get the state, default to enabled
91+
console.warn("FileChangeManager: Could not check filesChangedEnabled setting, defaulting to enabled")
92+
return true
93+
}
94+
}
95+
7296
/**
7397
* Create a FileChangeError from a generic error
7498
*/
@@ -108,6 +132,12 @@ export class FileChangeManager {
108132
linesAdded?: number,
109133
linesRemoved?: number,
110134
): void {
135+
// Check if file change tracking is enabled
136+
if (!this.isFileChangeTrackingEnabled()) {
137+
console.log(`FileChangeManager: File change tracking is disabled, skipping recording for URI: ${uri}`)
138+
return
139+
}
140+
111141
console.log(
112142
`FileChangeManager: Recording change for URI: ${uri}, Type: ${type}, From: ${fromCheckpoint}, To: ${toCheckpoint}`,
113143
)

webview-ui/src/components/settings/InterfaceSettings.tsx

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import { Monitor } from "lucide-react"
66
import { SetCachedStateField } from "./types"
77
import { SectionHeader } from "./SectionHeader"
88
import { Section } from "./Section"
9-
import { vscode } from "@/utils/vscode"
109

1110
type InterfaceSettingsProps = HTMLAttributes<HTMLDivElement> & {
1211
filesChangedEnabled?: boolean
@@ -38,10 +37,6 @@ export const InterfaceSettings = ({ filesChangedEnabled, setCachedStateField, ..
3837
checked={filesChangedEnabled ?? true}
3938
onChange={(e: any) => {
4039
setCachedStateField("filesChangedEnabled", e.target.checked)
41-
vscode.postMessage({
42-
type: "filesChangedEnabled",
43-
bool: e.target.checked,
44-
})
4540
}}
4641
data-testid="files-changed-enabled-checkbox">
4742
{t("settings:interface.filesChanged.enabled.label")}

webview-ui/src/components/settings/SettingsView.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,7 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
282282
vscode.postMessage({ type: "autoCondenseContextPercent", value: autoCondenseContextPercent })
283283
vscode.postMessage({ type: "browserToolEnabled", bool: browserToolEnabled })
284284
vscode.postMessage({ type: "soundEnabled", bool: soundEnabled })
285+
vscode.postMessage({ type: "filesChangedEnabled", bool: filesChangedEnabled })
285286
vscode.postMessage({ type: "ttsEnabled", bool: ttsEnabled })
286287
vscode.postMessage({ type: "ttsSpeed", value: ttsSpeed })
287288
vscode.postMessage({ type: "soundVolume", value: soundVolume })

0 commit comments

Comments
 (0)