📃 docs: 部分完成

This commit is contained in:
2025-12-13 04:37:41 +08:00
parent 52dffe2803
commit b2c26cb9db
9 changed files with 4628 additions and 0 deletions

View File

@@ -0,0 +1,428 @@
# 输出格式规范
## 一、设计原则
### 1.1 核心原则
1. **精简优先**:成功时输出极简,失败时输出详细
2. **一致性**:所有命令使用统一的输出格式
3. **可解析性**:输出格式便于程序解析(如需要)
4. **用户友好**:错误信息包含解决建议
### 1.2 静默原则
**无输出 = 正常完成**
适用于幂等操作,例如:
- 配置项已经是目标值时,`aide config set` 不输出
- 目录已存在时,创建目录操作不输出
---
## 二、输出前缀
### 2.1 前缀定义
所有输出行必须以以下前缀之一开头:
| 前缀 | Unicode | 含义 | 颜色(可选) | 退出码 |
|------|---------|------|-------------|--------|
| `✓` | U+2713 | 成功 | 绿色 | 0 |
| `⚠` | U+26A0 | 警告(可继续) | 黄色 | 0 |
| `✗` | U+2717 | 错误(失败) | 红色 | 非0 |
| `→` | U+2192 | 信息/进行中 | 蓝色 | - |
### 2.2 使用场景
**✓ 成功**
```
✓ 环境就绪 (python:3.12)
✓ 已创建 .aide/ 目录
✓ 已生成默认配置
```
**⚠ 警告**
```
⚠ 已修复: 创建虚拟环境 .venv
⚠ 配置文件不存在,使用默认配置
⚠ Python 版本较旧 (3.10),建议升级到 3.11+
```
**✗ 错误**
```
✗ Python 版本不满足要求 (需要 >=3.10, 当前 3.8)
建议: 安装 Python 3.10+ 或使用 pyenv 管理版本
✗ 配置文件格式错误: 第5行缺少引号
位置: .aide/config.toml:5
```
**→ 信息**
```
→ 正在检测环境...
→ 正在创建配置文件...
→ 配置值: task.source = "task-now.md"
```
---
## 三、输出格式
### 3.1 单行输出
**格式**`<前缀> <消息>`
**示例**
```
✓ 环境就绪 (python:3.12)
⚠ 已修复: 创建虚拟环境 .venv
✗ Python 未安装
```
### 3.2 多行输出
**格式**
```
<前缀> <主消息>
<详细信息行1>
<详细信息行2>
```
**缩进规则**
- 主消息行:前缀 + 空格 + 消息
- 详细信息行2个空格缩进
**示例**
```
✗ Python 版本不满足要求 (需要 >=3.10, 当前 3.8)
建议: 安装 Python 3.10+ 或使用 pyenv 管理版本
文档: https://docs.python.org/3/using/index.html
```
### 3.3 列表输出
**格式**
```
<前缀> <标题>
- <项目1>
- <项目2>
```
**示例**
```
✓ 环境就绪
- python: 3.12.0
- uv: 0.4.0
- git: 2.40.0
```
---
## 四、特殊场景
### 4.1 配置输出
**aide config get**
单个值:
```
task.source = "task-now.md"
```
多个值(如果支持):
```
task.source = "task-now.md"
task.spec = "task-spec.md"
```
数组值:
```
flow.phases = ["flow-design", "impl", "verify", "docs", "finish"]
```
**aide config set**
成功时无输出(静默原则)
失败时:
```
✗ 配置键不存在: invalid.key
可用的配置键: task.source, task.spec, env.python.version
```
### 4.2 环境检测输出
**成功(无问题)**
```
✓ 环境就绪 (python:3.12)
```
**成功(自动修复)**
```
⚠ 已修复: 创建虚拟环境 .venv
✓ 环境就绪 (python:3.12)
```
**失败(无法修复)**
```
✗ Python 版本不满足要求 (需要 >=3.10, 当前 3.8)
建议: 安装 Python 3.10+ 或使用 pyenv 管理版本
```
### 4.3 初始化输出
**首次初始化**
```
✓ 已创建 .aide/ 目录
✓ 已生成默认配置
✓ 已添加 .aide/ 到 .gitignore
```
**重复初始化**
```
⚠ .aide/ 目录已存在
⚠ 配置文件已存在,跳过生成
```
---
## 五、实现规范
### 5.1 输出函数接口
建议在 `core/output.py` 中实现以下函数:
```python
def ok(message: str, details: list[str] | None = None) -> None:
"""输出成功信息
Args:
message: 主消息
details: 详细信息列表(可选)
"""
pass
def warn(message: str, details: list[str] | None = None) -> None:
"""输出警告信息
Args:
message: 主消息
details: 详细信息列表(可选)
"""
pass
def err(message: str, details: list[str] | None = None) -> None:
"""输出错误信息
Args:
message: 主消息
details: 详细信息列表(可选)
"""
pass
def info(message: str, details: list[str] | None = None) -> None:
"""输出信息
Args:
message: 主消息
details: 详细信息列表(可选)
"""
pass
```
### 5.2 使用示例
```python
from core.output import ok, warn, err, info
# 简单成功
ok("环境就绪 (python:3.12)")
# 带详细信息的警告
warn("已修复: 创建虚拟环境 .venv")
# 带建议的错误
err(
"Python 版本不满足要求 (需要 >=3.10, 当前 3.8)",
[
"建议: 安装 Python 3.10+ 或使用 pyenv 管理版本",
"文档: https://docs.python.org/3/using/index.html"
]
)
# 进行中信息
info("正在检测环境...")
```
### 5.3 颜色支持(可选)
如果实现颜色输出,必须:
1. **检测终端支持**:使用 `sys.stdout.isatty()` 检测
2. **提供禁用选项**:通过环境变量 `NO_COLOR``--no-color` 参数
3. **跨平台兼容**Windows 需要特殊处理colorama 或 ANSI 转义)
**颜色映射**
- ✓ 成功:绿色(`\033[32m`
- ⚠ 警告:黄色(`\033[33m`
- ✗ 错误:红色(`\033[31m`
- → 信息:蓝色(`\033[34m`
---
## 六、错误信息规范
### 6.1 错误信息结构
```
✗ <问题描述> (<具体原因>)
<解决建议>
<相关信息>
```
### 6.2 错误信息要素
1. **问题描述**:清晰说明出了什么问题
2. **具体原因**:括号内说明具体原因(如版本号、路径等)
3. **解决建议**:以"建议:"开头,提供可行的解决方案
4. **相关信息**:文档链接、配置位置等
### 6.3 错误信息示例
**环境错误**
```
✗ Python 版本不满足要求 (需要 >=3.10, 当前 3.8)
建议: 安装 Python 3.10+ 或使用 pyenv 管理版本
```
**配置错误**
```
✗ 配置文件格式错误 (第5行: 缺少引号)
位置: .aide/config.toml:5
建议: 检查 TOML 语法,确保字符串值使用引号
```
**文件错误**
```
✗ 任务文档不存在 (task-now.md)
建议: 创建任务文档或使用 --file 参数指定路径
```
**权限错误**
```
✗ 无法创建目录 (.aide/)
原因: 权限不足
建议: 检查当前目录的写入权限
```
---
## 七、退出码规范
### 7.1 退出码定义
| 退出码 | 含义 | 使用场景 |
|-------|------|---------|
| 0 | 成功 | 操作成功完成 |
| 1 | 一般错误 | 操作失败,原因不明确 |
| 2 | 参数错误 | 命令参数错误或缺失 |
| 3 | 环境错误 | 环境不满足要求 |
| 4 | 配置错误 | 配置文件错误 |
| 5 | 文件错误 | 文件不存在或无法访问 |
### 7.2 退出码使用
```python
import sys
# 成功
sys.exit(0)
# 参数错误
sys.exit(2)
# 环境错误
sys.exit(3)
```
---
## 八、测试要求
### 8.1 输出测试
每个命令必须测试:
1. **成功场景**:验证输出格式正确
2. **警告场景**:验证警告信息正确
3. **错误场景**:验证错误信息和退出码
4. **静默场景**:验证幂等操作无输出
### 8.2 测试示例
```python
def test_env_ensure_success(capsys):
"""测试环境检测成功输出"""
# 执行命令
result = env_ensure()
# 验证退出码
assert result == 0
# 验证输出
captured = capsys.readouterr()
assert "✓ 环境就绪" in captured.out
assert "python:" in captured.out
def test_env_ensure_failure(capsys):
"""测试环境检测失败输出"""
# 模拟 Python 版本过低
with mock_python_version("3.8"):
result = env_ensure()
# 验证退出码
assert result == 3
# 验证输出
captured = capsys.readouterr()
assert "✗ Python 版本不满足要求" in captured.out
assert "建议:" in captured.out
```
---
## 九、国际化考虑(可选)
如果需要支持多语言:
1. **消息模板**:将所有消息定义为模板
2. **语言检测**:通过环境变量 `LANG``--lang` 参数
3. **回退机制**:不支持的语言回退到英文
**当前阶段**:仅支持简体中文,国际化可在后续版本实现。
---
## 十、总结
### 10.1 核心要点
1. 使用统一的前缀(✓ ⚠ ✗ →)
2. 成功时输出极简,失败时输出详细
3. 错误信息包含解决建议
4. 遵循静默原则(幂等操作)
5. 使用明确的退出码
### 10.2 实现检查清单
- [ ] 实现 `core/output.py` 模块
- [ ] 定义 ok/warn/err/info 函数
- [ ] 支持单行和多行输出
- [ ] 实现颜色支持(可选)
- [ ] 定义退出码常量
- [ ] 编写输出测试用例
- [ ] 验证跨平台兼容性
---
**版本**v1.0
**更新日期**2025-12-13