• 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
名称
最后提交
最后更新
..
chat 正在载入提交数据...
preview_panel 正在载入提交数据...
settings 正在载入提交数据...
ui 正在载入提交数据...
AppList.tsx 正在载入提交数据...
AppSearchDialog.tsx 正在载入提交数据...
AppUpgrades.tsx 正在载入提交数据...
AutoApproveSwitch.tsx 正在载入提交数据...
AutoFixProblemsSwitch.tsx 正在载入提交数据...
AutoUpdateSwitch.tsx 正在载入提交数据...
CapacitorControls.tsx 正在载入提交数据...
ChatInputControls.tsx 正在载入提交数据...
ChatList.tsx 正在载入提交数据...
ChatModeSelector.tsx 正在载入提交数据...
ChatPanel.tsx 正在载入提交数据...
ChatSearchDialog.tsx 正在载入提交数据...
CommunityCodeConsentDialog.tsx 正在载入提交数据...
ConfirmationDialog.tsx 正在载入提交数据...
ContextFilesPicker.tsx 正在载入提交数据...
CreateAppDialog.tsx 正在载入提交数据...
CreateCustomModelDialog.tsx 正在载入提交数据...
CreateCustomProviderDialog.tsx 正在载入提交数据...
CreatePromptDialog.tsx 正在载入提交数据...
CustomErrorToast.tsx 正在载入提交数据...
DeleteConfirmationDialog.tsx 正在载入提交数据...
DyadProSuccessDialog.tsx 正在载入提交数据...
EditCustomModelDialog.tsx 正在载入提交数据...
ErrorBoundary.tsx 正在载入提交数据...
GitHubConnector.tsx 正在载入提交数据...
GitHubIntegration.tsx 正在载入提交数据...
HelpBotDialog.tsx 正在载入提交数据...
HelpDialog.tsx 正在载入提交数据...
ImportAppButton.tsx 正在载入提交数据...
ImportAppDialog.tsx 正在载入提交数据...
InputRequestToast.tsx 正在载入提交数据...
LoadingBlock.tsx 正在载入提交数据...
MaxChatTurnsSelector.tsx 正在载入提交数据...
McpConsentToast.tsx 正在载入提交数据...
McpToolsPicker.tsx 正在载入提交数据...
ModelPicker.tsx 正在载入提交数据...
NeonConnector.tsx 正在载入提交数据...
NeonDisconnectButton.tsx 正在载入提交数据...
NeonIntegration.tsx 正在载入提交数据...
PortalMigrate.tsx 正在载入提交数据...
PriceBadge.tsx 正在载入提交数据...
ProBanner.tsx 正在载入提交数据...
ProModeSelector.tsx 正在载入提交数据...
ProviderSettings.tsx 正在载入提交数据...
ReleaseChannelSelector.tsx 正在载入提交数据...
RuntimeModeSelector.tsx 正在载入提交数据...
SettingsList.tsx 正在载入提交数据...
SetupBanner.tsx 正在载入提交数据...
SetupProviderCard.tsx 正在载入提交数据...
SupabaseConnector.tsx 正在载入提交数据...
SupabaseIntegration.tsx 正在载入提交数据...
TelemetryBanner.tsx 正在载入提交数据...
TelemetrySwitch.tsx 正在载入提交数据...
TemplateCard.tsx 正在载入提交数据...
ThinkingBudgetSelector.tsx 正在载入提交数据...
VercelConnector.tsx 正在载入提交数据...
VercelIntegration.tsx 正在载入提交数据...
app-sidebar.tsx 正在载入提交数据...