diff --git a/apps/server/src/codexAppServerManager.ts b/apps/server/src/codexAppServerManager.ts index 406a41a082b7a2ba28aef99ea97be1ffe3c248ad..6122ec601f61e1415abcba35662c7a831c1ffebd 100644 --- a/apps/server/src/codexAppServerManager.ts +++ b/apps/server/src/codexAppServerManager.ts @@ -201,7 +201,7 @@ export class CodexAppServerManager extends EventEmitter { expect(files).toHaveLength(1); expect(files[0]?.path).toBe("subdir b/example.ts"); }); + + it("parses git header fallback for binary diffs with ` b/` in path", () => { + const files = deriveTurnDiffFilesFromUnifiedDiff( + [ + "diff --git a/subdir b/image.png b/subdir b/image.png", + "Binary files a/subdir b/image.png and b/subdir b/image.png differ", + ].join("\n"), + ); + + expect(files).toHaveLength(1); + expect(files[0]?.path).toBe("subdir b/image.png"); + }); }); describe("derivePendingApprovals", () => { diff --git a/apps/web/src/session-logic.ts b/apps/web/src/session-logic.ts index 224d5f12919f7669f98d9ae75aa7bc846c0d71de..c3fb155589a33a52a72354fae1bf0515a337ecea 100644 --- a/apps/web/src/session-logic.ts +++ b/apps/web/src/session-logic.ts @@ -522,8 +522,8 @@ function parsePathFromDiff(diff: string): string | undefined { const normalized = diff.replace(/\r\n/g, "\n"); const bPath = normalized.match(/^\+\+\+ b\/(.+)$/m); if (bPath && bPath[1]) return bPath[1]; - const gitHeader = normalized.match(/^diff --git a\/(.+) b\/(.+)$/m); - if (gitHeader && gitHeader[2]) return gitHeader[2]; + const gitHeader = normalized.match(/^diff --git a\/(.+) b\/\1$/m); + if (gitHeader && gitHeader[1]) return gitHeader[1]; const direct = normalized.match(/^\+\+\+ (.+)$/m); if (!direct || !direct[1] || direct[1] === "/dev/null") { return undefined;