- 01 4月, 2026 1 次提交
-
-
由 wwwillchen-bot 提交于
## Summary - Fixes #3070 (and likely related to #2879) - When retrying after a transient stream termination, parallel tool-call results were split into separate `tool` messages instead of being grouped. This violated the Anthropic API constraint that every `tool_use` in an assistant message must have its `tool_result` in the immediately following message, causing `400 invalid_request_error`. - Extracted replay logic from `local_agent_handler.ts` into `retry_replay_utils.ts` for testability, and fixed `buildRetryReplayMessages` to merge consecutive tool-result entries into a single tool message. ## Test plan - [x] Added 18 new tests in `retry_replay_utils.test.ts` covering: - Parallel tool results grouped into single message (the core fix) - Sequential + parallel mixed scenarios - Incomplete tool exchanges excluded - Event capture deduplication - Edge cases (empty events, whitespace text, null inputs) - [x] All 18 existing `local_agent_handler.test.ts` tests still pass (including stream retry tests)
🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/3072" target="_blank"> <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:Will Chen <7344640+wwwillchen@users.noreply.github.com> Co-authored-by:
Claude Opus 4.6 (1M context) <noreply@anthropic.com>
-
- 31 3月, 2026 7 次提交
-
-
由 Mohamed Aziz Mejri 提交于
This PR adds the ability to generate images inside the chat , a generate image button was added to the auxiliary actions menu . <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/3055" target="_blank"> <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>
-
由 Will Chen 提交于
## Summary - Stop sending `anthropic-beta: context-1m-2025-08-07` on Anthropic API requests. - `getAiHeaders` remains for future provider-specific headers but currently returns `undefined`. ## Test plan - `npm run fmt && npm run lint:fix && npm run ts` - `npm test` (952 tests) #skip-bugbot
🤖 Generated with [Claude Code](https://claude.com/claude-code) Made with [Cursor](https://cursor.com) <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/3103" target="_blank"> <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 <noreply@anthropic.com>
-
由 Nour Zakhma 提交于
## Issue Fixes #2962 - Improve the background color at hovering and MOST OF ALL for selected projects. ## Changes - Increased dark mode sidebar-accent background color contrast from 15.9% to 35% lightness - Updated both OKLch and HSL color formats for consistency - Selected items are now clearly distinguishable from unselected items ### Dark mode improvements: - OKLch: `oklch(0.35 0 0)` instead of `oklch(0.269 0 0)` - HSL: `240 5% 35%` instead of `240 3.7% 15.9%` This dramatically improves visibility for users with less acute vision, addressing the accessibility concern raised in the issue. ## Testing Added comprehensive E2E test to verify: - Selected sidebar items have visually distinct background colors - Hover states provide proper visual feedback - Good contrast between selected, unselected, and hover states <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/3074" target="_blank"> <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 -->
-
由 Mohamed Aziz Mejri 提交于
Stop keydown event propagation on DialogContent to prevent the parent DropdownMenu's typeahead handler from swallowing keypresses. <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/3098" target="_blank"> <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.6 (1M context) <noreply@anthropic.com>
-
由 wwwillchen-bot 提交于
## Summary - document that `git rev-list --left-right --count upstream/main...HEAD` returning `0 0` means the branch cannot produce a PR - note that agents should report the branch as pushed but PR-blocked instead of creating an empty commit just to satisfy `gh pr create` - update the git workflow rules with this edge case ## Test plan - npm run fmt - npm run lint:fix - npm run ts - npm test #skip-bugbot
🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/3065" target="_blank"> <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:Will Chen <7344640+wwwillchen@users.noreply.github.com>
-
由 wwwillchen-bot 提交于
## Summary - Migrated `draft-stale-prs` and `label-rebase-prs` GitHub Actions workflows from using a personal access token (`PR_RW_GITHUB_TOKEN`) to generating tokens via the Dyad GitHub App (`actions/create-github-app-token@v2`) - Improves security and auditability by using scoped, short-lived GitHub App tokens with explicit permissions instead of long-lived PATs ## Test plan - [ ] Verify `draft-stale-prs` workflow runs successfully on its cron schedule (or trigger manually) - [ ] Verify `label-rebase-prs` workflow runs successfully when triggered by push to `main` - [ ] Confirm the GitHub App has the required permissions: `contents: read`, `pull-requests: write`, and `issues: write` (for draft-stale-prs)
🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/3004" target="_blank"> <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:Will Chen <willchen90@gmail.com> Co-authored-by:
Claude <noreply@anthropic.com>
-
由 Will Chen 提交于
Sends a daily email (8AM Pacific / 15:00 UTC) listing open PRs requesting review from wwwillchen across all dyad-sh org repos. Also supports manual workflow_dispatch trigger. <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/3102" target="_blank"> <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 <noreply@anthropic.com>
-
- 28 3月, 2026 3 次提交
-
-
由 Nour Zakhma 提交于
The "View Plan" button in the plan card was non-functional when: The preview panel was manually collapsed by the user Starting a new app session (preview panel is closed initially) The button only changed the preview mode to "plan" but didn't open the panel, making it invisible to users. Root Cause [isPreviewOpenAtom]was set to false when starting the app and only set back to true after streaming completes. The "View Plan" button only called [setPreviewMode("plan")] but didn't call [setIsPreviewOpen(true)], leaving the panel closed. Solution Added [setIsPreviewOpen(true)] to the "View Plan" button's onClick handler to ensure the preview panel opens when users click the button. Testing The fix can be verified by: Generating a plan in the chat Collapsing the preview panel (or having it closed on new app start) Clicking the "View Plan" button Confirm the panel opens and shows the plan view <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/3073" target="_blank"> <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:Mohamed Aziz Mejri <mjrmohamedaziz@gmail.com>
-
由 Will Chen 提交于
-
由 Will Chen 提交于
## Summary - Adds a nightly GitHub Actions workflow that checks for open security advisories in triage/draft state - Sends email alerts via Mailgun when open advisories are found - Includes the supporting Node.js script at `scripts/github-security-advisory-alert.mjs` ## Test plan - [ ] Verify the workflow YAML is valid by triggering a manual `workflow_dispatch` run - [ ] Confirm required secrets/vars (`KEPPO_GITHUB_APP_ID`, `KEPPO_GITHUB_APP_PRIVATE_KEY`, `MAILGUN_API_KEY`, `MAILGUN_DOMAIN`, `MAILGUN_FROM_EMAIL`, `SECURITY_ADVISORY_ALERT_EMAILS`) are configured in the `ai-bots` environment
🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/3087" target="_blank"> <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.6 (1M context) <noreply@anthropic.com>
-
- 27 3月, 2026 1 次提交
-
-
由 Will Chen 提交于
#skip-bb <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/3081" target="_blank"> <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 -->
-
- 26 3月, 2026 2 次提交
-
-
由 Mohamed Aziz Mejri 提交于
I've updated neon integration plan to include using neon auth and neon data api for react/vite apps . The data api will make it possible to integrate neon with react/vite apps without requiring the users to add a backend on their own .
-
由 Ryan Groch 提交于
Closes #399. Adds a setting (under "General Settings") to select a custom directory to store new apps in, replacing the default `dyad-apps` folder. In order to make sure that users don't lose access to older apps, I opted for creating symlinks inside the new folder to the old app locations. I went with symlinking because moving every single app could be an expensive operation depending on how many apps there are, and the user might not want that. However, this is inconsistent with the import apps and move folder features (i.e. #2000), which copy the apps instead of symlinking. I'm happy to change the approach on request. Some options I've been thinking about: - Add a button in the settings which moves all the apps (replacing the symlinks) after the user chooses a new custom directory. This way, the user would get to choose. - Convert all of previously-created apps to absolute paths, which avoids all of the symlinking. The only potential issue with this is that if the user wants to move the apps to their new directory after all, they'd have to use the "move app" feature for every single app, otherwise the database wouldn't get updated. As is, they at least could just delete all the symlinks and mass-move all of their apps into the new directory (though they'd currently have to do this outside of Dyad). Also, since I'm tentatively adding in the use of symlinks, I modified the move/copy/delete app features so that they always target the true location of the app, not the symlink. I can also write tests if desired. <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2875" target="_blank"> <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 -->
-
- 24 3月, 2026 7 次提交
-
-
由 Mohamed Aziz Mejri 提交于
close #2989 <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/3043" target="_blank"> <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>
-
由 Will Chen 提交于
#skip-bb <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/3064" target="_blank"> <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 -->
-
由 wwwillchen-bot 提交于
## Summary - Wraps the app name button in the title bar with a `Tooltip` component to show the full app name on hover - Improves usability when the app name is truncated due to the `max-w-38` constraint - Uses the `render` prop pattern consistent with the project's `@base-ui/react` tooltip usage ## Test plan - [ ] Verify the app name button in the title bar shows a tooltip on hover displaying the full app name - [ ] Verify the tooltip shows "No app selected" when no app is selected - [ ] Verify the button click behavior (navigating to app details) still works correctly - [ ] Verify the tooltip styling matches other tooltips in the app
🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/3005" target="_blank"> <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:Will Chen <willchen90@gmail.com> Co-authored-by:
Claude <noreply@anthropic.com>
-
由 Will Chen 提交于
## Summary - Non-Anthropic providers (OpenAI, Google, Ollama, etc.) error with "The model does not support assistant message prefill" when the unclosed `dyad-write` continuation retry triggers - The continuation logic was using an assistant message as the last message (prefill pattern), which only Anthropic supports - Replaced with a user message that includes the partial response and asks the model to continue where it left off ## Test plan - Use a non-Anthropic provider (e.g. OpenAI, Gemini) in build mode - Trigger a response that produces an unclosed `<dyad-write>` tag (e.g. a large file write that gets cut off) - Verify the continuation retry no longer errors and the model completes the response
🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/3027" target="_blank"> <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.6 (1M context) <noreply@anthropic.com>
-
由 Will Chen 提交于
## Summary - Buffer stdout/stderr messages from child processes and flush them every 100ms as a single batched IPC event (`app:output-batch`), reducing IPC traffic, array allocations, and React re-renders when apps emit high-volume logs - Keep `input-requested` messages on the immediate `app:output` channel for responsive UX - Renderer processes batched events with a single `setConsoleEntries` state update instead of one per message ## Test plan - [ ] Run an app that emits high-volume logs (e.g., `console.log` in a loop) and verify the UI remains responsive - [ ] Verify app console still shows all log output correctly - [ ] Verify interactive prompts (y/n) still appear immediately - [ ] Verify proxy URL detection and preview panel still work - [ ] Verify HMR updates still trigger iframe refresh
🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/3035" target="_blank"> <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.6 (1M context) <noreply@anthropic.com>
-
由 Will Chen 提交于
## Summary - Add `DyadError` / `DyadErrorKind` in `src/errors/dyad_error.ts` for classified failures (validation, not found, auth, precondition, conflict, user cancel, rate limit, etc.). - Extend `shouldFilterTelemetryException` so filtered kinds are not sent as PostHog `$exception` events; preserve legacy filters (RateLimitError 429, exact Supabase message set). - `safe_handle` rethrows `DyadError` unchanged; typed handler invalid input uses `Validation`. - Migrate many IPC/main/git/supabase/local-agent call sites from `throw new Error` to `DyadError` with appropriate kinds. - Document in `AGENTS.md`, `rules/dyad-errors.md`, and `.cursor/rules/ipc.mdc`. ## Test plan - `npm run ts`, `npm run lint`, `npm test` (946 tests) passed locally.
🤖 Generated with [Claude Code](https://claude.com/claude-code) Made with [Cursor](https://cursor.com) <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/3063" target="_blank"> <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 --> -
由 wwwillchen-bot 提交于
## Summary - Increased `DEFAULT_MAX_TOOL_CALL_STEPS` from 50 to 100 to better support complex multi-step tasks - Reorganized option tiers: Low (25), Medium (50), Default (100), High (200) — removed the old "Very High" tier - Updated E2E tests and snapshots to reflect the new defaults ## Test plan - [x] Unit tests pass (`npm test` — 44 test files) - [x] Lint, format, and type checks pass - [ ] Verify max tool call steps selector UI shows correct options - [ ] Run E2E test `max_tool_call_steps.spec.ts` to confirm snapshot alignment
🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/3053" target="_blank"> <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:Will Chen <7344640+wwwillchen@users.noreply.github.com> Co-authored-by:
Claude <noreply@anthropic.com>
-
- 21 3月, 2026 2 次提交
-
-
由 Will Chen 提交于
## Summary - retry local-agent stream passes when providers emit transient server errors like Azure `server_error` - keep the existing terminated-stream continuation path and apply it to retryable provider-side failures - add a regression test covering the structured provider error event shape ## Test plan - npm run fmt - npm run lint:fix - npm run ts - npm test
🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/3044" target="_blank"> <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 --> -
由 Mohamed Aziz Mejri 提交于
closes #3010 <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/3029" target="_blank"> <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 <noreply@anthropic.com>
-
- 19 3月, 2026 1 次提交
-
-
由 Mohamed Aziz Mejri 提交于
closes #2808 --------- Co-authored-by:Claude Opus 4.5 <noreply@anthropic.com>
-
- 18 3月, 2026 1 次提交
-
-
由 Mohamed Aziz Mejri 提交于
<!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2950" target="_blank"> <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.6 <noreply@anthropic.com>
-
- 17 3月, 2026 4 次提交
-
-
由 Will Chen 提交于
## Summary - remove the automatic `cc:request` labeling step from the `dyad:pr-push` skill - keep the rest of the push and PR workflow unchanged ## Test plan - npm run fmt - npm run lint:fix - npm run ts - npm test #skip-bugbot
🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/3025" target="_blank"> <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 --> -
由 Will Chen 提交于
## Summary - filter PostHog telemetry exceptions for instances emitted by - keep existing telemetry filtering behavior for other exception types unchanged - add unit coverage for filtered 429 and non-filtered non-429 rate limit errors ## Test plan - npm run fmt - npm run lint:fix - npm run ts - npm test
🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/3024" target="_blank"> <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 --> -
由 Will Chen 提交于
## Summary - route main-process `$exception` telemetry through `posthog.captureException()` in the renderer - normalize exception fields in IPC telemetry payloads and strip them from extra context before capture - add focused unit coverage for exception reconstruction and context extraction ## Test plan - npm run fmt && npm run lint:fix && npm run ts - npm test
🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/3022" target="_blank"> <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 --> -
由 Will Chen 提交于
#skip-bb
-
- 14 3月, 2026 1 次提交
-
-
由 wwwillchen-bot 提交于
## Summary - Use `dispatchEvent("click")` instead of `force: true` click to bypass telemetry consent overlay issues in the setup flow e2e test - Add `toPass` retry logic to handle accordion auto-collapse state transitions after Node.js is detected as installed - Dismiss telemetry consent "Later" button if visible before proceeding with test steps ## Test plan - Run the setup flow e2e test (`setup_flow.spec.ts`) and verify it passes reliably without flaking on the Node.js installation detection step - Verify the test correctly handles the accordion collapsing after Node.js is detected🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2996" target="_blank"> <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:Will Chen <willchen90@gmail.com> Co-authored-by:
Claude <noreply@anthropic.com>
-
- 13 3月, 2026 2 次提交
-
-
由 Will Chen 提交于
#skip-bb
-
由 wwwillchen-bot 提交于
## Summary - During AI streaming, the full messages array (potentially 500KB+ with many messages) was serialized and sent through IPC on every text-delta chunk, causing UI sluggishness - Changed to send only the streaming message ID and updated content for high-frequency streaming updates - Full messages are still sent for initial loads and state changes (compaction, lazy edits) to maintain correctness - Updated all consumers (`useStreamChat`, `usePlanImplementation`, `useResolveMergeConflictsWithAI`) to handle both full and incremental chunk modes ## Test plan - [x] TypeScript compilation passes - [x] All 897 unit tests pass (39 files) - [x] E2E tests pass (234 passed — 20 pre-existing failures unrelated to this change, confirmed by running on clean main) - [x] Specifically tested: `new_chat`, `chat_input`, `local_agent_advanced`, `local_agent_code_search`, `local_agent_grep`, `local_agent_search_replace`, `local_agent_list_files`, `local_agent_summarize`, `local_agent_connection_retry`, `local_agent_read_logs`, `local_agent_consent`, `local_agent_persistent_todos`, `local_agent_todo_followup`, `concurrent_chat`, `chat_history`
🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2988" target="_blank"> <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:Will Chen <willchen90@gmail.com> Co-authored-by:
Claude Opus 4.6 <noreply@anthropic.com>
-
- 12 3月, 2026 7 次提交
-
-
由 Will Chen 提交于
### Motivation - Prevent the UI from becoming sluggish while the assistant streams large or rapidly-updated messages by deferring expensive markdown/custom-tag parsing during active streaming. ### Description - Use React's `useDeferredValue` in `DyadMarkdownParser` and switch the parser to consume a `contentToParse` value that is the deferred `content` only while `isStreaming` is true, and update the `useMemo` dependency to `contentToParse` so final rendering uses the full, current content. ### Testing - Ran `npm run fmt`, `npm run lint`, and `npm run ts` in this environment, and all three failed due to the npm registry returning `403 Forbidden` for required tooling (formatter/linter/typechecker) rather than code errors in the change. ------ [Codex Task](https://chatgpt.com/codex/tasks/task_e_69b10fad1e74832782eea5db1ccb0196) <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2987" target="_blank"> <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 -->
-
由 wwwillchen-bot 提交于
## Summary - Add `image_utils.ts` for extracting MIME type and extension from image data (base64 or binary) - Add `image_dimension_utils.ts` for reading dimensions from PNG/JPEG/GIF/WebP images - Update `web_crawl` to use `maxTokens` (9000) from `GEMINI_CRAWL_LONG_CONTEXT` config - Update `prepare_step_utils` to handle `GEMINI_CRAWL_LONG_CONTEXT` model config - Add comprehensive tests for all new utilities ## Test plan - [x] All existing tests pass - [x] New tests added for image utilities covering: - Image type detection from various formats (PNG, JPEG, GIF, WebP, BMP, TIFF) - Base64 and binary data handling - Invalid/corrupted data handling - Dimension extraction from PNG, JPEG, GIF, WebP
🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2892" target="_blank"> <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:Will Chen <willchen90@gmail.com> Co-authored-by:
Claude Opus 4.5 <noreply@anthropic.com> Co-authored-by:
claude[bot] <41898282+claude[bot]@users.noreply.github.com>
-
由 Will Chen 提交于
## Summary - fetch the builtin language model catalog from api.dyad.sh with local fallback data and alias resolution - migrate theme generation, auto mode, and help bot to use dynamic catalog aliases - add E2E coverage for both remote-catalog and fallback behavior ## Test plan - npm run fmt - npm run lint:fix - npm run ts - npm test - PLAYWRIGHT_HTML_OPEN=never npm run e2e -- e2e-tests/dynamic_models.spec.ts (run outside sandbox)
🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2914" target="_blank"> <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[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by:
Claude Opus 4.6 <noreply@anthropic.com>
-
由 wwwillchen-bot 提交于
## Summary - Fixes a bug where the response processor would attempt `git commit` even when there were no staged changes, causing "nothing to commit" errors - Adds a `hasStagedChanges` utility function to `git_utils.ts` that checks whether there are actually staged files before committing - Updates the commit flow in `response_processor.ts` to check for staged changes first, skipping the commit when unnecessary ## Test plan - [x] All 897 existing tests pass - [x] Lint, formatting, and type checks pass - Verify that file write/rename/delete operations still commit correctly when changes are staged - Verify that no error is thrown when git operations result in no staged changes
🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2991" target="_blank"> <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 <noreply@anthropic.com> Co-authored-by:
claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by:
Will Chen <willchen90@gmail.com>
-
由 Will Chen 提交于
## Summary - Improve error message handling in local agent error responses by using `getErrorMessage()` helper - This ensures consistent error message formatting across the application ## Test plan - Verify local agent error responses display proper error messages - Check that the error handling works for various error types
🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2983" target="_blank"> <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.6 <noreply@anthropic.com>
-
由 Mohamed Aziz Mejri 提交于
closes #2905 <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2931" target="_blank"> <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 -->
-
由 Will Chen 提交于
## Summary - Add `enableSelectAppFromHomeChatInput` experiment setting with toggle in Settings UI - Conditionally render the app selector ("No app selected") in HomeChatInput based on the setting - Update e2e tests to enable the flag via `setUp()` UI toggle instead of writing `user-settings.json` directly ## Test plan - [ ] Verify the app selector is hidden by default on the home chat input - [ ] Enable the toggle in Settings > Experiments and verify the app selector appears - [ ] Run e2e tests: `npx playwright test home_chat_existing_app`🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2964" target="_blank"> <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.6 <noreply@anthropic.com> Co-authored-by:
claude[bot] <41898282+claude[bot]@users.noreply.github.com>
-
- 10 3月, 2026 1 次提交
-
-
由 Will Chen 提交于
## Summary - Add `dyad-assistant` to all trusted author/actor lists across the codebase - This includes GitHub Actions workflows (CI, PR review, rebase, triage, bugbot, label-rebase) and Claude skill definitions (pr-fix-comments, deflake-e2e-recent-commits) - Ensures `dyad-assistant` can trigger CI on self-hosted runners, use the PR review responder, trigger rebases, and be recognized as a trusted bot for comment processing ## Files changed (9 files) - `.github/workflows/ci.yml` - privileged author check - `.github/workflows/pr-review-responder.yml` - allowedActors list and prAuthor check - `.github/workflows/claude-pr-review.yml` - author filter and allowed_non_write_users - `.github/workflows/claude-rebase.yml` - allowedUsers list - `.github/workflows/bugbot-trigger.yml` - author filter - `.github/workflows/label-rebase-prs.yml` - allowedAuthors list - `.github/workflows/claude-triage.yml` - trusted comment authors for duplicate surfacing - `.claude/skills/pr-fix-comments/SKILL.md` - trusted bots list - `.claude/skills/deflake-e2e-recent-commits/SKILL.md` - PR author scan list ## Test plan - [ ] Verify `dyad-assistant` PRs trigger CI on self-hosted runners - [ ] Verify `dyad-assistant` PRs get automated code review - [ ] Verify `dyad-assistant` can use the PR review responder workflow
🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- devin-review-badge-begin --> --- <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2963" target="_blank"> <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.6 <noreply@anthropic.com>
-