Skip to content

Commit 04c4ff7

Browse files
committed
fix: handle checkpoint initialization failure gracefully for nested git repos
- Properly reset checkpointServiceInitializing flag when init fails - Allow task to continue without checkpoints when nested git repos detected - Show user-friendly warning message instead of blocking task - Update checkpoint warning display logic to handle cancelled tasks - Ensure task messages are preserved even when checkpoint init fails Fixes #7765
1 parent 4e5e3ed commit 04c4ff7

File tree

3 files changed

+24
-5
lines changed

3 files changed

+24
-5
lines changed

src/core/checkpoints/index.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,17 @@ async function checkGitInstallation(
168168
} catch (err) {
169169
log(`[Task#getCheckpointService] initShadowGit -> ${err.message}`)
170170
task.enableCheckpoints = false
171+
task.checkpointServiceInitializing = false
172+
173+
// If the error is due to nested git repositories, show a user-friendly message
174+
// but don't prevent the task from continuing
175+
if (err.message?.includes("nested git repositories")) {
176+
await vscode.window.showWarningMessage(
177+
"Checkpoints are disabled because nested git repositories were detected in the workspace. The task will continue without checkpoint support.",
178+
"OK",
179+
)
180+
// Task can continue without checkpoints
181+
}
171182
}
172183
} catch (err) {
173184
log(`[Task#getCheckpointService] Unexpected error during Git check: ${err.message}`)

src/core/task/Task.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1661,7 +1661,11 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
16611661

16621662
private async initiateTaskLoop(userContent: Anthropic.Messages.ContentBlockParam[]): Promise<void> {
16631663
// Kicks off the checkpoints initialization process in the background.
1664-
getCheckpointService(this)
1664+
// Don't await this - let it run in the background so task can continue even if it fails
1665+
getCheckpointService(this).catch((error) => {
1666+
console.log(`[Task#initiateTaskLoop] Checkpoint service initialization failed: ${error.message}`)
1667+
// Task continues without checkpoints
1668+
})
16651669

16661670
let nextUserContent = userContent
16671671
let includeFileDetails = true

webview-ui/src/components/chat/ChatView.tsx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1412,9 +1412,13 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
14121412
// Effect to handle showing the checkpoint warning after a delay
14131413
useEffect(() => {
14141414
// Only show the warning when there's a task but no visible messages yet
1415+
// AND the task is not abandoned (which happens when user cancels)
14151416
if (task && modifiedMessages.length === 0 && !isStreaming && !isHidden) {
14161417
const timer = setTimeout(() => {
1417-
setShowCheckpointWarning(true)
1418+
// Check if the task still exists and hasn't been abandoned before showing warning
1419+
if (task && modifiedMessages.length === 0) {
1420+
setShowCheckpointWarning(true)
1421+
}
14181422
}, 5000) // 5 seconds
14191423

14201424
return () => clearTimeout(timer)
@@ -1423,12 +1427,12 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
14231427
}
14241428
}, [task, modifiedMessages.length, isStreaming, isHidden])
14251429

1426-
// Effect to hide the checkpoint warning when messages appear
1430+
// Effect to hide the checkpoint warning when messages appear or task changes
14271431
useEffect(() => {
1428-
if (modifiedMessages.length > 0 || isStreaming || isHidden) {
1432+
if (modifiedMessages.length > 0 || isStreaming || isHidden || !task) {
14291433
setShowCheckpointWarning(false)
14301434
}
1431-
}, [modifiedMessages.length, isStreaming, isHidden])
1435+
}, [modifiedMessages.length, isStreaming, isHidden, task])
14321436

14331437
const placeholderText = task ? t("chat:typeMessage") : t("chat:typeTask")
14341438

0 commit comments

Comments
 (0)