关掉浮层时焦点要还给触发器,这条改动动了哪些地方?
对话页
一条助手回复里同时摆着思考过程、工具调用、流式正文、代码块与批准闸门,外面是消息流与提示输入框。
按你给的约束,改动落在一个文件里:
- 事件仍从内核发出,视图不新增状态
- 退场那一档交给动效令牌,组件里不写时长
export function onClose(reason: CloseReason) { if (reason === "escape") return restoreFocus() return dismiss()}要动你的工作区
写回前先确认这两条范围。
读 src/ 下的文件
把这段改动写回去
Waiting for your decision
这一屏定了什么
- 一条消息是一个容器,里面爱放几件放几件。 消息流只管集合语义、粘底跟随与那一个播报区;气泡、头像、时间、回复内部的结构全由你写。
- 五件东西共用一个间距档。 思考过程、工具调用、正文、代码块、闸门竖着排,彼此的空隙是同一个值——这一档不统一,一条回复就会看着像五张卡片拼起来的。
- 闸门不藏进折叠里。 审批常驻在回复末尾:必选范围没勾满就批不了,勾选与判定是原子的,不存在「已批准但范围还没同步」的窗口。
- 状态由数据说了算。 思考过程给了起止时刻就自己显示「想了几秒」,工具调用按阶段换状态文案,代码视图标了
complete才放心着色——组件不猜,宿主给什么它显示什么。 - 发送键原位变停止。 提示输入框在生成期间把提交键换成停止,输入框仍可编辑:用户还要能改下一句。
换成你的项目
- 正文走流式 Markdown:渲染器是有状态的,一个实例只喂同一条消息的全文。
- 不分条、只往下追加的输出(构建日志、命令回显)用日志,它和消息流一样粘底,但不承担会话语义。
- 消息条目上有
data-role,助手与用户两侧的排布差异按它写,不必给两套组件。
