背景
对照 agent-cli-guide review 现有 flexllm --help,发现最高 ROI 的缺口是:agent 无法可靠判断失败类型(只有 0/非0),也无法稳定解析核心命令的输出。
问题
- 所有命令 help 都没有文档化退出码。目前只有默认的 0 = 成功 / 1 = 异常。agent 只能靠解析 stderr 猜测,无法自动重试/修正。
- 核心命令没有结构化输出:
ask、chat、batch、serve、mock 都没有 --format json / --json。只有 list/models/test/version/pricing/credits 支持,agent 使用核心命令时必须解析自然语言输出。
- 现有
--json 是布尔开关,缺少统一的 --format json|table|ndjson 枚举。batch 天然适合 NDJSON 流式输出。
目标
退出码规范(POSIX 兼容)
| 码 |
含义 |
| 0 |
成功 |
| 1 |
通用错误 |
| 2 |
用法/参数错误 |
| 3 |
资源未找到(模型/配置/文件) |
| 4 |
权限拒绝(API key 错误/额度不足) |
| 5 |
冲突(资源已存在) |
| 10 |
Dry-run 成功(非实际执行) |
- 在 `flexllm/cli/exit_codes.py` 定义 `ExitCode` IntEnum
- 在顶层 `flexllm --help` 末尾追加 "Exit Codes" 章节
- 所有抛错路径替换 `typer.Exit(1)` 为具体码
核心命令 --format json
优先覆盖:`ask` / `batch` / `test`(对齐已有)。
- `ask --format json` 输出 `{content, thinking, usage, model, elapsed_ms}`
- `batch` 终端汇总改为 `--format json` 时输出聚合指标 JSON(输出文件本身已是 JSONL)
- stdout 只放数据,所有进度/日志走 stderr(`batch` 的进度条已经用 rich stderr,核查保持)
验收
背景
对照 agent-cli-guide review 现有
flexllm --help,发现最高 ROI 的缺口是:agent 无法可靠判断失败类型(只有 0/非0),也无法稳定解析核心命令的输出。问题
ask、chat、batch、serve、mock都没有--format json/--json。只有list/models/test/version/pricing/credits支持,agent 使用核心命令时必须解析自然语言输出。--json是布尔开关,缺少统一的--format json|table|ndjson枚举。batch天然适合 NDJSON 流式输出。目标
退出码规范(POSIX 兼容)
核心命令 --format json
优先覆盖:`ask` / `batch` / `test`(对齐已有)。
验收