Install
openclaw skills install @paudyyin/code-review-visualizerGenerate HTML code review pages with risk tags, diff highlights, and file-level annotations. 当用户需要代码审查可视化、PR审查报告、代码diff高亮、风险标签标注、审查页面生成时使用。
openclaw skills install @paudyyin/code-review-visualizer生成带风险标签、diff 高亮、文件级标注的 HTML 代码审查页。将传统的纯文本 diff 和 markdown 审查意见转化为可视化、可交互的 HTML 审查页面,让审查者一眼看清代码变更的形状和风险分布。
始终输出一个自包含的 HTML 文件,可通过 <canvas> 工具呈现,或直接发送给用户浏览器打开。
HTML 结构:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PR #XXX — Review Summary</title>
<style>
:root {
--bg: #0d1117;
--surface: #161b22;
--border: #30363d;
--text: #c9d1d9;
--text-muted: #8b949e;
--accent: #58a6ff;
--green: #2ea043;
--red: #da3633;
--yellow: #d29922;
--diff-add-bg: rgba(46,160,67,0.15);
--diff-del-bg: rgba(218,54,51,0.15);
--diff-add-line: #2ea043;
--diff-del-line: #da3633;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
background: var(--bg);
color: var(--text);
line-height: 1.6;
max-width: 960px;
margin: 0 auto;
padding: 24px 16px;
}
h1 { font-size: 24px; margin-bottom: 4px; }
h2 { font-size: 20px; margin: 32px 0 12px; padding-bottom: 8px; border-bottom: 1px solid var(--border); }
h3 { font-size: 16px; margin: 16px 0 8px; }
p { margin: 8px 0; }
a { color: var(--accent); text-decoration: none; }
.meta { color: var(--text-muted); font-size: 14px; margin-bottom: 16px; }
.meta span { margin-right: 16px; }
/* Risk badges */
.risk { display: inline-block; padding: 2px 8px; border-radius: 12px; font-size: 12px; font-weight: 600; }
.risk-safe { background: rgba(46,160,67,0.2); color: var(--green); }
.risk-worth { background: rgba(210,153,34,0.2); color: var(--yellow); }
.risk-attention { background: rgba(218,54,51,0.2); color: var(--red); }
/* Risk map */
.risk-map { display: flex; gap: 16px; flex-wrap: wrap; margin: 12px 0; }
.risk-map-item { padding: 8px 16px; border-radius: 8px; background: var(--surface); border: 1px solid var(--border); }
/* Diff block */
.file-block { margin: 16px 0; border: 1px solid var(--border); border-radius: 8px; overflow: hidden; }
.file-header {
background: var(--surface);
padding: 8px 16px;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid var(--border);
}
.file-path { font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace; font-size: 13px; }
.file-stats { color: var(--text-muted); font-size: 12px; }
.diff-line { font-family: "SFMono-Regular", Consolas, monospace; font-size: 12px; padding: 2px 16px; white-space: pre; }
.diff-add { background: var(--diff-add-bg); border-left: 3px solid var(--diff-add-line); }
.diff-del { background: var(--diff-del-bg); border-left: 3px solid var(--diff-del-line); }
.diff-ctx { border-left: 3px solid transparent; }
/* Before/After */
.comparison { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin: 16px 0; }
.comparison-col { padding: 16px; border-radius: 8px; }
.comparison-col.before { background: var(--diff-del-bg); border: 1px solid var(--red); }
.comparison-col.after { background: var(--diff-add-bg); border: 1px solid var(--green); }
.comparison-col h4 { margin-bottom: 8px; }
.comparison-col ul { padding-left: 20px; }
.comparison-col li { margin: 4px 0; }
/* Code walkthrough */
.step { margin: 16px 0; padding: 16px; background: var(--surface); border-radius: 8px; border-left: 4px solid var(--accent); }
.step-num { display: inline-block; width: 24px; height: 24px; border-radius: 50%; background: var(--accent); color: var(--bg); text-align: center; line-height: 24px; font-size: 12px; font-weight: 700; margin-right: 8px; }
.step-title { font-weight: 600; }
.step-desc { color: var(--text-muted); margin: 8px 0; }
.step-code { background: var(--bg); padding: 12px; border-radius: 6px; overflow-x: auto; margin: 8px 0; }
.step-code pre { margin: 0; font-size: 13px; }
.step-code summary { cursor: pointer; color: var(--accent); font-size: 13px; }
details { margin: 8px 0; }
/* Trust boundary */
.trust-boundary { padding: 12px 16px; margin: 12px 0; border: 2px dashed var(--yellow); border-radius: 8px; background: rgba(210,153,34,0.05); }
.trust-boundary strong { color: var(--yellow); }
@media (max-width: 640px) {
.comparison { grid-template-columns: 1fr; }
}
</style>
</head>
<body>
<!-- Content goes here -->
</body>
</html>
用户提供 PR diff 或 git 输出,生成包含以下结构的 HTML:
用户提供分支名和变更文件列表,生成:
用户提供代码文件或模块路径,生成: