• Adekunle James Adeniji's avatar
    AI Conflict Resolver (#2240) · d70c8269
    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: 's avatarClaude Opus 4.5 <noreply@anthropic.com>
    Co-authored-by: 's avatarWill Chen <willchen90@gmail.com>
    d70c8269