ChatGPTClaudeGrok / X / CursorGemini

DeepSeek Harness macOS 面板与菜单点不动:原生目录选择器与锚点失效排查

故障排查发布于 2026-10-30作者: DeepSeek Plugin 插件市场
DeepSeek HarnessDSHmacOS目录选择器NSOpenPanelMenuSurfaceanchor-name
DeepSeek Harness 在 macOS 上添加工作区时,原生目录面板的侧边栏和搜索框点不动;菜单背景还会透出模糊文字。按「整块不能交互 / 局部不能交互 / 位置不对」三类分诊,分别对应焦点时序与锚点变量两个原因。

「Mac 的访达是不是坏了?搜索不能用,侧边栏也打不开别的文件夹」——这是社区里一位用户的原始描述。实际那是 DSH 自己的目录选择器,面板弹出来了,但焦点根本不在它身上。 同一台机器上还有另一类「点得动但位置不对」的菜单问题,两者看着都像 UI 坏了,修法完全不同(#10748、#10607)。

DeepSeek Harness 分诊表:三种「点不动」

先看是整块不能交互、还是局部不能交互、还是能交互但位置不对——三类分别指向焦点、窗口层级、锚点三个层面。

症状交互对象判断方向
侧边栏、搜索框都不能用系统级原生面板面板不是 key window
右侧文件列表能进,左侧点不动同一面板的两个区域左侧是 AppKit table view
菜单能点,但背景透字、位置偏页面内 web 菜单CSS 锚点没生效

判别顺序建议固定:先确认「点得动吗」,再确认「点得动的是哪一块」,最后才看视觉。

DSH插件 第一类:面板整体拿不到焦点

面板是以 accessory 应用身份弹出的,激活调用写在面板创建之前;此时进程还没有窗口,系统把焦点直接还了回去。

  1. 现象:点「增加新文件夹」弹出面板,点侧边栏没反应,点搜索框打字也没有光标。
  2. 社区做的独立复现:直接跑那段 JXA,面板由 osascript 进程弹出。
  3. 面板托管的服务是 Open and Save Panel Service (osascript),说明它是系统级面板而不是网页元素。
  4. 同一时段 mdfind 正常返回,排除 Spotlight 索引损坏。
  5. 结论:activateIgnoringOtherApps(true) 在 NSOpenPanel.openPanel 之前调用,面板以「可见但不是 key window」出现。

DeepSeek Harness 第二类:右侧能点、左侧点不动

侧边栏是 AppKit 的 table view,acceptsFirstMouse 返回 NO,首次点击被当成「激活窗口」消费;右侧文件列表是文件对话框自己的 out-of-process 视图,照常接受点击。

  1. 观察细节:右侧能正常进出目录,左侧任何一项都点不动。
  2. 切换目录后侧边栏会跟着高亮——那是面板根据当前路径自己同步的,不是点击反馈,很容易误判成「能点」。
  3. 探测方法:用同一段脚本分别在「面板创建前激活」与「面板创建后激活」两种时机下读 panel.isKeyWindow 与 NSApp.isActive。
  4. 社区结果:当前代码 6 次里 5 次 isKeyWindow 为 false;挪到创建之后 6/6 为 true。
  5. 修法就是把激活那一行从 openPanel 之前移到面板建好之后、runModal 之前。
  6. 补丁在本地分支 fix/macos-panel-activation(cb461ebb87),并在 native-picker.spec.ts 里加了断言把调用顺序钉住,15 项测试通过。

DeepSeek插件 第三类:菜单能点,但位置和外观不对

anchor-name 与 position-anchor 经 var() 中转时,真实 Chromium 不应用这个替换,backing 于是没有锚点可依,尺寸退化成 0×0。

  1. 看现象:菜单只有 45% 半透明层,压在网页内容上透出模糊文字,压在窗口透明区则呈均匀亮灰。
  2. 采样对比:故障时约 (135,135,135),设计上 backing 生效时应为不透明深灰约 (42,43,46)。
  3. 看实现:MenuSurface.tsx 把锚点名注入成 --dsh-menu-anchor,CSS 侧写 anchor-name: var(--dsh-menu-anchor) 与 position-anchor: var(--dsh-menu-anchor)。
  4. 看探测:CSS.supports 对 anchor-name、position-anchor、anchor() 全部返回 true,但布局不应用。
  5. 看尺寸:backing 的 getBoundingClientRect() 是 0×0;同一窗口里改成字面量锚名后,backing 与 surface 完全对齐。
  6. 看回退:top: anchor(top)、left: anchor(left) 没有回退值,无效就停在 auto;anchor-size(width, 0px) 取显式回退,就是 0。固定定位加 auto 偏移加零尺寸,就是你看到的错位。
  7. 修法:在 MenuSurface.tsx 里直接内联写这两个属性——surface 上写 anchor-name,backing 上写 position-anchor,用同一个生成的字符串,去掉自定义属性中转。

DeepSeek Harness 两步验证:别把两类混在一起

先确认焦点,再确认锚点;两个实验都不需要改代码。

  1. 焦点实验:点面板任意位置一次,再点侧边栏。如果第二次生效,就是「首次点击被激活消耗」。
  2. 也可以换一个已知能用的目录选择入口(例如网页里的上传控件)对照,确认不是全系统问题。
  3. 锚点实验:打开菜单,看背景是否透出页面文字;再用开发者工具把 backing 的锚名改成字面量,看是否对齐。
  4. 对齐了就说明是变量中转的问题,不是透明度或模糊材质配置。

DSH插件 补丁长什么样

修复本身只有两行位置的调整:一个是把激活调用后移,一个是把两个锚点属性从变量换成字面量。

  1. 目录面板这一处,把激活从面板创建前挪到创建后、runModal 之前:
js
var panel = $.NSOpenPanel.openPanel;
panel.message = argv[0];
// 面板已存在时才激活,否则 accessory 应用会把焦点直接还回去
app.activateIgnoringOtherApps(true);
if (panel.runModal !== $.NSModalResponseOK) return '';
  1. 菜单这一处,把 surface 上的 anchor-name 与 backing 上的 position-anchor 直接写成同一个生成字符串,不再经 var()。
  2. 两处改动都不影响其它平台分支,样式表仍然只做消费方。
  3. 改完各跑一次对应测试:目录选择器 15 项通过;菜单侧靠对齐结果肉眼可验。

修复后的验证

验证标准很具体:焦点在面板上,锚点在 backing 上。

  1. 重新打开目录面板,点侧边栏任意一项,应当直接切换目录。
  2. 点搜索框,光标应当出现并能输入。
  3. 打开菜单,背景应当是不透明深灰,不再透出页面文字。
  4. 缩放窗口再开菜单,方向与位置应当跟随触发按钮。

注意事项

  1. 别把它当成访达故障。面板外观与访达几乎一致,社区建议在面板提示或文档里注明「这是 DSH 的目录选择器」。
  2. 别用「高亮」判断可点击。侧边栏高亮是同步当前路径的结果。
  3. 别只改 CSS 变量名。变量名怎么改都还是经过中转,问题在替换本身。
  4. 别期待重启解决。两类都是代码层面的时序与属性问题。
  5. 记录系统版本。社区在 macOS 26.4、27.2 上都复现过,版本差异不是分界线。

如果你的问题是「面板能点,但选完目录没反应」,那不属于这两类,去查工作区创建链路与 ACL。相关排查见 DeepSeek Harness macOS 桌面端:全屏点检查更新后黑屏与窗口消失的排查。

ChatGPTClaudeGrok / X / CursorGemini

常见问题

macOS 上点「添加工作区」弹出的目录面板,侧边栏 Favorites 点了没反应,是 DeepSeek Harness 还是访达坏了?

不是,那是 DeepSeek Harness 的原生目录选择器,外观和访达几乎一致。面板以「可见但不是 key window」的状态出现,侧边栏的点击被当成「激活窗口」消耗掉,右侧文件列表因为走独立的 out-of-process 视图反而正常。

为什么 DeepSeek Harness 弹出的目录面板里,搜索框也不能输入?

同一个根因,DeepSeek Harness 的目录面板不是 key 窗口,拿不到键盘焦点。非 key 窗口拿不到键盘焦点,搜索框点了也不会出现光标。社区在 macOS 26.4 上复现,并确认 mdfind 正常,所以不是 Spotlight 索引问题。

DeepSeek Harness 这个「面板能看见但不能点」的问题,现在有修复吗?

有,社区给了 DeepSeek Harness 的本地补丁:把 activateIgnoringOtherApps(true) 从 NSOpenPanel.openPanel 之前挪到面板创建之后、runModal 之前。探测显示原来是 6 次里 5 次 isKeyWindow 为 false,改后 6/6 为 true。补丁在本地分支,官方未合。

菜单背景透出模糊文字、边缘发亮,是 DeepSeek Harness 的透明度设置问题吗?

不是,问题在 DeepSeek Harness 的 CSS 锚点定位。MenuSurface 的 macOS backing 依赖 CSS 锚点定位,而 anchor-name / position-anchor 经 var() 传入时 Chromium 不应用,backing 尺寸为 0×0,只剩 45% 半透明层。把两个属性直接内联写就能对齐。

怎么快速区分 DeepSeek Harness 的「面板不能点」和「菜单位置不对」这两类问题?

看交互对象就能分开 DeepSeek Harness 的两类 UI 问题:系统级弹窗(选目录)点不动属于焦点问题;页面内菜单能点但位置或外观错属于锚点问题。前者靠调整激活时序,后者靠去掉 CSS 变量中转。

相关术语

key window
key window 是 macOS 中当前接收键盘与鼠标事件的窗口。非 key 窗口上的部分控件会把首次点击用于激活窗口,从而「看得见但点不动」。— https://github.com/deepseek-ai/deepseek-harness/discussions/10748
NSOpenPanel
NSOpenPanel 是 macOS 的原生打开/保存面板。DSH 的目录选择器通过 JXA 在 osascript 里调用它,因此面板由独立的系统进程托管。— https://github.com/deepseek-ai/deepseek-harness/discussions/10748
acceptsFirstMouse
acceptsFirstMouse 是 AppKit 控件的一个属性,决定非 key 窗口上的首次点击是否直接生效。返回 NO 时,首次点击只用于激活窗口。— https://github.com/deepseek-ai/deepseek-harness/discussions/10748
anchor-name
anchor-name 是 CSS 锚点定位属性,给元素命名以便其他元素相对它定位。经 CSS 自定义属性中转时,Chromium 可能不应用该替换,导致定位整体失效。— https://github.com/deepseek-ai/deepseek-harness/discussions/10607

来源