Skip to content

CLI: 新增 flexllm schema 命令做命令树内省 #8

@KenyonY

Description

@KenyonY

背景

agent 理解一个 CLI 当前唯一的路径是递归调用 `--help` 并解析自然语言。这既耗 token 又易幻觉。

agent-cli-guide P7 建议提供 schema 内省:

```bash
mytool schema --all # 完整命令树 JSON
mytool schema user create # 单个命令的参数定义
```

目标

新增 `flexllm schema` 子命令,利用 Typer/Click 内部元数据直接导出:

```json
{
"name": "ask",
"description": "LLM 快速问答",
"arguments": [
{"name": "prompt", "required": false, "type": "string"}
],
"options": [
{
"name": "--format",
"type": "enum",
"choices": ["json", "table"],
"default": "table",
"required": false,
"description": "输出格式"
}
],
"exit_codes": {"0": "成功", "3": "模型未找到"},
"examples": ["flexllm ask 'hi'"]
}
```

实现思路

  • 遍历 `app.registered_commands` + `click_obj.params`
  • 支持 `flexllm schema`(全部)/ `flexllm schema `(单个)
  • 默认输出 JSON 到 stdout(与本 issue 无依赖的场景也能用)
  • 加 `--format ndjson` 方便流式解析

验收

  • `flexllm schema` 输出合法 JSON
  • `flexllm schema ask` 只输出 ask 定义
  • 字段完整:arguments/options/choices/defaults/examples/exit_codes
  • 在顶层 help 中 "Agent friendly" 一节提示此命令存在

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