# CI Validator

> CI检查验证和质量保障

- Skill: `shenjingnan/ci-validator` (Agent Skill)
- Install (CLI): `npx skillmds@latest add shenjingnan/ci-validator`
- Raw SKILL.md: https://api.skillmd.com/api/skills/shenjingnan/ci-validator/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: shenjingnan (https://skillmd.com/u/shenjingnan)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/shenjingnan/ci-validator

---


我是 CI 检查验证和质量保障技能，专门确保 xiaozhi-client 项目的代码质量符合标准，同时遵循务实开发理念。

### 技能使用原则
- **保证质量，但避免过度工程化**：维持代码质量，但不追求理论上的完美
- **实用功能优先，理论完美次之**：解决实际问题比预防各种可能更重要
- **简单解决方案优于复杂方案**：优先选择直接有效的解决方案
- **务实开发指导**：检查代码是否符合"如无必要勿增实体"的原则

## 技能能力

### 1. 完整代码质量检查流程
核心能力：自动执行项目要求的所有代码质量检查，确保代码符合 CI 标准。

#### 检查流程
```bash
# 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`** 包含：
  - Vitest 单元测试执行
  - 集成测试验证
  - 功能测试覆盖

### 2. 智能问题诊断与修复建议
当检查失败时，自动分析失败原因并提供针对性修复建议。

#### 类型检查失败诊断
```typescript
// 常见问题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,
};
```

#### 代码规范失败诊断
```bash
# 常见问题及修复命令

# 问题：Biome 检查失败
# 解决方案：运行自动修复
pnpm lint

# 问题：导入路径不规范
# 解决方案：使用路径别名系统
import { UnifiedMCPServer } from "@core/unified-server"; // ✅
import { StartCommand } from "@cli/commands/start";       // ✅
import { UnifiedMCPServer } from "./core/unified-server"; // ❌

# 问题：未使用的导入
# 解决方案：移除未使用的导入
pnpm lint  # 会自动清理
```

#### 拼写检查失败诊断
```bash
# 常见问题：技术术语被标记为拼写错误
# 解决方案1：确认确实是错误，修正拼写
# 解决方案2：如果是专业术语，添加到项目词典
echo "homeassistant" >> .cspell.json

# 解决方案3：忽略特定文件或目录
# 在 .cspell.json 中配置 ignorePaths
```

#### 测试失败诊断
```typescript
// 常见问题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(),
  },
}));
```

### 3. CI/CD 流水线标准验证
确保代码符合项目的 CI/CD 要求，避免流水线失败。

#### CI 检查清单
```yaml
# GitHub Actions CI 流程检查项
- ✅ 类型检查通过 (pnpm typecheck)
- ✅ 代码规范检查通过 (pnpm lint)
- ✅ 拼写检查通过 (pnpm spellcheck)
- ✅ 构建成功 (pnpm build)
- ✅ 测试通过 (pnpm test:coverage)
- ✅ 覆盖率达到要求
```

#### 覆盖率要求验证
```bash
# 检查当前覆盖率
pnpm test:coverage

# 覆盖率要求（基于 vitest.config.ts）
- 函数覆盖率: 80%
- 行覆盖率: 80%
- 语句覆盖率: 80%
- 分支覆盖率: 70%
```

### 4. 预提交检查自动化
在代码提交前自动执行所有必要的检查，确保只提交高质量的代码。

#### Git Hooks 集成
```bash
# 安装 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"
```

#### 手动预提交检查
```bash
# 完整预提交检查流程
function preCommitCheck() {
  echo "🔍 执行预提交检查..."

  # 1. 代码规范检查和修复（包括格式化）
  pnpm lint

  # 2. 类型检查
  pnpm typecheck

  # 3. 拼写检查
  pnpm spellcheck

  # 4. 运行测试
  pnpm test

  # 5. 生成覆盖率报告
  pnpm test:coverage

  echo "✅ 预提交检查完成"
}
```

## 检查规则详解

### 1. 强制检查时机
```bash
# 必须执行检查的时机
- ✅ 每次代码修改后
- ✅ 提交代码前 (git commit)
- ✅ 创建 PR 前
- ✅ 合并到 main 分支前
- ✅ 发布版本前
```

### 2. 检查失败处理流程
```typescript
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;
  }
}
```

### 3. 质量门禁标准
```typescript
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%
  };
}
```

## 自动化修复

### 1. 一键修复命令
```bash
# 修复所有可自动修复的问题
pnpm lint

# 如果仍有问题，运行详细诊断
pnpm check:all  # 查看具体错误
pnpm typecheck  # 查看类型错误详情
pnpm spellcheck  # 查看拼写错误详情
```

### 2. 智能修复脚本
```typescript
#!/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 "✅ 自动修复完成！"
```

### 3. 渐进式修复策略
```typescript
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: '拼写错误（添加到词典或修正）'
  }
];
```

## 质量报告

### 1. 检查结果报告
```typescript
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[];
  };
}
```

### 2. 质量趋势分析
```bash
# 生成质量报告
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 "- 保持测试覆盖率在要求水平以上"
}
```

## 集成方式

### 1. CLI 集成
```bash
# 使用技能验证代码质量
skill: ci-validator

# 手动执行完整检查
pnpm check:all && pnpm test

# 快速检查（仅核心检查）
pnpm lint && pnpm test
```

### 2. IDE 集成建议
```json
// .vscode/settings.json
{
  "editor.formatOnSave": true,
  "editor.codeActionsOnSave": {
    "quickfix.biome": "explicit",
    "source.organizeImports": "explicit"
  },
  "typescript.preferences.preferTypeOnlyAutoImports": true,
  "cSpell.enableFiletypes": ["typescript", "javascript", "markdown", "yaml"]
}
```

### 3. Git 工作流集成
```bash
# 创建 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     # 完整质量检查
```

## 最佳实践

### 1. 预防性检查
- **每次保存文件时**：启用 IDE 自动格式化
- **每完成一个功能**：运行 `pnpm check:all`
- **每天结束开发前**：运行完整质量检查

### 2. 渐进式改进
- 优先修复高优先级问题
- 保持代码始终可编译
- 定期更新质量标准

### 3. 团队协作
- 统一开发环境配置
- 建立代码审查检查清单
- 分享质量改进经验

### 4. 持续监控
- 设置质量指标监控
- 定期生成质量报告
- 追踪质量趋势变化

通过这个技能，可以确保 xiaozhi-client 项目始终保持高质量的代码标准，减少 CI/CD 流水线失败，提升开发效率和代码质量。特别适配项目的 MCP 协议特性和复杂路径别名系统。

