• Adeniji Adekunle James's avatar
    feat: add copy functionality for ai responses with Dyad tag formatting (#1290) (#1315) · 2597d505
    Adeniji Adekunle James 提交于
    ## Summary
    Adds AI response copy functionality to chat messages that preserves
    formatting and converts Dyad-specific tags to clean, readable markdown.
    
    ## Changes
    - **New `useCopyToClipboard` hook**: Parses Dyad tags and converts them
    to professional markdown format
    - **Updated `ChatMessage` component**: Positions copy button on left
    side of approval status
    - **Dyad tag conversion**: Transforms custom tags to readable format:
      - `<dyad-write>` → `### File: path/to/file.js` + code block
      - `<dyad-edit>` → `### Edit: path/to/file.js` + code block  
      - `<dyad-execute-sql>` → `### Execute SQL` + ```sql block
      - `<think>` → `### Thinking` + content
    
    ## Features
    -  Automatic programming language detection from file extensions  
    -  Professional markdown formatting with proper headings and code
    blocks
    -  Tooltip showing "Copied" confirmation
    -  Reuses existing DyadMarkdownParser logic for consistency
    
    closes (#1290)
        
    <!-- This is an auto-generated description by cubic. -->
    ---
    
    ## Summary by cubic
    Adds a Copy button to assistant messages that copies a clean Markdown
    version of the response by converting Dyad tags and preserving code
    blocks. Improves shareability and removes Dyad-only markup; addresses
    Linear #1290.
    
    - **New Features**
    - Added useCopyToClipboard hook that parses Dyad tags to Markdown,
    auto-detects code language, and cleans spacing.
    - Updated ChatMessage to show a Copy button (with Copy/Copied tooltip)
    to the left of approval status; disabled while streaming.
    - Tag conversions: think → "### Thinking"; dyad-write/edit → "###
    File/Edit: path" + fenced code; dyad-execute-sql → "### Execute SQL" +
    sql block; other Dyad tags map to concise headings; chat-summary/command
    are omitted.
    - Added e2e tests for clipboard copy, Dyad tag stripping/formatting, and
    tooltip states.
    
    <!-- End of auto-generated description by cubic. -->
    2597d505
名称
最后提交
最后更新
.cursor/rules 正在载入提交数据...
.devcontainer 正在载入提交数据...
.github 正在载入提交数据...
.husky 正在载入提交数据...
assets 正在载入提交数据...
docs 正在载入提交数据...
drizzle 正在载入提交数据...
e2e-tests 正在载入提交数据...
packages/@dyad-sh 正在载入提交数据...
scaffold 正在载入提交数据...
scripts 正在载入提交数据...
shared 正在载入提交数据...
src 正在载入提交数据...
testing 正在载入提交数据...
tools 正在载入提交数据...
worker 正在载入提交数据...
workers/tsc 正在载入提交数据...
.cursorignore 正在载入提交数据...
.env.example 正在载入提交数据...
.eslintrc.json 正在载入提交数据...
.gitattributes 正在载入提交数据...
.gitignore 正在载入提交数据...
.oxlintrc.json 正在载入提交数据...
.prettierignore 正在载入提交数据...
.prettierrc 正在载入提交数据...
CONTRIBUTING.md 正在载入提交数据...
LICENSE 正在载入提交数据...
README.md 正在载入提交数据...
SECURITY.md 正在载入提交数据...
biome.json 正在载入提交数据...
components.json 正在载入提交数据...
drizzle.config.ts 正在载入提交数据...
forge.config.ts 正在载入提交数据...
forge.env.d.ts 正在载入提交数据...
index.html 正在载入提交数据...
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 正在载入提交数据...