AI Conflict Resolver (#2240)
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>
正在显示
请
注册
或者
登录
后发表评论