From 87c7456981319b3dc754b2dbfd819b6807e4b5bc Mon Sep 17 00:00:00 2001 From: NaccOll Date: Sat, 9 Aug 2025 02:51:05 +0800 Subject: [PATCH 1/4] fix: improve checkpoint service initialization handling --- src/core/checkpoints/index.ts | 36 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/src/core/checkpoints/index.ts b/src/core/checkpoints/index.ts index 25ae1a20324..7e0bb8ef128 100644 --- a/src/core/checkpoints/index.ts +++ b/src/core/checkpoints/index.ts @@ -24,23 +24,6 @@ export async function getCheckpointService( return undefined } - if (cline.checkpointService) { - if (cline.checkpointServiceInitializing) { - console.log("[Task#getCheckpointService] checkpoint service is still initializing") - const service = cline.checkpointService - await pWaitFor( - () => { - console.log("[Task#getCheckpointService] waiting for service to initialize") - return service.isInitialized - }, - { interval, timeout }, - ) - return service.isInitialized ? cline.checkpointService : undefined - } else { - return cline.checkpointService - } - } - const provider = cline.providerRef.deref() const log = (message: string) => { @@ -53,8 +36,6 @@ export async function getCheckpointService( } } - console.log("[Task#getCheckpointService] initializing checkpoints service") - try { const workspaceDir = getWorkspacePath() @@ -78,20 +59,31 @@ export async function getCheckpointService( shadowDir: globalStorageDir, log, } - - const service = RepoPerTaskCheckpointService.create(options) + if (cline.checkpointServiceInitializing) { + await pWaitFor( + () => { + console.log("[Task#getCheckpointService] waiting for service to initialize") + return cline.checkpointService?.isInitialized === true + }, + { interval, timeout }, + ) + return cline.checkpointService + } + console.log("[Task#getCheckpointService] initializing checkpoints service") cline.checkpointServiceInitializing = true + const service = RepoPerTaskCheckpointService.create(options) + cline.checkpointService = service // Check if Git is installed before initializing the service // Only assign the service after successful initialization try { await checkGitInstallation(cline, service, log, provider) - cline.checkpointService = service return service } catch (err) { // Clean up on failure cline.checkpointServiceInitializing = false cline.enableCheckpoints = false + cline.checkpointService = undefined throw err } } catch (err) { From 1821a7f9bab11e003d5530d1a427054dd6107541 Mon Sep 17 00:00:00 2001 From: NaccOll Date: Tue, 12 Aug 2025 13:07:42 +0800 Subject: [PATCH 2/4] double check enableCheckpoints ensure init not faild --- src/core/checkpoints/index.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/core/checkpoints/index.ts b/src/core/checkpoints/index.ts index 7e0bb8ef128..5a3e3ebd0b5 100644 --- a/src/core/checkpoints/index.ts +++ b/src/core/checkpoints/index.ts @@ -69,6 +69,9 @@ export async function getCheckpointService( ) return cline.checkpointService } + if (!cline.enableCheckpoints) { + return undefined + } console.log("[Task#getCheckpointService] initializing checkpoints service") cline.checkpointServiceInitializing = true const service = RepoPerTaskCheckpointService.create(options) @@ -81,8 +84,8 @@ export async function getCheckpointService( return service } catch (err) { // Clean up on failure - cline.checkpointServiceInitializing = false cline.enableCheckpoints = false + cline.checkpointServiceInitializing = false cline.checkpointService = undefined throw err } From 040e1b01dddb16cf10f37ba45db2028e687560a7 Mon Sep 17 00:00:00 2001 From: NaccOll Date: Tue, 12 Aug 2025 14:30:48 +0800 Subject: [PATCH 3/4] fix: improve checkpoint service initialization handling --- src/core/checkpoints/index.ts | 34 +++++++++++----------------------- 1 file changed, 11 insertions(+), 23 deletions(-) diff --git a/src/core/checkpoints/index.ts b/src/core/checkpoints/index.ts index 5a3e3ebd0b5..97d603d88e4 100644 --- a/src/core/checkpoints/index.ts +++ b/src/core/checkpoints/index.ts @@ -36,6 +36,8 @@ export async function getCheckpointService( } } + console.log("[Task#getCheckpointService] initializing checkpoints service") + try { const workspaceDir = getWorkspacePath() @@ -63,35 +65,28 @@ export async function getCheckpointService( await pWaitFor( () => { console.log("[Task#getCheckpointService] waiting for service to initialize") - return cline.checkpointService?.isInitialized === true + return !!cline.checkpointService && !!cline?.checkpointService?.isInitialized }, { interval, timeout }, ) + if (cline?.checkpointService?.isInitialized !== true) { + cline.enableCheckpoints = false + return undefined + } return cline.checkpointService } if (!cline.enableCheckpoints) { return undefined } - console.log("[Task#getCheckpointService] initializing checkpoints service") - cline.checkpointServiceInitializing = true const service = RepoPerTaskCheckpointService.create(options) + cline.checkpointServiceInitializing = true + await checkGitInstallation(cline, service, log, provider) cline.checkpointService = service - - // Check if Git is installed before initializing the service - // Only assign the service after successful initialization - try { - await checkGitInstallation(cline, service, log, provider) - return service - } catch (err) { - // Clean up on failure - cline.enableCheckpoints = false - cline.checkpointServiceInitializing = false - cline.checkpointService = undefined - throw err - } + return service } catch (err) { log(`[Task#getCheckpointService] ${err.message}`) cline.enableCheckpoints = false + cline.checkpointServiceInitializing = false return undefined } } @@ -170,13 +165,6 @@ export async function checkpointSave(cline: Task, force = false) { return } - if (!service.isInitialized) { - const provider = cline.providerRef.deref() - provider?.log("[checkpointSave] checkpoints didn't initialize in time, disabling checkpoints for this task") - cline.enableCheckpoints = false - return - } - TelemetryService.instance.captureCheckpointCreated(cline.taskId) // Start the checkpoint process in the background. From 23e6ba1fb4638892984a3ca3fc09046ffa64ab09 Mon Sep 17 00:00:00 2001 From: NaccOll Date: Tue, 12 Aug 2025 15:24:42 +0800 Subject: [PATCH 4/4] fix: enhance checkpoint service initialization checks --- src/core/checkpoints/index.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/core/checkpoints/index.ts b/src/core/checkpoints/index.ts index 97d603d88e4..05549be0f93 100644 --- a/src/core/checkpoints/index.ts +++ b/src/core/checkpoints/index.ts @@ -23,6 +23,9 @@ export async function getCheckpointService( if (!cline.enableCheckpoints) { return undefined } + if (cline.checkpointService) { + return cline.checkpointService + } const provider = cline.providerRef.deref() @@ -69,7 +72,7 @@ export async function getCheckpointService( }, { interval, timeout }, ) - if (cline?.checkpointService?.isInitialized !== true) { + if (!cline?.checkpointService) { cline.enableCheckpoints = false return undefined }