What problem does this solve?
功能本身是好的:main/path-target.ts + ui/FilePathMenu.tsx 能把「相对 / 中文 / 空格」路径正确解析成
绝对路径,三个动作(打开文件 / 在访达中显示 / 复制路径)在 Windows 11 + 0.6.0 上实测都正常。
问题是入口找不到,而且看不到文件到底在哪 。
我自己为了找到它花了点时间,过程:
让 agent 改一个文件;
轮末那行「修改了 1 个文件 · +23 −0」默认是收起 的(TurnDiffChip.tsx:97 的 <details> 没有
open,也没有受控状态),所以文件路径当时不在屏幕上;
先去的两个地方都没有菜单:
工具调用卡自己的摘要行也显示文件路径(chat/ToolCallCard.tsx:73 的 summarizeArgs 会取
path 参数,第 98 行渲染成卡片摘要),但那里没有挂点;
聊天正文 / 工具输出里出现的路径文本同样没有挂点(不做文本嗅探是明确的取舍);
最后才意识到:要先点那行右侧的箭头展开,再对展开出来的文件行 右键,或者把鼠标停上去等
hover 出的「⋯」。
两个问题
① 入口不可发现
components/chat/TurnDiffChip.tsx:97:一个 <details>(className 为 turn-diff drawer-details
加一个进入动画类),默认收起;
components/chat/TurnDiffChip.tsx:148(注释原文):「主操作仍是左键跳 diff,这里是冗余入口
(与胶囊叉叉同款:aria-hidden 的鼠标增强)」,对应实现里该按钮带 aria-hidden="true"(第 151 行);
styles/globals.css:1743(注释原文):「文件行「⋯」更多按钮(issue [Feature] 任务栏最小化 / 模型搜索 / 对话重命名置顶 / 文件右键打开 #55 ⑤):hover 该行才浮出,
点开与右键同一套菜单。」→ 实现是 :1746-1757 基础规则 opacity: 0(第 1754 行),
:1761-1763 仅在 .turn-diff-file:hover 时变 opacity: 1;
行本身有 cursor: pointer + :hover { background: var(--color-hover) }(globals.css:897-916),
但它暗示的是左键可点 ;对右键 没有任何提示;
挂点只有两处:轮末文件行(TurnDiffChip)与变更抽屉卡片头(DiffFileCard)—— 扫过 renderer
全部 89 个 tsx,引用 FilePathMenu 的只有这两个。
进入菜单需要连续猜中三件事:要展开、要 hover、要右键 。
② hover 看不到文件的真实位置
styles/globals.css:917-929(注释原文「mono path RTL 截断:优先保留文件名端」):
.turn-diff-path 用 direction: rtl + text-overflow: ellipsis + max-width: 420px 截断,
优先保留文件名、切掉目录 → 路径越长,位置信息越少;
行上其实已有 title={f.path}(TurnDiffChip.tsx:139、DiffFileCard.tsx:179),但内容是原始
相对路径 (就是行上已经显示的那串),对「这文件在磁盘哪儿」没有帮助;
结果是:知道改了哪个文件,但不知道它在什么位置。
顺带一个平台用词问题(同一菜单):
i18n/zh.ts:238 reveal: "在访达中显示"、:568 pathRevealFailed: "无法在访达中显示";
i18n/en.ts:241 "Reveal in Finder"、:583 "Could not reveal in Finder"。
Windows 上没有「访达」,i18n 里也没有按平台取词的分支。
Proposed solution
折叠态就能进菜单:summary 那行 hover 时直接给出入口,这样不必先猜出「要先展开」;
文件行 hover 时用 tooltip 显示解析后的绝对路径 ,替掉现在的原生 title(相对路径)。这样既补上
「文件在哪」,也让「这一行可交互」有了明确信号。零件基本都是现成的:宿主已有 ui/Tooltip.tsx,
它的文件头注释原文就是「轻量自定义 tooltip,替代原生 title(延迟不可控/跟随鼠标/系统样式)」——
而文件行现在用的正是原生 title;解析通道 resolvePath 也已在用(「复制路径」走的就是它),
两个挂点都已经拿得到 cwd。注意:该 tooltip 现在是 whitespace-nowrap 的单行气泡,长绝对路径
可能横向溢出,实现时大概需要换行/断词变体(组件注释里也提到靠右缘要用 align="end");
「⋯」键盘可达(Tab + Enter),并去掉 aria-hidden;
文案按平台取词:Windows 用「在文件资源管理器中显示」,macOS 保留「在访达中显示」。
Alternatives considered
靠搜索框或变更抽屉找文件(都是绕路,而且抽屉里同样是这个 hover-only 的 ⋯);
把菜单挂到更多地方(工具卡路径、正文路径)—— 会被文本嗅探的问题拖住,所以现在这个取舍本身
没问题,要补的是「可发现性」而不是「更多挂点」;
只把路径行宽度放开不截断 —— 长路径会撑坏布局,不如 hover 出完整绝对路径。
What problem does this solve?
功能本身是好的:
main/path-target.ts+ui/FilePathMenu.tsx能把「相对 / 中文 / 空格」路径正确解析成绝对路径,三个动作(打开文件 / 在访达中显示 / 复制路径)在 Windows 11 + 0.6.0 上实测都正常。
问题是入口找不到,而且看不到文件到底在哪。
我自己为了找到它花了点时间,过程:
TurnDiffChip.tsx:97的<details>没有open,也没有受控状态),所以文件路径当时不在屏幕上;
chat/ToolCallCard.tsx:73的summarizeArgs会取path参数,第 98 行渲染成卡片摘要),但那里没有挂点;hover 出的「⋯」。
两个问题
① 入口不可发现
components/chat/TurnDiffChip.tsx:97:一个<details>(className 为turn-diff drawer-details加一个进入动画类),默认收起;
components/chat/TurnDiffChip.tsx:148(注释原文):「主操作仍是左键跳 diff,这里是冗余入口(与胶囊叉叉同款:aria-hidden 的鼠标增强)」,对应实现里该按钮带
aria-hidden="true"(第 151 行);styles/globals.css:1743(注释原文):「文件行「⋯」更多按钮(issue [Feature] 任务栏最小化 / 模型搜索 / 对话重命名置顶 / 文件右键打开 #55 ⑤):hover 该行才浮出,点开与右键同一套菜单。」→ 实现是
:1746-1757基础规则opacity: 0(第 1754 行),:1761-1763仅在.turn-diff-file:hover时变opacity: 1;cursor: pointer+:hover { background: var(--color-hover) }(globals.css:897-916),但它暗示的是左键可点;对右键没有任何提示;
TurnDiffChip)与变更抽屉卡片头(DiffFileCard)—— 扫过 renderer全部 89 个 tsx,引用
FilePathMenu的只有这两个。进入菜单需要连续猜中三件事:要展开、要 hover、要右键。
② hover 看不到文件的真实位置
styles/globals.css:917-929(注释原文「mono path RTL 截断:优先保留文件名端」):.turn-diff-path用direction: rtl+text-overflow: ellipsis+max-width: 420px截断,优先保留文件名、切掉目录 → 路径越长,位置信息越少;
title={f.path}(TurnDiffChip.tsx:139、DiffFileCard.tsx:179),但内容是原始相对路径(就是行上已经显示的那串),对「这文件在磁盘哪儿」没有帮助;
顺带一个平台用词问题(同一菜单):
i18n/zh.ts:238reveal: "在访达中显示"、:568pathRevealFailed: "无法在访达中显示";i18n/en.ts:241"Reveal in Finder"、:583"Could not reveal in Finder"。Windows 上没有「访达」,i18n 里也没有按平台取词的分支。
Proposed solution
title(相对路径)。这样既补上「文件在哪」,也让「这一行可交互」有了明确信号。零件基本都是现成的:宿主已有
ui/Tooltip.tsx,它的文件头注释原文就是「轻量自定义 tooltip,替代原生 title(延迟不可控/跟随鼠标/系统样式)」——
而文件行现在用的正是原生
title;解析通道resolvePath也已在用(「复制路径」走的就是它),两个挂点都已经拿得到
cwd。注意:该 tooltip 现在是whitespace-nowrap的单行气泡,长绝对路径可能横向溢出,实现时大概需要换行/断词变体(组件注释里也提到靠右缘要用
align="end");aria-hidden;Alternatives considered
没问题,要补的是「可发现性」而不是「更多挂点」;