--- title: "第三篇:会话核心流与指令交互引擎" part: 3 category: cds-manual domain: "Chat Stream & Composer Engine" ---

[⬅️ 上一篇:第二篇:基础原子组件与交互控件](02-基础原子组件与交互控件.md) · [📚 返回总目录](Claude%20Design%20System%20(CDS).md) · [下一篇:第四篇:动效物理学、着色器与环境光影 ➡️](04-动效物理学、着色器与环境光影.md)

--- ## 第三篇:会话核心流与指令交互引擎 > **技术领域与英文指代**:`Chat Stream & Composer Engine` > **逆向审计基线**:基于 **REA (Reverse Engineer Anything) v6.5.0** 对官方 macOS 桌面生产包 `/Applications/Claude.app`(`@ant/desktop v2.37337.1`,构建时间戳 `2026-10-13T22:16:06Z`)进行全量 AST 反编译与样式取证。**绝无主观推测,全量引述真实源码与 CSS 规则**。 ### 生产环境取证溯源清单 | 规范领域 | 官方生产文件 Hash | 核心取证符号 / 规则 | | :--- | :--- | :--- | | **消息气泡与版心排版** | `frame-shell-chrome-CAw-tYzh.js` | `[data-cds=UserMessage]`, `[data-cds=AssistantMessage]`, `--cds-message-bubble-radius`, `--cds-assistant-message-text-inset`, `--cds-assistant-message-text-stop` | | **会话状态机与阅读折叠** | `shared-2-Cb74JByF.js` | `UX` (`UserMessage`), `bY`, `xY`, `yY`, 300px 截断与 `mask-image` 渐变遮罩, `MessageActions` 焦点漫游 | | **思考时间轴与波浪动效** | `cc1aae219-DtZTxCKj.css` | `.timeline-quiet-dots`, `@keyframes timeline-quiet-dot` (1.9s), `.timeline-expand` (Grid 0fr), `.timeline-status-*` | | **输入法合成赛跑防御** | `shared-frame-BfjMqbuN.js` | `Lm()`, `Rm()`, `zm()`, `Bm()`, `Um()`, WebKit 500ms Post-Composition Delta Guard, `beforeinput` 拦截 | | **Slash 与 Mention 语法树** | `cb6930dae-BD0W5ZM9.js` | `cs()` 词法解析器, `Qo` (`@` 提及), `$o` (中日韩全角标点剥离), `rs = 1024`, 256 个文件引用熔断阈值 | | **Token 计量与缓存生命周期** | `c058e28e3-DXZbxFF9.js`, `c30db9bec-DjF3pT_h.js` | `ephemeral_5m_input_tokens`, `ephemeral_1h_input_tokens`, `adaptive` thinking 架构, 4色显存解构 | | **MCP 工具授权与人机协同** | `c05b96c7f-DklIyA-P.js`, `cc1aae219-DjR8LnUv.js` | `structured_content`, `ws()`, `user_denied`, `policy_denied`, `PERMISSIONS_ERROR`, `bs` 330s 垃圾回收 | --- ### 3.1 会话气泡套件与排版规范 > **技术领域与英文指代**:`User & Assistant Message Bubbles` #### 3.1.1 用户提问气泡 (`[data-cds="UserMessage"]`) 取证自 `frame-shell-chrome-CAw-tYzh.js` 与 `shared-2-Cb74JByF.js`,用户消息在 CDS 中具有严谨的容器几何与状态结构: ``` [data-cds="UserMessage"][data-author="self"][data-state="done"][data-text-size="md"] ├── AttachmentPreview (若随附附件,MessageAttachmentsFile 7.5rem 磁贴) ├── Bubble Container (yY: rounded-[--cds-message-bubble-radius] px-[--cds-message-bubble-pad-x] py-[--cds-message-bubble-pad-y]) │ ├── .cds-user-message-body (正文,若超出 300px 施加 3rem 底部渐变蒙版) │ └── Show more / Show less (折叠切换按钮) └── MessageActions (悬浮工具条: Copy, Edit, Retry, 快捷漫游) ``` ##### 1. 真实圆角与几何尺寸公式 (REA 取证) ```css /* frame-shell-chrome-CAw-tYzh.js 官方声明 */ .cds-root [data-cds=UserMessage], .cds-root [data-cds=AssistantMessage][data-variant=bubble], .cds-root [data-cds=AssistantMessage][data-cds-bubble-stack] { --cds-message-bubble-radius: calc(var(--cds-radius) + calc(.25rem * var(--cds-rem-scale, 1))); --cds-message-bubble-pad-x: var(--cds-pad-lg); /* 16px */ --cds-message-bubble-pad-y: var(--cds-pad-md); /* 12px */ --cds-message-bubble-measure: 85%; } ``` * **圆角计算**:在默认 `--cds-radius: 8px`、`--cds-rem-scale: 1` 基础下,`calc(8px + 4px) = 12px`;在桌面加大模式下扩展至 `18px`。 * **版心宽度**:`max-w-[var(--cds-message-bubble-measure)]` 约束为 `85%`。当屏幕宽度小于 `40rem` 时自动降级为 `clamp(85%, 448px, 100%)`。 * **背景与文字颜色**: - 默认模式:`bg-[var(--cds-bg-user-message)]`(浅色为中性浅灰 `var(--cds-bg-neutral)`)。 - Personal 专属色调:`bg-[var(--cds-bg-user-message-personal)] text-[color:var(--cds-text-user-message-personal)]`。在浅色模式下为 `#dde8f7`,深色模式下为 `#193c5f`。 - 动态悬浮反应:在 `.feed-bubble-reacts:hover` 状态下注入 `--cds-bg-user-message: var(--cds-bg-neutral-hover); --feed-bubble-mix: 16%;`。 ##### 2. 超长折叠与阅读渐变蒙版 (Truncation & Mask) 在 `shared-2-Cb74JByF.js` 中,当用户提问文字垂直高度超过 `collapseThreshold = 300px` 时,自动进入折叠态: ```css /* REA 取证:3rem 底部衰减蒙版 */ .cds-user-message-collapsed { max-height: 300px; overflow: hidden; mask-image: linear-gradient(to bottom, black calc(100% - 3rem), transparent); -webkit-mask-image: linear-gradient(to bottom, black calc(100% - 3rem), transparent); } ``` --- #### 3.1.2 模型回答正文 (`[data-cds="AssistantMessage"]`) 与传统聊天软件将 AI 回答同样装入边框气泡的做法截然相反,Claude Desktop 秉持**“内容即界面,零边框透明画布哲学”**。 ##### 1. 文本微缩进与止动流体力学 (Text Inset & Stop Law) ```css /* frame-shell-chrome-CAw-tYzh.js 官方声明 */ .cds-root [data-cds=AssistantMessage] { --cds-assistant-message-text-inset: 4px; --cds-assistant-message-text-stop: clamp(0px, (100% - 384px) * .175, 56px); } /* 当正文内部嵌套卡片、数据表格、代码块或 MCP 面板时,微缩进立即精确归零 */ .cds-root [data-cds=AssistantMessage] :is( [data-cds=Card], [data-cds=Surface], [data-cds=Panel], [data-cds=Banner], [data-cds=Aside], [data-cds=Accordion], [data-cds=PreviewCard], [data-cds=Table], [data-cds=DataTable], [data-cds=AskUserQuestion], [data-cds=CommentCard], [data-cds=ChartContainer], [data-cds=PointChartContainer], [data-cds=FileDiff], [data-cds=UserMessage] ) { --cds-assistant-message-text-inset: 0px; --cds-assistant-message-text-stop: 0px; } ``` * **微缩进律**:文字正文保持 `4px` 左侧极轻微呼吸缩进,与顶部的 Claude ✦ 徽标保持光学对齐。 * **卡片重置律**:一旦内容流中出现结构化卡片(如代码块、Artifact 预览、MCP 授权面板),立即将 Inset 与 Stop 归零为 `0px`,确保卡片充满版心容器。 ##### 2. 纵向排版律动 (Vertical Rhythm) 取证自 `shared-styles-Bl9zqrv-.css`: $$\text{chat-turn-gap} = \text{chat-body} \times \text{chat-leading} \times 0.75$$ $$\text{chat-item-gap} = \text{chat-body} \times \text{chat-leading} \times 0.50$$ 在 `md` 字号(`chat-body: 14px`, `chat-leading: 1.42857`)下,消息轮次间距精确为 `15px`,块间距精确为 `10px`。 --- ### 3.2 思考过程折叠与时间状态机 > **技术领域与英文指代**:`Thinking Accordion & Timeline Status Machine` Claude 在流式呈现 Thinking(扩展思考过程)时,在 CSS 与 JS 运行时构建了四阶微交互体系(源码取证自 `cc1aae219-DtZTxCKj.css` 与 `shared-2-Cb74JByF.js`)。 ```mermaid stateDiagram-v2 [*] --> Generating: 模型开始输出思考流 Generating --> Generating: 3点波浪跳跃 (1.9s infinite cubic-bezier(.4, 0, .2, 1)) Generating --> Generating: 展开互斥锁锁定 (isOpen=true, 禁止折叠防抖动) Generating --> Settled: 思考流终结 Settled --> Collapsed: 用户点击折叠 (Grid 1fr -> 0fr, .2s) Collapsed --> Expanded: 用户再次点击 (Grid 0fr -> 1fr) ``` #### 3.2.1 3点静默跳跃指示波浪 (`.timeline-quiet-dots`) 在官方 `cc1aae219-DtZTxCKj.css` 中提取出其完全物理关键帧: ```css .timeline-quiet-dots { gap: 3.5px; display: inline-flex; position: relative; top: .26em; } .timeline-quiet-dots > span { background: var(--cds-clay, #d97757); opacity: 0; border-radius: 50%; width: 3px; height: 3px; animation: 1.9s cubic-bezier(.4, 0, .2, 1) infinite timeline-quiet-dot; } .timeline-quiet-dots > span:nth-child(2) { animation-delay: .15s; } .timeline-quiet-dots > span:nth-child(3) { animation-delay: .3s; } @keyframes timeline-quiet-dot { 0%, 8% { opacity: 0; transform: translateY(2px); } 22% { opacity: 1; transform: translateY(-2.5px); } 36%, 70% { opacity: 1; transform: translateY(0); } 90%, 100%{ opacity: 0; transform: translateY(0); } } ``` * **三阶位移物理**: 1. $0\% \sim 8\%$:下沉 $2\text{px}$ 准备弹起; 2. $22\%$:向上冲刺至最高点 $-2.5\text{px}$,透明度达到 $100\%$; 3. $36\% \sim 70\%$:自然落回基准点 $0\text{px}$ 稳定驻留; 4. $90\% \sim 100\%$:淡出归零,等待下一个 $1.9\text{s}$ 循环。 #### 3.2.2 状态条平滑升降物理 (`timeline-status-*`) 思考完成与状态切换时不使用生硬的显隐,而是通过升降动画平滑交接: * **入场**:`.timeline-status-enter-quiet`,`.24s cubic-bezier(.3, .7, .4, 1)` 从 `translateY(6px)` 抬升至基线; * **退场**:`.timeline-status-exit-quiet`,`.18s ease-out` 向下掉落 `translateY(-4px)` 并渐变透明。 #### 3.2.3 CSS Grid 伸缩展开防抖 (`.timeline-expand`) 为了消除常规 JavaScript 计算 `scrollHeight` 带来的性能开销与视口突变,CDS 全面采用现代 CSS Grid 尺寸过渡: ```css .timeline-expand { grid-template-rows: 1fr; display: grid; } .timeline-expand > * { align-self: start; min-width: 0; min-height: 0; } @keyframes timeline-expand { 0% { opacity: 0; grid-template-rows: 0fr; } 100% { opacity: 1; grid-template-rows: 1fr; } } .timeline-expand-enter { animation: .2s cubic-bezier(.19, 1, .22, 1) timeline-expand; } ``` --- ### 3.3 新一代富文本输入框终端与指令交互引擎 > **技术领域与英文指代**:`Chat Composer & Next-Gen Engine` 在 Claude Desktop 生产端中,输入框已由传统简单的 `