• 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
名称
最后提交
最后更新
.claude 正在载入提交数据...
.cursor/rules 正在载入提交数据...
.devcontainer 正在载入提交数据...
.github 正在载入提交数据...
.husky 正在载入提交数据...
.storybook 正在载入提交数据...
assets 正在载入提交数据...
docs 正在载入提交数据...
drizzle 正在载入提交数据...
e2e-tests 正在载入提交数据...
makers 正在载入提交数据...
packages/@dyad-sh 正在载入提交数据...
rules 正在载入提交数据...
scaffold 正在载入提交数据...
scripts 正在载入提交数据...
shared 正在载入提交数据...
src 正在载入提交数据...
testing 正在载入提交数据...
tools 正在载入提交数据...
worker 正在载入提交数据...
workers/tsc 正在载入提交数据...
.cursorignore 正在载入提交数据...
.env.example 正在载入提交数据...
.eslintrc.json 正在载入提交数据...
.gitattributes 正在载入提交数据...
.gitignore 正在载入提交数据...
.oxfmtrc.json 正在载入提交数据...
.oxlintrc.json 正在载入提交数据...
.prettierignore 正在载入提交数据...
.prettierrc 正在载入提交数据...
AGENTS.md 正在载入提交数据...
CLA.md 正在载入提交数据...
CLAUDE.md 正在载入提交数据...
CONTRIBUTING.md 正在载入提交数据...
LICENSE 正在载入提交数据...
README.md 正在载入提交数据...
SECURITY.md 正在载入提交数据...
biome.json 正在载入提交数据...
components.json 正在载入提交数据...
drizzle.config.ts 正在载入提交数据...
forge.config.ts 正在载入提交数据...
forge.env.d.ts 正在载入提交数据...
index.html 正在载入提交数据...
lint-staged.config.js 正在载入提交数据...
merge.config.ts 正在载入提交数据...
package-lock.json 正在载入提交数据...
package.json 正在载入提交数据...
playwright.config.ts 正在载入提交数据...
tsconfig.app.json 正在载入提交数据...
tsconfig.json 正在载入提交数据...
tsconfig.node.json 正在载入提交数据...
vite.main.config.mts 正在载入提交数据...
vite.preload.config.mts 正在载入提交数据...
vite.renderer.config.mts 正在载入提交数据...
vite.worker.config.mts 正在载入提交数据...
vitest.config.ts 正在载入提交数据...
windowsSign.ts 正在载入提交数据...