Back to home

UsamiRenkorin

dsh-workspace-file-view

DeepSeek Harness dsh-workspace-file-view

Stars
0
Language
TypeScript
Created
Aug 14, 2026
Updated
Aug 14, 2026

Introduction

dsh-workspace-file-view

DeepSeek Harness 侧边栏「文件视图」独立插件 —— 「视图选项」菜单新增「查看内容」切换, 对话视图 / 文件视图一键切换;文件视图可浏览工作区目录,并在内嵌 TTY运行 / 调试脚本(按扩展名解析解释器,Python 支持简化版断点调试)。

DeepSeek Harness Status License

🤖 纯 AI 创作声明:本仓库的代码与文档均由 AI(DeepSeek 大模型)独立创作完成, 未经人工编写或人工代码评审。功能经单元测试(含真实 Python 断点集成测试)与类型检查验证, 请谨慎用于生产环境。


功能特性

  • 「查看内容」切换:侧边栏「视图选项」菜单新增胶囊开关(灰=对话视图,绿=文件视图,1px 浅灰描边)。
  • 文件视图:以树形层级展示各工作区目录(文件夹可逐层懒加载展开,文件为叶子行)。
  • 重命名 / 新建:文件与文件夹行悬浮出现 ✎ 重命名(位于 ▶ 运行之前;不可运行的文件同样有),点击后行内名称变为输入框(回车或点击外部提交,Esc 取消);右键文件夹弹出「新建文件 / 新建文件夹」(带文件/文件夹图标),直接进入行内命名,未命名失焦即取消,命名后即在对应目录创建。
  • 文件引用:右键文件行把它「引用」到模型输入框——输入框内、输入文本上方出现固定大小的圆角矩形文件块(文件图标 + 文件名,超长省略号),输入框随之向上扩展;点击块上的 × 可移除。发送消息时,实际发送给模型的不是文件内容,而是一张仅包含所引用文件及其目录链的目录树结构图(正则切分路径、动态折叠成树,无关文件不出现),发送成功后引用自动清空——省去 AI 每次用 ls 探查目录的步数。
  • 浮动文件编辑器(CodeMirror 6):左键点击文件行在页面右上角弹出浮动的圆角矩形面板(不嵌入列布局),带 1、2、3… 行号语法高亮的完整代码编辑器(按扩展名匹配 JS/TS/JSX、Python、Markdown、HTML、CSS、JSON、XML,含自动补全/搜索/历史),同时具备上下与左右滚动条(长行横向滚动,不换行截断);编辑先落在缓存缓冲区,点「保存」按钮(或 Ctrl+S)才写回磁盘,未保存时文件名旁有 ● 标记;.md / .html 文件提供 【编辑|预览】 切换——预览模式用浏览器端管线渲染 Markdown(同样可横纵滚动)、用沙箱 iframe(srcdoc)渲染 HTML;二进制文件与超大文件会给出提示而不会进入编辑。
  • 内嵌 TTY:文件行的「运行」在侧边栏底部打开嵌入式终端面板(PTY),可交互输入、停止、流式输出。
  • 按后缀判断可执行脚本:扩展名 → 解释器映射(.py/.js/.ts/.sh/.ps1/.bat/.cmd/无扩展名可执行文件等),文件行悬浮显示 ▶ 运行 / ⏱ 调试 / ⚙ 配置。
  • 运行配置:解释器覆盖、工作目录、环境变量(每行 KEY=VALUE)、启动参数。
  • 简化版断点调试(Python):调试运行可设置断点行号,执行到断点暂停(显示当前行),支持 继续 / 单步 / 退出;其他语言先提供运行 + 停止(Node 行级断点需调试器协议集成,列为后续)。

架构

DSH 的「视图选项」菜单与「输入框」分别位于 ui-workspace / ui-conversation 内部、没有运行时扩展点, 因此本插件采用 「独立插件包 + 最小槽位补丁」 的组合(DSH 的组合惯例:owner 声明 hole,插件填充):

部分内容
plugin/(本仓库)独立双面插件包 @deepseek-ai/dsh-workspace-file-view:node 半用 ctx.webServer 自注册 /fileview/* 路由(列目录 / 重命名 / 新建 / 读取与写入文本 / 运行 / TTY 交互 / SSE 流,不依赖 directory-picker 与 apiproxy);browser 半填充 sidebar.workspaces.viewContent 槽位(文件树 + 内嵌 TTY + 运行/调试 UI)、提供 fileRefs 服务并填充 conversation.input.refs 槽位(引用块)、填充 shell.overlay 槽位(浮动文件编辑器)
patch/ui-workspace.diff最小槽位补丁:ui-workspace 声明 sidebar.workspaces.viewContent 子槽位、菜单渲染「查看内容」开关、列表区挂载槽位 body
patch/ui-primitives.diffMenu 组件支持开关行(role="menuitemcheckbox" + 胶囊视觉)
patch/ui-conversation.diff最小槽位补丁:ui-conversation 声明 conversation.input.refs 槽位(输入卡内引用块)、声明可选 fileRefs 服务、发送时把引用文件折叠成目录树附入消息
examples/cordis.patch.ymlweb profile 补丁:挂载插件行
scripts/ensure-registry.mjs安装引导:npmjs 下载过慢(<700 KB/s)自动切换 npmmirror 国内镜像

安装 / 应用

需要一份 deepseek-ai/deepseek-harness 源码检出(本插件是源码级组合,不是 npm 独立安装包)。

0. 网络加速(国内用户,可选但推荐)

pnpm install 从默认 npmjs 源拉取大体积可选二进制时,远距离用户常遇到下载过慢甚至超时 (pnpm error 23,整个安装卡死)。仓库内置了自动测速 + 自动切换国内镜像的引导脚本:

node scripts/ensure-registry.mjs

脚本会:探测当前 pnpm 源的实际下载速度(默认阈值 700 KB/s,可 DSH_REGISTRY_SPEED_THRESHOLD_KBPS=… 覆盖)→ 低于阈值自动执行 pnpm config set registry https://registry.npmmirror.com 并打印还原命令; 已是国内镜像则跳过;只想测速不改配置用 DSH_REGISTRY_PROBE_ONLY=1

1. 放入插件包

plugin/ 目录复制到检出的 packages/extensions/workspace-file-view/

2. 应用三个最小补丁

git apply patch/ui-workspace.diff
git apply patch/ui-primitives.diff
git apply patch/ui-conversation.diff

3. 安装依赖并重建

pnpm install
pnpm run typecheck        # 类型检查
pnpm run build:lib:client # 重建客户端插件包(lib/client.js,含本插件、ui-workspace 与 ui-conversation)
pnpm run build:web        # 重建 Web 前端(ui-primitives 是 platform 模块,打进 dist)

4. 挂载插件(web profile)

examples/cordis.patch.yml 的内容写入 ~/.dsh/profiles/web/cordis.patch.yml

5. 启动验证

pnpm dsh web
# 打开 http://127.0.0.1:3080
# 左侧边栏 → 视图选项 → 查看内容 → 文件视图
# 文件行 → ▶ 运行 / ⏱ 调试(Python 断点)/ ⚙ 配置 / ✎ 重命名(悬浮)
# 文件夹行 → 右键:新建文件 / 新建文件夹;文件行 → 右键:引用到输入框

使用说明

  1. 打开左侧边栏,点击「视图选项」按钮,在菜单底部「查看内容」分区切换开关。
  2. 文件视图下点文件夹逐层展开;脚本/可执行文件行悬浮出现 ▶ 运行、⏱ 调试(仅 Python 等支持断点的脚本)、⚙ 配置;所有文件/文件夹行悬浮出现 ✎ 重命名。
  3. ✎ 重命名:行内名称变为输入框(原名自动带入),回车或点击输入框外提交,Esc 取消。
  4. 右键文件夹 → 「新建文件 / 新建文件夹」:直接在对应目录下出现命名行,输入名字回车(或失焦)即创建,未命名失焦即取消。
  5. 右键文件 → 文件被引用:模型输入框内、输入文本上方出现圆角矩形文件块(文件图标 + 文件名),输入框随之向上扩展;点击块上 × 可移除。
  6. 发送消息时,引用的文件会以目录树结构图的形式随消息发给模型(只含被引用文件及其目录链),发送成功后引用自动清空。
  7. 左键点击文件 → 页面右上角弹出浮动圆角编辑器面板CodeMirror 6):行号、按扩展名语法高亮、自动补全、搜索、历史,上下/左右滚动条齐全;编辑在缓存缓冲区中,点「保存」(或 Ctrl+S)写回磁盘;.md/.html 文件可用 编辑|预览 切换预览渲染。

已知限制

  • 断点调试 v1 仅 Python(sys.settrace 追踪器);Node 行级断点需要 Inspector/CDP 集成,列为后续。
  • 内嵌 TTY 依赖宿主 subprocess 的 PTY 能力(base bundle 已内置,Windows 走 ConPTY)。
  • 目录展示上限由插件配置 maxEntries 决定(默认 1000)。
  • 文件引用仅在输入框有文本时随消息发送(纯引用、无文本时发送按钮仍为禁用态)。
  • 编辑器二进制判定为文件头 NUL 字节嗅探,超大文件(默认上限 512 KB,maxEditBytes 可调)拒绝编辑;保存快捷键为 Ctrl+S(请求中写为 Ctrl+V,但那是粘贴快捷键,故按惯例实现为 Ctrl+S,如需调整请告知)。

致谢

  • 编辑器直接集成开源代码编辑器 CodeMirror 6codemirror.net,MIT License):行号、语法高亮、自动补全、搜索、历史等均来自 CodeMirror 及其官方语言包(@codemirror/*@lezer/*),随插件客户端包内联分发。
  • 本插件整体基于 deepseek-ai/deepseek-harness(MIT)的槽位机制与设计体系构建。

测试

pnpm exec vitest run packages/extensions/workspace-file-view/tests
pnpm exec vitest run packages/client/ui-workspace/tests/workspace-browser.client.spec.tsx
pnpm exec vitest run packages/client/ui-primitives/tests/atoms.client.spec.tsx

包含:解释器映射、目录列表、TTY 会话注册表、客户端组件(文件树/内嵌 TTY/调试控件), 以及一个真实 Python 断点集成测试(无 Python 时自动跳过)。

许可

MIT —— 基于 deepseek-ai/deepseek-harness(MIT)衍生。