…ported in deep context
Fixes https://github.com/dyad-sh/dyad/issues/1715
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> Deep context now only applies with no app mentions; otherwise we
fallback to balanced and pass the effective mode to the engine, with
updated history limits and new e2e coverage.
>
> - **Smart Context behavior**:
> - Deep mode activates only when no `@app:` mentions are present;
otherwise uses `balanced`.
> - Max chat turns set to 201 only for deep-without-mentions; otherwise
use configured limit.
> - **Engine integration**:
> - Send effective smart context mode via `dyadSmartContextMode` and map
to `dyad_options.smart_context_mode` in `llm_engine_provider`.
> - Add `SmartContextMode` schema (`balanced|conservative|deep`) and use
it in settings/types.
> - Remove static `smartContextMode` from engine options; use
per-request mode instead.
> - **Tests**:
> - Add e2e test `smart context deep - mention app should fallback to
balanced` with snapshot asserting `smart_context_mode: "balanced"` and
mentioned app files.
> - **Misc**:
> - Tighten app path validation regex in `rename-app` handler.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
5aada2bd246e297d7b35e36738f75c8531b897ae. 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
Fallback to balanced smart context when an app is mentioned in deep
mode, since deep doesn’t support mentioned apps. This keeps context
limits correct and updates engine config, with new e2e coverage.
- **Bug Fixes**
- Deep mode only applies when no apps are mentioned; otherwise we use
balanced.
- Max chat turns: 201 only for deep without mentions; otherwise use
configured limit.
- Plumb smart context mode via dyadSmartContextMode to the engine; add
SmartContextMode schema.
- Add e2e test to verify fallback in deep mode when an app is mentioned.
<sup>Written for commit 5aada2bd246e297d7b35e36738f75c8531b897ae.
Summary will update automatically on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
closes#1885
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Added a tooltip to sidebar app items to show the full project name on
hover. Improves readability for long names without changing
interactions.
- **New Features**
- Wrapped the app row with TooltipProvider/Trigger and show
TooltipContent on the right with the full name.
- Click and favorite actions remain unchanged.
<sup>Written for commit 274c250a27f244f926dcc30413dc1c3db62ca93a.
Summary will update automatically on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
Addresses issue in https://github.com/dyad-sh/dyad/issues/1849
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Fixes Pro users seeing an “Upgrade to Dyad Pro” prompt on provider
rate-limit errors and cleans up noisy fallback details in error
messages. Pro users now get the correct message, and errors are shorter
and clearer.
- **Bug Fixes**
- Show the upgrade link only when not on Pro for rate-limit errors
(Gemini and generic provider errors).
- Trim verbose fallback lists by splitting on "Fallbacks=[{" to keep the
fallback model’s error while removing the rest.
<sup>Written for commit e0f69dcda4b4aa0f1be2af3b1af163d84e995fe7.
Summary will update automatically on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> Avoids Pro upsell for Pro users on rate-limit errors and trims
fallback details more precisely in error messages.
>
> - **Chat error handling (`src/components/chat/ChatErrorBox.tsx`)**:
> - **Rate-limit messaging**: Show Dyad Pro upgrade link only when
`!isDyadProEnabled` (prevents upsell for existing Pro users).
> - **Fallback error trimming**: Truncate error text at `"Fallbacks=[{"`
instead of `"Fallbacks="` to retain fallback model error context.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
e0f69dcda4b4aa0f1be2af3b1af163d84e995fe7. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
Fixes https://github.com/dyad-sh/dyad/issues/1652
This is kind of a hack because the Vercel SDK has a bug since their API
has subtly made a breaking change in the last month or so and the Vercel
SDK still hasn't been updated
https://github.com/vercel/sdk/issues/175#issuecomment-3608968116
Note: the Vercel SDK upgrade in this PR doesn't actually fix the issue,
but is probably good to do anyways.
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Works around a breaking change in Vercel’s API by bypassing the SDK for
project queries. Restores listing, availability checks, and project
linking.
- **Bug Fixes**
- Added a direct HTTP call to GET /v9/projects using the Vercel token.
- Replaced SDK calls in list, name availability, and connect-to-project
flows.
- Added minimal types and clearer error handling for project responses.
- **Dependencies**
- Bumped @vercel/sdk to 1.18.0. The upgrade doesn’t fix the bug but is
safe to adopt.
<sup>Written for commit 306af5c3f235f0ab9d87c809bb8cf54016a5d59f.
Summary will update automatically on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> Replaces Vercel project retrieval with a direct HTTP helper used
across handlers to handle API changes, and updates @vercel/sdk to
^1.18.0.
>
> - **IPC/Backend (Vercel)**:
> - Add `getVercelProjects` helper to fetch projects via `GET
/v9/projects`, mimicking `vercel.projects.getProjects`.
> - Update handlers to use the new helper:
> - `vercel:list-projects` (`handleListVercelProjects`)
> - `vercel:is-project-available` (`handleIsProjectAvailable`)
> - `vercel:connect-existing-project` (`handleConnectToExistingProject`)
> - Add lightweight types: `VercelProjectResponse`,
`GetVercelProjectsResponse`.
> - **Dependencies**:
> - Bump `@vercel/sdk` to `^1.18.0`.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
306af5c3f235f0ab9d87c809bb8cf54016a5d59f. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
closes#1823
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Blocks invalid characters in app folder paths during rename and shows
cleaner error messages in App Details. Prevents OS rename failures and
removes confusing IPC prefixes from errors.
- **Bug Fixes**
- Validate new appPath on rename; reject < > : " | ? * / \ and control
characters when the path changes, with a clear error message.
- Replace alert() with showError() and strip the IPC wrapper text for
user-friendly errors.
<sup>Written for commit 14b3c0978c1da3b97ca6d33e67684c7ff872ab0a.
Summary will update automatically on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
<!-- This is an auto-generated description by cubic. -->
## Summary by cubic
Adds an animated placeholder with rotating prompt suggestions to the
home chat input to guide users. Also introduces a small hook for the
typing effect and updates the e2e selector to handle dynamic text.
- **New Features**
- HomeChatInput shows "Ask Dyad to build" with cycling suggestions
(ecommerce store, information page, landing page).
- New useTypingPlaceholder hook for type/delete animation with
configurable speeds and pause.
- E2E test locator updated to match aria-placeholder by prefix to
support dynamic content.
<sup>Written for commit 6b8133ec9441f60909493cad3b43315348aed2d5.
Summary will update automatically on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
This PR adresses issue #1735
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Clear chat input and selected component previews when switching apps to
prevent state carryover. Fixes#1735.
- **Bug Fixes**
- Reset chatInputValueAtom and selectedComponentsPreviewAtom on
selectedAppId change in RootLayout.
- Ensures each app opens with a clean chat and preview state.
<sup>Written for commit df166781e48934ca1e2b8b2b202daa014c358922.
Summary will update automatically on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
The diff appears large due to Prettier formatting, but actual code
changes are minimal.
- Made header sticky with proper flex layout
- Added responsive text sizes (`text-xs sm:text-sm`)
- Improved text wrapping (`break-words overflow-wrap-anywhere`)
- Made tab labels responsive (shorter for small screen)
- Added `flex-shrink-0` to prevent icon/button squishing
- Stack footer buttons vertically on small screen
closes#1746
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Made the Import App dialog responsive on small screens. Improves
readability and prevents controls from squishing.
- **Bug Fixes**
- Added a sticky header so the title/description stay visible while
scrolling.
- Made text and tab labels responsive, with better word wrapping to
avoid overflow.
- Prevented icon/button compression and stacked footer buttons
vertically on mobile.
- Updated e2e test by removing the AI_RULES snapshot to match the new
UI.
<sup>Written for commit 1025631018964aea37689ab2196e0169755e3739.
Summary will update automatically on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
<!-- This is an auto-generated description by cubic. -->
## Summary by cubic
Disable Enter-to-send when approve/reject is pending to prevent
accidental message submission. Enter now respects the disableSendButton
state; Shift+Enter still adds a newline.
- **Bug Fixes**
- Pass disableSendButton from ChatInput to LexicalChatInput.
- Update EnterKeyPlugin to ignore Enter when disableSendButton is true,
while keeping Shift+Enter for newline.
<sup>Written for commit 7b13908826e25ebf0f2699137c648e20de520f61.
Summary will update automatically on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
Fixes#1108
## Summary
The "Setup AI Access" banner was not being hidden when custom providers
were configured. This was because the `isAnyProviderSetup()` function
only checked hardcoded cloud providers and didn't account for custom
providers.
## Changes
Updated `useLanguageModelProviders.ts` to check for configured custom
providers in addition to the hardcoded cloud providers.
## Test plan
- Configure a custom provider without setting up any cloud providers
- Verify that the "Setup AI Access" banner is now hidden
🤖 Generated with [Claude Code](https://claude.com/claude-code)
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Hide the "Setup AI Access" banner when any provider is configured,
including custom providers. Fixes a logic gap where only hardcoded cloud
providers were checked.
- **Bug Fixes**
- Extend isAnyProviderSetup to check custom providers from query data
(by id).
- Banner no longer shows when a custom provider is configured without
cloud providers.
<sup>Written for commit 2ecef7aac52da0b4d43c69fc5d3afb7bafa5706a.
Summary will update automatically on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
This PR implements allowing users to take a screenshot for bug reports
and addresses issue #1125
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Adds screenshot capture to bug reports. Users can take a screenshot
that’s copied to the clipboard, then continue to file the issue.
- **New Features**
- New BugScreenshotDialog to take a screenshot or report without one.
- ScreenshotSuccessDialog confirms capture and guides users to the
GitHub issue.
- HelpDialog now opens the screenshot flow; issue template includes an
optional Screenshot section.
- Electron IPC handler take-screenshot captures the focused window and
writes the image to the clipboard; exposed via IpcClient and whitelisted
in preload.
<sup>Written for commit de0f9b059ae508b56c3c46664559eead3dffa413.
Summary will update automatically on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Adds `gemini-3-pro-preview` to Google model options with 1,048,576
context window and 65,535 max output tokens.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
6aefc4449908e862476f61c0bcb2a625111256a3. 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
Added Gemini 3 Pro (Preview) to the Google model list so users can
select it in the app. Sets a 1,048,576-token context window and a safe
max output of 65,535 tokens, with temperature 1.0.
<sup>Written for commit 6aefc4449908e862476f61c0bcb2a625111256a3.
Summary will update automatically on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
Added to OpenAI and Azure
GPT-5.1: adaptive reasoning
GPT-5.1-codex: advanced coding workflows
GPT-5.1-codex-mini: compact and efficient
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Added support for OpenAI and Azure GPT-5.1, including GPT-5.1 Codex and
Codex Mini, for smarter conversations and better coding tasks. All
models use a 400k context window, require temperature 1, and leave max
output tokens unspecified to align with API behavior.
<sup>Written for commit 9788541c88732aa7d522fc70bfb20f22c3544982.
Summary will update automatically on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> Adds GPT-5.1, GPT-5.1 Codex, and Codex Mini to OpenAI and Azure model
catalogs with 400k context and temperature 1 (max output tokens
unspecified).
>
> - **Model registry updates
(`src/ipc/shared/language_model_constants.ts`)**:
> - **OpenAI**:
> - Add `gpt-5.1`, `gpt-5.1-codex`, `gpt-5.1-codex-mini` (400k
`contextWindow`, `temperature: 1`, `maxOutputTokens: undefined`).
> - Keep existing `gpt-5`, `gpt-5-codex`, `gpt-5-mini`, `gpt-5-nano`,
`o4-mini`.
> - **Azure**:
> - Add `gpt-5.1`, `gpt-5.1-codex`, `gpt-5.1-codex-mini` with matching
settings (400k `contextWindow`, `temperature: 1`).
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
9788541c88732aa7d522fc70bfb20f22c3544982. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
---------
Co-authored-by: Will Chen <willchen90@gmail.com>
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Bumps `package.json` version from `0.27.1` to `0.28.0-beta.1`.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
767e200f378205413e8a23fff7674149239a92d5. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
#1784
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> After reverting to a previous version, automatically deploy all
Supabase edge functions; failures are logged as warnings without
blocking the revert.
>
> - **Version Revert Flow (`src/ipc/handlers/version_handlers.ts`)**:
> - After revert, re-deploy all Supabase edge functions when
`app.supabaseProjectId` is present via `deployAllSupabaseFunctions`.
> - Aggregate deployment errors into `warningMessage` (non-blocking);
logs successes/failures.
> - Initialize `warningMessage` to an empty string.
> - **Supabase Utilities (`src/supabase_admin/supabase_utils.ts`)**:
> - Add `deployAllSupabaseFunctions`: scans `supabase/functions/*`,
ensures `index.ts`, reads content, calls `deploySupabaseFunctions`,
logs, collects errors; skips if directory missing.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
c29333c0f951b60b4e80da0b46cf0287d03bdae1. 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
Automatically re-deploys Supabase edge functions after restoring a
previous app version to keep functions in sync with reverted code.
Deployment failures surface as warnings and do not block the revert.
- **New Features**
- Re-deploy all Supabase edge functions on version revert when an app
has a Supabase project ID.
- Added deployAllSupabaseFunctions: scans supabase/functions, deploys
each index.ts sequentially, skips missing files, collects errors, and
logs warnings.
<sup>Written for commit c29333c0f951b60b4e80da0b46cf0287d03bdae1.
Summary will update automatically on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
<!-- This is an auto-generated description by cubic. -->
## Summary by cubic
Adds multi-component selection in the preview and sends all selected
components to chat for targeted edits. Updates overlays, UI, and IPC to
support arrays, smarter context focusing, and cross-platform path
normalization.
- **New Features**
- Select multiple components in the iframe; selection mode stays active
until you deactivate it.
- Show a scrollable list of selections with remove buttons and a Clear
all; remove from the list or click an overlay in the preview to
deselect. Sending clears all overlays.
- Separate hover vs selected overlays with labels on hover; overlays
persist after deactivation and re-position on layout changes/resizes.
- Chat input and streaming now send selectedComponents; server builds
per-component snippets and focuses their files in smart context.
- **Migration**
- Replace selectedComponentPreviewAtom with
selectedComponentsPreviewAtom (ComponentSelection[]).
- ChatStreamParams now uses selectedComponents; migrate any
single-selection usages.
- previewIframeRefAtom added for clearing overlays from the parent.
<sup>Written for commit da0d64cc9e9f83fbf4b975278f6c869f0d3a8c7d.
Summary will update automatically on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Bumps app to version 0.27.1 and updates
`@dyad-sh/supabase-management-js` to 1.0.1.
>
> - **Release**:
> - Set application version to `0.27.1` in `package.json`.
> - **Dependencies**:
> - Update `@dyad-sh/supabase-management-js` from `v1.0.0` to `v1.0.1`.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
a6d43949556f1b3da905b02e5c84a05bd30539b4. 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
Release 0.27.1: update app version and lockfile. Also bump the Supabase
management client to v1.0.1.
- **Dependencies**
- @dyad-sh/supabase-management-js: v1.0.0 → v1.0.1
<sup>Written for commit a6d43949556f1b3da905b02e5c84a05bd30539b4.
Summary will update automatically on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
<img width="496" height="470" alt="Screenshot 2025-10-24 200100"
src="https://github.com/user-attachments/assets/e64ee081-dc08-4b54-94a6-9ed41453cfcf"
/>
This PR adds settings for text size, small, medium (default), large and
extra large.
This should help more people use Dyad more productively.
Closes#1482
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Adds adjustable workspace zoom levels (90%, 100%, 110%, 125%, 150%) to
improve readability and accessibility. Changes apply instantly and
persist per user, addressing issue #1482.
- **New Features**
- Zoom selector in Settings → General.
- Persists zoomLevel in user settings and schema.
- Applies zoom via Electron webFrame for consistent app scaling.
- **Refactors**
- Removed deprecated workspaceTextSize setting.
- Removed root font-size from globals.css.
<sup>Written for commit 54bad25f016a83e9f414025a07e80fdbad859366.
Summary will update automatically on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> Adds adjustable app zoom levels (90–150%) with a Settings selector,
persisted in user settings, and applied via Electron webFrame.
>
> - **UI/Settings**:
> - Add `ZoomSelector` component and surface it in `Settings → General`
(`src/components/ZoomSelector.tsx`, `src/pages/settings.tsx`).
> - **Schema/Persistence**:
> - Introduce `ZoomLevelSchema` and optional `zoomLevel` in
`UserSettingsSchema` (`src/lib/schemas.ts`).
> - **Electron Integration**:
> - Expose `webFrame.setZoomFactor/getZoomFactor` in `window.electron`
(`src/preload.ts`).
> - **App Behavior**:
> - Apply zoom factor on load and when settings change with default
`100%` (`src/app/layout.tsx`).
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
54bad25f016a83e9f414025a07e80fdbad859366. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
---------
Co-authored-by: Devforschool <138079274+Devforschool@users.noreply.github.com>
Co-authored-by: Will Chen <willchen90@gmail.com>
Pull request summary from GitHub Copilot:
> This pull request updates the `README.md` file to use secure HTTPS
links instead of HTTP for the Dyad website. This improves security and
ensures users are directed to the correct, secure version of the site.
>
> - Documentation improvements:
> * Changed all `http://dyad.sh/` links to `https://dyad.sh/` in the
`README.md` file.
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Updated README links from http to https for dyad.sh to ensure secure,
correct navigation.
This avoids insecure redirects and aligns with best practices.
<sup>Written for commit fbfd253f49495e6e9c1f72cca28213eb65303b5b.
Summary will update automatically on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
<!-- This is an auto-generated description by cubic. -->
## Summary by cubic
Fix incorrect "Created" and "Last Updated" timestamps in App Details.
The page now uses selectedApp.createdAt and selectedApp.updatedAt
instead of the current time.
<sup>Written for commit 4b2459b23b4c3e6592c45076276d50070d8df749.
Summary will update automatically on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
Co-authored-by: hlong24082k <hlong24082k@gmail.com>
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Makes search-replace tolerant to typos/whitespace via two-pass fuzzy
matching with Levenshtein and smart-quote normalization, with clearer
errors and tests.
>
> - **Search/Replace Processor
(`src/pro/main/ipc/processors/search_replace_processor.ts`)**
> - Add two-pass fuzzy matching: quick exact-line prefilter +
Levenshtein scoring (`fastest-levenshtein`).
> - Match flow: exact > whitespace-insensitive > fuzzy; detect ambiguity
and improve error messages with similarity %.
> - Introduce thresholds and limits: `FUZZY_MATCH_THRESHOLD=0.9`,
`EARLY_STOP_THRESHOLD=0.95`, `MAX_FUZZY_SEARCH_TIME_MS=10000`.
> - Normalize text before scoring using `normalizeString` (handles
quotes, dashes, ellipsis, NBSP, soft hyphen, BOM).
> - Preserve indentation for replacements; keep existing
unescape/validation logic.
> - **Utils (`src/utils/text_normalization.ts`)**
> - New `normalizeString` helper for Unicode normalization used by fuzzy
matching.
> - **Tests
(`src/pro/main/ipc/processors/search_replace_processor.test.ts`)**
> - Add cases for typos, smart quotes, below-threshold failure,
exact-over-fuzzy preference, whitespace differences, and ambiguity.
> - **Dependencies**
> - Add `fastest-levenshtein` to `package.json`.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
289dab915c37bc4f9ab4bf0209ff3f95a57341fc. 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
Makes applySearchReplace more tolerant by preferring exact and
whitespace-insensitive matches, then falling back to fast two-pass
Levenshtein-based fuzzy matching with Unicode normalization. Improves
failure messages and adds tests to cover common edit scenarios.
- **New Features**
- Exact > whitespace-insensitive > fuzzy matching flow (threshold 0.9).
- Two-pass fuzzy search with exact-line prefilter; early stop at 0.95
and 10s timeout.
- normalizeString handles smart quotes, dashes, ellipsis, NBSPs, soft
hyphen, and BOM.
- Errors now report best fuzzy similarity when below threshold.
- Tests for typos, smart quotes, below-threshold cases,
exact-over-fuzzy, whitespace differences, and ambiguity.
- **Dependencies**
- Add fastest-levenshtein.
<sup>Written for commit 289dab915c37bc4f9ab4bf0209ff3f95a57341fc.
Summary will update automatically on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
See #1692
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Adds multi-select with a "Fix X Issues" bulk action to Security Review
(severity-sorted, with animated header button), clears selections on
refresh, and improves streaming error logs; includes e2e coverage.
>
> - **Security Review UI
(`src/components/preview_panel/SecurityPanel.tsx`)**:
> - **Multi-select & Bulk Fix**:
> - Add per-row checkboxes and a "Select all" checkbox in
`FindingsTable`; sort by severity; ARIA labels.
> - Track `selectedFindings`; clear on new data; header shows animated
"Fix X Issues" button (`Wrench` icon) that creates one chat with a
combined prompt for selected issues.
> - **Fix Single Issue**: Preserve existing per-row "Fix Issue" flow
with loading states.
> - **Tests**:
> - Add e2e test `security review - multi-select and fix issues` and
snapshots for selection table and combined prompt.
> - **IPC (`src/ipc/ipc_client.ts`)**:
> - Enhance error logging (`console.error`) in `streamMessage` paths;
simplify `cancelChatStream` (remove stale cleanup).
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
08b9f92814e2a676d0a8de1badf7dc79cd82a14a. 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
Add multi-select to the Security Review so you can select issues and fix
them in one go. Improves error handling in chat streaming and adds an
e2e test for the new flow.
- New Features
- Checkboxes per finding and a “Select all” checkbox, with
severity-sorted rows.
- Header shows an animated “Fix X Issues” button when items are
selected; creates one chat with a combined prompt; clears selection
after.
- New e2e test: multi-select and bulk fix.
- Bug Fixes
- Clear selections when new review results load.
- Better error logging in IpcClient for streaming failures; simplify
cancelChatStream to avoid false errors.
<sup>Written for commit 08b9f92814e2a676d0a8de1badf7dc79cd82a14a.
Summary will update automatically on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Enhances AI stream error logging to include request ID and detailed
error info in `chat_stream_handlers.ts`.
>
> - **Backend**
> - **Logging**: In `src/ipc/handlers/chat_stream_handlers.ts` `onError`
handler for `streamText` now logs a detailed message including request
ID and `errorMessage`, replacing the previous generic error log.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
3519f494e8e400403973f014cede9ff771d5a9ad. 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
Improve error logging in chat text streaming by replacing the generic
log with a structured entry that includes the request ID (when
available), the parsed error message, and the full error object. This
makes failures easier to trace and correlate with backend requests.
<sup>Written for commit 3519f494e8e400403973f014cede9ff771d5a9ad.
Summary will update automatically on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
<!-- This is an auto-generated description by cubic. -->
## Summary by cubic
Added support for the dyad-web-crawl tag to render a Web Crawl UI in
chat, enabling website replication flows. Messages with <dyad-web-crawl>
now show a styled card with crawl details.
- **New Features**
- Added DyadWebCrawl component with label and updated icon.
- Updated DyadMarkdownParser to parse and render dyad-web-crawl.
<sup>Written for commit 45903364b5d6cbdcfc5c3a37579e9eda05e01db3.
Summary will update automatically on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Show the upgrade button only for AI streaming errors by checking a
shared error prefix; introduce and use a shared constant for consistent
error messages.
>
> - **Chat UI**
> - Update `ChatErrorBox.tsx` to display "Upgrade to Dyad Pro" only when
`error` includes `AI_STREAMING_ERROR_MESSAGE_PREFIX` and user is not Pro
(still hides on `TypeError: terminated`).
> - **IPC/Streaming**
> - In `chat_stream_handlers.ts`, prefix emitted streaming errors with
`AI_STREAMING_ERROR_MESSAGE_PREFIX` instead of hardcoded text for
consistency.
> - **Shared**
> - Add `AI_STREAMING_ERROR_MESSAGE_PREFIX` in `src/shared/texts.ts` and
import where needed.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
83b1aa3555a3c1e710ee644f7bfb64cabc0ff5e6. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
This PR solves the issue #1666
To solve this i removed the upgrade link from the general case since
errors related to pro mode are already handled in the specific if-blocks
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Hide the Dyad Pro upgrade banner on termination errors to reduce
confusion. The generic upgrade link in ChatErrorBox is now suppressed
when the error includes "TypeError: terminated" and only shows when Pro
is disabled otherwise.
<sup>Written for commit 1edf665. Summary will update automatically on
new commits.</sup>
<!-- End of auto-generated description by cubic. -->
Example:
open
"dyad://add-prompt?data=eyJ0aXRsZSI6IlRlc3QgUHJvbXB0IiwiZGVzY3JpcHRpb24iOiJBIHRlc3QgcHJvbXB0IGZyb20gZGVlcCBsaW5rIiwiY29udGVudCI6IlRoaXMgaXMgdGhlIGNvbnRlbnQgb2YgdGhlIHByb21wdC4ifQ%3D%3D"
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> Adds dyad://add-prompt deep link that navigates to Library and opens a
prefilled Create Prompt dialog from base64 JSON.
>
> - **Deep Link Handling**
> - Parse `dyad://add-prompt?data=<base64-json>` in `src/main.ts`;
validate with `AddPromptDataSchema` and send `deep-link-received` with
payload.
> - Extend `DeepLinkContext` to navigate to `/library` on `add-prompt`.
> - **Library/Dialogs**
> - Add controlled open state and `prefillData` support to
`CreateOrEditPromptDialog` and `CreatePromptDialog`
(`src/components/CreatePromptDialog.tsx`).
> - In `src/pages/library.tsx`, listen for `add-prompt` deep link,
prefill form, open dialog, and clear deep-link state.
> - **Schemas**
> - Define `AddPromptDataSchema`, `AddPromptPayload`, and
`AddPromptDeepLinkData` in `src/ipc/deep_link_data.ts` and include in
`DeepLinkData` union.
> - **E2E Tests**
> - Add Playwright test `e2e-tests/add_prompt_deep_link.spec.ts` and
ARIA snapshot to verify deep link opens prefilled dialog and saves
prompt.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
1ddb12306cfca195682c8a1b719f60093b858d54. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
Adds AGENTS.md for Claude Code, Gemini CLI and Codex.
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Adds AGENTS.md with clear guidelines for working in this Electron +
React repo. It standardizes IPC patterns and React/TanStack Query usage
to keep code consistent and secure.
- **New Features**
- Documents IPC architecture: renderer IpcClient, preload allowlist,
host handlers, and throwing errors on failure.
- Defines React integration: useQuery for reads, useMutation for writes,
invalidate related queries, optional global state sync.
- Notes security practices: avoid remote, validate/lock by appId on
mutations.
- Encourages descriptive names that mirror IPC channels and colocated
tests/stories.
<!-- End of auto-generated description by cubic. -->
I implemented file referencing feature mentioned in issue #1591
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Adds support for referencing app files in chat using @file:<path>. The
input now autocompletes files, and the backend validates and surfaces
referenced files in the chat context as read-only.
- **New Features**
- Chat input autocompletes @ mentions for apps, prompts, and files.
- Recognizes @file:<path> and converts it to a structured mention on
submit.
- Backend parses @file mentions, checks file existence, and adds a
“Referenced Files” section to the system message.
- New get-app-files IPC handler and useAppFiles hook to load file paths
for the selected app (appFilesAtom added).
- e2e test for mentioning a file and capturing server dump.
<!-- End of auto-generated description by cubic. -->
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Make preview header buttons more horizontally dense by stacking
label/badge under smaller icons and standardizing icon size.
>
> - **UI (ActionHeader)**:
> - **Button layout**:
> - Replace shared `BUTTON_CLASS_NAME` with inline classes to reduce
padding, gap, and font size; use `flex-col` for stacked icon/label.
> - Wrap label and badge in a single `span` for tighter vertical
grouping.
> - **Icons**:
> - Introduce `iconSize = 15` and apply to `Eye`, `AlertTriangle`,
`Code`, `Wrench`, `Globe` for consistent sizing.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
9cfe3ba52b79c9176289d077ffcbaf57b1613f44. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
# Description
This is a small fix to make the settings aligned with the sidebar. It
closes#1375
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Aligned the Settings page with the sidebar. The page now sets the active
section to "general-settings" on mount, so the content matches the
selected sidebar on first load.
<!-- End of auto-generated description by cubic. -->
# Description
This pull request ignore `venv` directories and closes#1415
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Exclude Python virtual environment directories (.venv, venv) from
codebase scanning to reduce noise and avoid indexing dependencies. This
aligns with existing excludes like node_modules and build outputs.
<!-- End of auto-generated description by cubic. -->
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Broaden injection to extensionless and .html routes, gate by
Content-Type, and conditionally strip caching/compression headers only
when injecting.
>
> - **Proxy HTML injection**:
> - Update `needsInjection(pathname)` to inject for routes without
extensions and `.html` files (e.g., `/`, `/foo`, `/foo/bar`, `*.html`).
> - Only request uncompressed content and remove `if-none-match` when
`needsInjection(target.pathname)` is true.
> - During upstream response, inject only if `Content-Type` includes
`text/html`; otherwise pass through without modification.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
2986ceccea64e7881a2197a2a0b202216f21d27d. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
@princeaden1 can you take a look at why this test is flaking often
later? for now, i think we can just skip it since it's not a super
critical feature (users can always edit the file using the regular code
panel)
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> <sup>[Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) is
generating a summary for commit
12de571a1a5d2f9c6c98e90ae19fd67a3fb2e6b5. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Removes Smart Auto labels/tooltip and related checks from the model
picker, showing standard model names and descriptions only.
>
> - **UI (Model Picker)**: `src/components/ModelPicker.tsx`
> - Remove Smart Auto-specific labeling and tooltip logic for `auto`
models.
> - Drop "Pro only" badge tied to Smart Auto state.
> - Always render `model.displayName` and `model.description` without
Smart Auto overrides.
> - Remove Smart Auto enablement check previously derived from settings.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
211be087933f3f240a78c017b26a37633f1228d6. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Bumps `package.json` version from `0.25.0-beta.1` to `0.26.0-beta.1`.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
6433fcc2777bee825db6e330a0d135e8477d7d8f. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
Fixes#672
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> Add selectable problem rows with Select all/Clear all and Fix N
selected, and update tests to cover selection behavior.
>
> - **UI (Problems panel)**:
> - Add checkbox selection for each problem row (`ProblemItem`) with row
click-to-toggle, `data-testid="problem-row"`, and accessibility
attributes.
> - Introduce selection state in `_Problems` with auto-select-all on
report load; provide Select all / Clear all controls.
> - Change Fix button to operate on selected problems only, showing
dynamic label `Fix N problem(s)` and disabled when none selected.
> - Wire `RecheckButton` to clear selection before rechecking; minor
hover style tweaks; add `Checkbox` component.
> - **E2E Tests**:
> - New test: selecting specific problems and fixing only selected; add
snapshots for prompt content.
> - Update manual edit tests (React/Vite, Next.js) to assert Fix button
enabled/disabled and counts; remove old ARIA snapshots.
> - Minor import addition for `Timeout` and related expectations.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
8324e26f9d2d265e7e0d1f1b7538e2a8db40f674. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
Add ability to manually configure Node.js path for users who have
Node.js
installed but not in their system PATH.
Features:
- Browse and select custom Node.js installation folder
- Visual status indicator showing Node.js version or "Not found"
- Reset to system default PATH option
- Manual configuration option in setup banner
- Real-time Node.js status checking
closes#1050
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Adds manual Node.js path configuration so the app works even when Node
isn’t on PATH, fulfilling #1050. Users can browse to their install,
reset to default, and see real-time status in Settings and during setup.
- New Features
- Settings: NodePathSelector to browse a Node.js folder, show
version/“Not found” status, and reset to system PATH (persists
customNodePath).
- Setup banner: manual config flow with a folder picker if Node is
already installed.
- IPC: select-node-folder, set-node-path, get-node-path; reloads env and
prepends custom path to PATH.
- Real-time Node.js status check with visual indicator (CheckCircle on
valid).
- E2E tests for browse, reset, and valid-status display.
<!-- End of auto-generated description by cubic. -->
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Bumps app to 0.25.0-beta.1 and upgrades better-sqlite3 to 12.4.1 with
updated engine constraints.
>
> - **Versioning**: Set `package.json` and lockfile version to
`0.25.0-beta.1`.
> - **Dependencies**:
> - Upgrade `better-sqlite3` from `^11.9.1` to `^12.4.1` (lockfile
resolves to `12.4.1`).
> - Add/update `better-sqlite3` engine constraints to `node: 20.x ||
22.x || 23.x || 24.x`.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
e45156ac3a3340c68ef61200416860a0175eb4b6. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->