📄 本页由源文件
skills/dev-flow/references/menu.md自动投影生成(单一权威源)。请勿直接编辑本页。
dev:ask — 全功能交互式菜单
一、路由声明
- 加载方式:SKILL.md 触发 →
read_file("references/menu.md") - 不进入步骤流程:不输出步骤完成标记 JSON,不写入工作上下文,不进入 dev-flow 步骤链
- 交互协议:每一级菜单必须遵守"双重展示"规则:
- 先输出 Markdown 选项表格
- 再调用
ask_followup_question弹出交互式选项 - 表格行数与 options 数组长度严格一致
- 编号一致
二、状态感知(每次加载时执行,必须)
以下 4 项检测在加载本文件后、弹出主菜单前执行,结果用于决定菜单选项的显示/隐藏:
检测清单
| # | 检测项 | 命令 | 用途 |
|---|---|---|---|
| S1 | 活跃流程存在 | ls ~/.codebuddy/working-context/.active-flows/*.flow 2>/dev/null | 决定 B1/B4/B5 是否显示 |
| S2 | 已完成工作上下文 | ls ~/.codebuddy/working-context/*.md 2>/dev/null + grep status: (completed|testing|delivered) | 决定 B2/B3 是否显示 |
| S3 | 在 git 仓库中 | git rev-parse --git-dir 2>/dev/null | 部分选项的前提 |
| S4 | 当前分支 | git branch --show-current 2>/dev/null | B2/B3 匹配精度 |
结果处理
- 无可用选项时:不显示该选项(而非灰显),菜单保持简洁
- S1 命中时:一级 B 菜单标注
[🔴 有活跃流程] - S2 命中时:一级 B 菜单标注
[🟢 有已完成需求] - S1 和 S2 均未命中:一级 B 菜单标注
[⚪ 无相关状态]
三、一级菜单
一级菜单始终显示全部 6 个入口,状态徽标根据 §二 检测结果动态更新。
主菜单定义
| 选项 | 名称 | 状态徽标 | 进入 |
|---|---|---|---|
| A | 🚀 开始新的开发任务 | — | → §四-A |
| B | 🔄 继续已有需求 / 修复问题 | {动态} | → §四-B |
| C | 📝 同步文档与知识管理 | — | → §四-C |
| D | 📊 查看状态、度量与可视化 | — | → §四-D |
| E | 🛠 工具:项目接入、流程图、帮助 | — | → §四-E |
| F | ❓ 场景向导(不确定该用什么?) | — | → §四-F |
交互指令
必须先输出以下表格,再立即调用 ask_followup_question:
选项 A:🚀 开始新的开发任务
选项 B:🔄 继续已有需求 / 修复问题 {S1/S2 徽标}
选项 C:📝 同步文档与知识管理
选项 D:📊 查看状态、度量与可视化
选项 E:🛠 工具:项目接入、流程图、帮助
选项 F:❓ 场景向导(不确定该用什么?帮我判断)ask_followup_question 参数:
- question: "请选择你要使用的功能:"
- options: 6 个选项(与表格逐条对应)
- multiSelect: false
四、二级菜单(全部展开定义)
§四-A:🚀 开始新的开发任务
| 选项 | 名称 | 说明 | 背后命令 | 行为类型 |
|---|---|---|---|---|
| A1 | 📌 标准开发 | 常规功能开发/Bug修复(阶段0→步骤1→...) | dev-flow <描述> | 需输入→入流程 |
| A2 | ⚡ 精简模式 | 减少交互确认,叠加 --fast | dev-flow --fast <描述> | 需输入→入流程 |
| A3 | 🔧 快速修复 | ≤3文件 + ≤10行/文件 + 已知位置 | --micro <位置> <改动> | 需输入→入流程 |
| A0 | ← 返回主菜单 | 回到一级菜单 | — | 导航 |
交互指令:
先输出表格 + ask_followup_question(A0/A1/A2/A3),用户选择后:
- A0:重新显示一级主菜单(§三)
- A1/A2:弹文本提示"请描述你要开发或修复的内容:"→ 收集描述 → 执行
dev-flow [--fast] <描述> - A3:弹文本提示"请提供文件路径、行号和改动描述(如
src/utils.ts L42 修复拼写):"→ 收集 → 评估阈值 → 进入 micro-fix 或提示降级
§四-B:🔄 继续已有需求 / 修复问题
状态感知规则:
| 选项 | 名称 | 前提条件 | 背后命令 | 行为类型 |
|---|---|---|---|---|
| B1 | ▶️ 恢复上次中断的流程 | S1=命中 | 自然语言描述相关话题 | 入流程 |
| B2 | 🔄 迭代修复(提测反馈等) | S2=命中 | dev:fix --iteration "描述" | 需输入→入流程 |
| B3 | 🔀 需求漂移处理 | S2=命中 | dev:fix --drift "描述" | 需输入→入流程 |
| B4 | 📦 继续下一批 | S1=命中 + .flow 中 batch_mode=true | "继续下一批" | 入流程 |
| B5 | 🎚 切换交互模式 | S1=命中 | "少问我" / "每步都问我" | 需选择→执行 |
| B0 | ← 返回主菜单 | 始终显示(子菜单存在时) | — | 导航 |
交互指令:
先输出表格(仅包含条件满足的选项 + B0)+ ask_followup_question,用户选择后:
- B0:重新显示一级主菜单(§三)
- B1:提示"请描述你想继续做什么:"→ 进入活跃流程恢复
- B2:提示"请描述本次反馈/问题:"→ 执行
dev:fix --iteration "描述" - B3:提示"请描述需求变更内容:"→ 执行
dev:fix --drift "描述" - B4:直接执行"继续下一批"
- B5:弹选项"少问我(精简模式)/ 每步都问我(标准模式)"→ 直接切换
S1/S2 均未命中时:B 子菜单不打开(不显示 ask_followup_question),主菜单 B 项标注 [⚪ 无相关状态],点选后直接提示"当前未检测到活跃流程或已完成需求。请使用 A 开始新任务,或 F 场景向导帮你判断。"
§四-C:📝 同步文档与知识管理
| 选项 | 名称 | 说明 | 背后命令 | 行为类型 |
|---|---|---|---|---|
| C1 | 📄 全量文档同步 | devlog + knowledge + 文档平台 + 工作上下文 | dev:sync | 即执行 |
| C2 | 🧠 知识库管理 | 查看/扫描/搜索/沉淀项目知识 | dev:kb | 入流程 |
| C0 | ← 返回主菜单 | 回到一级菜单 | — | 导航 |
交互指令:
先输出表格 + ask_followup_question(C0/C1/C2),用户选择后:
- C0:重新显示一级主菜单(§三)
- C1:直接执行
dev:sync - C2:进入
dev:kb知识库管理流程
§四-D:📊 查看状态、度量与可视化
| 选项 | 名称 | 背后命令 | 行为类型 |
|---|---|---|---|
| D1 | 📈 流程进度概览 | dev:status | 即执行 |
| D2 | 🔍 实时观测(Token/红牌/耗时) | dev:status --trace | 即执行 |
| D3 | 📊 开发度量(最近 5 次) | dev:metrics | 即执行 |
| D4 | 📋 全部历史度量 | dev:metrics --all | 即执行 |
| D5 | 📈 度量趋势分析 | dev:metrics --trend | 即执行 |
| D6 | 📑 指定需求度量报告 | dev:metrics --report <ID> | 需输入 |
| D7 | 📐 可视化仪表盘 | dev:metrics --dashboard | 即执行 |
| D0 | ← 返回主菜单 | 回到一级菜单 | 导航 |
交互指令:
先输出表格 + ask_followup_question(D0/D1/D2/.../D7),用户选择后:
- D0:重新显示一级主菜单(§三)
- D1~D5, D7:直接执行对应命令
- D6:提示"请输入需求 ID(或需求关键词):"→ 收集后执行
§四-E:🛠 工具:项目接入、流程图、帮助
| 选项 | 名称 | 背后命令 | 行为类型 |
|---|---|---|---|
| E1 | 🆕 项目接入 / 刷新 profile | dev:onboard | 入流程 |
| E2 | 📐 生成/更新流程图 | dev:flowchart | 入流程 |
| E3 | 📖 查看完整帮助 | dev:help | 即执行 |
| E0 | ← 返回主菜单 | 回到一级菜单 | 导航 |
交互指令:
先输出表格 + ask_followup_question(E0/E1/E2/E3),用户选择后:
- E0:重新显示一级主菜单(§三)
- E1~E3:执行对应命令
§四-F:❓ 场景向导
§四-F:❓ 场景向导(决策树式多轮问答)
通过 2 轮交互式问答帮用户定位到正确的命令。
第一轮:判断场景大类
| 选项 | 场景描述 | 进入 |
|---|---|---|
| F1 | 我有一个新需求/新功能要开发 | → §F.1 |
| F2 | 之前走完流程的需求,现在又发现新问题/新反馈需要修复 | → §F.2 |
| F3 | 之前走完流程的需求,又改了代码,只想同步文档 | → §F.3 |
| F4 | 产品/需求方改了需求,需要同步更新 | → §F.4 |
| F5 | 上次开发中断了,想接着做 | → §F.5 |
| F6 | 需要跨多个项目仓库协作修复 | → §F.6 |
| F7 | 流程走完了,但仪表盘/度量/文档数据不对 | → §F.7 |
| F0 | ← 返回主菜单 | 回到一级菜单 |
交互指令:
先输出表格 + ask_followup_question(F0/F1/F2/.../F7),用户选择后:
- F0:重新显示一级主菜单(§三)
- F1~F7:进入对应第二轮
第二轮:细化并推荐
§F.1 新需求开发
进一步判断复杂度 → 推荐 A1/A2/A3。
| 选项 | 引导问题 | 推荐 |
|---|---|---|
| F1a | 改动可能涉及多文件/多模块 | A1 标准开发 |
| F1b | 希望减少交互确认 | A2 精简模式 |
| F1c | 只是想改个拼写/加个判空(已知位置) | A3 快速修复 |
| F1d | 不确定,帮我评估 | A1 标准开发(默认) |
| F1e | ← 返回上一级 | 回到 F 第一轮场景选择 |
交互指令:
先输出表格 + ask_followup_question(F1a/F1b/F1c/F1d/F1e),用户选择后:
- F1e:重新显示 F 第一轮场景选择(§四-F 第一轮)
- F1a~F1d:进入"场景向导终结规则"(§四-F 终结规则),根据推荐命令提示执行
§F.2 完成后又发现问题/反馈
| 选项 | 引导问题 | 推荐命令 |
|---|---|---|
| F2a | 改动较大(>3 文件 或 >30 行),需要完整跟踪记录 | dev:fix --iteration "描述" |
| F2b | 改动较小,仅需同步文档 | dev:sync |
| F2c | 不确定改动范围 | 先 dev:status 查看上下文,再决定 |
| F2d | ← 返回上一级 | 回到 F 第一轮场景选择 |
交互指令:
先输出表格 + ask_followup_question(F2a/F2b/F2c/F2d),用户选择后:
- F2d:重新显示 F 第一轮场景选择(§四-F 第一轮)
- F2a~F2c:进入"场景向导终结规则"(§四-F 终结规则),根据推荐命令提示执行
§F.3 完成后改了代码,只想同步文档
| 选项 | 引导问题 | 推荐命令 |
|---|---|---|
| F3a | 改动量小,只需把最新状态同步到文档 | dev:sync |
| F3b | 改动有一定规模,想生成 commit 并完整同步 | dev:fix --iteration "描述" |
| F3c | ← 返回上一级 | 回到 F 第一轮场景选择 |
交互指令:
先输出表格 + ask_followup_question(F3a/F3b/F3c),用户选择后:
- F3c:重新显示 F 第一轮场景选择(§四-F 第一轮)
- F3a/F3b:进入"场景向导终结规则"(§四-F 终结规则),根据推荐命令提示执行
§F.4 需求变更
直接推荐 → dev:fix --drift "描述"(提示输入变更内容)
§F.5 中断恢复
直接推荐 → 检查 S1,有活跃流程 → 恢复;无 → 提示"未检测到活跃流程,是否改为 F1 新需求?"
§F.6 跨项目修复
直接推荐 → dev-flow <描述>(步骤 2 会自动检测跨项目依赖)
§F.7 流程产物/数据异常
流程已完成但仪表盘、度量、文档等产物与预期不一致。
| 选项 | 引导问题 | 推荐命令 |
|---|---|---|
| F7a | 仪表盘看不到刚完成的需求(可能只是没刷新) | dev:metrics --dashboard |
| F7b | 怀疑度量 YAML 文件缺失,需要排查 | dev:metrics --all → 确认缺失后手动补建 → dev:metrics --dashboard |
| F7c | 文档(devlog/knowledge/文档平台方案)与代码状态不一致 | dev:sync |
| F7d | 不确定问题在哪,帮我全面诊断 | 先 dev:status → dev:metrics --all 对比一致性 |
| F7e | ← 返回上一级 | 回到 F 第一轮场景选择 |
交互指令:
先输出表格 + ask_followup_question(F7a/F7b/F7c/F7d/F7e),用户选择后:
- F7e:重新显示 F 第一轮场景选择(§四-F 第一轮)
- F7a~F7d:进入"场景向导终结规则"(§四-F 终结规则),根据推荐命令提示执行
场景向导终结规则
- 推荐单一命令 → 直接提示执行("将执行
{命令},是否需要额外描述?") - 推荐多命令 → 弹出选项让用户选择
五、终结点路由表
所有
0结尾的导航选项(A0~F0):行为均为重新显示主菜单(一级菜单 §三),不执行任何命令,不进入步骤流程。F1e/F2d/F3c/F7e:行为为重新显示 F 第一轮场景选择(§四-F)。
| 选项 ID | 命令 | 行为类型 | 是否进步骤流程 | 额外提示 |
|---|---|---|---|---|
| A0 | 返回主菜单 | 导航 | ❌ | 重新显示 §三 |
| A1 | dev-flow <描述> | 需输入→入流程 | ✅ | "请描述你要开发或修复的内容:" |
| A2 | dev-flow --fast <描述> | 需输入→入流程 | ✅ | "请描述你要开发或修复的内容:" |
| A3 | --micro <位置> <改动> | 需输入→入流程 | ✅ | "请提供文件路径、行号和改动描述:" |
| B0 | 返回主菜单 | 导航 | ❌ | 重新显示 §三 |
| B1 | 自然语言恢复 | 入流程 | ✅ | "请描述你想继续做什么:" |
| B2 | dev:fix --iteration "描述" | 需输入→入流程 | ✅ | "请描述本次反馈/问题:" |
| B3 | dev:fix --drift "描述" | 需输入→入流程 | ✅ | "请描述需求变更内容:" |
| B4 | "继续下一批" | 即执行→入流程 | ✅ | — |
| B5 | "少问我" 或 "每步都问我" | 需选择→执行 | ❌ | 弹出二选一 |
| C0 | 返回主菜单 | 导航 | ❌ | 重新显示 §三 |
| C1 | dev:sync | 即执行 | ❌ | — |
| C2 | dev:kb | 入流程 | ❌ | — |
| D0 | 返回主菜单 | 导航 | ❌ | 重新显示 §三 |
| D1 | dev:status | 即执行 | ❌ | — |
| D2 | dev:status --trace | 即执行 | ❌ | — |
| D3 | dev:metrics | 即执行 | ❌ | — |
| D4 | dev:metrics --all | 即执行 | ❌ | — |
| D5 | dev:metrics --trend | 即执行 | ❌ | — |
| D6 | dev:metrics --report <ID> | 需输入 | ❌ | "请输入需求 ID:" |
| D7 | dev:metrics --dashboard | 即执行 | ❌ | — |
| E0 | 返回主菜单 | 导航 | ❌ | 重新显示 §三 |
| E1 | dev:onboard | 入流程 | ❌ | — |
| E2 | dev:flowchart | 入流程 | ❌ | — |
| E3 | dev:help | 即执行 | ❌ | — |
| F0 | 返回主菜单 | 导航 | ❌ | 重新显示 §三 |
| F1~F7 | 见 §四-F 场景向导 | 多轮→推荐命令 | 视推荐而定 | — |
| F1e/F2d/F3c/F7e | 返回 F 第一轮 | 导航 | ❌ | 重新显示 F 第一轮场景选择 |
六、完成协议
dev:ask 不输出步骤完成标记 JSON,不进入 dev-flow 步骤体系。
- 导航类(A0/B0/C0/D0/E0/F0/F1e/F2d/F3c/F7e):重新显示目标菜单(主菜单 §三 或 F 第一轮场景选择),不执行任何命令,不进入任何流程
- 即执行类:执行命令后输出简短确认,如
✅ 已执行 dev:status+ 命令结果 - 需输入→入流程类:收集输入后进入 dev-flow 流程(加载 flow.md + 步骤链)
- 场景向导类:推荐命令后执行,流程同上
不需要更新工作上下文,不需要写 .flow 文件。