Composer 交互布局

函数表单、问题和工具批准的当前布局。沿用中性深色调、无衬线界面、12px 间距及 28px 决策控件,不引入新主题或依赖。

示例展示当前布局。共享代码块合同见“字体”和“讨论行为”;实际安装与可视验收分别检查。

工具批准

需要你的输入1/1

允许执行此命令吗?

echo approval-layout-check

两种批准操作共用底部一行并直接提交,不经过额外选择、讨论或发送步骤。窄输入区仍将两个控件保留在操作区域内,不发生裁切。

多个问题

需要你的输入1/2

应使用哪个选项?

函数表单

函数表单仅显示任务输入。浏览器 Workflow 保留任务和可选目标 URL;动作上限、超时与后端属于具有可用默认值的内部控制。Programs Use、收藏和重新打开的表单遵循同一规则。浏览器命令后端与会话句柄保留为内部参数。文本润色根据所给文本选择适当风格,除非内部调用者显式指定。文档页码范围、输出位置和修订目标仍是任务输入。待处理 Use 请求仅在聊天初始化完成后消费,防止初始化清除请求的表单。隐藏或高级执行参数不提供折叠入口或替代提示。Goal 详情保留进度和任务控件,但无 Agent 或预算编辑器。内部调用者仍可显式覆盖。新 Goal 根据任务复杂度,通过一次不使用工具的模型请求选择受支持的推理强度,输出无效或请求失败时回退到配置默认值。恢复的 Goal 保留已保存角色;模型、超时和预算保持配置默认值。

参数区四边保留 12px 内边距。自动高度测量解除 textarea 的 flex 增长,并包含其原生行高与边框,防止最后一个字段占用底部内边距。

gui_agent

函数表单控件保持现有页头位置。决策卡片拥有自己的底部操作行,不使用包装层讨论浮层。

字体

决策标题、进度、标签、按钮和共享 textarea 内容使用应用无衬线字体及基础字号 token。文本与占位提示均为 1.5 行高,桌面断点不缩小输入字号。命令与 JSON 代码块使用共享等宽字体;语言标签与首行代码使用相同字体、基础字号和行高。其他界面文字保持无衬线。决策提示与字段标题字重 600,值、说明和占位提示字重 400。规则覆盖批准、问题、多问题、函数表单和讨论状态。按钮通过高度使文字居中,不改变行高。

讨论行为

工具批准仅提供直接“允许一次”和“拒绝”。普通问题保留“讨论此问题”,在现有决策卡片内打开反馈输入。原问题以只读文字保留,不重复展示可编辑答案控件。命令和 JSON 参数共用 OperationCode 组件,使用次级主题背景与内侧一像素主题边框,并把紧凑复制图标对齐首行代码。内侧边框在深浅主题下保持内边距与工具栏对齐,无独立语言工具栏。命令参数放在原生执行详情折叠区内,间距 12px;工作目录只出现在 JSON 参数中。其他工具保留准确结构化参数,沙箱升级说明保持可见。收到剪贴板确认后才显示复制成功,失败需通知。标题、正文与讨论编辑器边框左侧对齐,距外容器 12px。讨论编辑器使用共享 Textarea 宽度和 12px 内边距,不使用负边距或扩展宽度。只读操作上下文保持相同边框对齐,无负边距。讨论编辑器最小高度 96px,标题明确表示讨论而非未回答问题。讨论期间隐藏步骤进度。打开或取消输入不发送任何消息,等待保持未解决。用户填写讨论内容后显式发送。拒绝仍是独立动作,仅拒绝操作,不创建讨论轮次。

发送讨论时,把原问题、工具详情和用户反馈绑定到准确的规范等待。仅在拒绝得到确认后,现有会话队列才发送带上下文的反馈并请求纯文本回复。普通聊天草稿和附件不变。发送结果未知时保留同一命令和反馈供重试;提交期间阻止竞争的批准控件。切换会话不能改变消息目标。

参考

Claude Agent SDK 将拒绝反馈与原始工具调用关联。 OpenCode 允许拒绝反馈。OpenProgram 保留规范终止拒绝与现有聊天队列,不合成第一人称拒绝发言,也不把普通问题当成工具权限请求。

决策操作行与滚动正文为同级且不收缩。展开执行详情改变上方正文高度;操作行始终固定在 composer 底部,包括高度过渡和内容超过可用视口时。

权威执行达到终态且没有更新执行正在运行时,活动会话自动重载持久消息和工具结果,用于协调原流式连接已结束的持久批准续接。续接在没有原事件 sink 时提出下一项批准,会把新问题发布到共享 WebSocket 事件流,使连续批准保持可见。

项目规则管理

历史项目设置使用带关联 ID 的权限规则请求。关联响应采用不合并的 WebSocket 帧;规则广播仅在同一项目内合并。成功写入先回读再确认;失败或结果未知时保留草稿。项目作用域广播更新其他打开的视图。精确持久批准授权也在写入后验证。已认证的交互式所有者操作在下一操作边界读取当前合并规则;之前授权的调用及已接纳子任务保留其捕获的授权。

等待终止为拒绝或过期时,通过持久 DAG outbox 在其自身 assistant 历史节点投射明确结果。这不执行待处理操作,也不创建新模型轮次;回放不会重复通知。

长期批准

人工工具批准默认不过期。持久等待保留准确操作与文件指纹,安全点交接结束当前尝试并释放执行槽位。恢复加载持久检查点,不维持等待中的实时模型请求。恢复还复用该轮保存的准确 system prompt,不重新生成记忆、日期或项目上下文,也不把这些可变文本误判为运行时不兼容。Desktop Page 清单连接或断开时,保存的浏览器工具选择保持稳定;实际浏览器调用仍检查实时 Page 访问。模型、工具实现、权限及执行位置仍需验证。不兼容续接报告未恢复执行,不能把已保存批准展示为执行完成。规范恢复达到 running 或 completed 后,清除自身先前续接错误元数据,使模型回复正常渲染。回放该投射可修复已完成消息而不重新执行操作。非批准等待仍支持显式期限。取消与终态执行事件移除待处理决策,重连后同样生效。先前过期请求仍过期。Job 恢复只处理 Job 接纳;会话恢复使用独立控制服务。恢复后的操作因其他原因暂停后,旧回答不能在重启时自动重试。

文件编辑、写入和结构化补丁批准绑定解析后的路径及当前内容。工具在分派前和修改前再次检查批准的文件状态。目标缺失或变化时,不依据旧批准覆盖或重建。Agent 收到未执行结果,必须读取当前状态后再提出操作;批准 UI 只展示当前操作,不提供历史变更比较。不透明 shell 命令无法提供完整文件写集合,因此不能宣称具备该文件级保证。

参考:Claude Agent SDK 说明无限期 canUseTool 等待和延迟持久化。OpenCode permission/next.ts 保存待处理决策直至回答;Codex tools/approvals.rs 等待与操作绑定的用户决策。这些机制用于确定生命周期边界,不复制其实现。

验收

在默认安装版 App 的普通问题中,打开讨论展示空反馈框及原上下文;取消保留请求;发送带上下文反馈产生不执行工具的模型回复;单独拒绝不产生讨论消息。确认提交期间不能批准,且重试保留一个命令和一条消息。

实现使用 QuestionMode、共享 Textarea、现有规范等待命令及会话发送队列。运行时验收证据随发布维护。

Composer 交互设计

输入框上方的逐题确认面板

1/2选择输出格式

待处理问题与普通输入框同宽。用户提供的两张 Claude 截图确定布局:顶部显示题号和当前问题;每个选项占满一行,包含标题、可选说明和数字快捷键;Other 行直接显示输入框;底部左侧为 Back,右侧为 Skip 和 Next 或 Submit。字体、字号、主题色与间距沿用现有应用。折叠和关闭均只收起内容,重新展开保留回答且不发送命令。

每次显示一道题。Next 校验当前回答后只切换题目,Back 保留全部选择,最后 Submit 通过现有确认命令提交有序回答列表。Skip 沿用现有命令拒绝整组请求;后端要求每题有效回答,因此不新增空答案或部分回答。工具批准继续使用明确的 Deny 和允许范围内的 Allow。并发请求各自保留所属会话面板,完成的回执留在对话中。

数字键只在文本编辑框之外选择选项,Ctrl 或 Cmd 与 Enter 切换或提交;输入法组合和多行讨论保留编辑语义。新问题不转移焦点。短窗口中正文滚动,标题和按钮保持可见。普通消息草稿、附件、函数表单、发送操作和会话归属独立保留。

可选 question_title 与 option_descriptions 元数据提供选项说明布局,原有字符串答案值和完整文本提示继续供其他客户端使用。请求的内存草稿支持组件重新挂载和切换会话。送达不确定时保留原命令和答案用于重试。验收覆盖真实 Composer 与 QuestionMode、Back/Next/Submit 顺序、数字键、自定义与多选、重新挂载、窄短窗口、折叠、讨论、会话隔离及回执。

讨论请求按会话和等待请求共同标识,原 command、消息、反馈、发送中与已发送状态保留到组件重新挂载之后。未确认的重试复用原请求。选项说明只显示映射自身的字符串属性;继承属性不作为说明,也不限制合法的选项标签。