-
由 Adekunle James Adeniji 提交于
Solves part of #2207 <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Introduces an in-app merge conflict workflow with both AI-assisted and manual resolution, integrated into Git sync and branch merges. > > - New `GithubConflictResolver` dialog: previews conflicting sections, "Auto-Resolve with AI" (with optional auto-approve) and "Accept Current Changes", and progresses through multi-file conflicts > - Integrated into `GitHubConnector` and `GithubBranchManager` to surface conflicts after failed push/merge, guide resolution, and then finalize via `ipc.github.completeMerge` (rebase-continue or merge commit) > - New IPC contracts/handlers: `github:get-conflicts`, `github:resolve-conflict` (writes/stages ours), `github:complete-merge`; plus improved conflict detection by checking conflicts directly on errors > - Enhanced error/rebase-state messaging and abort/continue flows; avoids relying on IPC-serialized error names > - E2E tests for AI and manual conflict resolution; fake LLM updated to emit conflict-fixing `dyad-write` > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 98b8aa07ef175a2806bbc0609b433279fbde78c8. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Adds inline merge-conflict resolution with a chat-based flow and a cancel option. Conflict detection, streaming, and cancel behavior are more reliable; merges remain blocked until the repo is clean. - **New Features** - Inline conflict banner listing files, with “Resolve merge conflicts with AI” (opens a new chat, auto-starts streaming) and “Cancel sync”; buttons disable while resolving or cancelling. - New useResolveMergeConflictsWithAI hook that validates appId, guards rapid clicks, creates the chat, navigates, starts the stream, and refreshes chats/app on completion; integrated into GitHubConnector and GithubBranchManager and clears conflicts only after chat creation. - E2E tests for AI resolution and cancel flow; fake LLM supports new and legacy prompts; Electron IPC docs clarify stream start returns void and how to avoid duplicate streams. - **Bug Fixes** - Always fetch conflicts after failed sync/merge, not relying on serialized error names; clearer messages for rebase/merge states and when conflict checks fail. - Cancel sync only shows success when an abort actually occurs; clears conflicts and refreshes branches; buttons disable during cancellation. - Resets streaming state if stream setup or navigation fails; onError now refreshes chat list and app; e2e git commands quote filenames. <sup>Written for commit 8ec0dd605bdadbec9b64b64643c0010129c9735b. Summary will update on new commits.</sup> <!-- End of auto-generated description by cubic. --> <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2240"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://static.devin.ai/assets/gh-open-in-devin-review-dark.svg?v=1"> <img src="https://static.devin.ai/assets/gh-open-in-devin-review-light.svg?v=1" alt="Open with Devin"> </picture> </a> <!-- devin-review-badge-end --> --------- Co-authored-by:
Claude Opus 4.5 <noreply@anthropic.com> Co-authored-by:
Will Chen <willchen90@gmail.com>