| name | dojo-stage |
| category | router |
| stage | entry |
| version | 0.2.0 |
| description | Codojo 唯一入口路由器(所有学习请求必须先经过本 skill)。
自动检测 `<repo-root>/.codojo/` 目录下的文件状态,判断当前处于
S1-S4 哪个阶段,输出状态报告后路由到正确的 skill。
三种触发场景(自动路由):
- 首次进入:.codojo/ 不存在 → 创建目录 + 路由到 dojo-assess(S1)
- 中断恢复:用户回来说"继续" → 检测文件状态 → 路由到断点阶段
- 状态查询:用户问"当前进度" → 输出状态表 → 等待用户指令
触发关键词:帮我学习这个项目、帮我学这个项目、学习这个项目、教我这个代码、
帮我入门、我是新手、从零开始、开始学习、开始、继续、继续学习、上次到哪了、
当前进度、我在哪个阶段、我在哪、learn this project、teach me。
注意:本 skill **只做路由判断**,不执行任何教学 / 评估 / 编码动作。
判断完成后必须**询问用户确认**再转入目标 skill,不可静默跳转。
如果用户直接说了具体阶段关键词(如"生成学习计划"),仍应先经过本 skill
做一次状态校验,确保前置条件满足后再转入。
|
dojo-stage — 阶段路由器
一句话定位:自动判断当前学习阶段,路由到正确的 skill。
何时使用
- ✅ 用户首次说"帮我学这个项目"、"开始"
- ✅ 用户中断后回来说"继续"、"上次到哪了"
- ✅ 用户问"当前进度"、"我在哪个阶段"
- ✅ 无法判断用户意图属于哪个具体阶段时
前置条件
工作流
Step 1:检测文件状态
检查 <repo-root>/.codojo/ 目录下的文件存在情况和内容:
| 检测项 | 方法 |
|---|
| 目录是否存在 | .codojo/ 是否存在 |
| S1 是否完成 | open-questions.md 是否存在且末尾包含 <!-- ASSESS_DONE --> 标记 |
| S2 是否完成 | task.md + schedule.md 是否同时存在 |
| S3 进度 | schedule.md 中"总进度"行的百分比数值 |
| S3 是否完成 | schedule.md 总进度 = 100% |
| S4 是否启动 | plan.md 是否存在 |
Step 2:判断阶段并路由
根据 Step 1 的检测结果,按以下优先级判断:
| 条件 | 判定阶段 | 路由目标 |
|---|
.codojo/ 不存在 | 未开始 | → dojo-assess(S1) |
open-questions.md 不存在或无 <!-- ASSESS_DONE --> 标记 | S1 未完成 | → dojo-assess(S1) |
有 <!-- ASSESS_DONE --> 标记 + task.md 不存在 | S1 已完成,S2 未开始 | → dojo-plan(S2) |
task.md 存在 + schedule.md 进度 < 100% | S2 已完成,S3 进行中 | → dojo-teach(S3) |
schedule.md 进度 = 100% + plan.md 不存在 | S3 已完成,S4 未开始 | → dojo-hack(S4,询问是否进入) |
plan.md 存在 | S4 进行中 | → dojo-hack(S4) |
Step 2.5:降级处理(文件异常时)
如果检测到以下异常情况,不要报错退出,按降级策略处理:
| 异常场景 | 降级策略 |
|---|
open-questions.md 存在但格式损坏(无法解析) | 提示用户文件异常,询问是否删除并重新进入 S1 |
task.md 存在但 schedule.md 不存在 | 提示 schedule.md 缺失,询问是否重新生成(回到 S2 的 Step 4) |
schedule.md 存在但 task.md 不存在 | 提示 task.md 缺失,询问是否重新进入 S2 |
schedule.md 进度百分比无法解析 | 逐行扫描详细进度表,按 ✅ 数量 / 总行数计算百分比 |
plan.md 存在但 schedule.md 进度 < 100% | 状态矛盾——提示用户"S3 尚未完成但已有魔改计划",询问是继续 S3 还是直接进 S4 |
.codojo/ 存在但完全为空 | 等同于"未开始",路由到 S1 |
Step 3:输出状态报告
## 📍 Codojo 当前状态
| 阶段 | 状态 |
|---|---|
| S1 能力评估 | ✅ 已完成 / ⚪ 未开始 |
| S2 计划生成 | ✅ 已完成 / ⚪ 未开始 |
| S3 正式教学 | 🔄 进行中 (58%) / ✅ 已完成 / ⚪ 未开始 |
| S4 魔改阶段 | 🔄 进行中 / ✅ 已完成 / ⚪ 未开始 |
**当前位置**:<具体描述,如"S3 正式教学 · 模块 2 · Spring IoC 容器 · 实践环节">
→ 继续进入 <skill 名称>?
💡 输入"重置"可回档到任意阶段(dojo-reset)
Gotchas
- 不要在路由判断时读取文件全文——只需检查文件是否存在、是否包含特定标记(如
<!-- ASSESS_DONE -->)、进度百分比数值即可
- schedule.md 被用户手动编辑后可能导致进度判断错误——如果"总进度"行的百分比与详细进度表的 ✅ 数量不一致,以详细进度表为准
- 多个文件状态矛盾时不要自行决定——必须向用户展示矛盾点并让用户选择(见 Step 2.5 降级处理)
- 不要把路由判断结果直接当作执行指令——路由器只负责"判断该去哪"并询问用户确认,不负责执行具体 skill 的工作流
产出
输出风格约束
详见共用 reference:../_shared/output-style-guide.md