# 输入框与用户决定输出

输入框用于普通消息与用户主动打开的函数表单。待处理的运行时提问、确认、表单和权限批准在输入框上方的独立面板显示，完成回执保留在对话中。待回答问题不会替换输入框、清空草稿、关闭函数表单、改变发送语义或抢占焦点。

## 普通消息与函数表单

输入框只有 `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 操作。

参见[用户输入请求](../runtime/operations/user-input-requests.zh.md)与[执行控制](../runtime/execution/control.zh.html#decision-output)。
