fix: improve checkpoint service initialization handling (#6860)

This commit is contained in:
NaccOll 2025-08-12 21:57:25 +08:00 committed by GitHub
parent 12d1959bbd
commit 2730ef96b8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -23,22 +23,8 @@ export async function getCheckpointService(
if (!cline.enableCheckpoints) {
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
}
return cline.checkpointService
}
const provider = cline.providerRef.deref()
@ -78,25 +64,32 @@ export async function getCheckpointService(
shadowDir: globalStorageDir,
log,
}
if (cline.checkpointServiceInitializing) {
await pWaitFor(
() => {
console.log("[Task#getCheckpointService] waiting for service to initialize")
return !!cline.checkpointService && !!cline?.checkpointService?.isInitialized
},
{ interval, timeout },
)
if (!cline?.checkpointService) {
cline.enableCheckpoints = false
return undefined
}
return cline.checkpointService
}
if (!cline.enableCheckpoints) {
return undefined
}
const service = RepoPerTaskCheckpointService.create(options)
cline.checkpointServiceInitializing = true
// 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
throw err
}
await checkGitInstallation(cline, service, log, provider)
cline.checkpointService = service
return service
} catch (err) {
log(`[Task#getCheckpointService] ${err.message}`)
cline.enableCheckpoints = false
cline.checkpointServiceInitializing = false
return undefined
}
}
@ -175,13 +168,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.