Skip to content

CLI: TTY 感知行为(非 TTY 默认 JSON / NO_COLOR / --no-interactive) #7

Description

@KenyonY

问题

flexllm 现有 CLI 没有 TTY 感知,违反 agent-cli-guide P4。agent 调用场景几乎都在非 TTY,但:

  • 非 TTY 下仍然输出 ANSI 颜色 / rich 表格
  • `chat` 多轮模式在非 TTY 下会挂起等待输入(agent 无法判断)
  • 未支持 `NO_COLOR` / `TERM=dumb` 环境变量
  • 没有统一的 `--yes` / `--no-interactive` 绕过确认

目标

  1. 顶层加一个 `_detect_non_tty()` helper,检测 `not sys.stdout.isatty()`
  2. 非 TTY 时:
    • 默认 `--format json`(如命令支持)
    • 禁用 rich 颜色输出(`Console(no_color=True, force_terminal=False)`)
    • 禁用所有 `Prompt.ask`,缺输入直接报错退出码 2
  3. 尊重 `NO_COLOR` 和 `TERM=dumb` 环境变量
  4. 新增全局标志:
    • `--no-interactive` / `-y`:跳过所有确认提示
    • `--no-color`:强制禁用颜色
    • `--color`:强制启用颜色
  5. 在顶层 help 的 "Global Options" 说明 TTY 行为差异

验收

  • `flexllm ask "x" | cat` 输出 JSON 无颜色
  • `NO_COLOR=1 flexllm list` 输出无颜色
  • `echo "" | flexllm chat`(非 TTY 无消息)立即退出码 2 + 错误 JSON
  • `flexllm set-model x` 在非 TTY 不提示确认

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions