dsh-file-extras:DSH Web 文件页与输入框的日常操作增强

前言

在 DSH Web GUI 里做智能体开发,文件侧栏和对话输入框是高频入口:要在树里看大小、改日期、下载或删掉文件,还要把路径 @ 进当前会话;输入框里则常常需要复用本会话里敲过的指令,或把常用提示词收成斜杠命令。官方「文件」页(@deepseek-ai/dsh-client-ui-sidebar-files)提供基础浏览,但缺少资源管理器式的右键菜单、多选、行内元数据,以及与会话绑定的上传、删除确认与回收站路径。本插件在官方文件页上补这些能力,并额外纳入两件与文件树无关、但同样天天要用的能力:文件驱动的斜杠命令与输入框 ↑/↓ 历史指令回填。维护者为 TiChuXiXi,源码与说明见 GitHub 仓库,社区目录页为 SkillHub。

这是什么

dsh-file-extras 是面向 DSH Web GUI 的 MIT 许可插件(当前 package 版本 0.3.0,要求 DSH >=0.2.0-rc.2)。它不改变 DSH「一切皆插件」的整体架构,而是在官方文件树与官方输入框 API 之上做增强:浏览器半区负责 UI(右键菜单、多选、行内大小/日期、删除确认、@ 芯片插入、历史回填提示);host 半区在 ctx.webServer 上挂 /dsh-file-extras 前缀路由,补齐官方 workspaceFiles Remote 里没有的修改时间、流式下载/上传、回收站删除,以及会话完整用户指令列表。

核心功能

文件树右键与行内元数据

仅在文件树内部右键时弹出自定义菜单,树外仍使用浏览器默认右键。

对象 菜单项
文件 下载、@ 到对话、复制路径、删除
文件夹 上传文件到此处…、@ 到对话、复制路径、删除
空白处 上传文件到此处…、复制路径、刷新大小与日期、全选可见项;已有选择时另有清除选择、删除 N 项

文件行尾显示大小与修改时间,例如 1.2 KB · 2026-03-04 13:06:07,按 1024 进制自动选 B/KB/MB/GB/TB/PB。文件夹行尾显示一级子项数量与修改时间,例如 3 项 · 2026-03-04 13:06:07(只数 readdir 一层,不递归)。

多选与删除

多选规则接近常见资源管理器:普通单击清空选择;Ctrl / ⌘ + 单击切换行选中;Shift + 单击从锚点到当前行整段选中;空白处单击清空;空白处右键可全选可见项;Esc 依次关闭确认框、右键菜单、选择态。右键落在已选行上时菜单作用于整个选择;落在未选行则改为只选该行。

删除走二次确认框,列出每一项的类型、大小或文件夹内容概况;默认移到回收站(可还原),「永久删除」在默认未勾选的复选框后。host 侧跨 Windows / Linux / macOS 实现回收站;回收站不可用时报错,不会静默改成永久删除。

@ 到对话

右键文件或文件夹选择 @ 到对话,路径以引用芯片形式插入当前对话输入框(多选可一次插一批),只插入、不自动发送。芯片通过官方 ctx.conversation.input.for(actx).addFiles(...) 插入,提及文本与 @deepseek-ai/dsh-file-reference 的 formatFileMention 一致;「当前对话」以 ctx.sidebarRight.mounted 为准,与文件树渲染的会话一致。

斜杠快速命令

在 ~/.dsh/commands/ 下,每个 <名字>.md 对应一条全局斜杠命令,命令名须匹配 /^[a-z][a-z0-9_-]*$/。正文可含 $ARGUMENTS 占位符;frontmatter 可读 description、input-hint。改文件内容后下次调用即重新读盘;新增或删除命令文件需重启 dsh web(启动时扫描注册)。执行时正文作为普通用户消息交给 agent,使用的是官方 ctx.commands.register()。该能力移植自同作者的 dsh-command-md(MIT)。

示例命令文件:

---
description: 审查当前工作区的代码改动
input-hint: 可选的补充说明
---

请审查当前工作区的代码改动,重点关注潜在 bug 和安全问题。

$ARGUMENTS

输入框 ↑/↓ 历史指令

在输入框按 ↑ / ↓ 在本会话真实用户敲过的指令间穿梭(数据来自 host RPC history,读完整事件日志且只取 source.kind === 'user' 的条目,不含 agent 注入类上下文)。光标在草稿最开头或草稿为空时 ↑ 进入穿梭;穿梭时上方有 历史指令 … ↑↓ 3/12 · Esc 退出 提示;Esc 或翻回最新后再 ↓ 可还原进入穿梭前保存的草稿。/、@ 候选菜单打开时不抢 ↑/↓。该能力移植自 dsh-message-jump 的输入框历史部分(MIT)。

安装与启用

Web 侧安装命令(来自 README 原文):

dsh plugin --profile web add dsh-file-extras

也可在会话中让 Agent 通过 plugin_manager 的 install_bundle 指向插件目录。装完后刷新一次页面(客户端 bundle 在插件激活时读入并缓存)。

插件无独立 Config 字段或运行时开关;可调行为在源码顶部常量中,并带注释。

典型用法

  1. 安装并刷新 Web 页面后,在侧栏官方文件树内右键,对单文件使用「下载」或「@ 到对话」,对文件夹使用「上传文件到此处…」。
  2. 需要批量删除时:Ctrl/⌘ 或 Shift 多选,空白处右键选「删除 N 项」,在确认框中核对列表后确认(默认进回收站)。
  3. 定制斜杠命令:创建 ~/.dsh/commands/review.md(命令名为 review,调用时为 /review),写入 frontmatter 与正文;修改正文后立即生效,新建文件后重启 dsh web。
  4. 在对话输入框编辑长提示词时,用 ↑ 找回本会话 earlier 的用户指令,用 Esc 退出并恢复当前草稿。

适用场景与注意

适合谁:主要在 DSH Web 里操作工作区文件、频繁 @ 路径进对话、希望终端式历史与 Markdown 文件定义斜杠命令的开发者。

权限与安全:插件以当前 dsh 进程权限访问 host 文件系统;路由经 connection.requestRejection() 做 Host/Origin 与签名 cookie 校验;root 须为存在的绝对路径且不能是盘符/文件系统根;路径经 realpath 校验包含关系。安装前建议阅读 仓库 README 中的安全边界与 lib/trash.js 删除行为。上传/下载不设常规大小上限(上传在 content-length 明显大于 4 GiB 时提前拒绝);大文件下载使用 stat 预检加 <a download> 流式落盘,避免整文件进浏览器内存。

社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系,仅为 DSH 生态中的第三方插件索引。

结尾

dsh-file-extras 把官方文件页补成更接近日常开发习惯的交互(元数据、右键、多选、回收站删除、@ 芯片),并把 ~/.dsh/commands/*.md 斜杠命令与会话级输入历史收进同一插件,减少在 Web GUI 与外部工具之间来回切换。进一步了解实现细节与 host 路由列表,见 GitHub:TiChuXiXi/dsh-file-extras 与 SkillHub 目录页。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye