1. 13 2月, 2026 21 次提交
  2. 12 2月, 2026 19 次提交
    • wwwillchen-bot's avatar
      Add step to remove needs-human:review-issue label after push (#2654) · 30ed10aa
      wwwillchen-bot 提交于
      ## Summary
      - Updates both `pr-push.md` and `fast-push.md` commands to automatically
      remove the `needs-human:review-issue` label after pushing
      - This label indicates the issue needed human review before work
      started, which is now complete once the PR is pushed
      
      ## Test plan
      - Run `/dyad:pr-push` on a PR with the `needs-human:review-issue` label
      and verify it gets removed
      - Run `/dyad:fast-push` and verify the same behavior
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      <!-- devin-review-badge-begin -->
      
      ---
      
      <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2654"
      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 -->
      
      
      <!-- This is an auto-generated description by cubic. -->
      ---
      ## Summary by cubic
      Automatically removes the needs-human:review-issue label after pushing
      in pr-push and fast-push, so issues reflect that human review is
      complete. Keeps PRs and labels in sync without manual cleanup.
      
      - **New Features**
      - pr-push and fast-push run gh pr edit --remove-label
      "needs-human:review-issue" after push, gracefully handling cases where
      the label doesn’t exist.
      
      <sup>Written for commit 5d9bd27c187502459b83bfde12b960a0f89c5cd5.
      Summary will update on new commits.</sup>
      
      <!-- End of auto-generated description by cubic. -->
      Co-authored-by: 's avatarWill Chen <willchen90@gmail.com>
      Co-authored-by: 's avatarClaude Opus 4.5 <noreply@anthropic.com>
      30ed10aa
    • Will Chen's avatar
      Relax shell injection checks in permission hooks (#2653) · 42531151
      Will Chen 提交于
      ## Summary
      - Add `$(cat ...)` as a safe command substitution pattern in the gh
      permission hook, allowing commands like `gh api graphql -f query="$(cat
      /tmp/query.graphql)" > /tmp/output.json` to passthrough instead of being
      blocked
      - Add safe pipe and redirect handling to the python permission hook,
      allowing pytest commands with `2>&1 | tail` output formatting patterns
      - Move `| cat` from blocked to allowed in python hook tests since `cat`
      is a safe read-only command
      
      #skip-bugbot
      
      ## Test plan
      - [x] All gh permission hook tests pass (572 good commands, 406 bad
      commands)
      - [x] All python permission hook tests pass (good, bad, passthrough,
      security-blocked)
      - [x] npm test passes (803 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/2653"
      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 -->
      
      
      <!-- This is an auto-generated description by cubic. -->
      ---
      ## Summary by cubic
      Relaxed shell injection checks in GH and Python permission hooks to
      allow common read-only patterns like $(cat ...), pipes to safe tools,
      and simple redirects. This reduces false blocks while keeping unsafe
      substitutions and pipelines guarded.
      
      - **Bug Fixes**
      - GH hook: treat $(cat ...) as a safe command substitution and
      neutralize it before checks.
      - Python hook: allow pipes to common text tools (e.g., tail, grep, cat)
      and redirects like 2>&1 and >/dev/null.
      - Tests: move python `| cat` to allowed; add cases for gh `$(cat ...)`
      and pytest `2>&1 | tail`.
      
      <sup>Written for commit b1695c6e09bdc58288197ae2ab79745947fcca59.
      Summary will update on new commits.</sup>
      
      <!-- End of auto-generated description by cubic. -->
      Co-authored-by: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
      42531151
    • wwwillchen-bot's avatar
      Add Claude rules review workflow (#2652) · a852505d
      wwwillchen-bot 提交于
      ## Summary
      - Adds a GitHub Actions workflow that reviews Claude rules files
      (AGENTS.md and .mcp.json) on pull requests
      - The workflow checks for proper formatting and content in configuration
      files
      - Helps maintain quality of agent configuration and rules
      
      ## Test plan
      - PR review workflow will run on this PR
      - Verify the workflow file is valid YAML and GitHub Actions syntax
      
      #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/2652"
      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 -->
      
      <!-- This is an auto-generated description by cubic. -->
      ---
      ## Summary by cubic
      Adds a weekly workflow that audits AGENTS.md and the rules/ directory
      and opens a single issue with keep/update/remove recommendations and
      proposed gaps. Keeps our agent guidance current and trims low‑value
      rules.
      
      - **New Features**
      - Adds .github/workflows/claude-rules-review.yml running Mondays at
      13:00 UTC and via manual trigger.
      - Uses anthropics/claude-code-action@v1 in direct mode with restricted
      tools and a 30‑minute timeout (model set via claude_args).
      - Closes any prior agent-review issues before creating a new summary;
      ensures documentation and agent-review labels exist.
      - Requires CLAUDE_CODE_OAUTH_TOKEN; uses GITHUB_TOKEN; shallow clone to
      last 200 commits; minimal permissions (contents: read, issues: write).
      
      <sup>Written for commit 820abfb2c8cc30ece2743ac71f021e371d250c23.
      Summary will update on new commits.</sup>
      
      <!-- End of auto-generated description by cubic. -->
      
      ---------
      Co-authored-by: 's avatarWill Chen <willchen90@gmail.com>
      Co-authored-by: 's avatarClaude Opus 4.5 <noreply@anthropic.com>
      Co-authored-by: 's avatarclaude[bot] <41898282+claude[bot]@users.noreply.github.com>
      Co-authored-by: 's avatarcubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
      a852505d
    • Will Chen's avatar
      Add ci2 runner to nightly cleanup workflow (#2645) · 4b686b29
      Will Chen 提交于
      ## Summary
      - Extend the nightly disk cleanup workflow to run on both ci1 and ci2
      self-hosted macOS runners
      - Update the guard step to accept ci2 as a valid runner name
      
      ## Test plan
      - Verify the workflow file syntax is correct
      - The nightly cleanup will run on both ci1 and ci2 runners
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      <!-- devin-review-badge-begin -->
      
      ---
      
      <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2645"
      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 -->
      
      <!-- This is an auto-generated description by cubic. -->
      ---
      ## Summary by cubic
      Extend the nightly disk cleanup to run on both ci1 and ci2 using a
      strategy matrix with fail-fast: false so each runner executes
      independently. Removed the guard step and related conditions, and
      updated comments to reflect both runners.
      
      <sup>Written for commit d1a2a3d4d8d1392960aabf536afb152a9db89698.
      Summary will update on new commits.</sup>
      
      <!-- End of auto-generated description by cubic. -->
      
      <!-- CURSOR_SUMMARY -->
      ---
      
      > [!NOTE]
      > **Low Risk**
      > Low risk CI workflow change that only affects scheduled cleanup
      execution on self-hosted runners; main risk is increased load or
      unexpected cleanup behavior now running on `ci2` as well.
      > 
      > **Overview**
      > Expands the nightly macOS runner disk cleanup workflow to run on both
      self-hosted runners `ci1` and `ci2` by switching the job to a matrix
      strategy and targeting `runs-on: ${{ matrix.runner }}`.
      > 
      > Removes the previous runner-name guard and conditional step execution
      so the cleanup script always runs for each matrix runner invocation.
      > 
      > <sup>Written by [Cursor
      Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
      d1a2a3d4d8d1392960aabf536afb152a9db89698. This will update automatically
      on new commits. Configure
      [here](https://cursor.com/dashboard?tab=bugbot).</sup>
      <!-- /CURSOR_SUMMARY -->
      
      ---------
      Co-authored-by: 's avatarClaude Opus 4.5 <noreply@anthropic.com>
      Co-authored-by: 's avatarclaude[bot] <41898282+claude[bot]@users.noreply.github.com>
      4b686b29
    • wwwillchen-bot's avatar
      Add telemetry sampling for non-Pro users (#2642) · aceda415
      wwwillchen-bot 提交于
      ## Summary
      - Store Dyad Pro status in localStorage for telemetry access
      - Sample 10% of events for non-Pro users (error events always sent)
      - Pro users continue to send all events
      
      ## Test plan
      - Verify telemetry events are sampled correctly for non-Pro users
      - Confirm error events are always sent regardless of Pro status
      - Test Pro users still send all events
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      <!-- devin-review-badge-begin -->
      
      ---
      
      <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2642"
      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 -->
      
      
      <!-- This is an auto-generated description by cubic. -->
      ---
      ## Summary by cubic
      Adds telemetry sampling for non‑Pro users to reduce event volume while
      keeping error visibility. Stores Dyad Pro status in localStorage; Pro
      users keep sending all events.
      
      - **New Features**
      - Save Dyad Pro status in localStorage (dyadProStatus) and expose
      isDyadProUser().
      - Sample PostHog events for non‑Pro: send 10% of non‑error events;
      always send errors.
        - No change for Pro users; all events continue to be sent.
      
      <sup>Written for commit 685922c99bc83c6c1d3c6e58a99761037894bc2b.
      Summary will update on new commits.</sup>
      
      <!-- End of auto-generated description by cubic. -->
      Co-authored-by: 's avatarWill Chen <willchen90@gmail.com>
      Co-authored-by: 's avatarClaude Opus 4.5 <noreply@anthropic.com>
      aceda415
    • Mohamed Aziz Mejri's avatar
      Improving chat input aesthetics (#2561) · 065bab97
      Mohamed Aziz Mejri 提交于
      <!-- devin-review-badge-begin -->
      
      ---
      
      <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2561"
      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 -->
      
      <!-- This is an auto-generated description by cubic. -->
      ---
      ## Summary by cubic
      Refreshes the chat input UI for a cleaner look and consistent controls.
      Adds per‑mode icons and clearer visual states across inputs, pickers,
      and actions.
      
      - **UI Improvements**
      - Unified control sizing (h-7, text-xs, rounded-lg); vertical align
      center; input row aligns to end; removed spacer divs.
      - Borderless triggers for Mode/Model/Tools/Pro with subtle hover;
      smaller icons; muted “Model:”; mode chips show icons for all modes;
      Ask/Plan get color accents.
      - Input boxes rounded-2xl with focus-within ring; home input gets hover
      border; context banner rounded-t-2xl.
      - Send/Cancel use text-color hovers with clearer disabled; Cancel turns
      destructive on hover; Auxiliary Actions is circular with gentle hover
      scale.
      - Increased input padding and 15px text with repositioned placeholder;
      trimmed outer and MessagesList padding for tighter alignment; home send
      icon switched to SendHorizontal.
      
      <sup>Written for commit 301875efc229e998e9ba52b2eeeac057bd017b16.
      Summary will update on new commits.</sup>
      
      <!-- End of auto-generated description by cubic. -->
      
      ---------
      Co-authored-by: 's avatarWill Chen <willchen90@gmail.com>
      065bab97
    • Will Chen's avatar
      Fix scroll behavior when switching between chats (#2643) · fd27826e
      Will Chen 提交于
      ## Summary
      - Fix scroll behavior when switching between chats with existing
      messages
      - Use double `requestAnimationFrame` to wait for Virtuoso to render
      before scrolling to bottom when switching chats
      - Distinguish between chat switches and new message sends to handle
      scrolling appropriately
      - Avoid premature scrolling when switching to chats where messages
      haven't been fetched yet
      
      ## Test plan
      1. Open Dyad and start a chat with some messages
      2. Start another chat with messages
      3. Switch between chats and verify scroll position stays at the bottom
      4. Send a new message and verify it scrolls to show the new message
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      <!-- devin-review-badge-begin -->
      
      ---
      
      <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2643"
      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 -->
      
      <!-- This is an auto-generated description by cubic. -->
      ---
      ## Summary by cubic
      Fixes chat auto-scroll to keep the view anchored at the bottom when
      switching chats or sending messages. Prevents flicker and jumps before
      messages render.
      
      - **Bug Fixes**
      - Distinguish chat switches vs new sends; adjust scroll timing
      accordingly.
      - On chat switch with existing messages, wait for Virtuoso to render
      (double requestAnimationFrame), then scroll to bottom instantly.
      - On new message send, wait for the placeholder to render (double
      requestAnimationFrame) before scrolling; skip auto-scroll when switching
      to a chat with no messages yet.
      
      <sup>Written for commit 8814a601a9615b60efbfbff0aff5b7150a75fa63.
      Summary will update on new commits.</sup>
      
      <!-- End of auto-generated description by cubic. -->
      
      <!-- CURSOR_SUMMARY -->
      ---
      
      > [!NOTE]
      > **Low Risk**
      > Scoped to `ChatPanel` scroll timing logic; risk is limited to possible
      UI regressions (missed/extra scroll) when switching chats or starting
      streams.
      > 
      > **Overview**
      > Fixes `ChatPanel` auto-scroll behavior by **distinguishing chat
      switches from new stream starts** and delaying the scroll until after
      Virtuoso has rendered.
      > 
      > On chat switch, it now scrolls to bottom *only after messages exist*
      (avoiding premature scroll before fetch/render) and uses a double
      `requestAnimationFrame` with `instant` scrolling; on new message sends
      (`streamCount` changes), it similarly waits for render before scrolling
      with the default behavior.
      > 
      > <sup>Written by [Cursor
      Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
      8814a601a9615b60efbfbff0aff5b7150a75fa63. This will update automatically
      on new commits. Configure
      [here](https://cursor.com/dashboard?tab=bugbot).</sup>
      <!-- /CURSOR_SUMMARY -->
      
      ---------
      Co-authored-by: 's avatarClaude Opus 4.5 <noreply@anthropic.com>
      fd27826e
    • wwwillchen-bot's avatar
      Remove ChatActivity component and associated references (#2648) · d1a607f8
      wwwillchen-bot 提交于
      ## Summary
      - Remove the unused `ChatActivity.tsx` component
      - Clean up all references including i18n translations (en, pt-BR, zh-CN)
      - Update e2e test helpers and concurrent chat spec to remove
      ChatActivity-related code
      
      ## Test plan
      - [x] Lint checks pass
      - [x] TypeScript compilation succeeds
      - [x] All 33 test files pass
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      <!-- devin-review-badge-begin -->
      
      ---
      
      <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2648"
      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 -->
      
      
      <!-- This is an auto-generated description by cubic. -->
      ---
      ## Summary by cubic
      Removed the unused ChatActivity component and the bell entry point.
      Updated tests and i18n; e2e now targets the chat tabs “in progress”
      indicator instead of the activity list.
      
      - **Refactors**
      - Deleted ChatActivity.tsx and removed ChatActivityButton from TitleBar
      and ActionHeader.
        - Removed related i18n keys in en, pt-BR, and zh-CN.
      - Dropped e2e helpers for the activity list and updated
      concurrent_chat.spec to select the “Chat in progress” tab.
      
      <sup>Written for commit b005943bc7b87c8dfe6375504fbbbca088b7aabb.
      Summary will update on new commits.</sup>
      
      <!-- End of auto-generated description by cubic. -->
      
      ---------
      Co-authored-by: 's avatarWill Chen <willchen90@gmail.com>
      Co-authored-by: 's avatarClaude Opus 4.5 <noreply@anthropic.com>
      d1a607f8
    • wwwillchen-bot's avatar
      Fix preview navigation black screen when selecting routes from dropdown (#2610) · fb73c208
      wwwillchen-bot 提交于
      ## Summary
      - Changed `navigateToRoute()` to use `postMessage` +
      `location.replace()` pattern instead of direct `location.href`
      assignment
      - This matches the approach used by back/forward navigation buttons and
      provides smooth navigation without the black screen flicker and sidebar
      state reset
      - Also added proper `currentIframeUrlRef` and `preservedUrls` updates
      for HMR remount consistency
      
      Fixes #2428
      
      ## Test plan
      - [x] Build succeeds
      - [x] Unit tests pass (784 tests)
      - [x] E2E tests pass for preview navigation (`npm run e2e -- --grep
      "preview navigation"`)
      - Manual testing: Open a multi-page app, use the route dropdown to
      navigate between routes - should no longer see black screen flicker or
      sidebar collapse
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      <!-- devin-review-badge-begin -->
      
      ---
      
      <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2610"
      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 -->
      
      <!-- This is an auto-generated description by cubic. -->
      ---
      ## Summary by cubic
      Fixes #2428: removes black screen flicker and sidebar collapse when
      selecting routes from the preview dropdown. Navigation now uses
      postMessage + location.replace and keeps the iframe src stable across
      SPA navigation and HMR.
      
      - **Bug Fixes**
      - Use postMessage + location.replace to navigate; prevents flicker and
      preserves sidebar state.
      - Freeze iframe src with useMemo and same-origin check so SPA nav/HMR
      don’t reset it; added e2e test to verify src remains unchanged.
      - Sync navigation state: history, canGoBack/canGoForward,
      currentIframeUrlRef, and per-app preservedUrls (clears on root).
      
      <sup>Written for commit 1bdd7635ea432c564fe77fea57062df1a9d2f56d.
      Summary will update on new commits.</sup>
      
      <!-- End of auto-generated description by cubic. -->
      
      ---------
      Co-authored-by: 's avatarWill Chen <willchen90@gmail.com>
      Co-authored-by: 's avatarClaude Opus 4.5 <noreply@anthropic.com>
      fb73c208
    • Mohamed Aziz Mejri's avatar
      Prompt the user for attachement type after dragging the file (#2563) · 8f87e0f3
      Mohamed Aziz Mejri 提交于
      <!-- devin-review-badge-begin -->
      
      ---
      
      <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2563"
      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 -->
      
      <!-- This is an auto-generated description by cubic. -->
      ---
      ## Summary by cubic
      Show a dialog after dragging or pasting files into chat to choose how to
      attach them—as chat context or upload to codebase. This makes intent
      explicit and blocks submit, drop, and paste until you choose.
      
      - **New Features**
      - Added FileAttachmentTypeDialog; integrated in ChatInput and
      HomeChatInput. i18n (en, pt-BR, zh-CN) with singular/plural titles and
      descriptions.
      - Updated useAttachments with pendingFiles and confirm/cancel.
      Drag/paste set pendingFiles; prevent attaching while pending;
      clearAttachments also clears pendingFiles; submit blocked when dialog is
      open.
      - Fixed e2e to select “Attach file as chat context”; dialog buttons use
      type="button" with focus-visible ring.
      
      - **Refactors**
        - confirmPendingFiles reuses addAttachments to deduplicate logic.
      
      <sup>Written for commit b625847b5ed5f82bea4616db27b87b16b5b33613.
      Summary will update on new commits.</sup>
      
      <!-- End of auto-generated description by cubic. -->
      
      ---------
      Co-authored-by: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
      8f87e0f3
    • Will Chen's avatar
      Extend deflake-e2e-recent-commits to scan PRs by wwwillchen/wwwillchen-bot (#2647) · c3c6d3e9
      Will Chen 提交于
      ## Summary
      - Extends the `deflake-e2e-recent-commits` command to also gather flaky
      tests from open PRs authored by `wwwillchen` and `wwwillchen-bot`
      - Parses Playwright Test Results comments on these PRs to extract flaky
      test names
      - Provides more comprehensive coverage for deflaking efforts by
      combining main branch CI runs with PR-reported flakes
      
      ## Test plan
      - Run `/dyad:deflake-e2e-recent-commits` and verify it now scans both
      main branch CI runs AND open PRs by the specified authors
      - Verify flaky tests from PR comments are correctly parsed and added to
      the deflake list
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      <!-- devin-review-badge-begin -->
      
      ---
      
      <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2647"
      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 -->
      
      
      <!-- This is an auto-generated description by cubic. -->
      ---
      ## Summary by cubic
      Extends deflake-e2e-recent-commits to also scan open PRs by wwwillchen
      and wwwillchen-bot for Playwright-reported flaky tests. This broadens
      coverage beyond main-branch CI and improves deflaking accuracy.
      
      - **New Features**
        - Lists recent open PRs by wwwillchen and wwwillchen-bot.
      - Parses the latest “Playwright Test Results” bot comment to extract
      flaky test titles.
      - Merges PR-derived flakes with main-branch results, de-duplicates, and
      notes PR sources in the summary.
        - Updates no-results message to include PRs (“recent commits or PRs”).
      
      <sup>Written for commit 32766d69227eb2454f45899e5784021161765019.
      Summary will update on new commits.</sup>
      
      <!-- End of auto-generated description by cubic. -->
      
      <!-- CURSOR_SUMMARY -->
      ---
      
      > [!NOTE]
      > **Low Risk**
      > Documentation-only change that broadens the data sources described for
      collecting flaky tests; no runtime or production code is modified.
      > 
      > **Overview**
      > Extends the `.claude` command `deflake-e2e-recent-commits` to
      **collect flaky Playwright tests from two sources**: recent `main` CI
      `html-report` artifacts *and* the latest “Playwright Test Results” bot
      comment on recent open PRs authored by `wwwillchen`/`wwwillchen-bot`.
      > 
      > Updates the instructions to include the PR scanning/parsing workflow,
      to attribute flakes by source in the final report, and to change the
      no-flakes message to cover “recent commits or PRs.”
      > 
      > <sup>Written by [Cursor
      Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
      32766d69227eb2454f45899e5784021161765019. This will update automatically
      on new commits. Configure
      [here](https://cursor.com/dashboard?tab=bugbot).</sup>
      <!-- /CURSOR_SUMMARY -->
      Co-authored-by: 's avatarClaude Opus 4.5 <noreply@anthropic.com>
      c3c6d3e9
    • wwwillchen-bot's avatar
      Improve E2E test stability for Capacitor and Next.js component selection (#2646) · 4936b851
      wwwillchen-bot 提交于
      ## Summary
      - Add error dialog handling in capacitor.spec.ts to gracefully dismiss
      sync errors that may occur in E2E environment due to missing
      CocoaPods/Xcode
      - Improve timing and wait logic in select_component.spec.ts for Next.js
      apps which take longer to compile and start the dev server
      - Update snapshot to use placeholder for system message instead of
      hardcoded content
      
      ## Test plan
      - Run `npm run test:e2e -- --grep "capacitor"` to verify the Capacitor
      test improvements
      - Run `npm run test:e2e -- --grep "select component next.js"` to verify
      the Next.js component selection test improvements
      - Verify that tests pass consistently without flakiness
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      <!-- devin-review-badge-begin -->
      
      ---
      
      <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2646"
      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 -->
      
      
      <!-- This is an auto-generated description by cubic. -->
      ---
      ## Summary by cubic
      Stabilizes E2E tests by handling Capacitor sync errors and improving
      Next.js component selection timing to reduce flakiness. Also updates the
      snapshot to use a system message placeholder.
      
      - **Bug Fixes**
      - Capacitor: wait for sync completion and dismiss error dialog when
      CocoaPods/Xcode are missing.
      - Next.js: wait for preview iframe and heading visibility; add retry
      with toPass() for component selection.
      - Snapshot: replace hardcoded system message with [[SYSTEM_MESSAGE]]
      placeholder.
      
      <sup>Written for commit 0e33279d8d18c124ca11e95818ce76b8d9b7b4de.
      Summary will update on new commits.</sup>
      
      <!-- End of auto-generated description by cubic. -->
      Co-authored-by: 's avatarWill Chen <willchen90@gmail.com>
      Co-authored-by: 's avatarClaude Opus 4.5 <noreply@anthropic.com>
      4936b851
    • Will Chen's avatar
      Refactor multi-pr-review to use specialized reviewer personas (#2644) · 19650473
      Will Chen 提交于
      ## Summary
      - Replace generic review prompts with three distinct reviewer personas
      (correctness, code-health, UX)
      - Each reviewer has a specialized focus area for more targeted feedback
      - Update workflow trigger to include skills directory changes
      
      ## Test plan
      - Verify the PR review workflow triggers correctly on PR changes
      - Confirm each reviewer persona produces relevant, focused feedback
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      <!-- devin-review-badge-begin -->
      
      ---
      
      <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2644"
      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 -->
      
      
      <!-- This is an auto-generated description by cubic. -->
      ---
      ## Summary by cubic
      Refactors multi-pr-review to use three specialized reviewer
      personas—Correctness, Code Health, and UX—for more focused, actionable
      PR feedback. Updates the GitHub workflow to call the new skill.
      
      - **Refactors**
      - Added persona templates: correctness-reviewer.md,
      code-health-reviewer.md, ux-reviewer.md.
      - Updated SKILL.md with persona roles, severity guidance, and new
      references.
      - Removed old generic prompts: review_prompt_default.md and
      review_prompt_code_health.md.
        - Switched workflow command to /dyad:multi-pr-review.
      
      <sup>Written for commit f761c88cec8a91be810ca55f66db39b5b7acfa4e.
      Summary will update on new commits.</sup>
      
      <!-- End of auto-generated description by cubic. -->
      
      <!-- CURSOR_SUMMARY -->
      ---
      
      > [!NOTE]
      > **Medium Risk**
      > Changes affect the automated PR review pipeline and remove prompt
      files that the orchestrator may still reference, which could break
      CI-based reviews if not updated in lockstep.
      > 
      > **Overview**
      > Updates the `dyad:multi-pr-review` documentation/spec to describe
      **three specialized sub-agent personas** (Correctness, Code Health, UX)
      and expands severity guidance to explicitly include UX
      blockers/degradations.
      > 
      > Adds new persona reference docs (`correctness-reviewer.md`,
      `code-health-reviewer.md`, `ux-reviewer.md`) and removes the prior
      generic prompt templates (`review_prompt_default.md`,
      `review_prompt_code_health.md`). The PR review workflow is also updated
      to run `/dyad:multi-pr-review` instead of the previous command.
      > 
      > <sup>Written by [Cursor
      Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
      f761c88cec8a91be810ca55f66db39b5b7acfa4e. This will update automatically
      on new commits. Configure
      [here](https://cursor.com/dashboard?tab=bugbot).</sup>
      <!-- /CURSOR_SUMMARY -->
      Co-authored-by: 's avatarClaude Opus 4.5 <noreply@anthropic.com>
      19650473
    • Will Chen's avatar
      Exempt gh issue commands from shell injection checks (#2638) · d27a227f
      Will Chen 提交于
      ## Summary
      - Extends the existing `gh pr` shell injection exemption to also cover
      `gh issue` commands in the permission hook
      - `gh issue create/comment/edit` frequently contain markdown in `--body`
      with backticks, pipes, `**bold**`, etc. that were incorrectly flagged as
      injection attempts
      - Added 50+ test cases covering `gh issue` and `gh pr` commands with
      rich markdown body content
      
      ## Test plan
      - [x] All 977 hook permission tests pass (`python
      .claude/hooks/tests/test_gh_permission_hook.py`)
      - [x] `npm run fmt && npm run lint:fix && npm run ts` passes
      - [x] `npm test` passes (33/33 test files)
      
      #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/2638"
      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 -->
      
      
      <!-- This is an auto-generated description by cubic. -->
      ---
      ## Summary by cubic
      Extend the shell injection exemption to gh issue commands to prevent
      false positives on markdown in --body (backticks, pipes, bold). Other gh
      commands remain protected by injection checks.
      
      - **Bug Fixes**
      - Exempted "gh issue ..." (and kept "gh pr ...") from shell injection
      checks in the permission hook.
      - Added 50+ tests for rich markdown bodies across gh issue and gh pr
      commands.
      - Moved six gh issue cases from bad_commands to good_commands to match
      the exemption.
        - Preserved injection checks for all other gh commands.
      
      <sup>Written for commit e168f9b81384568475cbcb81a92ef19a0963c7a6.
      Summary will update on new commits.</sup>
      
      <!-- End of auto-generated description by cubic. -->
      Co-authored-by: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
      d27a227f
    • Will Chen's avatar
      Update PR Review Responder workflow to do an extra push just in case (#2641) · 46b4637d
      Will Chen 提交于
      ## Summary
      Adds a comprehensive GitHub Actions workflow that automatically responds
      to pull requests with AI-powered code reviews and automated fixes. The
      workflow handles PR labeling, manages retry logic (up to 3 retries), and
      integrates with Claude Code for automated problem resolution.
      
      ## Test plan
      - Verify the workflow is properly formatted and no syntax errors exist
      - Check that the workflow triggers on the correct events
      (pull_request_target with labels and workflow_run)
      - Verify that only trusted maintainers (wwwillchen, wwwillchen-bot) can
      trigger the workflow
      - Test the retry logic by checking label transitions (cc:request →
      cc:pending → cc:request:N)
      - Confirm the workflow creates meaningful git commits through Claude
      Code
      - Verify proper cleanup of labels when max retries (4 total) are reached
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      <!-- devin-review-badge-begin -->
      
      ---
      
      <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2641"
      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 -->
      
      <!-- CURSOR_SUMMARY -->
      ---
      
      > [!NOTE]
      > **Low Risk**
      > Small workflow change, but it affects automation that can push to PR
      branches; failure modes are limited to CI/labeling behavior.
      > 
      > **Overview**
      > The `PR Review Responder` workflow now runs an additional Claude Code
      step after `/dyad:pr-fix` to push any local commits that may have been
      created but not pushed (via a new `/dyad:fast-push` invocation).
      > 
      > This reduces cases where the workflow would proceed to “check if
      commits were pushed” and label transitions without the PR branch
      actually being updated.
      > 
      > <sup>Written by [Cursor
      Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
      27a3059357b5f2511abc39d1a7c3aedccd92b38c. 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 a GitHub Actions workflow that automatically reviews pull requests,
      manages labels/retry logic, and applies fixes via Claude Code. Adds a
      fallback step to push any unpushed commits to ensure downstream
      workflows run and PR labels update correctly.
      
      <sup>Written for commit 27a3059357b5f2511abc39d1a7c3aedccd92b38c.
      Summary will update on new commits.</sup>
      
      <!-- End of auto-generated description by cubic. -->
      46b4637d
    • Will Chen's avatar
      Add feedback-to-issues command (#2639) · 40060a82
      Will Chen 提交于
      ## Summary
      Adds a new `/feedback-to-issues` command that converts customer feedback
      (usually emails or support tickets) into discrete GitHub issues. The
      command:
      
      - Parses feedback to extract concrete, actionable issues
      - Searches for existing duplicate issues on GitHub
      - Proposes new issues for user approval
      - Creates approved issues
      - Drafts a professional reply email to the customer
      
      ## Features
      - **Duplicate detection**: Searches GitHub with multiple keyword
      variations
      - **User approval workflow**: Shows proposed issues for review before
      creating
      - **Draft reply email**: Generates a response email acknowledging all
      items
      
      This is a useful tool for managing customer feedback and support tickets
      at scale.
      <!-- devin-review-badge-begin -->
      
      ---
      
      <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2639"
      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 -->
      
      <!-- CURSOR_SUMMARY -->
      ---
      
      > [!NOTE]
      > **Low Risk**
      > Documentation-only addition of a new Claude command; no
      application/runtime code paths change.
      > 
      > **Overview**
      > Adds a new Claude command spec,
      `/.claude/commands/dyad/feedback-to-issues.md`, to turn pasted (or
      file-based) customer feedback into actionable GitHub issues.
      > 
      > The workflow explicitly guides parsing feedback into discrete items,
      searching `gh issue list` for potential duplicates, presenting *already
      filed* vs *proposed* issues for **user approval**, then creating
      approved issues via `gh issue create` and drafting a reply email linking
      the resulting issues.
      > 
      > <sup>Written by [Cursor
      Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
      546a1ace575909596613fa3b5863421bbafe1594. 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 a new /feedback-to-issues command that turns customer emails or
      tickets into actionable GitHub issues. It checks for duplicates,
      requires approval before creating issues, and drafts a reply email with
      links.
      
      - **New Features**
      - Parses feedback into discrete issues with clear titles, types, and
      priorities.
      - Searches GitHub for duplicates using multiple keyword variations (open
      and closed).
        - Presents a review report and creates only approved issues via gh.
      - Drafts a concise customer reply that references existing and newly
      created issues.
      
      <sup>Written for commit 546a1ace575909596613fa3b5863421bbafe1594.
      Summary will update on new commits.</sup>
      
      <!-- End of auto-generated description by cubic. -->
      40060a82
    • Will Chen's avatar
      Update Claude PR Review workflow configuration (#2640) · 858e04cd
      Will Chen 提交于
      ## Summary
      - Update claude-pr-review.yml with latest configuration
      - Adjust settings for improved PR review automation
      
      ## Changes
      - Modified `.github/workflows/claude-pr-review.yml` with updated
      configuration
      
      ## Test plan
      - Workflow configuration has been validated by lint checks
      - No breaking changes to existing functionality
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      <!-- devin-review-badge-begin -->
      
      ---
      
      <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2640"
      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 -->
      
      <!-- CURSOR_SUMMARY -->
      ---
      
      > [!NOTE]
      > **Low Risk**
      > Workflow-only change that limits job runtime; low risk beyond possibly
      timing out unusually long review runs.
      > 
      > **Overview**
      > Adds a 30-minute `timeout-minutes` to the `claude-review` job in
      `.github/workflows/claude-pr-review.yml` to prevent the automated PR
      review workflow from running indefinitely.
      > 
      > <sup>Written by [Cursor
      Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
      75736d6b53a2104d2fe2a030dc0101aabc72f6c6. 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
      Set a 30-minute timeout for the Claude PR Review GitHub Actions job to
      prevent runaway runs and improve reliability. Added timeout-minutes: 30
      to .github/workflows/claude-pr-review.yml; no functional changes to
      triggers or permissions.
      
      <sup>Written for commit 75736d6b53a2104d2fe2a030dc0101aabc72f6c6.
      Summary will update on new commits.</sup>
      
      <!-- End of auto-generated description by cubic. -->
      858e04cd
    • wwwillchen-bot's avatar
      Refetch user budget on app load and after saving Dyad Pro key (#2632) · 3ab40cd8
      wwwillchen-bot 提交于
      ## Summary
      - Prefetch user budget on app initialization to ensure budget info is
      available immediately on load
      - Invalidate user budget query when Dyad Pro API key is saved to reflect
      updated subscription status immediately
      - Added documentation for React Query prefetch and invalidation patterns
      to AGENTS.md
      
      ## Test plan
      - Verify that user budget data loads on app startup
      - Test saving a Dyad Pro API key and confirm the budget information
      updates automatically
      - Check that the app continues to work correctly without a Dyad Pro
      subscription
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      <!-- devin-review-badge-begin -->
      
      ---
      
      <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2632"
      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 -->
      
      
      <!-- This is an auto-generated description by cubic. -->
      ---
      ## Summary by cubic
      Prefetches the user budget on app load and invalidates the budget query
      after saving a Dyad Pro API key, so subscription status and budget
      update instantly. Adds React Query docs for prefetch and invalidation
      patterns.
      
      <sup>Written for commit 92b15f29cda8b9b19ba04d281c6e3774ea3928c8.
      Summary will update on new commits.</sup>
      
      <!-- End of auto-generated description by cubic. -->
      Co-authored-by: 's avatarWill Chen <willchen90@gmail.com>
      Co-authored-by: 's avatarClaude Opus 4.5 <noreply@anthropic.com>
      3ab40cd8
    • Will Chen's avatar
      Update language model constants with latest configurations (#2633) · a335e96d
      Will Chen 提交于
      ## Summary
      - Update language model constants with latest model configurations and
      pricing
      - Add support for new model versions across multiple providers
      - Improve model descriptions and configuration parameters
      
      ## Test plan
      - Verify that the application loads with all model configurations
      - Test model selection in the UI
      - Confirm no TypeScript or lint errors
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      <!-- devin-review-badge-begin -->
      
      ---
      
      <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2633"
      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 -->
      
      <!-- CURSOR_SUMMARY -->
      ---
      
      > [!NOTE]
      > **Low Risk**
      > Primarily updates configuration/constants for model selection; main
      behavioral change is the expanded free-model name matching which could
      alter which OpenRouter models are used in fallback.
      > 
      > **Overview**
      > Adds the new Anthropic model `claude-opus-4-6` (with updated token
      limits/pricing metadata) to the selectable model options.
      > 
      > Refreshes OpenRouter model options by introducing a generic
      `openrouter/free` entry, adding `z-ai/glm-5`, tweaking `glm-4.7`
      description, and removing older explicit free-model entries and
      `moonshotai/kimi-k2-0905`. Updates `FREE_OPENROUTER_MODEL_NAMES` to
      treat both `:free` and `/free` model names as free, which changes which
      models can be selected in the auto free fallback.
      > 
      > <sup>Written by [Cursor
      Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
      d192033357d87355a9d414269a19a348c3faef6d. 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
      Updated language model constants with the latest configs and pricing to
      keep model selection current. Adds new models and improves free model
      detection for OpenRouter.
      
      - **New Features**
        - Added Claude Opus 4.6 (1M context, 32k max output).
      - Added OpenRouter “free” model and Z‑AI GLM 5; updated GLM 4.7
      description.
      - Updated context windows, temperatures, and pricing; removed deprecated
      free entries and Kimi K2 0905.
      
      - **Bug Fixes**
      - Free model detection now supports names ending with “/free” (not just
      “:free”).
      
      <sup>Written for commit d192033357d87355a9d414269a19a348c3faef6d.
      Summary will update on new commits.</sup>
      
      <!-- End of auto-generated description by cubic. -->
      a335e96d