mirror of
https://github.com/anthropics/claude-plugins-official.git
synced 2026-01-30 04:22:03 +00:00
Add diff-review template to artifact skill
This commit is contained in:
@@ -19,6 +19,7 @@ When the user asks for an interactive artifact, playground, explorer, or visual
|
|||||||
- `templates/data-explorer.md` — Data and query building (SQL, APIs, pipelines, regex)
|
- `templates/data-explorer.md` — Data and query building (SQL, APIs, pipelines, regex)
|
||||||
- `templates/concept-map.md` — Learning and exploration (concept maps, knowledge gaps, scope mapping)
|
- `templates/concept-map.md` — Learning and exploration (concept maps, knowledge gaps, scope mapping)
|
||||||
- `templates/writing-tool.md` — Writing and content (tone, document structure, audience)
|
- `templates/writing-tool.md` — Writing and content (tone, document structure, audience)
|
||||||
|
- `templates/diff-review.md` — Code review (git diffs, commits, PRs with line-by-line commenting)
|
||||||
3. **Follow the template** to build the artifact. If the topic doesn't fit any template cleanly, use the one closest and adapt.
|
3. **Follow the template** to build the artifact. If the topic doesn't fit any template cleanly, use the one closest and adapt.
|
||||||
|
|
||||||
## Core requirements (every artifact)
|
## Core requirements (every artifact)
|
||||||
|
|||||||
179
plugins/artifact/skills/artifact/templates/diff-review.md
Normal file
179
plugins/artifact/skills/artifact/templates/diff-review.md
Normal file
@@ -0,0 +1,179 @@
|
|||||||
|
# Diff Review Template
|
||||||
|
|
||||||
|
Use this template when the artifact is about reviewing code diffs: git commits, pull requests, code changes with interactive line-by-line commenting for feedback.
|
||||||
|
|
||||||
|
## Layout
|
||||||
|
|
||||||
|
```
|
||||||
|
+-------------------+----------------------------------+
|
||||||
|
| | |
|
||||||
|
| Commit Header: | Diff Content |
|
||||||
|
| • Hash | (files with hunks) |
|
||||||
|
| • Message | with line numbers |
|
||||||
|
| • Author/Date | and +/- indicators |
|
||||||
|
| | |
|
||||||
|
+-------------------+----------------------------------+
|
||||||
|
| Prompt Output Panel (fixed bottom-right) |
|
||||||
|
| [ Copy All ] |
|
||||||
|
| Shows all comments formatted for prompt |
|
||||||
|
+------------------------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
Diff review artifacts display git diffs with syntax highlighting. Users click lines to add comments, which become part of the generated prompt for code review feedback.
|
||||||
|
|
||||||
|
## Control types for diff review
|
||||||
|
|
||||||
|
| Feature | Control | Behavior |
|
||||||
|
|---|---|---|
|
||||||
|
| Line commenting | Click any diff line | Opens textarea below the line |
|
||||||
|
| Comment indicator | Badge on commented lines | Shows which lines have feedback |
|
||||||
|
| Save/Cancel | Buttons in comment box | Persist or discard comment |
|
||||||
|
| Copy prompt | Button in prompt panel | Copies all comments to clipboard |
|
||||||
|
|
||||||
|
## Diff rendering
|
||||||
|
|
||||||
|
Parse diff data into structured format for rendering:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
const diffData = [
|
||||||
|
{
|
||||||
|
file: "path/to/file.py",
|
||||||
|
hunks: [
|
||||||
|
{
|
||||||
|
header: "@@ -41,13 +41,13 @@ function context",
|
||||||
|
lines: [
|
||||||
|
{ type: "context", oldNum: 41, newNum: 41, content: "unchanged line" },
|
||||||
|
{ type: "deletion", oldNum: 42, newNum: null, content: "removed line" },
|
||||||
|
{ type: "addition", oldNum: null, newNum: 42, content: "added line" },
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
## Line type styling
|
||||||
|
|
||||||
|
| Type | Background | Text Color | Prefix |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `context` | transparent | default | ` ` (space) |
|
||||||
|
| `addition` | green tint (#dafbe1 light / rgba(46,160,67,0.15) dark) | green (#1a7f37 light / #7ee787 dark) | `+` |
|
||||||
|
| `deletion` | red tint (#ffebe9 light / rgba(248,81,73,0.15) dark) | red (#cf222e light / #f85149 dark) | `-` |
|
||||||
|
| `hunk-header` | blue tint (#ddf4ff light) | blue (#0969da light) | `@@` |
|
||||||
|
|
||||||
|
## Comment system
|
||||||
|
|
||||||
|
Each diff line gets a unique identifier for comment tracking:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
const comments = {}; // { lineId: commentText }
|
||||||
|
|
||||||
|
function selectLine(lineId, lineEl) {
|
||||||
|
// Deselect previous
|
||||||
|
document.querySelectorAll('.diff-line.selected').forEach(el =>
|
||||||
|
el.classList.remove('selected'));
|
||||||
|
document.querySelectorAll('.comment-box.active').forEach(el =>
|
||||||
|
el.classList.remove('active'));
|
||||||
|
|
||||||
|
// Select new
|
||||||
|
lineEl.classList.add('selected');
|
||||||
|
document.getElementById(`comment-box-${lineId}`).classList.add('active');
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveComment(lineId) {
|
||||||
|
const textarea = document.getElementById(`textarea-${lineId}`);
|
||||||
|
const comment = textarea.value.trim();
|
||||||
|
|
||||||
|
if (comment) {
|
||||||
|
comments[lineId] = comment;
|
||||||
|
} else {
|
||||||
|
delete comments[lineId];
|
||||||
|
}
|
||||||
|
|
||||||
|
renderDiff(); // Re-render to show comment indicator
|
||||||
|
updatePromptOutput();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Prompt output format
|
||||||
|
|
||||||
|
Generate a structured code review format:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
function updatePromptOutput() {
|
||||||
|
const commentKeys = Object.keys(comments);
|
||||||
|
|
||||||
|
if (commentKeys.length === 0) {
|
||||||
|
promptContent.innerHTML = '<span class="no-comments">Click on any line to add a comment...</span>';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let output = 'Code Review Comments:\n\n';
|
||||||
|
|
||||||
|
commentKeys.forEach(lineId => {
|
||||||
|
const lineEl = document.querySelector(`[data-line-id="${lineId}"]`);
|
||||||
|
const file = lineEl.dataset.file;
|
||||||
|
const lineNum = lineEl.dataset.lineNum;
|
||||||
|
const content = lineEl.dataset.content;
|
||||||
|
|
||||||
|
output += `📍 ${file}:${lineNum}\n`;
|
||||||
|
output += ` Code: ${content.trim()}\n`;
|
||||||
|
output += ` Comment: ${comments[lineId]}\n\n`;
|
||||||
|
});
|
||||||
|
|
||||||
|
promptContent.textContent = output;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Data attributes for line elements
|
||||||
|
|
||||||
|
Store metadata on each line element for prompt generation:
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div class="diff-line addition"
|
||||||
|
data-line-id="0-1-5"
|
||||||
|
data-file="src/utils/handler.py"
|
||||||
|
data-line-num="45"
|
||||||
|
data-content="subagent_id = tracker.register()">
|
||||||
|
```
|
||||||
|
|
||||||
|
## Pre-populating with real data
|
||||||
|
|
||||||
|
To create a diff viewer for a specific commit:
|
||||||
|
|
||||||
|
1. Run `git show <commit> --format="%H%n%s%n%an%n%ad" -p`
|
||||||
|
2. Parse the output into the `diffData` structure
|
||||||
|
3. Include commit metadata in the header section
|
||||||
|
|
||||||
|
## Theme support
|
||||||
|
|
||||||
|
Support both light and dark modes:
|
||||||
|
|
||||||
|
```css
|
||||||
|
/* Light mode */
|
||||||
|
body { background: #f6f8fa; color: #1f2328; }
|
||||||
|
.file-card { background: #ffffff; border: 1px solid #d0d7de; }
|
||||||
|
.diff-line.addition { background: #dafbe1; }
|
||||||
|
.diff-line.deletion { background: #ffebe9; }
|
||||||
|
|
||||||
|
/* Dark mode */
|
||||||
|
body { background: #0d1117; color: #c9d1d9; }
|
||||||
|
.file-card { background: #161b22; border: 1px solid #30363d; }
|
||||||
|
.diff-line.addition { background: rgba(46, 160, 67, 0.15); }
|
||||||
|
.diff-line.deletion { background: rgba(248, 81, 73, 0.15); }
|
||||||
|
```
|
||||||
|
|
||||||
|
## Interactive features
|
||||||
|
|
||||||
|
- **Hover hint:** Show "Click to comment" tooltip on line hover
|
||||||
|
- **Comment indicator:** Badge (💬) on lines with saved comments
|
||||||
|
- **Toast notification:** "Copied to clipboard!" feedback on copy
|
||||||
|
- **Edit existing:** Allow editing previously saved comments
|
||||||
|
|
||||||
|
## Example topics
|
||||||
|
|
||||||
|
- Git commit review (single commit diff with line comments)
|
||||||
|
- Pull request review (multiple commits, file-level and line-level comments)
|
||||||
|
- Code diff comparison (before/after refactoring)
|
||||||
|
- Merge conflict resolution (showing both versions with annotations)
|
||||||
|
- Code audit (security review with findings per line)
|
||||||
Reference in New Issue
Block a user