UI 增量重构与转录调用链设计
项目会话 · YYorick · 3 轮对谈 · 5 个工具执行 · 6.8k tokens
YYorick15:20
分析这个项目所有显示的 UI 功能。之前命令行和调用链长得不是很好看(生硬药丸套药丸、长命令截断成 ap...、印章与折叠挤成一团),请给我设计一版更好的!要求有折叠在调用链中的展示,还有一个展开的展示。不同类型(Bash、Read、Edit、Grep、Memory)长相要有明显区分,延续 Inkstone(砚)纸墨雅致的风格,直接改在当前原型上看效果。
工作区上下文已装配 · 检索到 15 条 Inkstone 规范记忆 · 本机 Host 直连 (8787)
CSonnet 4.615:20 4.2k · 8s
研墨深思 · 针对 Bash、Read、Edit、Grep 建立专属性语义编码,打破单一药丸,提供折叠链与详阅卡双态机制 正在研墨 · 思考中… 待定
原版调用的视觉痛点在于将操作目标、长文本命令、状态印章、折叠箭头强行压入同一条僵硬的药丸框内,不仅命令过早被截断,且各工具千篇一律。重构策略:在时间线(Spine)上保持单行折叠节奏,不同工具赋予专用徽标(Bash 终端灰、Read 宣纸白、Edit 朱笔印、Grep 霁蓝);展开时就地展开为专业卡片(Terminal 终端带行号输出、Diff 雕版带增删行与朱砂印「允」)。
调用链执行完毕 · 5 个工具 · 2 终端 · 1 检阅 · 1 落笔 (盖印 允) · 1 记忆 · 耗时 3.4s
Memory
mcp::agent-memory::get_context project: piwin · "Inkstone 视觉规范"
15 条记忆·120ms
记忆库上下文 · agent-memory MCP
MATCH 0.94
[1] Inkstone 视觉语义:纸面 (--s1/s2/s3) 暖灰色温,墨面深岩沉着。写操作必须由朱砂印「允」加盖确认。
[2] 调用链规范:禁止在聊天正文中塞满无意义的原始堆栈;长输出需就地折叠并保留后 30 行精华。
Bash zsh
sleep 4; cd /Users/yorickjue/Developer/piwin-inkstone-v2 && grep -rn "解答" apps/desktop/src
允 0 OK 4.2s
~/Developer/piwin-inkstone-v2
0 OK 耗时 4.2s
❯ sleep 4; cd /Users/yorickjue/Developer/piwin-inkstone-v2 && grep -rn "解答" apps/desktop/src
apps/desktop/src/composer-card.tsx:142: // 解答与流式渲染逻辑 - 确保打字与状态切换不产生跳动 apps/desktop/src/tool-call-card.tsx:88: // 工具链解答卡片 - 单行折叠与多行展开渲染 apps/desktop/src/turn-tool-group.tsx:45: // 聚合解答流与时间线状态机收敛
执行策略:工作区路径已加入信任目录 · 自动授权执行 允
Read
apps/desktop/src/settings/section-registry.ts L1-65
65 行·3.2 KB·18ms
apps/desktop/src/settings/section-registry.ts
TypeScript
export const SETTINGS_SECTIONS: SettingsSectionDefinition[] = [ { id: 'general', title: '通用设置', group: 'basic' }, { id: 'appearance', title: '外观与纸墨', group: 'basic' }, { id: 'tools', title: '工具与调用链', group: 'advanced' }, { id: 'models', title: '协同模型', group: 'advanced' }, ];
Edit
docs/design/inkstone/proto-00-shell.html
+54 −18 允 32ms
docs/design/inkstone/proto-00-shell.html
+54 −18
@@ -85,6 +85,12 @@ 替换原有的粗硬胶囊药丸调用链
85- <div class="old-clunky-pill">Bash sleep 4; cd ... [允] ></div>
85+ <div class="tc-item" data-kind="bash">
86+ <div class="tc-row"><span class="tc-badge">Bash</span>...</div>
87+ <div class="tc-detail"><div class="tc-terminal-box">...</div></div>
88+ </div>
已安全写入磁盘 · 随时可点「回滚」就地撤销 允
Bash vitest
pnpm vitest run tool-timeline
0 OK 12 通过·1.8s
回归校验测试套件
ALL PASSED
✓ tool-timeline.test.ts (12 tests) 178ms ✓ renders collapsed row with semantic badges ✓ expands terminal sheet on click ✓ shows authenticated vermillion seal 允 Test Files 1 passed (1) Tests 12 passed (12)

我已经根据 Inkstone 墨韵设计语言完成调用链重构:

1. 告别生硬药丸套药丸:折叠行不再用一个灰框将命令粗暴截断,而是作为时间线脊柱上的呼吸节点,语法关键词(cd、grep、参数字符串)错落有致,信息一目了然。
2. 各类型工具长相鲜明区分:Bash 终端带有黑色提示符徽标,Read 呈现书卷标尺与行号,Edit 呈现松柏绿/朱红差异数与朱砂印「允」,Memory 带有卷轴暗金;
3. 折叠态与展开态从容切换:你可以点击任意工具行就地展开查看深色终端输出或 Diff 高清卡片,也可以使用顶部的「全部折叠 / 全部展开 / 混合现实态」一键切换预览!

Sonnet 4.6 · 本轮消耗 4.2k tokens · 5 项工具协同
YYorick15:25 D换选 DeepSeek V4 深入推演
如果调用链中遇到密集的多文件读取,或者某个 Bash 命令行执行失败,调用链在视觉上如何呈现「批量聚合胶囊」与「报错中断自愈」?
DDeepSeek V415:25 2.4k · 12s
研墨深思 · 批量探索降噪与断言报错反射自愈环(Reflection Loop)
密集的探索调用(如连读 5 个文件、多次 grep)若平铺在时间线上会造成严重的信噪比下降。Inkstone 的对策是「批次胶囊(Batch Capsule)」:在主链上折叠为单行概览,展开后呈递进式子轨(Sub-stream)。而对于失败命令,绝不能直接 throw 崩掉界面,而是通过朱红警戒态精准呈现退出码与堆栈关键行,将报错作为工具产物喂回模型自我修复。
调用链遇阻自愈 · 1 个批量聚合胶囊 (3 文件) · 1 个失败终端测试 · 耗时 7.8s
探索了 3 个文件
2 次检索 · 3 次检阅 · 关联队列与状态机模型
6 工具·1.8s
只读探测子时间线(递进式子轨) 全部成功
grep "queued-turn" 7 处 · 3 文件
read apps/desktop/src/steer-queue-model.ts 88 行
grep triggerSteer 4 处
read apps/desktop/src/composer-run-actions.tsx 212 行
Bash vitest
pnpm vitest composer-dock --run
1 FAIL 断言失败·6.2s
测试套件未通过 · 退出码 1
❯ pnpm vitest composer-dock --run
FAIL composer-dock.test.tsx › queues Enter while streaming AssertionError: expected "steer" to be "queue" - Expected: "queue" + Received: "steer" at composer-dock.test.tsx:148:7
报错信息已自动包装为 ToolResult 反哺模型 · 启动自我修正

已改为排队语义

运行中的 Enter 现在走 handleSend → session/queued-turn-submit,已改为排队语义;消息进 SteerQueue 而不打断转录流;⌘Enter 仍触发 triggerSteer。

如上图所示,当面对高噪或异常场景时:

1. 批量胶囊收敛:连续 4~6 次的探索性搜索被聚合为一行沉着的「探索了 3 个文件」,点开后在子轨中清晰罗列,不喧宾夺主;
2. 醒目的朱红报错态:时间线墨点与退出码转换为朱红警示,终端直接高亮 AssertionError 关键行与差异行,模型在下一轮循环中阅读该报错并就地自愈修正。

DeepSeek V4 · 本轮消耗 2.4k tokens
YYorick14:08 G换选 Gemini 3.8 进行图解
清晰明了。把这个从参数解析失败到自愈修正的完整决策流转,画一个 Mermaid 状态机流转图。
GGemini 3.814:08 1.2k · 4s
研墨小憩 · 生成自愈状态流转 Mermaid 图谱

自愈修正状态机的流转闭环如下:

agent_self_healing.mermaid·Mermaid
graph TD
    Start([用户提问]) --> Loop[模型决策循环]
    Loop -->|产生 ToolCall| Parse{参数校验与反序列化}
    Parse -->|校验成功| Exec[执行本地工具]
    Parse -->|解析异常| ErrMsg[构造自愈提示消息]
    ErrMsg -->|作为 Tool 消息入栈| Loop
    Exec -->|工具执行产物入栈| Loop
    Loop -->|无 ToolCall| Done([输出最终答复])

该机制使得 Agent 对复杂输出具备极佳鲁棒性,无需脆弱的外置硬解析脚本。

Gemini 3.8 · 本轮消耗 1.2k tokens
@ composer-card.tsx@ AGENTS.md §3.3
Enter 盖印落笔⇧Enter 换行⌘K 切换模型
COMPOSITION / NEW

从一个想法开始

选择这次对话的工作范围。