session 重构和后台工作:设计方案

这份方案讲 session 重构以后长什么样、为什么这样:一轮对话怎么读,后台的命令、子 agent、工作流、插件放在哪、怎么停、怎么引用。颜色、字号、圆角、用词都照 buffin 现在的。图都截自可交互原型;每张图旁边的「打开这个状态」,打开的就是图里那一刻,接着能点、能播。

省流

  • 一轮只有四种时刻:想、做、等你、完成。最后一行永远是「现在」;做完折成「已完成 · 用时」,下面是答案和「修改 N 个文件」。
  • 滚动每一步都是同一种行,只有内容有底色。对话里最多两层滚动;有底色的框能往下拉高,各记各的,拉到全部放下就不再淡出。
  • 后台工作对话里是一行色块,输入框上面是一排小块。命令青绿,子 agent 品红,工作流橄榄绿,插件粉。工作流点开是它的几个 agent。
  • 在跑和结束在跑的挂着自己颜色的水波,按 ■ 停。结束的变灰,失败是红叉;点开看过、点 ×,或者你下一轮说完,它就走。
  • 引用拖进输入框或者打 @,就是一个带颜色的引用。发出去的消息留着发送时的样子。
  • 长行命令输出默认折行,折下去的部分缩进两格;「长行折行」能关掉。
  • 交回来后台工作交回来,自己开一轮,第一行就是它;两件一起回来,开头就是两行。
打开可交互原型
第 4 轮做完:两件后台工作交回来开了一轮,还有几件在跑
第 4 轮做完。第 3 轮派出去的工作流和部署还在跑,浏览器测试失败了;它和「审查测试的改动」一起交回来,开了第 4 轮。输入框上面是还在跑的,和交回来了还没看的。

原型是一段写好的会话:六轮,你发了四轮,后台工作交回来开了两轮。右上角选它停在第几轮。

右上角的轮次列表
右上角「停在第 6 轮」点开是六轮。点一轮,从上一轮结束时播到这一轮结束;指针移到一轮上,右边的 ⏭ 不播,直接停在那一轮结束。
打开这个状态
播第 5 轮:消息正写进输入框
播的时候先把你那一轮的话写进输入框,引用整块放进去,再发出去;然后想、一步步做、问你、写回答、折起来。右上角换成「跳到这一轮结束」。
从第 5 轮开始播
轮谁开的这一轮里看得到的设计
1你问滑块为什么被输入框盖住。它读了两个文件,在后台起了 dev:web。一轮的四种时刻;做完折成一行。
2你要去掉「正在工作」和工具组的滚动。它起了 dev server,测试挂了又改好,前台派了一个子 agent 找测试,最后派两个子 agent 去后台。在跑的那一步;退出 1;前面还有 N 步;前台子 agent 的框;派出去的三行。
3你要再起一个工作流审一遍、在后台跑浏览器测试、部署到 staging。三件都放后台。工作流、插件;六件一起跑,小块排成两行。
4交回来浏览器测试失败,「审查测试的改动」做完,两件一起交回来。交回来的那一轮开头两行;失败的一打开就是原因。
5你「改吧」,消息里带着 dev server 和工作流两个引用。改完要装 WebKit,先问你。引用留着发送时的样子;等你的确认,允许和拒绝各走一条路。
6交回来「列出对话里还在自己封顶的框」做完。结束的小块什么时候走。
怎么操作会怎样
停着的时候什么都能点:行、小块、浮层、拉框、拖、@、悬停、双击。在跑的时间一直在走,dev server 隔几秒打一行。
播到第 5 轮的提问停下来等你。点允许,它装好 WebKit 再跑一遍;点拒绝,它不装,回答里告诉你以后怎么跑。
播的时候往上翻「回到最新」写着正在做的那一步,点一下回到最新。
自己发一条消息它读你引用的工作回你;右上角写「停在第 6 轮之后」。
深色跟着系统;地址后面加 ?theme=dark 也行。

右上角那个开关只是原型用来播的,不进产品。拉过的框高、长行折行的开关记在这个浏览器里。

名字里的三件事,就是这次设计的三条原则。

名字里的意思落到界面上
Buffer,缓冲agent 快,人慢。session 替你缓冲掉它的快,你按自己的节奏看。跑的时候只露最近三步,做完折成一行。输入框上面那一排也是缓冲:只放在跑的和结束了还没看的,看过就走。
Buff in,加进来每一轮给你带回点东西,你也能把东西加进下一轮。一轮结束写清改了哪些文件。后台工作拖进消息就是引用,给下一轮加料。
Puffin,海鹦嘴里能横叼一排小鱼;它的世界是水和鱼。输入框上面一排小块,就是嘴里那排鱼。想是水泡,做是鱼群,等是水波。不画鸟。

不变的:颜色、字号档、圆角、你的气泡都照 buffin 现在的。输入框本身照 composer 的方案;引用的形状用的也是它的配方,这份只定引用的颜色和它能做什么。

一轮只有四种时刻:想、做、等你、完成。最后一行永远是「现在」。

想
水泡往上冒,写「思考中」,后面是它最新想到的那一句。点开是整段思考。
打开这个状态
做
在跑的那一步挂着鱼群,名字带扫光,输出就地打开、停在最新。更早的步收成「前面还有 N 步」,点一下就地展开。
打开这个状态
等你
水波用等待色,写「等待你的确认」。要跑的命令在底色里,下面一句它为什么要问,再下面是按钮。审批放在这一轮末尾,挨着它的上下文。按钮照现在的:字是 agent 给的,只有允许一次的那个填 ember,拒绝是红框。
打开这个状态
完成
过程折成一行「已完成 · 用时 1m 32s」。下面是答案,再下面「修改 3 个文件 +8 −4」,点开列出文件。用时只写这一处,答案下面只留复制。
打开这个状态

四条规矩

规矩意思替掉的是
一种行读、搜、改、跑、想、派出去的 agent,都是同一种行:图标、动词、对象、结果。整行点开,名字换行不截断。动词在跑的时候和做完以后是同一个词,状态只看图标和结果。「5 tools · done」「正在运行命令」「已运行命令」
只框内容只有输出、diff、思考这类内容有一块底色:没有边框、没有标题,封顶自己滚,打开先看结尾。过程、分组都不画框。命令写在行上,底色里只放输出。带边框、带标题的 Bash 卡片;工具组的框;审批的黄色卡片
话分两种它路上说的话和答案一样大,淡一档(ink-body)。答案是一轮里最黑的字。刚说出口的那一句先是全黑,下一步开始时再淡下去。过程里的话和答案一个样
最后一行是现在想的时候是水泡「思考中」,做的时候是在跑的那一步,等你的时候是水波「等待你的确认」。一轮里只有这一行在动。末尾的「●」;写死的「Thinking…」;每个在跑的工具各自一个转圈

前台的子 agent 也是一行。跑的时候它的框就地打开,一步一步长出来,停在最新一步;做完收成「子 agent · 5 个动作 · 38s」,点开先看到答复。
打开这个状态

往上翻的时候

一轮在跑时,「回到最新」长成一枚胶囊,写着正在做的那一步和用了多久;在等你时换成水波和等待色。没在跑时还是圆按钮。

巧思三种动效都借自海鹦的世界:想是水泡,做是鱼群,等是水波。鱼群细看是三条沙鳗在绕圈,就是海鹦一嘴叼回来的那种鱼。

对话里最多两层滚动:对话一层,装内容的框一层。框能往下拉高,宽度不动。

什么多高怎么滚
对话整个会话自己滚。滑块停在输入框上沿,不落进输入框那一段,也不跟着底部淡出一起淡。
装东西的:过程、工具组、工作流不封顶,有多少摆多少不自己滚,跟着对话滚。
装内容的:输出、diff、代码、思考、子 agent封顶:输出 140px,diff 和代码 320px,思考和子 agent 160px自己滚。哪一边还藏着内容,哪一边就淡出,淡的深度就是藏着的那么多,最多 32px。滚到头,滚轮接着滚对话。

往下拉框的下沿。宽度不动;最矮三行,最高到对话区放得下为止。拉到输入框边上,对话跟着往上滚。停在结尾的框,拉的时候还停在结尾。拉到全部放下,上下都不再淡出。双击把手回到默认;键盘 ↑↓ 一次 18px,Home、End 到头。
打开这个状态

打开先看结尾。在跑的停在最新一行,做完的停在答复的开头;经过在上面。滚到框顶,更早的输出自己接着载入,一次 40 行,正在看的那一行不动,一直能翻到第一行。
打开这个状态

失败的停在原因。浏览器测试一打开,先看到「Failed Tests 1」和哪一条断言没过;上面是跑过的每个文件。空行照样占一行。
打开这个状态

拉过的高度怎么记
记谁松手就记住这一个框。想拉高的往往只是其中几个,所以不按种类一起改。
记在哪这台设备上。daemon 重启、app 重开都还在,换一台设备不在。按 daemon 分开记,只留最近拉过的 50 个。
同一件工作对话里那一行、派出它的那一步、交回来那一轮的第一行、浮层、悬停卡片,打开的是同一个框,拉过的高度共用。浮在上面的框往上长。

巧思一件工作只有一个框:在对话里拉高了,点开小块、悬停引用,看到的也是这么高,停在同一处。

后台工作有四种,在八个地方露面;到哪儿都是同一个色块、同一个框。

种类图标颜色框里是什么
后台命令终端青绿它的输出,停在最新一行。
子 agent机器人品红提问、每一步和它路上说的话、答复。做完停在答复的开头,往上滚是经过。
工作流工作流橄榄绿先是简报,然后每个 agent 一行,写着做了几个动作、用了多久;agent 点开是和子 agent 一样的框。
插件拼图;插件有自己的图标就用它的粉插件没画自己的框时,默认三行:标题、状态、结果。
地方什么时候有长什么样能做什么
派出它的那一步一直在,在过程里动词和对象,后面写它现在怎样:在后台运行、失败、已停止、已完成 · 5 个动作点开是它的框
那一轮里的一行一直在,在过程下面行首记号、色块(图标和全名)、时间或结局点开是它的框;在跑时悬停出 ■;色块能拖进输入框
输入框上面的小块在跑的,和结束了还没看的图标、短名、时间或结局点开浮层;■ 停;× 关;拖进输入框
浮层点一块时头是同一个记号和色块,下面是它的框定位;■ 停或 × 关;框能滚、能往上拉;头能拖
交回来的那一轮它交回来时这一轮的第一行就是它点开先看到答复
输入框和消息里的引用拖进来、@ 进来以后整块带它的颜色单击在对话里找到它;双击变回文字,或打开浮窗
悬停卡片和浮窗指针停在引用上;双击消息里的引用名字;种类和状态;正文能滚、能往上拉;消息里的写「发送时」
@ 菜单打 @ 时「后台任务」一组回车放进输入框

那一轮里的三行。第 3 轮派出去的三件,在过程下面各占一行:在跑的色块带颜色,行首是它颜色的水波,后面是走着的时间;失败的变灰,行首是红叉。名字长就在块里换行,不截断。
打开这个状态

工作流点开。先是简报,然后三个 agent 各一行:做完的是机器人,还在跑的挂鱼群,后面写做了几个动作。agent 点开是和子 agent 一样的框,停在答复的开头。在对话里不再套一层框,跟着对话滚。
打开这个状态

从小块点开工作流,几个 agent 在浮层里的一个框中滚;agent 一样能就地点开。
打开这个状态

巧思到哪儿都是同一个色块:对话里那一行、浮层的头、拖着走的、输入框里的、消息里的,认一次就都认得。

四个颜色放在产品现有颜色的空档里:命令青绿,子 agent 品红,工作流橄榄绿,插件粉。

产品里已经有几种颜色是有意思的:失败是红,发送和斜杠命令是橙,等待是黄,进行中和成功是绿;输入框里的引用又占了天蓝、靛青、紫。新颜色挨着它们,就会被读成那个意思,比如绿色的一块像是「成功了」。

把色相排成一圈,大的空档只有三个。四种放进去,插件和子 agent 挤一个:插件最少见,两个一个偏紫一个偏红,图标也不一样。

地方在跑结束了
对话里那一行、浮层的头色块带颜色;行首的水波也是这个颜色色块变灰,就是今天的灰色小块;行首换成对勾、叉或方块
输入框上面的小块只有图标带颜色图标变灰
输入框里、消息里、拖着走的一直整块带颜色。引用说的是「哪一件」,不是「还在跑」。
框里面不上色。

配方和输入框里的引用同一套:底色混 8%(深色 10%),边混 15%(深色 20%),字在正文色里混 30%(深色 17%)。深色各自提亮过:命令 67 211 204,子 agent 237 127 208,工作流 190 204 77,插件 250 137 165。

巧思对话里和小块上,带颜色的就是还在跑的:结束了就灰。一眼扫过去,不用读字就知道还有几件在跑。

巧思buffin 的黑、白和发送键的橙红,本来就是海鹦的羽色和嘴。橙红只给能点的东西,四个颜色都绕开它。

行首的记号说它怎样了:在跑是水波,做完是对勾,失败是红叉,停了是方块。

状态行首色块后面写
在跑它颜色的水波带颜色走着的时间;指针移上去,后面出现 ■
做完灰对勾灰已完成;子 agent 再加「· 5 个动作」
失败红叉灰失败
你停的灰方块灰已停止

对勾不上色:粉色、品红的对勾挨着红叉,会被看成失败。

三种动效,只表示状态

动效什么时候颜色
水泡它在想正文色
鱼群它在做的那一步;工作流里在跑的 agent正文色
水波在等:等一件后台工作回来,或者等你等它用种类的颜色,等你用等待色

巧思在跑的后台工作也是一种等:这一轮在等它回来。所以它也挂水波,颜色说在等谁:种类的颜色是等它,等待色是等你。

巧思一屏里的水波踩同一拍:页面只有一个时钟,重画以后也接着这一拍,十件在跑也不会各闪各的。打开减少动态效果时,停在一滴加一圈。

输入框上面那一排只放两种:在跑的,和结束了你还没看的。看过就走,不越积越多。

从上到下:在跑的图标带颜色、时间在走,结束的变灰、× 一直在;指针移上去,时间换成 ■,没有 ×;按 ■ 停了,变灰写「已停止」,这时才有 ×。
打开这个状态

结束的什么时候走怎么走
点 ×马上走。
看过了点开浮层看过,浮层一关就走;点开它在对话里那一行也算看过。
你下一轮说完你发出一条消息,这一轮答完时,在这一轮开始以前就结束了的都走;这一轮里才结束的,留到下一次。交回来开的那一轮不算。
不按时间收没看过的不会自己不见。
你发出的第 5 轮
「审查测试」、浏览器测试结束
你发出一条消息
「列出封顶的框」结束
部署结束
这一轮答完

第 5 轮答完时:「审查测试的改动」和浏览器测试在这一轮开始以前就结束了,走了;「列出封顶的框」和「部署到 staging」在这一轮里才结束,灰着留到下一次。
打开这个状态

第 3 轮做完,六件一起在跑。一行放不下就排到第二行,全部摆出来。对话的底跟着往上让,最后一行不会被挡住。
打开这个状态

巧思这一排就是 Buffer:在跑的、还没看的在这儿等你;你看过,它就让出位置。

点一块,它在小块上面浮出来:头是同一个记号和色块,下面是对话里那个框。

点开。右边是「在对话中定位」,和 ■ 停止(在跑)或 × 关闭(结束了)。再点一下、点别处、按 Esc 收起。
打开这个状态

往上拉。框能滚;上沿是把手,往上拉,最高到会话顶上。拉过的高度和对话里那个框共用。头上的色块能直接拖进输入框。
打开这个状态

把后台工作放进消息:拖进去,或者打 @。进去就是一个带颜色的引用,发出去还留着那一刻的样子。

拖。从小块、对话里那一行的色块、浮层的头,按住往输入框拖。输入框描一圈边,一条竖线标出落点;松手就放在那儿,原处不动。拖到别处,什么也不发生。

进去以后整块带它的颜色,图标是它自己的,名字是全名。同一件可以引用两次。
打开这个状态

只打 @:多一组「后台任务」,就是输入框上面那几项。底栏写「输入内容以搜索文件和后台任务」。
打开这个状态
接着打字:搜这个会话全部的后台工作,结束了的也算。在跑的排前面,结束的按新近排;后面是文件。
打开这个状态
悬停:名字;种类和状态;正文。命令给最后几行输出,子 agent 给答复的开头,还在跑就给最新一步。
打开这个状态
往上拉:正文能滚,上沿有把手。指针在卡片里、按住把手的时候,卡片不收。
打开这个状态

发出去以后,消息里留着引用。悬停写「发送时」,给的是发送那一刻的状态、用时和最后几行,正好有那条警告,也就是 agent 读到的那一份。
打开这个状态

双击消息里的引用,浮窗里是发送时的样子:那时工作流的三个 agent 做完两个,第三个的用时停在发送那一刻。能滚、能拉。
打开这个状态

对引用做什么会怎样
单击在对话里找到它那一行,打开。
双击输入框里的变回普通文字。
双击消息里的打开浮窗,看发送时的全文。
指针停在上面悬停卡片。输入框里的给现在的样子,消息里的给发送时的样子。

巧思Buff in:把后台工作拖进消息,就是给下一轮加 buff。它带着发送时的样子进去,agent 读到的就是你那一刻看到的。

巧思拖着走的就是落下去的:指针下面那一块,已经是它进了输入框以后的样子。

命令输出默认折行,折下去的部分缩进两格;「长行折行」能关掉。

折行。每个写出来的行从边上开始,折下去的部分缩进两格;行首本来有空格的,照空格再缩。指针在框上时,右上角出现「长行折行」和「复制输出」。

关掉折行,回到今天的左右拉,覆盖率这类按列对齐的表就对齐了。这台设备上所有命令输出一起记。
打开这个状态

词和按钮都是产品现成的:代码块的条上就有「长行折行」;按钮和「复制输出」一样是 18px、图标 12px。「复制输出」给的是命令写出来的原样,不带折行。

巧思折下去缩进两格:一眼看出哪几行原本是一行,复制出来还是原样。

后台工作交回来,自己开一轮;这一轮的第一行就是它。

第一行就是它。不加分隔线,也不写「后台任务汇报」:那一行本身就说明了是谁回来了。两件一起交回来,开头就是两行:失败的浏览器测试,做完的「审查测试的改动」。点开先看到答复,提问和每一步在上面。

它和派出它那一轮里的那一行,打开的是同一个框。
打开这个状态

派出它的那一步跟着它变:还在跑写「在后台运行」,失败写「失败」,停了写「已停止」,做完写「已完成 · 5 个动作」。
打开这个状态

插件的后台工作和另外三种走同一套;它没画自己的框时,框里是默认的三行。

部署插件的「部署到 staging」。同一种行、同一种小块、同样能引用。颜色是粉;图标是拼图,插件有自己的图标就用它的。框里默认三行:标题、状态、结果。
打开这个状态

框里换成插件自己画的,是另一件事:分法另定,已作为决策点写进后台工作的后端方案。

还没设计的:原型里没画,或者只画了最简单的样子。做之前另定。

还没设计的现在原型里
打断正在跑的一轮播的时候发送键不能用,没有 ■。打断以后这一轮折成什么样、跑到一半的那一步写什么,没画。打断不停后台工作,这一条写在后端方案里。
等你回答的提问只画了「等待你的确认」这一种。agent 问你选哪个、要你填字的提问放在哪、长什么样,没画。
工作流做完原型里的工作流一直没做完。做完时整体的答复放哪、交回来那一轮的第一行怎么写,没画。
插件的工作做完部署做完只是变灰,没有交回来开一轮。插件的工作要不要交回来,没定。
插件自己的界面框里是默认三行。换成插件自己画的,分法另定。
失败了重跑失败的后台命令没有重跑的按钮,要让 agent 再跑一遍。
上下文压缩压缩以后,前面那些行、小块和发出去的引用怎么显示,没画。
重新打开旧会话旧会话里结束了的后台工作算不算看过,输入框上面那一排要不要出现,没定。
窄窗口只在 1280 到 1920 宽看过。更窄时那一排、浮层、悬停卡片怎么收,没画。
多个会话标签页和会话列表上,要不要标出「有后台工作在跑」「有交回来的」,没画。
通知窗口不在前台时后台工作交回来,要不要发系统通知,没定。
读屏记号、水波、胶囊给读屏软件念的字,没写。

试过、换掉的:现在的每一处,大多换过一两次。

试过换成为什么
详情放在侧栏在被点的地方就地展开视线和鼠标都在中间一栏;侧栏要挪到屏幕另一边。
状态栏角落放「后台」入口输入框正上方一排小块状态栏离得远、字又小,等于看不见。
小块前面再放一个「后台」删掉;小块本身就是列表,点一块就地浮出和小块说的是同一件事。
点「查看过程」才能看整行就是开关多一步。
「载入更早的」链接滚到头自动载入多一步;滚到头就是想看更早的。
汇报前加一条分隔线第一行就是交回来的那一项那一行本身就说明了。
过程、工具组也自己滚,一共三层只有装内容的框自己滚,最多两层滚动套滚动,滚轮常被里面接住。
一类框共用一个拉过的高度各框记各的想拉高的往往只是其中几个。
淡出按滚动的百分比算按藏着的像素算,最多 32px只能滚几像素的框,拉到底顶上还整条淡着。
只给种类名上色色块:图标加全名字上色不显眼;「后台命令」这类字也多余。
拖进输入框才上色四种各一色,到处一致拖之前和拖进去,看到的该是同一个东西。
绿色呼吸灯种类色的水波在跑的后台工作,也是这一轮在等它。
一行放不下时收成「还有 N 个」,点开再铺开放不下就换行,全部摆出来藏起来的要多点一下才看得到。
结束的小块一直留着,或闪一下就走变灰带 ×;看过、关掉,或下一轮答完就走不越积越多,也不会没看到就没了。
停了写「已中断」「已暂停」已停止停了不能接着跑,「暂停」会误导;「已中断」是被打断,不是你停的。
长行只能左右拉默认折行,一个按钮关掉读日志要折,看表格要对齐。
插件用青蓝粉和文件的天蓝几乎一样,输入框里又最常出现文件。

同类项目怎么做,我们借了什么、没借什么。

项目怎么做我们
paseo在跑是蓝色的环,一段弧在转,全屏同一个相位。输入框上面的药丸只放子 agent,后台命令不进。结束的一直留着,要手动归档。交回来的那一轮,开头放一行收起的原文。借了同一个相位。四种都进那一排;结束的看过就走。
orca黄色小环。输入框正上方那一条,有东西在跑才出现,最后一个跑完整条清掉。借了「放在输入框正上方」。结束了没看过的不清。
t3code静止的点,故意不动;列表一直留,最多 100 个。只在跑的时候动,结束了就静。
superset在跑是静止的琥珀点;水波只给「要你批准」和失败。借了「水波是等」;等你的用等待色。
happy只数在跑的,结束就走。结束的留到你看过。
Codex一轮结束,过程折成一行,只写用了多久。借了:「已完成 · 用时」。
几家都一样的浮层固定最高加滚动:paseo 440px,orca 256px,superset 240px,没有能拉高的。我们的浮层和悬停卡片能往上拉,高度和对话里那个框共用。

落到代码里:改哪些、用哪些词、等后端什么。

改的大多在 apps/desktop/src/renderer/features/session/components/ 和三份 locale 里,只改画法;读数据的那一层不动。

地方改什么
SessionThread.tsx一轮的骨架:过程那一行、最近三步、最后一行是现在。交回来的那一轮,第一行是那件工作。
ToolRowBase、tool-row.css一种行:图标、动词、对象、结果;在跑的那一步挂鱼群。
ToolGroup.tsx拆掉这一层:每个工具就是一行,不再有「N tools」。
BashTool、EditTool、ToolOutput去掉卡片的边框和标题,内容进底色。Bash 输出默认折行,加「长行折行」(今天靠 preserveColumns 左右拉)。
ReasoningBlock.tsx✨ 换成水泡。字照旧:思考中、思考了 N。
ApprovalTool、AskUserTool不要黄色卡片,放在这一轮末尾,挂水波和等待色;按钮照旧。
process-summary.ts过程那一行只写「正在工作 / 已完成 · 用时」。
SessionContent.tsx「回到最新」在跑时带上正在做的事。
BackgroundTaskActions换成新的一行:记号、色块、时间或结局、■;点开是它的框。
WorkflowEngineCard在 features/workflow 里。工作流换成同一种行;点开是简报和每个 agent 一行,agent 点开照 WorkflowNodeDetail 的提问、每一步、答复。
ProviderTurnDivider交回来的那一轮不再画分隔线,由第一行说明。
styles/index.cssscroll-fade-y 的淡出按藏着的像素算,上下两边各自最多 32px。今天按滚动的百分比算,只能滚几像素的框拉到底,顶上还整条淡着。
新写的输入框上面那一排、点开的浮层、悬停卡片、浮窗、@ 菜单里「后台任务」一组。浮层照现有浮层(radius-overlay、shadow-floating)。
拉框拖动照 use-resize-separator.ts;高度照 runtime/git-changes/view-store.ts 按 daemon 分开存。
不改fold(packages/session-fold)和数据流;session 以外的 Spinner;composer 内部。

用词:新加的只有八处

新加的词用在哪
前面还有 N 步跑的时候,过程里收起的更早几步
在后台运行派出它的那一步,工作还在跑时
发送时消息里的引用:悬停卡片、浮窗
输入内容以搜索文件和后台任务@ 菜单的底栏
正在载入更早的输出滚到框顶时
后台命令、子 agent、工作流、插件悬停卡片第二行的种类名
在对话中定位浮层里的按钮
拖动调整高度,双击恢复框的把手

别的都是 locale 里现成的:

思考中
session.reasoning.thinking
思考了 N
session.reasoning.thoughtFor
正在工作
session.process.running
已完成
session.process.completed
用时 N
session.process.duration
等待你的确认
session.process.waitingApproval
修改 N 个文件
session.process.editedFiles
N 个动作
session.backgroundTask.actionCount
后台任务
session.backgroundTask.label
失败
session.backgroundTask.status.failed
已停止
session.bash.stopped
复制输出
session.bash.copyOutput
已复制输出
session.bash.copiedOutput
长行折行
markdown.code.wrap
运行中
workbench.activity.running
停止
workflow.panel.stop
关闭
common.close
简报
workflow.node.briefing
提问、答复
workflow.node.prompt / answer
任务空间、项目空间
fileTree.section.*
添加到消息
session.composer.attach
滚动到最新消息
session.scrollToLatest
工作区写入
session.composer.permissionTier.workspaceWrite

要后端给的

要什么用在哪
工作记录每件后台工作是什么、谁派的、现在怎样、怎么结束的。行、小块、浮层、@ 菜单、交回来那一轮的第一行都靠它。
正文读取框里的内容。命令输出从后往前分段取,才能打开停在最新、滚到头再载入;子 agent 和工作流里每个 agent 要有自己的正文。
变化信号状态和正文一变就推过来:在跑的框跟着长,时间和结局跟着变。
单独停止■ 只停这一件;打断这一轮,不停后台的工作。
发送时的样子引用发出去那一刻的状态、用时、输出到哪一行、做到哪一步,随消息记下。

前四样写在后台工作的后端方案里(工作记录、正文、变化信号各一节,停止在打断那一节)。前端接线要等它们落地。

这一版不做的。

不做为什么
工作流展开列出阶段和这些事无关,之后单独补。
前台的步骤拖进消息它们的结果本来就在这一轮的上下文里。
输入框里挪动、删除引用编辑器本身的事。
定时任务、自主行动开的那一轮怎么标不是后台工作交回来的,不在这次范围。

打开可交互原型