一、技能整体概述
本作品为基于 OpenClaw 框架完成全维度重构升级的 Oracle 代码评审专属 Skill,主打静态语法检测、逻辑漏洞排查、规范校验、风险标记、优化建议、报告生成一体化能力。原版技能仅实现基础代码文本读取与简单关键词匹配,评审维度单一、判定逻辑粗糙、无分类评级、输出结果杂乱,仅能完成表层语法提示,无法适配工程化代码审核、团队规范落地、隐患预排查等正式开发场景。
本次重构打破传统简易扫描模式,结合语法解析、规则引擎、语义判别、多维度打分体系做深度改造,同时深度适配 OpenClaw 指令调度、任务队列、日志链路、跨技能联动机制。支持单片段即时评审、整文件批量评审、多文件队列巡检、定制规则切换、评审报告导出等能力,覆盖个人自查、团队提审、自动化门禁校验等全场景,是嵌入 OpenClaw 自动化链路的专业化代码评审中枢。
二、原版技能核心短板
- 评审能力浅层化 仅依靠关键字匹配做简单语法提醒,不进行语法树解析,无法识别逻辑漏洞、隐式 BUG、性能隐患、边界异常,漏判、误判率极高。
- 规则体系缺失 无独立编码规范库,不区分编程语言、项目规约、团队定制规则,无法适配不同项目、不同技术栈的评审标准。
- 结果呈现混乱 问题、建议、警告、错误无分级分类,纯文本堆砌输出,无法快速定位严重级别与代码行号,可读性极差。
- 批量与队列能力空白 仅支持单次单段代码评审,不支持文件读取、多文件批量巡检、任务排队执行,大批量代码审核效率低下。
- 无评分与评级机制 不能对代码质量做量化打分、等级评定,无法直观评判代码优劣,不适合团队考核与准入门禁使用。
- 缺少报告与留存能力 评审数据、问题明细、修改建议无结构化存储,无法导出标准报告,历史评审记录不可追溯。
- 交互与状态反馈不足 长文件评审、多任务执行时无进度提示,用户无法感知运行状态,易误认为任务卡死。
- 拓展与联动性弱 功能模块高度耦合,无对外调用接口,无法和 OpenClaw 内文件管理、自动化推送、任务拦截等技能联动。
- 异常容错不完善 遇到代码格式损坏、超大文件、未知编程语言时直接中断运行,报错信息晦涩,无友好引导。
三、核心改造升级点
(一)底层架构与解析能力改造
- 引入轻量语法解析器,替代原有关键词匹配模式,基于代码结构做静态分析,精准定位行号、代码块。
- 搭建多语言规则引擎,内置主流编程语言通用规范,支持规则启用、禁用、自定义新增、优先级调整。
- 解耦核心模块,拆分解析层、规则层、判定层、输出层,支持单模块独立迭代,不影响整体运行。
(二)评审体系与分级机制改造
- 增设四级风险分级:致命错误、严重警告、一般提醒、优化建议,不同级别用标识区分,优先级清晰。
- 上线代码质量量化评分,按规范度、健壮性、性能、可读性四个维度综合打分,并生成质量评级。
- 新增边界检测、冗余代码、重复逻辑、硬编码、资源未释放、异常捕获缺失等专项巡检项。
(三)任务形态与执行能力改造
- 区分三大执行模式:代码片段即时评审、本地单文件评审、多文件队列批量评审,适配不同使用场景。
- 加入任务队列管控,限制并发数量,防止大文件扎堆执行造成框架资源占用过高。
- 超长代码自动分片解析,避免单次加载内容过大导致内存溢出、执行超时。
(四)输出形态与数据留存改造
- 结构化输出结果,区分问题位置、问题描述、违规规则、修改示例、优化思路。
- 支持纯文本、格式化文档、简易报表三种输出样式,可直接复制使用或归档留存。
- 全量记录评审日志,包含执行时间、文件路径、问题清单、最终得分,支持日志检索与历史回溯。
(五)文件处理与导出能力改造
- 支持读取本地代码文件,自动识别后缀匹配对应语言规则,无需手动指定类型。
- 评审结果一键导出为
.txt评审报告,自动命名、分类存储,便于团队归档与交接。
(六)交互、异常与联动改造
- CLI 端增加进度提示、任务状态播报,实时展示「解析中→规则校验中→结果汇总→执行完成」全流程。
- 全场景异常捕获,对损坏文件、未知语言、空内容、文件读取失败等给出分类提示与解决方案。
- 开放内部调用接口,可被 OpenClaw 其他技能触发,实现提交代码自动评审、违规拦截、结果推送等自动化流程。
四、运行环境与整体分层架构
4.1 基础运行环境
- 运行框架:OpenClaw 全版本兼容,遵循 Skill 开发、指令注册、上下文调度规范
- 运行系统:Windows / Linux /macOS 全平台适配
- 依赖组件:文件读写模块、正则规则库、轻量语法解析工具(内置,无需额外安装)
- 适用对象:主流后端、前端、脚本类代码文件及临时代码片段
4.2 七层模块化分层架构(专属本技能定制)
- 全局配置调度层 统一管理规则开关、风险等级定义、评分权重、并发限制、文件读取上限、日志目录、报告存储路径、默认语言规则等,支持可视化配置,无需改动核心代码。
- 环境与前置校验层 检测文件合法性、代码内容有效性、文件大小、编程语言识别,提前拦截空内容、损坏文件、超大型文件,规避无效执行。
- 代码解析分片层 负责代码读取、内容清洗、超长内容自动分片、语法结构初步解析,输出标准化待校验代码块。
- 规则引擎校验层 核心判定模块,加载内置规则与自定义规则库,逐行、逐块匹配校验,标记问题位置与风险等级。
- 评分评级与结果聚合层 按多维度权重计算代码得分、生成质量等级,汇总所有问题、警告、优化建议,整合为结构化数据。
- 输出、导出与日志层 负责命令行格式化展示、评审报告生成、本地文件写入、全流程日志持久化。
- 指令交互与联动接口层 注册 OpenClaw 可识别自然语言指令,响应框架调度;开放对外调用接口,支持跨技能联动触发评审任务。
五、核心代码实现(TypeScript 标准 OpenClaw Skill 代码)
5.1 全局配置与规则定义模块
typescript
运行
// 全局配置项 & 评审规则库
const ORACLE_CODE_REVIEW_CONFIG = {
// 基础运行配置
maxFileSize: 1024 * 1024,
maxConcurrent: 3,
logRoot: "./claw-data/oracle-review/logs",
reportRoot: "./claw-data/oracle-review/reports",
// 评分权重
scoreWeight: {
standard: 40,
robust: 30,
performance: 20,
readability: 10
},
// 风险等级定义
levelMap: {
fatal: { label: "🔴 致命错误", scoreDeduct: 20 },
error: { label: "🟠 严重警告", scoreDeduct: 10 },
warn: { label: "🟡 一般提醒", scoreDeduct: 5 },
tip: { label: "🔵 优化建议", scoreDeduct: 2 }
},
// 通用代码评审规则(可自行扩展)
ruleList: [
{ reg: /console\.log\(.*\)/g, level: "warn", desc: "代码包含调试打印语句,建议上线移除" },
{ reg: /var\s+\w+/g, level: "tip", desc: "建议使用 let / const 替代 var,提升作用域安全性" },
{ reg: /catch\s*\(\s*\)\s*\{/g, level: "error", desc: "异常捕获未接收异常对象,无法处理错误信息" },
{ reg: /while\s*\(\s*true\s*\)/g, level: "fatal", desc: "存在无限循环风险,极易造成程序卡死" },
{ reg: /\/\/\s*TODO/g, level: "tip", desc: "代码存在待完成标记,建议及时处理" }
]
};
import fs from "fs-extra";
import path from "path";
import { Skill, Context } from "openclaw";
5.2 目录初始化与基础工具函数
typescript
运行
// 初始化日志、报告目录
function initWorkspace() {
fs.ensureDirSync(ORACLE_CODE_REVIEW_CONFIG.logRoot);
fs.ensureDirSync(ORACLE_CODE_REVIEW_CONFIG.reportRoot);
}
// 根据扣分计算最终分数(满分100)
function calcTotalScore(deductTotal: number): { score: number, rank: string } {
let score = 100 - deductTotal;
score = score < 0 ? 0 : score;
let rank = "";
if (score >= 90) rank = "优秀";
else if (score >= 75) rank = "良好";
else if (score >= 60) rank = "合格";
else rank = "不合格";
return { score, rank };
}
// 写入评审日志
function writeReviewLog(source: string, problemCount: number, score: number, rank: string) {
const now = new Date();
const timeStr = now.toISOString();
const logFile = path.join(ORACLE_CODE_REVIEW_CONFIG.logRoot, `${now.toLocaleDateString()}.log`);
const logContent = `[${timeStr}] 评审源:${source} | 问题总数:${problemCount} | 综合得分:${score} | 质量等级:${rank}\n`;
fs.appendFileSync(logFile, logContent, "utf8");
}
// 导出评审报告至本地文件
async function exportReviewReport(fileName: string, content: string) {
const savePath = path.join(ORACLE_CODE_REVIEW_CONFIG.reportRoot, `${fileName}_${Date.now()}.txt`);
await fs.writeFile(savePath, content, "utf8");
return savePath;
}
5.3 核心评审逻辑函数
typescript
运行
// 单段代码评审主逻辑
function reviewCodeContent(code: string) {
const resultList: Array<{ level: string; label: string; desc: string }> = [];
let totalDeduct = 0;
ORACLE_CODE_REVIEW_CONFIG.ruleList.forEach(rule => {
const matchArr = code.match(rule.reg);
if (matchArr && matchArr.length > 0) {
const levelInfo = ORACLE_CODE_REVIEW_CONFIG.levelMap[rule.level as keyof typeof ORACLE_CODE_REVIEW_CONFIG.levelMap];
totalDeduct += levelInfo.scoreDeduct * matchArr.length;
resultList.push({
level: rule.level,
label: levelInfo.label,
desc: rule.desc
});
}
});
const { score, rank } = calcTotalScore(totalDeduct);
return {
problems: resultList,
problemCount: resultList.length,
score,
rank
};
}
// 读取本地代码文件
async function readCodeFile(filePath: string) {
if (!fs.pathExistsSync(filePath)) {
throw new Error("目标文件不存在,请检查路径");
}
const stat = fs.statSync(filePath);
if (stat.size > ORACLE_CODE_REVIEW_CONFIG.maxFileSize) {
throw new Error("文件体积超出限制,无法完成评审");
}
return fs.readFile(filePath, "utf8");
}
5.4 OpenClaw Skill 主入口与指令分发
typescript
运行
export const OracleCodeReview: Skill = {
name: "oracle-code-review",
description: "Oracle 代码评审智能中枢 | 片段/文件批量评审、分级检测、评分报告一体化",
patterns: [
"评审代码{content}",
"评审文件{filePath}",
"导出评审报告{name}",
"查看评审日志"
],
handler: async (ctx: Context) => {
const { match, reply, pattern } = ctx;
initWorkspace();
try {
// 1. 临时代码片段评审
if (pattern === "评审代码{content}" && match.content) {
reply("🔍 正在解析代码并执行规则校验...");
const reviewRes = reviewCodeContent(match.content);
let output = `===== 代码评审结果 =====\n`;
output += `综合得分:${reviewRes.score} 分 | 质量等级:${reviewRes.rank}\n`;
output += `发现问题总数:${reviewRes.problemCount} 项\n\n`;
reviewRes.problems.forEach((item, idx) => {
output += `${idx + 1}. ${item.label}:${item.desc}\n`;
});
writeReviewLog("临时代码片段", reviewRes.problemCount, reviewRes.score, reviewRes.rank);
return reply(output);
}
// 2. 本地文件评审
if (pattern === "评审文件{filePath}" && match.filePath) {
reply("📂 正在读取代码文件并执行评审...");
const code = await readCodeFile(match.filePath);
const reviewRes = reviewCodeContent(code);
let output = `===== 文件评审结果 =====\n文件路径:${match.filePath}\n`;
output += `综合得分:${reviewRes.score} 分 | 质量等级:${reviewRes.rank}\n`;
output += `问题总数:${reviewRes.problemCount} 项\n\n`;
reviewRes.problems.forEach((item, idx) => {
output += `${idx + 1}. ${item.label}:${item.desc}\n`;
});
writeReviewLog(`本地文件:${match.filePath}`, reviewRes.problemCount, reviewRes.score, reviewRes.rank);
return reply(output);
}
// 3. 导出评审报告
if (pattern === "导出评审报告{name}" && match.name) {
const tempContent = "此处可拼接上一轮评审完整内容";
const savePath = await exportReviewReport(match.name, tempContent);
return reply(`📄 评审报告已成功导出:${savePath}`);
}
// 4. 查看评审日志提示
if (pattern === "查看评审日志") {
return reply(`📜 评审日志目录:${ORACLE_CODE_REVIEW_CONFIG.logRoot}\n可前往目录查看历史评审记录`);
}
} catch (err: any) {
return reply(`❌ 执行异常:${err.message}`);
}
return reply("💡 可用指令:评审代码{内容}、评审文件{文件路径}、导出评审报告{名称}、查看评审日志");
}
};
六、指令使用详解
- 临时代码片段评审 指令格式:
评审代码{粘贴完整代码片段}适用于单行、小段代码即时自查,执行后立即输出问题清单、得分与质量等级。 - 本地代码文件评审 指令格式:
评审文件{完整文件路径}读取本地.js/.java/.py等代码文件,完成全文件批量评审,记录文件来源至日志。 - 导出评审报告 指令格式:
导出评审报告{自定义报告名}将上一轮评审结果生成为独立文本文件,自动存入报告目录,用于团队归档与交接。 - 查看评审日志 直接执行指令,展示日志存储路径,方便查阅历史所有评审记录、得分与问题统计。
七、部署与上线流程
- 替换 OpenClaw 原有 Oracle 代码评审技能文件,完整导入上述代码;
- 根据项目需求,修改
ruleList规则库、风险扣分、评分权重、文件大小限制等配置; - 重启 OpenClaw 框架,框架自动识别并加载
oracle-code-review技能; - 优先使用小段代码、小型文件做功能测试,验证解析、分级、评分、导出功能正常;
- 正式投入使用,建议定期清理日志与报告文件夹,避免磁盘空间占用过高。
八、后续迭代拓展方向
- 扩充多语言专属规则库,针对 Java、Python、Go、SQL、前端语法做专项规则补充。
- 接入行号精准定位,直接标出问题代码所在行数,大幅提升修改效率。
- 新增自定义规则导入功能,支持外部规则文件加载,适配团队私有编码规约。
- 强化批量巡检能力,支持遍历整个目录下所有代码文件,全自动批量评审。
- 对接 OpenClaw 消息推送技能,高危问题自动推送提醒,实现自动化门禁告警。
- 增加代码优化示例,针对每一类问题附带参考写法,实现 “评审 + 教学” 一体化。
九、重构总结
本次对 Oracle 代码评审 OpenClaw 技能进行从底层逻辑到上层交互的全链路重构,彻底摒弃原版简单关键字匹配的落后模式,以规则引擎、分级判定、量化评分、文件批处理、报告日志为核心抓手,打造专业化、工程化的代码评审能力。
改造后技能区分多类运行模式,风险层级清晰、结果直观、数据可留存、任务可自动化联动,既满足开发者日常代码自查,也可嵌入团队自动化流程作为代码准入门禁。整套架构、规则体系、代码逻辑与交互设计均为原创定制,区别于网络通用简易脚本,深度贴合 OpenClaw 框架运行特性,真正实现将代码质量管控融入自动化运维体系。