Run any Skill in Manus
with one click
with one click
Run any Skill in Manus with one click
Get Started$pwd:
$ git log --oneline --stat
stars:307
forks:89
updated:April 19, 2026 at 13:39
SKILL.md
自动发现项目中的代码问题并提交 GitHub Issue
安全审计技能,用于检查和修复依赖安全问题
文档自动生成
生成代码评审友好的 commit 信息
开发流程检查技能,确保代码修改后执行必要的质量检查
文档创建技能,用于创建标准化的项目文档
| name | ci-validator |
| description | CI检查验证和质量保障 |
我是 CI 检查验证和质量保障技能,专门确保 xiaozhi-client 项目的代码质量符合标准,同时遵循务实开发理念。
核心能力:自动执行项目要求的所有代码质量检查,确保代码符合 CI 标准。
# 1. 执行完整检查(xiaozhi-client 项目)
pnpm check:all
# 2. 运行测试套件
pnpm test
# 3. (可选)生成覆盖率报告
pnpm test:coverage
pnpm check:all 包含:
pnpm lint - Biome 代码规范和格式检查pnpm typecheck - TypeScript 严格类型检查pnpm spellcheck - 拼写检查pnpm check:cpd - 重复代码检查pnpm test 包含:
当检查失败时,自动分析失败原因并提供针对性修复建议。
// 常见问题1:any 类型使用
// ❌ 错误示例
function processData(data: any): any {
return data.value;
}
// ✅ 修复建议
function processData<T extends Record<string, unknown>>(data: T): T[keyof T] {
return data.value as T[keyof T];
}
// 常见问题2:类型定义缺失
// ❌ 错误示例
const config = {
apiEndpoint: "https://api.home-assistant.local",
timeout: 5000,
};
// ✅ 修复建议
interface Config {
apiEndpoint: string;
timeout: number;
}
const config: Config = {
apiEndpoint: "https://api.home-assistant.local",
timeout: 5000,
};
# 常见问题及修复命令
# 问题:Biome 检查失败
# 解决方案:运行自动修复
pnpm lint
# 问题:导入路径不规范
# 解决方案:使用路径别名系统
import { UnifiedMCPServer } from "@core/unified-server"; // ✅
import { StartCommand } from "@cli/commands/start"; // ✅
import { UnifiedMCPServer } from "./core/unified-server"; // ❌
# 问题:未使用的导入
# 解决方案:移除未使用的导入
pnpm lint # 会自动清理
# 常见问题:技术术语被标记为拼写错误
# 解决方案1:确认确实是错误,修正拼写
# 解决方案2:如果是专业术语,添加到项目词典
echo "homeassistant" >> .cspell.json
# 解决方案3:忽略特定文件或目录
# 在 .cspell.json 中配置 ignorePaths
// 常见问题1:测试覆盖率不足
// 解决方案:补充测试用例,覆盖未测试的代码路径
// 常见问题2:异步测试处理不当
// ❌ 错误示例
test("should fetch data", () => {
const result = await fetchData();
expect(result).toBeDefined();
});
// ✅ 修复建议
test("should fetch data", async () => {
const result = await fetchData();
expect(result).toBeDefined();
});
// 常见问题3:Mock 设置不完整
// ❌ 错误示例
vi.mock("@/services/light-service");
// ✅ 修复建议
vi.mock("@/services/light-service", () => ({
LightService: {
turnOn: vi.fn(),
turnOff: vi.fn(),
},
}));
确保代码符合项目的 CI/CD 要求,避免流水线失败。
# GitHub Actions CI 流程检查项
- ✅ 类型检查通过 (pnpm typecheck)
- ✅ 代码规范检查通过 (pnpm lint)
- ✅ 拼写检查通过 (pnpm spellcheck)
- ✅ 构建成功 (pnpm build)
- ✅ 测试通过 (pnpm test:coverage)
- ✅ 覆盖率达到要求
# 检查当前覆盖率
pnpm test:coverage
# 覆盖率要求(基于 vitest.config.ts)
- 函数覆盖率: 80%
- 行覆盖率: 80%
- 语句覆盖率: 80%
- 分支覆盖率: 70%
在代码提交前自动执行所有必要的检查,确保只提交高质量的代码。
# 安装 husky(如果未安装)
pnpm add -D husky
# 设置 pre-commit hook
npx husky add .husky/pre-commit "pnpm check:all && pnpm test"
# 设置 pre-push hook
npx husky add .husky/pre-push "pnpm test:coverage"
# 完整预提交检查流程
function preCommitCheck() {
echo "🔍 执行预提交检查..."
# 1. 代码规范检查和修复(包括格式化)
pnpm lint
# 2. 类型检查
pnpm typecheck
# 3. 拼写检查
pnpm spellcheck
# 4. 运行测试
pnpm test
# 5. 生成覆盖率报告
pnpm test:coverage
echo "✅ 预提交检查完成"
}
# 必须执行检查的时机
- ✅ 每次代码修改后
- ✅ 提交代码前 (git commit)
- ✅ 创建 PR 前
- ✅ 合并到 main 分支前
- ✅ 发布版本前
interface CheckFailure {
type: 'type_error' | 'lint_error' | 'spell_error' | 'test_failure';
severity: 'error' | 'warning';
file: string;
line?: number;
message: string;
fixCommand?: string;
autoFixable: boolean;
}
function handleCheckFailure(failure: CheckFailure): void {
switch (failure.type) {
case 'type_error':
console.log(`🔧 类型错误: ${failure.message}`);
if (failure.autoFixable) {
console.log(`💡 建议修复: ${failure.fixCommand}`);
}
break;
case 'lint_error':
console.log(`📝 代码规范错误: ${failure.message}`);
console.log(`💡 自动修复: pnpm lint`);
break;
case 'spell_error':
console.log(`📖 拼写错误: ${failure.message}`);
console.log(`💡 检查拼写: pnpm spellcheck`);
break;
case 'test_failure':
console.log(`🧪 测试失败: ${failure.message}`);
console.log(`💡 修复测试: /fix-test ${failure.file}`);
break;
}
}
interface QualityGates {
typeCheck: {
anyTypesAllowed: 0; // 0 容忍度
strictMode: true; // 必须启用严格模式
implicitAny: false; // 禁止隐式 any
};
lintCheck: {
errorsAllowed: 0; // 0 错误容忍度
warningsAllowed: 5; // 最多 5 个警告
autoFixRate: 0.95; // 95% 自动修复率
};
spellCheck: {
spellingErrors: 0; // 0 拼写错误容忍度
technicalTerms: 'verified'; // 技术术语必须验证
};
testCoverage: {
functions: 80; // 函数覆盖率 80%
lines: 80; // 行覆盖率 80%
statements: 80; // 语句覆盖率 80%
branches: 70; // 分支覆盖率 70%
};
}
# 修复所有可自动修复的问题
pnpm lint
# 如果仍有问题,运行详细诊断
pnpm check:all # 查看具体错误
pnpm typecheck # 查看类型错误详情
pnpm spellcheck # 查看拼写错误详情
#!/bin/bash
# auto-fix.sh - 智能修复脚本
echo "🚀 开始自动修复..."
# 1. 代码规范检查和自动修复(包括格式化)
echo "🔧 修复代码规范问题..."
pnpm lint
# 2. 类型检查(仅诊断,不自动修复)
echo "🔍 检查类型问题..."
TYPE_ERRORS=$(pnpm typecheck 2>&1 | grep -c "error" || echo "0")
if [ "$TYPE_ERRORS" -gt 0 ]; then
echo "❌ 发现 $TYPE_ERRORS 个类型错误,需要手动修复"
pnpm typecheck
exit 1
fi
# 4. 拼写检查
echo "📖 检查拼写..."
SPELL_ERRORS=$(pnpm spellcheck 2>&1 | grep -c "error" || echo "0")
if [ "$SPELL_ERRORS" -gt 0 ]; then
echo "❌ 发现 $SPELL_ERRORS 个拼写错误,请检查"
pnpm spellcheck
exit 1
fi
# 5. 运行测试
echo "🧪 运行测试..."
pnpm test
echo "✅ 自动修复完成!"
interface FixStrategy {
priority: 'high' | 'medium' | 'low';
autoFix: boolean;
description: string;
}
const fixStrategies: FixStrategy[] = [
{
priority: 'high',
autoFix: true,
description: '代码格式和规范问题(使用 pnpm lint)'
},
{
priority: 'high',
autoFix: false,
description: 'TypeScript 严重类型错误'
},
{
priority: 'medium',
autoFix: false,
description: '测试用例修复(使用 /fix-test)'
},
{
priority: 'low',
autoFix: true,
description: '拼写错误(添加到词典或修正)'
}
];
interface QualityReport {
timestamp: string;
checkType: {
passed: boolean;
errors: number;
warnings: number;
issues: TypeIssue[];
};
lintCheck: {
passed: boolean;
errors: number;
warnings: number;
fixed: number;
};
spellCheck: {
passed: boolean;
errors: number;
words: string[];
};
testCoverage: {
passed: boolean;
coverage: CoverageReport;
failingTests: TestFailure[];
};
overall: {
passed: boolean;
score: number; // 0-100
recommendations: string[];
};
}
# 生成质量报告
function generateQualityReport() {
echo "📊 生成代码质量报告..."
# 运行所有检查
pnpm check:all > check-results.txt 2>&1
pnpm test:coverage > coverage-results.txt 2>&1
# 分析结果
echo "📈 质量趋势分析:"
echo "- 类型错误: $(grep -c "error" check-results.txt || echo "0")"
echo "- 代码规范问题: $(grep -c "error" check-results.txt || echo "0")"
echo "- 测试覆盖率: $(tail -10 coverage-results.txt | grep -o "[0-9]*%" | head -1)"
# 生成改进建议
echo "💡 改进建议:"
echo "- 定期运行 pnpm check:all 进行预防性检查"
echo "- 在提交前确保所有检查通过"
echo "- 保持测试覆盖率在要求水平以上"
}
# 使用技能验证代码质量
skill: ci-validator
# 手动执行完整检查
pnpm check:all && pnpm test
# 快速检查(仅核心检查)
pnpm lint && pnpm test
// .vscode/settings.json
{
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"quickfix.biome": "explicit",
"source.organizeImports": "explicit"
},
"typescript.preferences.preferTypeOnlyAutoImports": true,
"cSpell.enableFiletypes": ["typescript", "javascript", "markdown", "yaml"]
}
# 创建 Git 别名简化检查
git config --global alias.precheck '!pnpm check:all && pnpm test'
git config --global alias.quality '!pnpm check:all && pnpm test:coverage'
# 使用别名
git precheck # 快速检查
git quality # 完整质量检查
pnpm check:all通过这个技能,可以确保 xiaozhi-client 项目始终保持高质量的代码标准,减少 CI/CD 流水线失败,提升开发效率和代码质量。特别适配项目的 MCP 协议特性和复杂路径别名系统。