@@ -50,7 +50,7 @@ import { supportPrompt } from "../../shared/support-prompt"
5050import { GlobalFileNames } from "../../shared/globalFileNames"
5151import type { ExtensionMessage , ExtensionState , MarketplaceInstalledMetadata } from "../../shared/ExtensionMessage"
5252import { Mode , defaultModeSlug , getModeBySlug } from "../../shared/modes"
53- import { experimentDefault } from "../../shared/experiments"
53+ import { experimentDefault , EXPERIMENT_IDS } from "../../shared/experiments"
5454import { formatLanguage } from "../../shared/language"
5555import { WebviewMessage } from "../../shared/WebviewMessage"
5656import { EMBEDDING_MODEL_PROFILES } from "../../shared/embeddingModels"
@@ -91,6 +91,8 @@ import { getSystemPromptFilePath } from "../prompts/sections/custom-system-promp
9191import { webviewMessageHandler } from "./webviewMessageHandler"
9292import { getNonce } from "./getNonce"
9393import { getUri } from "./getUri"
94+ import { FCOMessageHandler } from "../../services/file-changes/FCOMessageHandler"
95+ import { FileChangeManager } from "../../services/file-changes/FileChangeManager"
9496
9597/**
9698 * https://github.com/microsoft/vscode-webview-ui-toolkit-samples/blob/main/default/weather-webview/src/providers/WeatherViewProvider.ts
@@ -134,6 +136,12 @@ export class ClineProvider
134136 private taskCreationCallback : ( task : Task ) => void
135137 private taskEventListeners : WeakMap < Task , Array < ( ) => void > > = new WeakMap ( )
136138 private currentWorkspacePath : string | undefined
139+ // FileChangeManager instances scoped per taskId
140+ private fileChangeManagers : Map < string , any > = new Map ( )
141+ // Track the last committed checkpoint hash per task for FCO delta updates
142+ private lastCheckpointByTaskId : Map < string , string > = new Map ( )
143+ // FCO message handler for universal baseline management
144+ private fcoMessageHandler : FCOMessageHandler
137145
138146 private recentTasksCache ?: string [ ]
139147 private pendingOperations : Map < string , PendingEditOperation > = new Map ( )
@@ -175,6 +183,9 @@ export class ClineProvider
175183 await this . postStateToWebview ( )
176184 } )
177185
186+ // Initialize FCO message handler for universal baseline management
187+ this . fcoMessageHandler = new FCOMessageHandler ( this )
188+
178189 // Initialize MCP Hub through the singleton manager
179190 McpServerManager . getInstance ( this . context , this )
180191 . then ( ( hub ) => {
@@ -1119,8 +1130,14 @@ export class ClineProvider
11191130 * @param webview A reference to the extension webview
11201131 */
11211132 private setWebviewMessageListener ( webview : vscode . Webview ) {
1122- const onReceiveMessage = async ( message : WebviewMessage ) =>
1123- webviewMessageHandler ( this , message , this . marketplaceManager )
1133+ const onReceiveMessage = async ( message : WebviewMessage ) => {
1134+ // Route Files Changed Overview messages first
1135+ if ( this . fcoMessageHandler . shouldHandleMessage ( message ) ) {
1136+ await this . fcoMessageHandler . handleMessage ( message )
1137+ return
1138+ }
1139+ await webviewMessageHandler ( this , message , this . marketplaceManager )
1140+ }
11241141
11251142 const messageDisposable = webview . onDidReceiveMessage ( onReceiveMessage )
11261143 this . webviewDisposables . push ( messageDisposable )
@@ -2154,6 +2171,38 @@ export class ClineProvider
21542171 return this . contextProxy . getValue ( key )
21552172 }
21562173
2174+ // File Change Manager methods
2175+ public getFileChangeManager ( ) : any {
2176+ const task = this . getCurrentTask ( )
2177+ if ( ! task ) return undefined
2178+ return this . fileChangeManagers . get ( task . taskId )
2179+ }
2180+
2181+ public ensureFileChangeManager ( ) : any {
2182+ const task = this . getCurrentTask ( )
2183+ if ( ! task ) return undefined
2184+ const existing = this . fileChangeManagers . get ( task . taskId )
2185+ if ( existing ) return existing
2186+ // Default baseline to HEAD until checkpoints initialize and update it
2187+ const manager = new FileChangeManager ( "HEAD" )
2188+ this . fileChangeManagers . set ( task . taskId , manager )
2189+ return manager
2190+ }
2191+
2192+ // FCO Message Handler access
2193+ public getFCOMessageHandler ( ) : FCOMessageHandler {
2194+ return this . fcoMessageHandler
2195+ }
2196+
2197+ // Track last checkpoint per task for delta-based FCO updates
2198+ public setLastCheckpointForTask ( taskId : string , commitHash : string ) {
2199+ this . lastCheckpointByTaskId . set ( taskId , commitHash )
2200+ }
2201+
2202+ public getLastCheckpointForTask ( taskId : string ) : string | undefined {
2203+ return this . lastCheckpointByTaskId . get ( taskId )
2204+ }
2205+
21572206 public async setValue < K extends keyof RooCodeSettings > ( key : K , value : RooCodeSettings [ K ] ) {
21582207 await this . contextProxy . setValue ( key , value )
21592208 }
0 commit comments