# 自动驾驶

插件不提供任何斜杠命令。它在论文工作区里**自己把流程推起来**，只在两处需要你：
**开头选一次意图**、**过关卡时拍一次板**。

## 一次完整流程

```
你说一句话
   ↓
[agent/pre-step] 查出「论文工作区 + 主 agent + 还没有意图规格」
   ↓  ctx.userQuestions.ask  ← 一道选择题（只有一次）
你选：从零走到答辩 / 只补合规与答辩 / 只做答辩准备 / 先别自动跑
   ↓
写进 00-管理/决定日志.md　　　　（答辩时这就是「为什么这么推进」的证据）
   ↓
ctx.goals.create(...)　　　　　 → 宿主的 goal-round-driver 接手，一轮轮自动续跑
   ↓
注入 operating contract　　　　（怎么推进、哪些活扇给子 agent、产出必须落盘、不许编数据）
   ↓
┌── 模型干活（可以开子 agent 并行） ──┐
│  过 G1-G4？                         │
│  [tools/pre-execute] 拦成 ask ──────┼──→ 你在审批界面点「允许 / 拒绝」
└─────────────────────────────────────┘
   ↓
update_goal complete → 给一页「做了什么 / 待你确认」
```

## 四档意图

| 选项 | 目标 |
|---|---|
| 从零走到答辩（九阶段全跑） | 材料 → 追问 → 文献 → 设计 → 实现 → 测试 → 论文 → 合规 → 答辩 |
| 已有材料/初稿，补齐合规与答辩 | 不重写正文，只补检查、降重自查、答辩材料 |
| 只做答辩准备 | 素材 + 问题库 + 幻灯 + 代码演练 |
| 先别自动跑，我自己来 | 不建目标、不注入指令，照常一问一答 |

## 它什么时候**不**介入

这四条都写成了测试，不靠自觉：

- **不是论文工作区**：`findThesisRoot` 找不到 `00-管理/进度台账.md`，完全安静（别的项目里装了也不打扰）。
- **子 agent**：委派深度 > 0 一律跳过，否则每开一个子 agent 又问一遍。
- **已经有意图规格**：`00-管理/意图规格.md` 存在的会话只记一条日志，不重复问。
- **同一个 agent 只问一次**：第二轮起不再打扰。

## 降级路径（宿主缺服务时）

| 缺什么 | 结果 |
|---|---|
| 没有 `userQuestions` 服务 / 选择题没渲染出来 | 不问，也不注入指令，本轮就是普通对话（日志会写原因）|
| 没有 `goals` 服务 | 只推进当前一轮，不会自动续轮 |
| 没有 `commands` 服务 | 无影响：本插件从来不用命令面 |

## 关掉它

```yaml
- id: paper
  name: dsh-thesis
  config:
    autopilot:
      enabled: false        # 退回「纯工具 + 技能」模式
      gateApproval: true    # false = 仍然自动跑，但关卡不再拦人
      maxGoalRounds: 40     # 调小，防跑飞
```

## 排查

- 说了话但**没弹选择题**：看会话日志里有没有 `dsh-thesis: 意图选择题没有拿到答案` 或
  `宿主没有 userQuestions 服务`。这两种情况下插件有意不猜你的意图。
- 跑了**一轮就停**：日志里找 `宿主没有 goals 服务`——说明这套组合不支持自动续轮。
- **关卡没问就过了**：检查配置里 `autopilot.gateApproval` 是否为 `false`。
- 想重新选一次意图：删掉 `00-管理/意图规格.md`（或新开一个尚无规格的工作区会话）。
