Skip to content

规则配置

MyDeskBot 提供强大的规则系统,支持多种配置方法来定义 AI 助手行为准则,确保生成的代码符合项目标准和团队规范。

规则配置方法

MyDeskBot 支持三种主要的规则配置方式:

1. 配置文件规则(config.yaml)

在项目根目录的 config.yaml 文件中直接定义规则。

2. 规则文件夹(.mydeskbot/rules/)

将 Markdown 格式的规则文件放在 .mydeskbot/rules/ 目录中。

3. 代码库规则文件(rules.md)

在代码库的任何位置放置 rules.md 文件。规则将自动应用于该目录及其子目录。

配置文件规则格式

字符串规则

直接描述需求的简单规则定义:

yaml
# config.yaml
name: 我的 MyDeskBot 配置
version: 0.0.1
schema: v1

rules:
  - "始终包含类型注解"
  - "遵循现有代码风格"
  - "为复杂逻辑添加注释"

对象规则

带有名称和描述的详细规则:

yaml
rules:
  - name: "comment-complex"
    rule: "为复杂逻辑添加注释"
    description: "为超过 5 行的复杂函数添加注释"
  - name: "test-coverage"
    rule: "确保测试覆盖率不低于 80%"
    globs: ["**/*.ts", "**/*.js"]

Markdown 规则文件格式

基本 Markdown 规则

.mydeskbot/rules/ 目录或代码库的 rules.md 文件中:

markdown
---
name: "typescript-style"
globs: ["**/*.ts", "**/*.tsx"]
description: "TypeScript 编码标准"
---

# TypeScript 编码标准

所有 TypeScript 文件必须遵循这些标准:

1. 使用 2 个空格缩进
2. 所有函数参数必须包含类型注解
3. 优先使用 interface 而不是 type
4. 避免使用 any 类型

高级 Markdown 规则

markdown
---
name: "component-rules"
globs: ["src/components/**/*.{js,jsx,ts,tsx}"]
regex: ["^[A-Z]"]
alwaysApply: true
invokable: false
---

# React 组件规则

React 组件必须遵循以下规范:

- 组件名称必须以大写字母开头
- 使用函数组件而不是类组件
- 每个组件文件应包含对应的样式文件

规则字段说明

基本字段

  • name:规则名称(推荐用于标识和引用)
  • rule:Markdown 格式的规则内容
  • description:规则描述(可选)

应用控制字段

  • globs:文件匹配模式,字符串或数组格式
  • regex:用于文件内容匹配的正则表达式模式
  • alwaysApply:是否始终应用此规则(默认:false)
  • invokable:是否允许用户手动触发此规则(默认:false)
  • sourceFile:规则源文件路径(自动设置)

文件匹配模式

Glob 模式示例

yaml
# 匹配特定文件类型
globs: ["**/*.ts", "**/*.tsx"]

# 匹配特定目录
globs: ["src/components/**/*"]

# 排除特定文件
globs: ["**/*.ts", "!**/*.test.ts"]

# 多种模式组合
globs: ["src/**/*.{js,ts}", "!src/**/*.d.ts"]

Regex 模式示例

yaml
# 匹配文件内容
regex: ["console\\.log", "TODO|FIXME"]

# 复杂正则表达式
regex: ["^\\s*function\\s+\\w+", "class\\s+\\w+.*extends"]

规则目录结构

全局规则目录

.mydeskbot/
├── rules/
│   ├── global-style.md      # 全局样式规则
│   ├── security.md          # 安全规则
│   └── performance.md       # 性能规则
└── prompts/
    ├── code-review.md       # 代码审查提示
    └── debugging.md         # 调试提示

代码库规则示例

src/
├── components/
│   ├── Button.tsx
│   └── rules.md            # 组件特定规则
├── utils/
│   ├── helper.ts
│   └── rules.md            # 工具函数规则
└── rules.md                # src 目录规则

规则示例

1. 配置文件规则

yaml
# config.yaml
name: 我的 MyDeskBot 配置
version: 0.0.1
schema: v1

models:
  - name: "gpt-4"
    provider: "openai"
    model: "gpt-4"
    apiKey: "${OPENAI_API_KEY}"
    roles: ["chat"]

rules:
  - "始终包含类型注解"
  - "遵循现有代码风格"
  - name: "typescript-strict"
    rule: "TypeScript 代码必须使用严格模式"
    globs: ["**/*.ts", "**/*.tsx"]
    alwaysApply: true

2. Markdown 规则文件

markdown
---
name: "react-components"
globs: ["src/components/**/*.{js,jsx,ts,tsx}"]
alwaysApply: true
invokable: false
---

# React 组件开发标准

所有 React 组件必须遵循以下规范:

## 组件结构

- 使用函数组件而不是类组件
- 组件名称必须以大写字母开头
- 使用默认导出

## 类型定义

- 所有 props 必须定义 TypeScript 接口
- 使用 React.FC 或显式返回类型
- 避免使用 any 类型

## 样式处理

- 优先使用 CSS Modules 或 styled-components
- 避免内联样式
- 考虑响应式设计

3. 特定目录规则

markdown
---
name: "test-coverage"
globs: ["**/*.test.{js,ts}", "**/*.spec.{js,ts}"]
regex: ["test|it\\("]
---

# 测试文件规范

测试文件必须包含:

1. **描述性的测试名称**
2. **Arrange-Act-Assert 结构**
3. **边界情况测试**
4. **错误处理测试**

每个测试函数必须有清晰的断言,确保测试覆盖率不低于 80%。

高级功能

可调用规则

带有 invokable: true 的规则可以在聊天中手动触发:

markdown
---
name: "code-review"
invokable: true
description: "全面的代码审查"
---

# 代码审查规则

请对提供的代码进行全面审查,检查:

1. **代码质量**:可读性、可维护性
2. **安全性**:潜在的安全漏洞
3. **性能**:性能优化建议
4. **测试**:测试覆盖率
5. **文档**:文档完整性

提供具体的改进建议和最佳实践。

规则优先级

  1. 并置规则:与文件同目录的 rules.md
  2. 全局 Markdown 规则.mydeskbot/rules/ 目录中的规则
  3. 配置文件规则:在 config.yaml 中定义的规则

条件匹配规则

markdown
---
name: "production-safety"
globs: ["src/**/*.{js,ts}"]
regex: ["console\\.(log|warn|error)", "debugger"]
---

# 生产环境安全检查

以下内容不应出现在生产代码中:

- ❌ console.log(), console.warn(), console.error()
- ❌ debugger 语句
- ❌ 硬编码的 API 密钥
- ❌ 注释掉的调试代码

请使用适当的日志系统和环境变量管理。

规则管理最佳实践

1. 规则组织

  • 按功能模块组织规则文件
  • 使用清晰的命名约定
  • 定期审查和更新规则

2. 团队协作

markdown
---
name: "team-standards"
globs: ["**/*.{js,ts,jsx,tsx}"]
description: "团队编码标准"
---

# 团队编码标准

此规则定义了所有团队编码标准。请确保所有新代码符合这些规范。

## 命名约定

- 组件:PascalCase
- 变量/函数:camelCase
- 常量:UPPER_SNAKE_CASE
- 文件名:kebab-case

## 代码组织

- 按功能模块组织文件
- 保持文件大小合理(< 300 行)
- 使用 index.ts 导出公共接口

3. 规则测试

  • 使用示例代码验证规则有效性
  • 定期审查规则的实际应用
  • 根据团队反馈调整规则内容

故障排除

常见问题

规则未生效

  1. 检查文件路径和 glob 模式
  2. 验证 YAML frontmatter 格式
  3. 确认规则文件位置正确

规则冲突

  1. 规则按优先级应用,后规则可能覆盖先前的规则
  2. 使用 alwaysApply: true 确保规则始终生效
  3. 检查 globs 和 regex 匹配逻辑

性能问题

  1. 避免过于复杂的 regex 模式
  2. 合理使用 globs 限制规则应用范围
  3. 定期清理不必要的规则文件