From 41b321a621137dc3fdd3e77850079e847aba69f2 Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Tue, 6 Jan 2026 08:30:53 +0700 Subject: [PATCH] fix(git-diff): include untracked (new) files in diff output MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Uses git ls-files --others to find untracked files and git diff --no-index to generate diff output showing their content as additions. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- packages/server/src/server/session.ts | 37 ++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/packages/server/src/server/session.ts b/packages/server/src/server/session.ts index 7c028a2f1..7aaaeb2b3 100644 --- a/packages/server/src/server/session.ts +++ b/packages/server/src/server/session.ts @@ -1989,22 +1989,53 @@ export class Session { return; } - const { stdout } = await execAsync("git diff HEAD", { + // Get diff for tracked files + const { stdout: trackedDiff } = await execAsync("git diff HEAD", { cwd: agent.cwd, }); + // Get diff for untracked files (new files not yet added to git) + // Using git diff --no-index /dev/null to show new file content as additions + let untrackedDiff = ""; + try { + const { stdout: untrackedFiles } = await execAsync( + "git ls-files --others --exclude-standard", + { cwd: agent.cwd } + ); + const newFiles = untrackedFiles.trim().split("\n").filter(Boolean); + + for (const file of newFiles) { + try { + // Use git diff with --no-index to generate diff for untracked file + const { stdout: fileDiff } = await execAsync( + `git diff --no-index /dev/null "${file}" || true`, + { cwd: agent.cwd } + ); + if (fileDiff) { + untrackedDiff += fileDiff; + } + } catch { + // Ignore errors for individual files (binary files, etc.) + } + } + } catch { + // Ignore errors getting untracked files + } + + const combinedDiff = trackedDiff + untrackedDiff; + this.emit({ type: "git_diff_response", payload: { agentId, - diff: stdout, + diff: combinedDiff, error: null, requestId, }, }); console.log( - `[Session ${this.clientId}] Git diff for agent ${agentId} completed (${stdout.length} bytes)` + `[Session ${this.clientId}] Git diff for agent ${agentId} completed (${combinedDiff.length} bytes)` ); } catch (error: any) { console.error(