Files
agent-aide/aide-program/docs/06-输出格式规范.md
2025-12-13 04:37:41 +08:00

8.6 KiB
Raw Blame History

输出格式规范

一、设计原则

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 中实现以下函数:

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 使用示例

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 退出码使用

import sys

# 成功
sys.exit(0)

# 参数错误
sys.exit(2)

# 环境错误
sys.exit(3)

八、测试要求

8.1 输出测试

每个命令必须测试:

  1. 成功场景:验证输出格式正确
  2. 警告场景:验证警告信息正确
  3. 错误场景:验证错误信息和退出码
  4. 静默场景:验证幂等操作无输出

8.2 测试示例

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