# 第二章：新增特性深度分析 (/docs/v2/02)

## 2. 新增 [#2-新增]

### 2.1 独立多窗口架构 [#21-独立多窗口架构]

通过 Electron IPC 管道 `DESKTOP_WINDOW_POP_OUT_CHAT`，主渲染进程可将当前激活会话剥离为独立的 BrowserWindow，且子窗口独立承载一套原生的 Find-in-Page（页面搜索）实例，彻底解决了复杂长任务对照排查的痛点。

```typescript
// 主进程多窗口调度逻辑 (从 app.asar 分析提取)
ipcMain.handle('DESKTOP_WINDOW_POP_OUT_CHAT', async (event, { sessionId, bounds }) => {
  const popoutWindow = new BrowserWindow({
    width: bounds?.width || 900,
    height: bounds?.height || 700,
    titleBarStyle: 'hiddenInset',
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
      sandbox: true,
      contextIsolation: true
    }
  });
  popoutWindow.loadURL(`claude://session/${sessionId}?mode=popout`);
  return popoutWindow.id;
});
```

---

### 2.2 离线可视化组件 [#22-离线可视化组件]

完全摒弃外部 CDN 加载，随 ASAR 捆绑：
- `npm_mermaid@11.17.2_dist_mermaid.min.js`
- `npm_chart.js@4.5.0_dist_chart.umd.js`
- `npm_gridjs@5.0.2_dist_gridjs.umd.js`

规范了数据表格失活行规范：
```css
.cds-root [data-cds=DataTable] tr[data-dimmed] {
  --cds-row-dimmed-opacity: .5;
  --cds-text-primary: var(--cds-undimmed-text-muted);
}
/* 行内交互表单控件强制恢复 100% 亮度 */
.cds-root [data-cds=DataTable] tr[data-dimmed] :is(button,input,select,textarea) {
  --cds-row-dimmed-opacity: 1;
  --cds-text-primary: var(--cds-undimmed-text-primary);
}
```

* **为什么 Anthropic 要这样改**：在企业内网高安全级别机房中，外部 CDN 一律被防火墙拦截。将图表容器原生化并在样式层规范失活态，确保了金融、军工及涉密开发场景的 100% 可用性。

---

### 2.3 离线消息重试机制 [#23-离线消息重试机制]

* **1.x 基准**：网络中断时消息直接转为红色报错文字，一旦刷新浏览器或 Electron 页面，整条精心编写的 Prompt 彻底消失；
* **2.0 迭代**：在 Composer 内部建立 `ChatComposerQueuedMessages` 容器，直接与 IndexedDB 事务绑定。

```typescript
interface QueuedMessage {
  id: string;
  sessionId: string;
  content: string;
  attachments: AttachmentRef[];
  failedAt: number;
  retryCount: number;
}
```

* **为什么 Anthropic 要这样改**：开发者的工程提示词往往包含几百行上下文描述、文件路径和堆栈日志，价值极高。将暂存态上升为一等公民组件，杜绝了“崩溃吞文字”的恶性体验。

---

### 2.4 推理算力调节器 [#24-推理算力调节器]

在 `index.chunk-BWk6pVUt.js` 中提取出数据模型：
```typescript
interface EffortOption {
  id: "low" | "medium" | "high" | "xhigh" | "max";
  name: string;
  description: string;
  recommended?: boolean;
  badge?: { message: "Default"; variant: "neutral" | "accent" | "warning" };
  tooltip?: { content: string };
}
```

* **为什么 Anthropic 要这样改**：
  * **推理成本精细化管理**：具备深度思考能力的大模型（如 Sonnet 3.7 / 4.6 / 5）在单次复杂工程思考中可能会燃烧数万 Token。如果只有开关，用户写简单文档时会被过度思考拖慢响应时间并浪费额度；遇到极难 Bug 时又思考不足。
  * **企业配额安全防线**：在 `max` 档位中，界面会显式弹出高危警示（*“May use excessive tokens resulting in long response times”*），并在企业管理端支持通过策略将 `maxEffort` 强制锁死在 `medium`，规避员工意外耗尽企业 API 预算。

---

### 2.5 现代 CSS 动效系统 [#25-现代-css-动效系统]

#### 1. Modern CSS `sibling-index()` 原生级联交错渐入 [#1-modern-css-sibling-index-原生级联交错渐入]
官方直接落地了现代 CSS 的原生选择器计数函数：
```css
.cds-root .cds-chip-in {
  animation: cds-chip-in var(--cds-dur-base) var(--cds-ease-out) backwards;
  animation-delay: calc(var(--cds-chip-in-base-delay, 50ms) + min(sibling-index() - 1, 8) * 30ms);
}

@keyframes cds-chip-in {
  0% { opacity: 0; filter: blur(2px); transform: scale(.8); }
  100% { opacity: 1; filter: blur(0); transform: scale(1); }
}
```

#### 2. View Transitions API 原生页面转场 (`cds-attachments`) [#2-view-transitions-api-原生页面转场-cds-attachments]
当用户在消息流中删除或移除附件时，触发原生视图转场：
```css
:root:active-view-transition-type(cds-attachments)::view-transition-old(.cds-attachment):only-child {
  animation: .13s cubic-bezier(.55, .055, .675, .19) forwards cds-attachment-out;
}

@keyframes cds-attachment-out {
  to { opacity: 0; transform: scale(.5); }
}
```

#### 3. Scroll-Driven 滚动驱动渐变透明遮罩系统 [#3-scroll-driven-滚动驱动渐变透明遮罩系统]
滚动视口边缘不再使用纯色伪元素遮挡，而是直接绑定 CSS 滚动时间轴：
```css
@keyframes cds-scroll-fade-top {
  0% { --cds-scroll-fade-top-raw: 0px; }
  to { --cds-scroll-fade-top-raw: var(--cds-scroll-fade-size); }
}
```
* **效果**：长会话触顶时，顶部渐变遮罩变量自动衰减为 `0px`（硬边缘）；一旦滚离顶部，自动展开为 `28px` 羽化半透明渐变，平滑隐去上滑文字。

---

### 2.6 首页卡片微光浮空 [#26-首页卡片微光浮空]

在 2.0 首页（新建会话 / 启动卡片区）中，官方为 Prompt 建议卡片注入了极具质感的底部环境微光悬浮交互：

```css
/* 提取自 MainWindowPage-CGx8l8Ts.js 编译产物 */
.starter-card {
  transition: transform 150ms cubic-bezier(0.165, 0.84, 0.44, 1);
}

.starter-card:hover {
  transform: scaleY(1.015) scaleX(1.005);
}

.starter-card:after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background-image: radial-gradient(at bottom, hsla(var(--bg-000) / 20%), hsla(var(--bg-000) / 0%));
  opacity: 0;
  transition: opacity 150ms ease-out;
}

.starter-card:hover:after {
  opacity: 1;
}
```

* **视觉机理**：当鼠标悬停时，卡片执行极轻微的三维透视抬升（Y 轴放大 1.5%，X 轴微扩 0.5%），同时底层伪元素渐现一抹由底部向上漫射的半透明高光微光。

---

### 2.7 极细发丝边与相对色彩 [#27-极细发丝边与相对色彩]

在 `MainWindowPage-BD9CWQ83.css` 中提取到的底层边框规则：
```css
.border-0\.5 {
  border-width: 0.5px;
}

:root {
  /* 基于底色动态推导高拟真漫反射投影 */
  --cds-elevation-subtle: 0 1px 2px 0 color-mix(in srgb, var(--cds-surface-0) 80%, black 20%);
  --cds-elevation-card: 0 4px 12px -2px color-mix(in srgb, var(--cds-surface-0) 90%, black 10%);
}
```
* **工程优势**：彻底告别静态透明度硬编码，不论用户处于浅色还是深色主题，阴影与发丝边框均根据当前背景色相实时生成精准的漫反射衰减。

---

### 2.8 触控负边距补偿 [#28-触控负边距补偿]

在输入框底部操作区（ChatComposerChin），官方设计了一套尺寸补偿算法：

```css
.cds-root [data-cds=ChatComposerChin] [data-touch-size] {
  --cmp-chin-touch-grow: calc((var(--cds-h-control) - var(--cmp-chin-row-h, var(--cds-h-control))) / 2);
  min-height: var(--cmp-chin-row-h, var(--cds-h-control));
}

.cds-root [data-cds=ChatComposerChin] [data-touch-size] :is([data-cds=ButtonGroup],[data-cds=SplitDropdownButton]):not([data-size]),
.cds-root [data-cds=ChatComposerChin] [data-touch-size] :is([data-cds=Button],[data-cds=ModelSelector],[data-cds=ModelSelectorEffort]):not([data-size]):not(:is([data-cds=ButtonGroup],[data-cds=SplitDropdownButton]) *) {
  margin-block: calc(var(--cmp-chin-touch-grow, 0px) * -1);
}
```

* **为什么 Anthropic 要引入触控负边距补偿算法**：
  * **设计痛点**：桌面端开发者极度渴望高信息密度（High Information Density），希望输入框底栏紧凑精致，行高压缩在 28px 以内；
  * **无障碍危机**：在触控屏设备（如微软 Surface Pro、触控显示器）或手势笔操作时，低于 44×44px 的按钮极易发生误触，违反 WCAG 2.1 AA 标准；
  * **数学解法**：通过 `--cmp-chin-touch-grow` 算出控件标准命中尺寸与视觉矮行高的差值，使用 `margin-block: calc(... * -1)` 将按钮的不可见点击判定区域（Hit-box）向外扩张，既保证了视觉矮行高，又在物理层面提供了充足的触控命中区。

---

### 2.9 企业托管配置迁移 [#29-企业托管配置迁移]

| 废弃键名 (Deprecated - 不再生效) | 2.0 正式生效键名 (Breaking Replacement) | 作用范围与策略影响 |
| :--- | :--- | :--- |
| `isDxtEnabled` | **`isDesktopExtensionEnabled`** | 控制是否允许安装与运行桌面扩展 (DXT) |
| `isDxtSignatureRequired` | **`isDesktopExtensionSignatureRequired`** | 是否强制要求桌面扩展具备合规数字签名 |
| `isDxtDirectoryEnabled` | **`isDesktopExtensionDirectoryEnabled`** | 是否允许企业员工访问与安装扩展目录 |
| `enduserAttribution` | **`endUserAttribution`** (严格驼峰) | 审计日志与遥测中的最终用户身份归因识别 |
| `trustBootstrapLocalExec` | **`trustBootstrapDelivery`** | 信任引导与本地可执行文件安全分发控制 |
| `inferenceGatewayHeaders` | **`inferenceCustomHeaders`** | 企业自定义推理网关路由与鉴权头部注入 |

> 🚨 **高危警报 (Enterprise Risk Alert)**：  
> 分析检查表明，Claude 2.0 完全移除了旧键名的兼容回退逻辑！若企业仅配置了旧键名，客户端将**静默被判定为“未托管客户端 (Unmanaged)”**，导致扩展禁用策略击穿。  
> 同时，因持久化 Token 结构重构，升级后所有 OAuth MCP 连接器必须重新授权一次。

---
