v2 · Claude Desktop 2.0 逆向手册
第二章:新增特性深度逆向
2. 新增
2.1 独立多窗口架构
通过 Electron IPC 管道 DESKTOP_WINDOW_POP_OUT_CHAT,主渲染进程可将当前激活会话剥离为独立的 BrowserWindow,且子窗口独立承载一套原生的 Find-in-Page(页面搜索)实例,彻底解决了复杂长任务对照排查的痛点。
// 主进程多窗口调度逻辑 (从 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 离线可视化组件
完全摒弃外部 CDN 加载,随 ASAR 捆绑:
npm_mermaid@11.17.2_dist_mermaid.min.jsnpm_chart.js@4.5.0_dist_chart.umd.jsnpm_gridjs@5.0.2_dist_gridjs.umd.js
规范了数据表格失活行规范:
.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 离线消息重试机制
- 1.x 基准:网络中断时消息直接转为红色报错文字,一旦刷新浏览器或 Electron 页面,整条精心编写的 Prompt 彻底消失;
- 2.0 迭代:在 Composer 内部建立
ChatComposerQueuedMessages容器,直接与 IndexedDB 事务绑定。
interface QueuedMessage {
id: string;
sessionId: string;
content: string;
attachments: AttachmentRef[];
failedAt: number;
retryCount: number;
}- 为什么 Anthropic 要这样改:开发者的工程提示词往往包含几百行上下文描述、文件路径和堆栈日志,价值极高。将暂存态上升为一等公民组件,杜绝了“崩溃吞文字”的恶性体验。
2.4 推理算力调节器
在 index.chunk-BWk6pVUt.js 中提取出数据模型:
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 动效系统
1. Modern CSS sibling-index() 原生级联交错渐入
官方直接落地了现代 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)
当用户在消息流中删除或移除附件时,触发原生视图转场:
: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 滚动驱动渐变透明遮罩系统
滚动视口边缘不再使用纯色伪元素遮挡,而是直接绑定 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 首页卡片微光浮空
在 2.0 首页(新建会话 / 启动卡片区)中,官方为 Prompt 建议卡片注入了极具质感的底部环境微光悬浮交互:
/* 提取自 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 极细发丝边与相对色彩
在 MainWindowPage-BD9CWQ83.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 触控负边距补偿
在输入框底部操作区(ChatComposerChin),官方设计了一套尺寸补偿算法:
.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 企业托管配置迁移
| 废弃键名 (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 连接器必须重新授权一次。