输入框与用户决定输出#
输入框用于普通消息与用户主动打开的函数表单。待处理的运行时提问、确认、表单和权限批准在输入框上方的独立面板显示,完成回执保留在对话中。待回答问题不会替换输入框、清空草稿、关闭函数表单、改变发送语义或抢占焦点。
普通消息与函数表单#
输入框只有 idle 与 fn-form 两种状态。选择注册函数打开 FunctionForm,字段校验、关闭与切换动画仍由输入框管理。出现问题不取消函数表单。
输入完整的注册函数 name(parameter=literal, ...) 表达式时使用相同调用分发与校验。说明文字、不完整表达式和代码块仍是普通聊天内容。执行中按回车或发送按钮把消息插入当前轮(steer),按 Cmd/Ctrl+回车排到下一轮;空输入保留停止操作。
决定输出卡片#
PendingDecisionPanels 在当前会话与分屏的输入框上方显示 PendingDecision,DecisionOutputs 在消息区显示终态回执。每张卡片复用 QuestionMode 处理 ask、confirm、ask_many、form 和 approval,回答字段与提交控件属于卡片。新问题不自动聚焦,并发问题保持稳定显示顺序。
每次显示一道问题,顶部显示题号和标题,选项占满一行并显示说明、数字键和 Other 输入。Next 只切换题目,Back 保留草稿,最后 Submit 提交有序答案;表单保留纵向字段并提交字段对象。提交回执继续按问题和答案逐项显示,使用字段标题与可读值,不显示 JSON。权限批准保留允许范围、操作详情和明确同意/拒绝行为。问题出现本身不授权操作。
提交后立即在卡片中显示实际回答和提交中状态。只有匹配命令的 applied 回执确认送达。结果未知时保留原命令标识和答案供重试,显示可用错误码,不能显示成功。明确拒绝后核对当前问题。请求关闭不能显示为回答成功。确认后的回答和拒绝保留为会话内回执,不改变主输入框草稿。
回执是内存中的界面状态,不是 Workflow 检查点。刷新加载仍待回答的规范问题;本次不增加历史回执持久化。切换标签不改变请求绑定的会话、执行、代次与版本。
讨论与事件#
显式讨论操作有独立反馈字段,先确认拒绝当前请求,再将带上下文的讨论加入原会话队列。拒绝未确认时不发送讨论或允许执行。主输入框的普通消息不会隐式拒绝问题,也不会被当作答案。
纯界面设置直接更新状态;一次性用户操作使用关联请求与响应;运行时问题事件投影为待回答状态,命令回执决定是否成功。事件出现不等于答案回执。
问题事件和重连快照提供精确目标。useWaitAnswer 管理提交回执,QuestionMode 管理字段、翻页及请求草稿,PendingDecisionPanels 管理待处理面板,DecisionOutputs 管理终态回执。Workflow 在原进程继续;已有 Agent 预声明等待保留原恢复契约。
验收#
待回答问题与非空输入框同时存在时,问题位于输入框外,草稿和焦点保留,普通发送仍提交聊天消息。卡片提交后立即有答案反馈,确认后保留回执,输入框草稿不变;同时验证会话隔离、重试命令一致性和实际 App 操作。