审批与问卷浮层
agent 需要用户裁决时,Mayfly 以全宽上拉面板应答。面板采用 editor 槽位替换挂载:面板真实占据编辑器的 dock 槽位,编辑器整体退场(离树但状态存活),面板之下只有两行 footer——不是"盖在上面",编辑器框不会从面板边缘露出来。关闭面板即恢复编辑器并还焦,草稿无损。
审批面板
工具调用需要授权时,弹出标题为 Approve {tool}? 的面板,上方显示工具理由(过长时可滚动),下方是一行选项:
[ Reject ] Allow once Allow {tool} for this session Reject with feedback- 默认聚焦 Reject,误按 Enter 不会放行。用
←/→或Tab在选项间移动,Enter执行;这个关卡没有数字快捷键。 - 会话级记住 —— Allow {tool} for this session 为当前 Agent 记下该工具,同一 Agent 同一工具的后续请求不再弹窗、直接放行。切换显示视图(例如
F7)不会丢失该许可,Agent 被销毁时才失效。 - 拒绝带反馈 —— 在第二页打开理由输入框;
Enter发送,Alt+Enter换行,Esc先结束编辑、再按一次返回选项页。发送后以用户消息形式 steer 给 agent(User rejected …: <理由>),agent 能看到拒绝原因;空理由等价于普通 Reject。 - Escape 拒绝;请求中止时定案取消。
- FIFO 串行 —— 并发审批请求排队,同一时刻只显示一个面板。
来自其他 agent(非当前显示的 agent)的请求不会弹面板,而是沿 waterfall 交给下一个应答者。
问卷面板
ctx.userQuestions 请求(澄清问题等)打开一个面板,每个问题一页:
- 每个问题一个 tab(显示其 header 或
Q{n})表示进度,已作答的步骤带✓。标签栏上用←/→、任意位置用Alt+←/Alt+→切换问题,向前切换会像 Next 一样校验当前问题; - 选项带编号:
1–9或 ↑↓ +Enter选择,单选会前进到下一题(最后一题直接提交)。单选题末尾有 No selection;多选用Space勾选、Enter确认; - 每题都有 Other 输入框(没有选项时只有它):输入即开始作答,
Enter前进或提交,Alt+Enter换行; - 每题下方有 Back 与 Next 按钮;面板底部是 Submit answers 与 Cancel;
Esc先结束编辑;带着未保存的回答离开时会弹出共享的“放弃未保存的修改?”确认,确认放弃即拒绝该请求。请求中止同样会关闭并拒绝。
问卷回答作为用户可见内容进入会话,模型可以看到。
确认
所有确认——完全访问、停止子 Agent、移除插件、删除 provider、归档活动会话、放弃未保存的修改——都是同一个共享 decision:标题是问题,可附一句后果说明,然后是 否(默认聚焦)与 是(或 Enable、Stop 这类具体标签)。在“否”上按 Enter、按 Esc 或 Ctrl+C 都会取消并回到原面板,状态完整保留;只有“是”才会继续。/update 在开始前使用同样的形态。
当某个操作对所选行不可用时——one-shot 或未运行的子 Agent、已安装的插件——该操作会在标签旁说明原因,且不会进入确认。
多字段表单
provider 引导、provider 与设置编辑等面板使用同一个表单模型:
- 每个字段是一行紧凑的
label: value;聚焦行带→,折行内容在其下方继续; - Up / Down 永远在字段间移动;直接输入或 Enter 开始编辑文本,Enter 确认并前进(多行字段用
Alt+Enter换行); - 下拉字段用 Left / Right 直接切换取值(跳过不可用选项),或用 Enter 打开列表;多选字段用 Enter 或 Space 打开;Tab 应用打开的列表或文本编辑并切到下一组;
- 继承取值的设置在值后标注
(继承)或(显式覆盖);修改取值即成为显式覆盖,在显式覆盖的字段上按 Delete 恢复为继承值; - Escape 先结束编辑;带着未保存的修改离开时会先确认;
- 校验错误直接渲染在出错字段下方,不关闭面板;任何编辑都会清除它;
- 值按面板宽度截断,长粘贴 key 不会撑破边框。
计划评审面板
agent 调用 exit_plan_mode 收尾计划时,计划渲染进对话流,评审决策在编辑器槽位打开:
1. <批准标签>
2. <拒绝标签>
3. Other — 输入反馈以修改计划- 默认聚焦拒绝行;数字
1–3或 ↑↓ 只在决策间移动,Enter确认聚焦的决策,因此批准一定需要显式按 Enter; c复制计划,o打开反馈输入;PageUp/PageDown/Shift+↑↓滚动上方的计划;- 反馈用
Enter提交,作为带反馈的拒绝(harness 将其并入 "their feedback: …"),agent 据此迭代计划;空提交会回到决策列表; - 请求中止时以取消码(
ASK_CANCELLED)关闭面板。
Shift+Tab 只在 normal 与 plan 间切换(见会话模式),保留当前权限。YOLO 由 /permission 单独控制,不会跳过计划评审;footer 可同时显示 plan 与 yolo。
权限预设面板
/permissions 打开 Mayfly 的权限预设选择器(与 /sessions、/preset 相同的单选列表形态):每个预设(沙箱模式 + 审批策略的具名组合)一行带编号,当前生效的标记 ← current。1–9 或 ↑↓ + Enter 通过宿主同一条写路径切换;完全访问会先弹出共享确认并写明沙箱后果。推导出的 custom 状态会显示但不可选,并说明原因。原生 /permission <name> 命令保留自己的名称与参数形式,可直接切换。