• Will Chen's avatar
    feat: add app commands configuration in Configure panel (#2433) · 3eb2c5e8
    Will Chen 提交于
    Add the ability to configure install and start commands in the Configure
    panel after an app has been created. Previously these were only
    configurable when first importing an app.
    
    Changes:
    - Add updateAppCommands IPC contract and handler
    - Add AppCommandsSection component in ConfigurePanel
    - Allow users to view, edit, and clear custom commands
    - Include validation requiring both commands when customizing
    - Add E2E tests for the new feature
    
    https://claude.ai/code/session_01RHmPUNG7Bdw9MC1DKQJX8g
    <!-- devin-review-badge-begin -->
    
    ---
    
    <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2433">
      <picture>
    <source media="(prefers-color-scheme: dark)"
    srcset="https://static.devin.ai/assets/gh-open-in-devin-review-dark.svg?v=1">
    <img
    src="https://static.devin.ai/assets/gh-open-in-devin-review-light.svg?v=1"
    alt="Open with Devin">
      </picture>
    </a>
    <!-- devin-review-badge-end -->
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Medium Risk**
    > Moderate risk because it introduces a new IPC write path that persists
    user-provided command strings and affects how apps will run, though
    guarded by client/server validation and locking.
    > 
    > **Overview**
    > Adds an **App Commands** card to `ConfigurePanel` that lets users view
    default vs custom install/start commands, edit them with client-side
    validation (both required), cancel edits, and clear back to defaults.
    > 
    > Introduces a new IPC contract `updateAppCommands` plus a main-process
    handler that trims inputs, enforces *both-or-neither* semantics, updates
    the `apps` record under `withLock`, and triggers UI refresh/toasts.
    > 
    > Adds Playwright E2E coverage for configure/edit/clear flows,
    validation behavior, and canceling edits.
    > 
    > <sup>Written by [Cursor
    Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
    3f0abe3b8f9ed2483ed27d537dd874e4caa66fcf. 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
    Let users configure custom install and start commands from the Configure
    panel after an app is created. Defaults to “pnpm install && pnpm dev”
    when unset, and both fields are required when customizing.
    
    - **New Features**
    - Configure, edit, or clear custom install/start commands in
    ConfigurePanel.
    - Added updateAppCommands IPC contract and handler to persist commands.
    - E2E tests cover happy path, validation (both required), cancel, and
    clear flows.
    
    - **Bug Fixes**
    - Prevent overwriting edits on refetch; fix custom commands check (AND),
    and update default-state message.
    - Enforce server-side validation (both commands set together or both
    cleared) and remove sensitive command content from logs.
    
    <sup>Written for commit 3f0abe3b8f9ed2483ed27d537dd874e4caa66fcf.
    Summary will update on new commits.</sup>
    
    <!-- End of auto-generated description by cubic. -->
    
    ---------
    Co-authored-by: 's avatarClaude <noreply@anthropic.com>
    Co-authored-by: 's avatarclaude[bot] <41898282+claude[bot]@users.noreply.github.com>
    3eb2c5e8
名称
最后提交
最后更新
.claude 正在载入提交数据...
.cursor/rules 正在载入提交数据...
.devcontainer 正在载入提交数据...
.github 正在载入提交数据...
.husky 正在载入提交数据...
.storybook 正在载入提交数据...
assets 正在载入提交数据...
docs 正在载入提交数据...
drizzle 正在载入提交数据...
e2e-tests 正在载入提交数据...
makers 正在载入提交数据...
packages/@dyad-sh 正在载入提交数据...
scaffold 正在载入提交数据...
scripts 正在载入提交数据...
shared 正在载入提交数据...
src 正在载入提交数据...
testing 正在载入提交数据...
tools 正在载入提交数据...
worker 正在载入提交数据...
workers/tsc 正在载入提交数据...
.cursorignore 正在载入提交数据...
.env.example 正在载入提交数据...
.eslintrc.json 正在载入提交数据...
.gitattributes 正在载入提交数据...
.gitignore 正在载入提交数据...
.oxfmtrc.json 正在载入提交数据...
.oxlintrc.json 正在载入提交数据...
.prettierignore 正在载入提交数据...
.prettierrc 正在载入提交数据...
AGENTS.md 正在载入提交数据...
CLA.md 正在载入提交数据...
CLAUDE.md 正在载入提交数据...
CONTRIBUTING.md 正在载入提交数据...
LICENSE 正在载入提交数据...
README.md 正在载入提交数据...
SECURITY.md 正在载入提交数据...
biome.json 正在载入提交数据...
components.json 正在载入提交数据...
drizzle.config.ts 正在载入提交数据...
forge.config.ts 正在载入提交数据...
forge.env.d.ts 正在载入提交数据...
index.html 正在载入提交数据...
lint-staged.config.js 正在载入提交数据...
merge.config.ts 正在载入提交数据...
package-lock.json 正在载入提交数据...
package.json 正在载入提交数据...
playwright.config.ts 正在载入提交数据...
tsconfig.app.json 正在载入提交数据...
tsconfig.json 正在载入提交数据...
tsconfig.node.json 正在载入提交数据...
vite.main.config.mts 正在载入提交数据...
vite.preload.config.mts 正在载入提交数据...
vite.renderer.config.mts 正在载入提交数据...
vite.worker.config.mts 正在载入提交数据...
vitest.config.ts 正在载入提交数据...
windowsSign.ts 正在载入提交数据...