问答与授权
ask_user 用于补充任务细节。模型可提交 1–6 道题,每题有稳定 id、title、type(single、multiple、text)和明确 required。选择题有 2–12 个稳定 ID 的选项,可用 allowCustom 提供文字补充。单选的自定义答案与选项互斥,多选可同时补充文字。
标题最长 160 字,每题 500 字,选项 200 字、说明 400 字,单题回答最多 4000 字。Host 拒绝重复 ID、未知选项、超限及不合法组合;提交必须覆盖所有题目,选填题可为空。没有预选答案。
交互与返回
问答始终展示在对话的执行折叠区外,一次一题,可前后切换修改,最后一次提交。原生 radio/checkbox 支持键盘操作,文字可多行输入。答案按 questionId、optionIds 和 text 回传:
json
{"status":"answered","answers":[{"questionId":"format","optionIds":["summary"],"text":""}]}“暂不回答”返回 {"status":"cancelled"},模型据此继续解释缺少信息的限制;停止整个任务则终止工具等待与模型续答。等待期间不额外调用模型、不消耗新轮次。任务原有总轮次预算仍适用。
边界与恢复
- Host 生成独立票据,绑定会话、运行和单次工具调用;
run.answer与run.approve是不同命令。回答“同意”不会批准文件修改、MCP 安装或其他动作。 - 问答和审批仅共用
InteractionCard视觉结构。MCP 的工具定义或返回文本不能创建 Host 问答票据、变更审批策略。 - 只有有效答案才消费票据;重复、取消后的或跨会话票据均拒绝。切换会话可回到尚在等待的问答,未提交的临时输入不持久化。
- 已提交答案随事件和对话保存在本地,供历史展示和模型续答。Host 重启会终止未完成任务,原票据失效;不恢复等待、不重放回答,也不自动重试已提问的任务。
- 不用于密码、API Key、验证码或其他秘密。界面始终提示使用既有安全设置,工具校验拒绝明确要求敏感凭据的题目;这不是通用秘密检测器,请勿向问答输入凭据。
验证
tests/questionnaire.test.ts 使用本地模拟 DeepSeek SSE 服务走真实 adapter → Host → 问答 → 结构化工具结果 → 模型续答。测试覆盖多题答案、取消、重复提交、会话隔离、失效票据、重启及问答不能批准后续动作。
qa.html 的“多题问答(仅内存)”使用真实 App/问答组件,显示单选、多选、自定义和文字题;仅模拟回答与续答,不调用模型、不批准或执行真实操作。Web 仅 UI 验证,不代表 Electron 实机验收。