[ PROMPT_NODE_25326 ]
rust-cli-builder
[ SKILL_DOCUMENTATION ]
# Rust CLI 工具构建器
## 何时使用
当你需要执行以下操作时使用此技能:
- 从零开始使用 clap 构建新的 Rust CLI 工具
- 为现有的 CLI 应用程序添加子命令
- 实现配置文件加载 (TOML/JSON/YAML)
- 使用 anyhow/thiserror 设置完善的错误处理
- 添加彩色和格式化的终端输出
- 构建 CLI 项目以便通过 cargo install 或 GitHub 发布进行分发
## 第一阶段:探索(规划模式)
进入规划模式。在编写任何代码之前,先探索现有项目:
### 如果扩展现有项目
- 查找 `Cargo.toml` 并检查当前依赖项(clap 版本、serde、tokio 等)
- 定位 CLI 入口点 (`src/main.rs` 或 `src/cli.rs`)
- 检查 clap 是使用派生宏(derive macros)还是构建器模式
- 识别现有的子命令结构
- 查找现有的错误类型、配置结构体和输出格式
- 检查是否有将库逻辑与 CLI 分离的 `src/lib.rs`
### 如果从零开始
- 检查工作区中是否有现有的 Rust 项目或工作区 `Cargo.toml`
- 查找带有自定义设置的 `.cargo/config.toml`
- 检查 `rust-toolchain.toml` 以了解目标 Rust 版本
## 第二阶段:访谈(AskUserQuestion)
使用 AskUserQuestion 来澄清需求。分轮提问。
### 第一轮:工具用途和命令
问题: "你正在构建什么样的 CLI 工具?"
标题: "工具类型"
选项:
- "单命令 (如 ripgrep, curl)" — 带有标志和参数的主要操作
- "多命令 (如 git, cargo)" — 一个二进制文件下的多个子命令
- "交互式 REPL (如 psql)" — 带有提示循环的持久会话
- "管道工具 (如 jq, sed)" — 读取 stdin,转换,写入 stdout
问题: "该工具将操作什么?"
标题: "输入"
选项:
- "文件/目录" — 读取、处理或生成文件
- "网络/API" — HTTP 请求、TCP 连接、API 调用
- "系统资源" — 进程、硬件信息、操作系统配置
- "数据流 (stdin/stdout)" — 管道友好的文本/二进制处理
### 第二轮:子命令(如果是多命令)
问题: "描述你需要的子命令 (例如 'init', 'build', 'deploy')"
标题: "命令"
选项:
- "2-3 个子命令 (我会描述它们)" — 小型专注工具
- "4-8 个带有分组的子命令" — 中型工具,可能需要命令组
- "我有一个粗略的列表,请帮我设计 API" — 协作式命令设计
### 第三轮:配置和输出
问题: "该工具应该如何配置