背景
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` 方便流式解析
验收
背景
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'"]
}
```
实现思路
验收