# Diff Tool Usage Guide

The diff tool allows the AI model to display code differences in a beautiful, interactive format within chat messages.

## How to Use

The model can include diff displays in its responses by using the following markdown syntax:

```markdown
```diff-tool
{
  "oldCode": "function hello() {\n  console.log('Hello, World!');\n}",
  "newCode": "function hello(name = 'World') {\n  console.log(\`Hello, \${name}!\`);\n}",
  "title": "Updated hello function",
  "language": "javascript"
}
```
```

## Parameters

- **oldCode** (required): The original code as a string with `\n` for line breaks
- **newCode** (required): The modified code as a string with `\n` for line breaks  
- **title** (optional): A descriptive title for the diff (defaults to "Code Changes")
- **language** (optional): The programming language for syntax highlighting (defaults to "text")

## Features

- **Interactive**: Click to expand/collapse the diff
- **Copy to Clipboard**: Copy button to copy the full diff
- **Line Numbers**: Shows line numbers for both old and new code
- **Color Coding**: 
  - Green for additions (+)
  - Red for deletions (-)
  - Neutral for unchanged lines
- **Syntax Highlighting**: Supports various programming languages
- **Responsive**: Works well on different screen sizes

## Example Usage Scenarios

1. **Code Refactoring**: Show before/after code improvements
2. **Bug Fixes**: Highlight what was changed to fix an issue
3. **Feature Additions**: Display new functionality being added
4. **Configuration Changes**: Show config file modifications
5. **API Changes**: Demonstrate API signature changes

## Best Practices

1. **Keep it focused**: Show only relevant changes, not entire files
2. **Add context**: Use descriptive titles and surrounding text
3. **Escape properly**: Make sure to escape quotes and newlines in JSON
4. **Reasonable size**: Avoid extremely large diffs that are hard to read

## Example Response Format

```markdown
Here are the changes I made to fix the bug:

```diff-tool
{
  "oldCode": "if (user) {\n  return user.name;\n}",
  "newCode": "if (user && user.name) {\n  return user.name;\n} else {\n  return 'Anonymous';\n}",
  "title": "Fixed null reference bug",
  "language": "javascript"
}
```

The fix adds proper null checking and provides a fallback value.
```
