Commit Graph

723 Commits

Author SHA1 Message Date
Will Chen
3fd45ec253 Do not hardcode 32100 port (#1969)
Fixes #1949 

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> <sup>[Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) is
generating a summary for commit
46ac310c762fd4044c35bc59264122234ed19bbf. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Make app ports dynamic instead of hardcoded 32100 to prevent conflicts
and keep local runs, Docker, and env URLs in sync. Ports now derive from
appId using a base of 32100.

- **Bug Fixes**
  - Added getAppPort(appId) = 32100 + (appId % 10_000).
- Used the dynamic port in NEXT_PUBLIC_SERVER_URL, start commands,
Docker -p mapping, and cleanUpPort.
- Updated getCommand to accept appId and generate a per-app default
start command.

<sup>Written for commit 46ac310c762fd4044c35bc59264122234ed19bbf.
Summary will update automatically on new commits.</sup>

<!-- End of auto-generated description by cubic. -->
2025-12-16 11:18:09 -08:00
Will Chen
47992f48dd Leave GitHub comment with playwright results (#1965)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Posts a per-OS Playwright test summary as a PR comment by adding a
JSON reporter and a CI step to generate and publish the results.
> 
> - **CI / Reporting**
> - Add permissions and a GitHub Script step in
`.github/workflows/ci.yml` to generate and post/update a Playwright test
summary comment after merging shard reports.
>   - Upload merged HTML report artifact and link to full run.
> - **Playwright config**
> - Update `merge.config.ts` to add JSON reporter output to
`playwright-report/results.json` alongside HTML.
> - **New Script**
> - Add `scripts/generate-playwright-summary.js` to parse Playwright
JSON, compute per-OS (macOS/Windows) pass/fail/flaky/skipped counts,
list top failures/flaky tests, and write both PR comment and job
summary.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
d5ca6987f65e9a7063533960382516af89e67391. 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
Posts Playwright test results as a PR comment with a per-OS summary,
flaky test counts, and top failures, improving CI visibility across
macOS and Windows. Adds a JSON reporter and a GitHub Script step that
links to the full report.

- **New Features**
  - Adds JSON reporter output to playwright-report/results.json.
- Adds a script to parse results, include flaky tests, post/update the
PR comment, and write the job summary.
- Updates CI workflow permissions and runs the summary script after
report merge.

<sup>Written for commit d5ca6987f65e9a7063533960382516af89e67391.
Summary will update automatically on new commits.</sup>

<!-- End of auto-generated description by cubic. -->
2025-12-15 23:24:08 -08:00
Will Chen
91cf1e97c3 Support shared modules for supabase edge functions (#1964)
Credit: thanks @SlayTheDragons whose PR
https://github.com/dyad-sh/dyad/pull/1665 paved the way for this
implementation.

<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Adds _shared module support for Supabase edge functions with
import-map packaging and automatic redeploys; updates deployment to
include full function directories plus shared files, and adds path
utilities and tests.
> 
> - **Supabase Edge Functions**
> - **Shared Modules Support**: Detect `_shared` changes and redeploy
all functions; regular function changes deploy only that function.
> - **Deployment Overhaul**: `deploySupabaseFunctions` now uploads full
function directories plus `_shared` files via multipart form-data, sets
`entrypoint_path`, and writes `import_map.json` (`_shared/` →
`../_shared/`).
> - **Function Discovery & Packaging**: Add file collection helpers
(`listFilesWithStats`, `loadZipEntries`) and path utilities
(`toPosixPath`, `findFunctionDirectory`, `stripSupabaseFunctionsPrefix`)
with signature-based caching for `_shared`.
> - **APIs & Utils**: Introduce `isSharedServerModule`, refine
`isServerFunction` (excludes `_shared`), add
`extractFunctionNameFromPath`, and `buildSignature`.
> - **IPC Changes**
> - Update file edit/rename/delete flows to track shared module edits
and trigger full redeploys; otherwise deploy per-function using
extracted name and `appPath`.
> - **Prompts**
>   - Document `_shared` usage and import pattern in Supabase prompt.
> - **Tests**
> - Add tests for function/shared detection, name extraction, path
handling, and signature building.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
f35599ec0e708e2ef6b7e78ae7901b29953a6dff. 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 support for shared modules for Supabase edge functions. Shared code
in supabase/functions/_shared is now bundled via an import map and
triggers redeploys across all functions when changed.

- **New Features**
- Detects shared modules in supabase/functions/_shared and redeploys all
functions when they change.
- Deploys full function directories plus shared files, and writes an
import_map.json that resolves "_shared/" imports.
- Auto-deploys only the affected function on file changes; switches to
redeploy-all when a shared module is touched.

- **Refactors**
- deploySupabaseFunction now uploads multiple files (function + shared)
using multipart form-data and sets entrypoint/import map.
- Added file collection, path utilities, and shared-file caching via
content signatures to reduce redundant reads.
- Updated deployAllSupabaseFunctions to skip non-function dirs (e.g.,
_shared) and use functionPath.
- Added tests for function/shared detection, path handling, and
signature building.

<sup>Written for commit 302d84625d9e61477db9ada052a027b29ff18cef.
Summary will update automatically on new commits.</sup>

<!-- End of auto-generated description by cubic. -->
2025-12-15 18:07:57 -08:00
Will Chen
a6d6a4cdaf Rename Agent mode to Build with MCP in UI (#1966)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Rename the “Agent” chat mode to “Build with MCP” and update its label
and description in `src/components/ChatModeSelector.tsx`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
a5ad57fa2492941186c0cdba9ea9d6340817ea6b. 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
Renamed the “Agent” chat mode to “Build with MCP” and added shared
module support for Supabase Edge Functions, including automatic
redeploys when shared code changes.

- **New Features**
- Updated UI: “Agent” → “Build (MCP)” in mode name and “Build with MCP
(experimental)” in selector.
- Detect changes in supabase/functions/_shared and redeploy all
functions accordingly.
- Deploy functions with their full directory plus shared files; add an
import_map to resolve “_shared/” imports.
  - Cache shared files by signature to avoid redundant reads.
  - Added tests for path helpers and signature building.

- **Refactors**
- deploySupabaseFunctions now accepts appPath and functionPath, and
uploads multiple files instead of a single content string.
- Updated app and response handlers to use the new deploy flow, skip
per-function redeploys when shared modules change, and avoid treating
_shared as a function.
- Added isSharedServerModule and refined isServerFunction to exclude
_shared.

<sup>Written for commit a5ad57fa2492941186c0cdba9ea9d6340817ea6b.
Summary will update automatically on new commits.</sup>

<!-- End of auto-generated description by cubic. -->
2025-12-15 18:00:50 -08:00
Will Chen
213def4a67 Use user info proxy (#1963)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Switches budget fetch to `https://api.dyad.sh/v1/user/info` and
validates/consumes `usedCredits`, `totalCredits`, and `budgetResetDate`
directly via Zod.
> 
> - **IPC/Pro handlers (`src/ipc/handlers/pro_handlers.ts`)**:
> - **Endpoint**: Update user info URL to
`https://api.dyad.sh/v1/user/info`.
> - **Validation**: Add `zod` schema `UserInfoResponseSchema` to
validate API response.
> - **Data mapping**: Use `usedCredits`, `totalCredits`,
`budgetResetDate`, and `userId` from response directly; remove
conversion logic and old nested `user_info` parsing.
> - **Redaction**: Compute `redactedUserId` from `userId` and return
parsed `UserBudgetInfo`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
da1f192c2cabb2154bd10b69555c27d62fbb6368. 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
Switched user budget fetch to the new user info proxy and added schema
validation. Uses API-provided credits directly and removes the old
conversion logic.

- **Refactors**
  - Use https://api.dyad.sh/v1/user/info instead of llm-gateway.
- Validate response with a Zod schema (usedCredits, totalCredits,
budgetResetDate, userId).
  - Map fields directly to UserBudgetInfo and remove CONVERSION_RATIO.
  - Keep redacted user ID format (****1234).

- **Dependencies**
- Removed unused html-dom-parser, html-react-parser, and react-property
from the lockfile.

<sup>Written for commit da1f192c2cabb2154bd10b69555c27d62fbb6368.
Summary will update automatically on new commits.</sup>

<!-- End of auto-generated description by cubic. -->
2025-12-15 14:25:55 -08:00
Mohamed Aziz Mejri
9d33f3757d logging and presenting cpu/memory usage when app is force-closed (#1894)
closes #1803 











<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Detects when the app was force-closed and shows a dialog with the last
known CPU and memory usage. Adds background performance monitoring so we
can surface metrics on next launch.

- **New Features**
- Start a performance monitor at app launch; captures process and system
memory/CPU every 30s and on quit.
- Persist metrics in settings.lastKnownPerformance and track
settings.isRunning to detect improper shutdowns.
- On startup, if the previous run was force-closed, send a
"force-close-detected" IPC event after the window loads.
  - Add ForceCloseDialog to display timestamped process/system metrics.
- Whitelist the new IPC channel in preload and listen for it on the home
page.

<sup>Written for commit 0543cdc234da7f94024e8506749aaa9ca36ef916.
Summary will update automatically on new commits.</sup>

<!-- End of auto-generated description by cubic. -->
2025-12-14 21:07:56 +01:00
Mohamed Aziz Mejri
a4ab1a7f84 Annotator (#1861)
<!-- This is an auto-generated description by cubic. -->
## Summary by cubic
Adds an in-app screenshot annotator to the Preview panel for Pro users
so you can capture the current app view, draw or add text, and submit an
annotated image to chat.

- **New Features**
- Pen button in PreviewIframe to toggle annotator; captures a screenshot
via worker messaging and displays it in a Konva canvas.
- Tools: select, freehand draw, and draggable text; supports undo/redo,
delete, and resizing with Transformer. Canvas scales to the container.
Includes a color picker.
- Submit exports a PNG and attaches it to the chat via useAttachments;
prefills the chat input; annotator auto-closes after submit.
  - Pro-only: non-Pro users see an upsell screen.
- State atoms added: annotatorModeAtom, screenshotDataUrlAtom,
attachmentsAtom; PreviewIframe now handles dyad-screenshot-response
messages.

- **Dependencies**
  - Added konva, react-konva, perfect-freehand, and html-to-image.
- Proxy now injects html-to-image and the new dyad-screenshot-client.js
for screenshot capture.

<sup>Written for commit 580aca271c5993a0dc7426e36e34393e073bd67b.
Summary will update automatically on new commits.</sup>

<!-- End of auto-generated description by cubic. -->
2025-12-13 19:40:31 +01:00
Will Chen
86e4005795 Parameterize undo e2e test (#1943)
<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Parameterizes the undo e2e test and adds a second run using native Git
via a shared helper.
> 
> - **Tests (e2e)**:
> - Refactor `e2e-tests/undo.spec.ts` to use `runUndoTest(po,
nativeGit)` helper.
> - Pass `nativeGit` through `po.setUp({ autoApprove: true, nativeGit
})`.
>     - Import `PageObject` from `helpers/test_helper`.
> - Add second test "undo with native git" alongside existing "undo"
test.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
2108a7d73669794f0052192e8b5a1ffac3d54ec1. 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
Parameterized the undo e2e test to run with and without native Git,
improving coverage without duplicating code.

- **Refactors**
- Added runUndoTest(po, nativeGit) helper and passed nativeGit to setUp.
  - Split into two test cases: “undo” and “undo with native git”.
- Minor whitespace-only formatting updates in snapshot and fixture
files.

<sup>Written for commit 2108a7d73669794f0052192e8b5a1ffac3d54ec1.
Summary will update automatically on new commits.</sup>

<!-- End of auto-generated description by cubic. -->
2025-12-12 13:13:39 -08:00
Will Chen
70d4f5980e Load Monaco from CDN (#1939)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Load Monaco via @monaco-editor/react loader, drop custom workers, and
initialize themes/TypeScript after loader init.
> 
> - **Editor/Monaco**:
> - Switch to `@monaco-editor/react` `loader.init()` with type-only
`editor` import.
> - Remove worker imports and `MonacoEnvironment.getWorker`
configuration.
> - Move theme registration (`dyad-light`, `dyad-dark`) and TypeScript
compiler/diagnostics setup into the loader init callback.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
c4b7c025725273068463feac3fbdb7b61125fc10. 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
Load Monaco from a CDN via @monaco-editor/react and initialize
themes/TypeScript settings after loader init. This reduces bundle size
and removes custom worker setup.

- **Refactors**
  - Removed web worker imports and MonacoEnvironment configuration.
- Switched from direct monaco import to type-only import; initialization
now uses loader.init().
- Moved theme registration (dyad-light/dark) and TS compiler/diagnostics
setup into the loader init callback.

<sup>Written for commit c4b7c025725273068463feac3fbdb7b61125fc10.
Summary will update automatically on new commits.</sup>

<!-- End of auto-generated description by cubic. -->
2025-12-11 23:09:04 -08:00
Will Chen
1ce399584e Use specific languages for shiki (#1938)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Refactors code highlighting to use react-shiki/core with a singleton
highlighter and preloaded langs/themes, adds a fallback renderer, bumps
react-shiki, and adds tests for message summarization.
> 
> - **Frontend**
> - **CodeHighlight** (`src/components/chat/CodeHighlight.tsx`): Replace
`useShikiHighlighter` with `ShikiHighlighter` from `react-shiki/core`
using a singleton `createHighlighterCore` and JS regex engine; preload
common languages and GitHub light/dark themes; add `<pre><code>`
fallback while loading.
> - **Tests**
> - Add/expand Vitest suite for `formatMessagesForSummary`
(`src/__tests__/formatMessagesForSummary.test.ts`): covers truncation,
ordering, special chars, undefined content, and edge cases.
> - **Dependencies**
>   - Upgrade `react-shiki` to `^0.9.0` in `package.json`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
b32d224cd21d3c76e77799f2995905e523406bf9. 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
Preloaded a specific set of Shiki languages and themes using react-shiki
core, and updated CodeHighlight to use a singleton highlighter. This
reduces bundle size and stabilizes code rendering with a simple fallback
while loading.

- **Refactors**
- Switched to react-shiki/core with ShikiHighlighter and a singleton
highlighter.
- Preloaded common languages
(js/ts/jsx/tsx/html/css/json/markdown/python/etc.) and GitHub light/dark
themes.
- Used the JavaScript regex engine and added a plain <pre><code>
fallback until the highlighter is ready.

- **Dependencies**
  - Upgraded react-shiki to ^0.9.0.

<sup>Written for commit b32d224cd21d3c76e77799f2995905e523406bf9.
Summary will update automatically on new commits.</sup>

<!-- End of auto-generated description by cubic. -->
2025-12-11 23:06:04 -08:00
Will Chen
8d88460fe1 disable sourcemap (#1936)
The sourcemap is almost 20mb (and we still don't get proper stacktraces
for errors in the main/node.js thread)

<!-- CURSOR_SUMMARY -->
> [!NOTE]
> <sup>[Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) is
generating a summary for commit
267749b95f6416b3f88c8caa9a72e21438fc1ee8. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-12-11 16:54:45 -08:00
Will Chen
f2960a94b9 Bump to beta v0.30 (#1934)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> <sup>[Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) is
generating a summary for commit
ade02043a363fbe88d4405f97362e0f8995ef5ca. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-12-11 14:20:36 -08:00
Will Chen
976e065fe5 Include last 4-chars of Dyad Pro user id for bug reports (#1933)
This allows us to identify which Dyad Pro user filed an issue on GitHub
by using a partial internal identifier

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Adds a redacted Dyad Pro user ID (last 4 chars) to bug report/session
templates, sourced from the Pro user info endpoint and exposed via user
budget info.
> 
> - **Frontend (HelpDialog)**:
> - Display `Pro User ID` in prefilled bug report and session report
bodies using `userBudget.redactedUserId`.
>   - Consume `useUserBudgetInfo` to access `userBudget`.
> - **IPC/Backend**:
> - `get-user-budget`: derive `redactedUserId` from `user_info.user_id`
(mask all but last 4 chars); include in test mock and response.
> - **Types**:
>   - Extend `UserBudgetInfoSchema` with `redactedUserId: string`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
1883a1ef94fec25b370df3d46054fb56d659dee8. 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 redacted Dyad Pro user ID (last 4 chars) to bug report templates
to help correlate GitHub issues with Pro accounts while protecting
privacy.

- **New Features**
- Derives redactedUserId from user_info.user_id in the Pro IPC handler
and adds it to UserBudgetInfo.
  - Shows “Pro User ID” in HelpDialog’s debug info and session details.
  - Extends UserBudgetInfo schema with a redactedUserId field.

<sup>Written for commit 1883a1ef94fec25b370df3d46054fb56d659dee8.
Summary will update automatically on new commits.</sup>

<!-- End of auto-generated description by cubic. -->
2025-12-11 14:19:57 -08:00
Will Chen
5b789cb971 Add GPT 5.2 and remove older OpenAI models (#1932) 2025-12-11 13:29:43 -08:00
Adeniji Adekunle James
d3f3ac3ae1 Replace native Git with Dugite to support users without Git installed (#1760)
I moved all isomorphic-git usage into a single git_utils.ts file and
added Dugite as an alternative Git provider. The app now checks the
user’s settings and uses dugite when user enabled native git for all
isomorphic-git commands. This makes it easy to fully remove
isomorphic-git in the future by updating only git_utils.ts.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Adds Dugite-based native Git (bundled binary) and refactors all Git
calls to a unified git_utils API, replacing direct isomorphic-git usage
across the app.
> 
> - **Git Platform Abstraction**:
> - Introduces `dugite` and bundles Git via Electron Forge
(`extraResource`) with `LOCAL_GIT_DIRECTORY` setup in `src/main.ts`.
> - Adds `src/ipc/git_types.ts` and a comprehensive
`src/ipc/utils/git_utils.ts` wrapper supporting both Dugite (native) and
`isomorphic-git` (fallback): `commit`, `add`/`addAll`, `remove`, `init`,
`clone`, `push`, `setRemoteUrl`, `currentBranch`, `listBranches`,
`renameBranch`, `log`, `isIgnored`, `getCurrentCommitHash`,
`getGitUncommittedFiles`, `getFileAtCommit`, `checkout`,
`stageToRevert`.
> - **Refactors (switch to git_utils)**:
> - Replaces direct `isomorphic-git` imports in handlers and processors:
`app_handlers`, `chat_handlers`, `createFromTemplate`,
`github_handlers`, `import_handlers`, `portal_handlers`,
`version_handlers`, `response_processor`, `neon_timestamp_utils`,
`utils/codebase`.
> - Updates tests to mock `git_utils`
(`src/__tests__/chat_stream_handlers.test.ts`).
> - **Behavioral/Feature Updates**:
> - `createFromTemplate` uses `fetch` for GitHub API and `gitClone` for
cloning with cache validation.
> - GitHub integration uses `gitSetRemoteUrl`/`gitPush`/`gitClone`,
handling public vs token URLs and directory creation when native Git is
disabled.
> - Versioning, imports, app file edits, migrations now stage/commit via
`git_utils`.
> - **UI/Copy**:
>   - Updates Settings description for “Enable Native Git”.
> - **Config/Version**:
>   - Bumps version to `0.29.0-beta.1`; adds `dugite` dependency.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
ba098f7f25d85fc6330a41dc718fbfd43fff2d6c. 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>
2025-12-09 19:01:25 -08:00
Adeniji Adekunle James
a7bcec220a Fix: Custom Model Not Updating (#1817) (#1840)
Closes (#1817)



<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Fixes the bug where editing a custom model didn’t update the currently
selected model. The selection now stays in sync after renaming or
editing.

- **Bug Fixes**
- Use useSettings to detect if the edited model is the active one (match
provider and apiName).
- Update settings.selectedModel with the new apiName; on failure show an
error and keep the dialog open; otherwise show success, call onSuccess,
then close.

<sup>Written for commit 88045165a3989277e703a8f31712fcf1dfeaa32a.
Summary will update automatically on new commits.</sup>

<!-- End of auto-generated description by cubic. -->
2025-12-09 17:07:03 -08:00
Will Chen
20866d5d8c Update macos-intel to use macos-15 (#1912)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Updates the release workflow matrix to use the `macos-15-intel` runner
for `macos-intel` builds.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
37416cf576675ea399dd84cf1e50a2511b768de8. 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
Switch the macos-intel release job to the macos-15-intel GitHub Actions
runner. This updates CI to the macOS 15 Intel image and keeps our matrix
consistent with current supported runners.

<sup>Written for commit 37416cf576675ea399dd84cf1e50a2511b768de8.
Summary will update automatically on new commits.</sup>

<!-- End of auto-generated description by cubic. -->
2025-12-09 13:22:55 -08:00
Mohamed Aziz Mejri
352d4330ed Visual editor (Pro only) (#1828)
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Prototype visual editing mode for the preview app. Toggle the mode, pick
elements (single or multiple), and edit margin, padding, border,
background, static text, and text styles with live updates, then save
changes back to code.

- **New Features**
- Pen tool button to enable/disable visual editing in the preview and
toggle single/multi select; pro-only.
- Inline toolbar anchored to the selected element for Margin (X/Y),
Padding (X/Y), Border (width/radius/color), Background color, Edit Text
(when static), and Text Style (font size/weight/color/font family).
- Reads computed styles from the iframe and applies changes in real
time; auto-appends px; overlay updates on scroll/resize.
- Save/Discard dialog batches edits and writes Tailwind classes to
source files via IPC; uses AST/recast to update className and text,
replacing conflicting classes by prefix; supports multiple components.
- New visual editor worker to get/apply styles and enable inline text
editing via postMessage; selector client updated for coordinates
streaming and highlight/deselect.
- Proxy injects the visual editor client; new atoms track selected
component, coordinates, and pending changes; component analysis flags
dynamic styling and static text.
  - Uses runtimeId to correctly target and edit duplicate components.

- **Dependencies**
  - Added @babel/parser for AST-based text updates.
  - Added recast for safer code transformations.

<sup>Written for commit cdd50d33387a29103864f4743ae7570d64d61e93.
Summary will update automatically on new commits.</sup>

<!-- End of auto-generated description by cubic. -->
2025-12-09 13:09:19 -08:00
Mohamed Aziz Mejri
c174778d5f Adding a button for copying error messages (#1882)
close #1870 





<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Adds a “Copy” button to error banners and chat error output so users can
quickly copy error messages with clear feedback. Addresses Linear #1870.

- **New Features**
- Introduced CopyErrorMessage component that writes to clipboard and
shows “Copied” for 2s.
- Added the copy button to the Preview error banner and DyadOutput;
actions grouped at the bottom beside “Fix with AI”.
- Added Playwright e2e test and helpers to verify copy behavior and
clipboard content.

<sup>Written for commit 12e9bf1437ded36dc022e1d795025580d2ffd111.
Summary will update automatically on new commits.</sup>

<!-- End of auto-generated description by cubic. -->
2025-12-09 03:54:59 +01:00
Will Chen
4b17870049 Warn (not error) on identical search-replace blocks and include searc… (#1899)
…h-replace failure in error message

Addresses part of #1898 

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Treat identical SEARCH/REPLACE as a no-op warning and propagate
detailed applySearchReplace errors (incl. fuzzy match stats) to the UI;
add scoped logging and update tests/snapshots.
> 
> - **Processors**:
> - `src/pro/main/ipc/processors/search_replace_processor.ts`: Log a
warning (not error) when SEARCH and REPLACE blocks are identical; add
scoped logger; keep content unchanged.
> - `src/ipc/processors/response_processor.ts`: Include detailed failure
reason from `applySearchReplace` in dry-run issues.
> - **Tests & Snapshots**:
> - `search_replace_processor.spec.ts`: Update test to expect success
when blocks are identical.
> - `e2e-tests/...turbo-edits-v2...snapshot`: Reflect detailed error
message with fuzzy match similarity/threshold.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
a394d297d5561ada3bdd197dbb4e6aca6928ad99. 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
Warn instead of error when search and replace blocks are identical, and
include the specific failure reason in search-replace error messages for
clearer feedback.

- **Bug Fixes**
- Treat identical search/replace blocks as a no-op: log a warning and
return success.
- Bubble up detailed failure reasons to the UI (e.g., no match and fuzzy
similarity/threshold).
- Add scoped logging to the processor and update the e2e snapshot to
reflect new error messaging.

<sup>Written for commit a394d297d5561ada3bdd197dbb4e6aca6928ad99.
Summary will update automatically on new commits.</sup>

<!-- End of auto-generated description by cubic. -->
2025-12-08 11:21:07 -08:00
Will Chen
1b678041ab Fix supabase list getting into drag list area (#1749)
Fixes #1717 

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Disable `.app-region-drag` while `body[data-scroll-locked]` is present
to prevent drag interference with open Select.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
8d5e4774dfa924e073d79dc999a5f065425e985b. 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
Fixes window dragging interfering with the Supabase project dropdown.
Disables dragging on .app-region-drag while the Radix Select is open by
targeting body[data-scroll-locked], so users can scroll and select
normally.

<sup>Written for commit 8d5e4774dfa924e073d79dc999a5f065425e985b.
Summary will update automatically on new commits.</sup>

<!-- End of auto-generated description by cubic. -->
2025-12-08 11:13:52 -08:00
Will Chen
6d66e13ea2 Pin capacitor to v7.4.4 (#1906)
besides making our capacitor e2e test more deterministic, it also
prevents silent upgrades given the various npm ecosystem compromises in
the past.
2025-12-08 11:12:38 -08:00
Will Chen
560cd1791d Add e2e test for balanced smart context mode (#1901)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Adds an e2e test for the balanced Smart Context mode with
corresponding ARIA and request payload snapshots.
> 
> - **Tests**:
> - Add `e2e-tests/smart_context_balanced.spec.ts` to exercise Pro Modes
dialog, set Smart Context to `balanced`, send `[dump]`, and snapshot
server dump and messages.
>   - Add snapshots:
> -
`e2e-tests/snapshots/smart_context_balanced.spec.ts_smart-context-balanced---simple-1.aria.yml`
> -
`e2e-tests/snapshots/smart_context_balanced.spec.ts_smart-context-balanced---simple-1.txt`
(captures request body/options).
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
66bf07057ded2a6afb328b7de01c821ab6a0fca8. 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 an end-to-end test for the “balanced” Smart Context mode to verify
the Pro Modes dialog switches to balanced and the mode is applied. The
test sends a [dump] prompt, snapshots the server request and messages
(ARIA + text), and is skipped on Windows.

<sup>Written for commit 66bf07057ded2a6afb328b7de01c821ab6a0fca8.
Summary will update automatically on new commits.</sup>

<!-- End of auto-generated description by cubic. -->
2025-12-08 10:01:27 -08:00
Will Chen
5325549fa7 Bump to v0.29 beta (#1895)
Some checks failed
CI / test (map[image:macos-latest name:macos], 1, 4) (push) Has been cancelled
CI / test (map[image:macos-latest name:macos], 2, 4) (push) Has been cancelled
CI / test (map[image:macos-latest name:macos], 3, 4) (push) Has been cancelled
CI / test (map[image:macos-latest name:macos], 4, 4) (push) Has been cancelled
CI / test (map[image:windows-latest name:windows], 1, 4) (push) Has been cancelled
CI / test (map[image:windows-latest name:windows], 2, 4) (push) Has been cancelled
CI / test (map[image:windows-latest name:windows], 3, 4) (push) Has been cancelled
CI / test (map[image:windows-latest name:windows], 4, 4) (push) Has been cancelled
CI / merge-reports (push) Has been cancelled
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Bumps version from 0.28.0 to 0.29.0-beta.1 in `package.json`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
085f7afe2cd391775f91b9973b7b9f557f026c26. 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
Bumped version to v0.29.0-beta.1 to start the v0.29 beta. Updates
package.json so builds and release channels tag the app as a beta for
testing.

<sup>Written for commit 085f7afe2cd391775f91b9973b7b9f557f026c26.
Summary will update automatically on new commits.</sup>

<!-- End of auto-generated description by cubic. -->
2025-12-05 00:11:16 -08:00
Will Chen
e0f123b8e2 Bump react (internal) (#1893)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Upgrade React and React DOM to 19.2.1 and align related lockfile
entries (including scheduler).
> 
> - **Dependencies**:
> - Upgrade `react` to `^19.2.1` and `react-dom` to `^19.2.1` in
`package.json`.
> - Update lockfile resolutions for `react`, `react-dom`, and
`scheduler` (`0.27.0`), including peer/dependency ranges.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
7085cd54e499a04e89f6325f4e274e19cdde4961. 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
Upgraded React and React DOM to 19.2.1 to adopt the latest fixes. No app
code changes.

- **Dependencies**
  - Bumped react and react-dom to ^19.2.1.
  - Updated scheduler to 0.27.0 via react-dom.

<sup>Written for commit 7085cd54e499a04e89f6325f4e274e19cdde4961.
Summary will update automatically on new commits.</sup>

<!-- End of auto-generated description by cubic. -->
2025-12-04 23:02:25 -08:00
Will Chen
91e8d0c0cd Add Opus 4.5 and clean-up naming & remove legacy models for anthropic (#1892)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> <sup>[Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) is
generating a summary for commit
fb0aff0bf5e21e1b57bc8744ed9643b863b888d4. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Adds support for Anthropic Claude Opus 4.5 and standardizes Sonnet
naming. Removes legacy 3.x Anthropic models and updates tests to use the
new names.

- **New Features**
  - Added "Claude Opus 4.5" with 32k max output and 200k context.

- **Migration**
- Names standardized to "Claude Sonnet 4" and "Claude Sonnet 4.5".
Update any model selections and tests.
- Removed Anthropic 3.x models: Claude 3.7 Sonnet, Claude 3.5 Sonnet,
Claude 3.5 Haiku, and their Bedrock variants.

<sup>Written for commit fb0aff0bf5e21e1b57bc8744ed9643b863b888d4.
Summary will update automatically on new commits.</sup>

<!-- End of auto-generated description by cubic. -->
2025-12-04 23:01:49 -08:00
Will Chen
6235f7bb9d Summarize chat trigger (#1890)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Adds a context-limit banner with one-click “summarize into new chat,”
refactors token counting with react-query, and persists per-message max
token usage.
> 
> - **Chat UX**
> - **Context limit banner** (`ContextLimitBanner.tsx`,
`MessagesList.tsx`): shows when within 40k tokens of `contextWindow`,
with tooltip and action to summarize into a new chat.
> - **Summarize flow**: extracted to `useSummarizeInNewChat` and used in
chat input and banner; new summarize system prompt
(`summarize_chat_system_prompt.ts`).
> - **Token usage & counting**
> - **Persist max tokens used per assistant message**: DB migration
(`messages.max_tokens_used`), schema updates, and saving usage during
streaming (`chat_stream_handlers.ts`).
> - **Token counting refactor** (`useCountTokens.ts`): react-query with
debounce; returns `estimatedTotalTokens` and `actualMaxTokens`;
invalidated on model change and stream end; `TokenBar` updated.
> - **Surfacing usage**: tooltip on latest assistant message shows total
tokens (`ChatMessage.tsx`).
> - **Model/config tweaks**
> - Set `auto` model `contextWindow` to `200_000`
(`language_model_constants.ts`).
>   - Improve chat auto-scroll dependency (`ChatPanel.tsx`).
>   - Fix app path validation regex (`app_handlers.ts`).
> - **Testing & dev server**
> - E2E tests for banner and summarize
(`e2e-tests/context_limit_banner.spec.ts` + fixtures/snapshot).
> - Fake LLM server streams usage to simulate high token scenarios
(`testing/fake-llm-server/*`).
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
2ae16a14d50699cc772407426419192c2fdf2ec3. 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 “Summarize into new chat” trigger and a context limit banner to
help keep conversations focused and avoid hitting model limits. Also
tracks and surfaces actual token usage per assistant message, with a
token counting refactor for reliability.

- **New Features**
- Summarize into new chat from the input or banner; improved system
prompt with clear output format.
- Context limit banner shows when within 40k tokens of the model’s
context window and offers a one-click summarize action.
  - Tooltip on the latest assistant message shows total tokens used.

- **Refactors**
- Token counting now uses react-query and returns estimatedTotalTokens
and actualMaxTokens; counts are invalidated on model change and when
streaming settles.
- Persist per-message max_tokens_used in the messages table; backend
aggregates model usage during streaming and saves it.
- Adjusted default “Auto” model contextWindow to 200k for more realistic
limits.
- Improved chat scrolling while streaming; fixed app path validation
regex.

<sup>Written for commit 2ae16a14d50699cc772407426419192c2fdf2ec3.
Summary will update automatically on new commits.</sup>

<!-- End of auto-generated description by cubic. -->
2025-12-04 23:00:28 -08:00
Mohamed Aziz Mejri
90c5805b57 adding a button for fixing all errors (#1785)
closes #1688 



<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Add a “Fix All Errors” button to the chat that collects all error
messages and sends a single request to resolve them. This helps users
fix multiple errors in one step.

- New Features
- Parse dyad-output type=error messages and track count/last index in
DyadMarkdownParser.
- Show FixAllErrorsButton after the last error when there are 2+ errors,
not streaming, and chatId is present.
- Button streams a prompt listing all errors, shows a loading state, and
displays the error count.

<sup>Written for commit b9762955d3b9cecd3b00c9efb478ce599f60e32d.
Summary will update automatically on new commits.</sup>

<!-- End of auto-generated description by cubic. -->
2025-12-04 22:20:35 -08:00
Will Chen
40aeed1456 default to deep context (#1891)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Default Smart Files context to deep and align UI and stream handler
logic so any non-balanced option uses deep when Pro mode is enabled.
> 
> - **Smart Context behavior**
> - UI (`src/components/ProModeSelector.tsx`): default
`getCurrentValue()` to `"deep"` when Pro Smart Files mode is enabled
without an explicit option.
> - Engine (`src/ipc/handlers/chat_stream_handlers.ts`):
`isDeepContextEnabled` now requires `enableProSmartFilesContextMode` and
treats any option other than `"balanced"` as deep; `smartContextMode`
set accordingly and `versioned_files` used when deep.
> - **Snapshots**
> - Update e2e snapshots to reflect `smart_context_mode: "deep"` and new
`dyad_options.versioned_files` structure.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
7426890467d60b671a7a9712f7544a35ed922981. 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
Default smart files context to deep and align the UI and stream handler
so anything not “balanced” uses deep when Pro Smart Files mode is on.
This prevents mismatches and makes deep context the default.

- **Bug Fixes**
  - ProModeSelector: default to deep when no option is set.
- chat_stream_handlers: isDeepContextEnabled requires Pro Smart Files
mode and treats non-“balanced” as deep; smartContextMode set to deep
accordingly.
  - Engine payload: use versioned_files; update e2e snapshots.

<sup>Written for commit 7426890467d60b671a7a9712f7544a35ed922981.
Summary will update automatically on new commits.</sup>

<!-- End of auto-generated description by cubic. -->
2025-12-04 22:13:49 -08:00
Will Chen
538745d546 Detect external changes with deep context (#1888)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Adds commit-aware deep context by computing hasExternalChanges (via
latest assistant commit vs current repo + dirty check) and propagating
commitHash through messages/provider options.
> 
> - **Deep Smart Context**:
> - Add `hasExternalChanges` to `VersionedFiles`; compute by comparing
latest assistant `commitHash` with `getCurrentCommitHash` and checking
`isGitStatusClean`.
> - Make `sourceCommitHash` nullable; add `commitHash` in
`DyadEngineProviderOptions` and use it when scanning history.
> - **Chat Handling**:
> - Include `commitHash` in `messageHistory` and pass through
`providerOptions['dyad-engine']`.
> - **Git Utilities**:
> - New `isGitStatusClean(path)` supporting native git and
isomorphic-git.
> - **Tests/Snapshots**:
> - Mock `getCurrentCommitHash` and `isGitStatusClean`; update snapshot
to include `hasExternalChanges`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
ad92d9dd5ead941de822e8da59c8819e4db8b775. 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
Detects external code changes in deep context by comparing the latest
assistant commit with the current repo state. Exposes a
hasExternalChanges flag so the engine can adapt responses when the
workspace diverges.

- **New Features**
  - Added hasExternalChanges to VersionedFiles.
- Computes by comparing the latest assistant commitHash with
getCurrentCommitHash and checking isGitStatusClean.
- Passes commitHash through chat messages and dyad-engine
providerOptions; sourceCommitHash is now nullable.
  - Defaults to true if detection fails (with a warning).

<sup>Written for commit 6ebb0b125c9a3421b4e5673870b204c9cb279265.
Summary will update automatically on new commits.</sup>

<!-- End of auto-generated description by cubic. -->
2025-12-04 15:40:58 -08:00
Will Chen
3701886505 Fallback to balanced smart context for mentioned apps because not sup… (#1886)
…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. -->
2025-12-04 15:19:37 -08:00
Mohamed Aziz Mejri
196f02c979 feat: add tooltip on project hover to display full project name (#1887)
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. -->
2025-12-03 17:23:09 -08:00
Will Chen
c01677fcbd Fix Dyad Pro error messaging (#1884)
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 -->
2025-12-03 14:34:42 -08:00
Will Chen
f806414ec6 Fix Vercel API breaking change (#1883)
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 -->
2025-12-03 14:32:01 -08:00
Mohamed Aziz Mejri
2ca14345b6 Preventing invalid characters in app names (#1839)
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. -->
2025-12-01 23:14:41 -08:00
Adeniji Adekunle James
dd14e67d48 Animated placeholder with Prompt suggestion for home chat input (#1706)
<!-- 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. -->
2025-12-01 22:16:02 -08:00
Mohamed Aziz Mejri
fadfbc06be clearing chat input when switching apps (#1791)
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. -->
2025-11-21 07:06:59 -08:00
Adeniji Adekunle James
76875fefec fix: responsiveness for import app dialog (#1746) (#1786)
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. -->
2025-11-21 07:02:35 -08:00
Mohamed Aziz Mejri
39876f114a disabling enter keyboard when approve/reject pending (#1776)
<!-- 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. -->
2025-11-21 06:59:02 -08:00
Daniel Klein
ed2bf680ba fix: hide setup banner if any custom providers are configured (#1756)
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. -->
2025-11-18 20:19:36 -08:00
Mohamed Aziz Mejri
8dee2552bb feat : allow taking a screenshot for bug reports (#1678)
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. -->
2025-11-18 19:31:02 -08:00
Will Chen
d436596024 v0.28 stable (#1820)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> <sup>[Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) is
generating a summary for commit
60b4181ce70a4859d169ede5ea33069365058839. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-11-18 16:14:49 -08:00
Will Chen
23ef2ed279 Gemini 3 (#1819)
<!-- 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. -->
2025-11-18 16:13:22 -08:00
Adeniji Adekunle James
a29ffeee4c Support GPT-5.1: smarter, faster, and more conversational for complex tasks (#1783)
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>
2025-11-18 16:12:49 -08:00
Will Chen
52db5b973a bump to 0.28.0-beta.1 (#1795)
<!-- 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 -->
2025-11-15 01:43:28 -08:00
Will Chen
8ce87dd61f Re-deploy all supabase edge function when revert version (#1787)
#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. -->
2025-11-15 01:40:52 -08:00
Mohamed Aziz Mejri
2a7f5a8909 feat: multi-component-selector (#1728)
<!-- 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. -->
2025-11-13 13:26:41 -08:00
Will Chen
c4591996ea Release 0.27.x (#1768)
<!-- 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. -->
2025-11-13 13:19:06 -08:00
SlayTheDragons
cbf247a4ef feat (frontend): Text size accessibility settings (As requested in issue #1482) (#1624)
<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>
2025-11-10 15:49:25 -08:00
Peter Dave Hello
1fa1249456 Update links in README.md to use HTTPS for better security (#1730)
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. -->
2025-11-10 10:15:37 -08:00