You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
摘要
右侧 Sidebar 的文件树(
@deepseek-ai/dsh-client-ui-sidebar-files)目前是纯浏览:左键把文件打开到 Sidebar 内部的预览,此外没有任何"把文件交回本地"的入口。而同一个工作区里的交付物面板(
@deepseek-ai/dsh-client-ui-deliverables)已经完整支持"在文件管理器中显示 / 用默认应用打开"。结果很反直觉:AI 产出的文件能一键定位到本地,用户自己在树里翻到的文件反而不能。 对日常在编辑器/资源管理器里干活的人来说,文件树找不到"到本地去"的路,这个树就只完成了一半功能。
复现步骤
期望:能右键(或悬停)选择「在资源管理器中显示」/「用默认应用打开」。
现状(代码依据)
文件树没有行级操作入口
dsh-client-ui-sidebar-files/README.zh.md的「已知限制与暂缓事项」明确写着:该包只注册了两个坑位:
sidebar.right.pane.tab(正文)与sidebar.right.pane.tab.title(标题)。没有任何行级(row-level)坑位,也就是说第三方插件无法往树的行上注入操作——这决定了它必须是一次核心改动,而不是扩展包能解决的。行类型只有三种(同上 README):
directoryfileuseTabInfo().tab.actions.openResource打开dsh-resource://file/session/<sessionId>/<encoded 相对路径>other但主机侧能力已经齐了
@deepseek-ai/dsh-api-session-controller已经暴露了 Remote 方法(lib/index.js约 2886 行):配套的能力探测(同文件约 2871 行):
也就是说 Windows 上的"在资源管理器中显示"这条路,主机早就通了。 缺的只是客户端的一颗按钮/一条菜单项。
交付物面板就是现成的参照实现
dsh-client-ui-deliverables/lib/index.js(约 33–104 行)已经跑通了完整链路,可直接照搬:registerPresentOpen(ctx)用ctx.connection.fetch.register在鉴权栅栏内注册两条路由:GET PRESENT_HOST_PATH→ 返回ctx.sessionController.workspaceDesktop()(含available与fileManager,cache-control: no-store)POST PRESENT_OPEN_PATH→ 接受action=open|revealhandlePresentOpen的关键三步:if (!ctx.sessionController.workspaceDesktop().available) return 409workspaceFiles.stat({ sessionId, workspaceRoot: session.cwd }, file.path)openWorkspacePath({ path, ...(action === "reveal" ? { action } : {}) }, signal)期望行为
在文件树的行上(
file与directory都算)提供:action: "reveal"actionUI 形式建议二选一(或都做):
实现建议
最小可用范围(建议先做这个)
dsh-client-ui-sidebar-files的FilesBody.tsx给行加右键菜单,仅file类型session.openWorkspacePathRemote,不必新开路由workspaceDesktop().available,为false时完全不渲染入口(不能只置灰)openResource用的相对路径直接拼成绝对路径丢给主机完整范围(后续)
directory行也支持 reveal(揭示所在文件夹本身)边界情况与注意事项
dsh-host-open-in-app的 README 说明:SSH_CONNECTION或SSH_TTY非空时应用列表为空,头部隐藏 Open In。文件树的入口应遵循同一规则,否则点了没有任何反应,比没有更糟。workspaceFiles.list,但直接透传给原生启动器会有风险;交付物面板那段 round-trip 校验(processPathFromHostPath→fs.resolve→fs.processPath比对)是现成的正确做法。action的取值要在 wire 边界校验,非法值返回 400(交付物面板已这么做)。dsh-host-open-in-app已经维护了"编辑器 / Git GUI / 终端 / 文件管理器"的固定目录与逐平台已验证启动器;文件树如果自己shell.open会绕开这套已验证链路,也会丢掉图标与可用性探测。explorer.exe /select,"<path>",而不是打开父目录。交付物面板既然已经在 Windows 上跑通 reveal,直接复用它的实现即可。为什么这不能做成第三方插件
文件树的行由
FilesBody.tsx内部渲染,该包只对外暴露 tab 级坑位(sidebar.right.pane.tab/...tab.title),没有行级扩展点。因此在现有架构下,任何外部插件都无法给树的行加右键菜单——要么核心改,要么先补一个行级 slot。后者更符合 DSH 的插件化取向,也能顺带让"选中态""键盘导航"这些延后项有地方落脚。附:一句话版本
本 issue 的代码定位(包名、文件、行号)由 DSH 会话中的 AI 助手整理,人工复核后提交。
All reactions