deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:N5Tar/dsh-workspace-view
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
简体中文 · English
dsh-workspace-view 是一个面向 DeepSeek Harness Web GUI 的工作区文件浏览插件。它在页面右侧提供一个默认展开的文件树抽屉,用于查看当前会话所属工作区的目录与文件。
插件自身的安装、测试和构建使用已发布的依赖版本,不要求源码仓库与 deepseek-harness checkout 并列放置。只有将本地包安装到 DSH 或使用临时 Patch 启动时才需要提供 Harness 路径。
本插件遵循 DSH 的 Cordis 插件模型,由 Host 和 Client 两部分组成。
Host 插件注入以下服务:
webServer:注册只读目录查询接口sessions:根据 Session id 获取由 Host 管理的权威工作区路径Host 不接受客户端指定工作区根目录。每次目录查询都会:
cwd。realpath。relative 验证目标目录没有越出工作区。该流程可阻止 .. 路径穿越和符号链接逃逸。
Client 插件注册到 additive shell.overlay Slot,在页面右侧渲染文件抽屉。它不会注册或替换以下 Slot:
sidebarsidebar.workspacessidebar.settings因此不会移除或覆盖 DSH 原有的工作区、会话和设置界面。
当前 Session 和工作区路径来自 Slot 提供的 useSessions 标准属性。目录在用户展开时按层请求,并会取消已经失效或被刷新取代的请求。
先完成依赖安装和构建:
cd /path/to/dsh-workspace-view
pnpm install
pnpm run build
使用 DSH 插件管理命令将本地包安装到 Web Profile:
cd /path/to/deepseek-harness
pnpm dsh plugin --profile web add /path/to/dsh-workspace-view
检查最终配置:
pnpm dsh --profile web --dump-config
启动 Web GUI:
pnpm dsh web
默认访问地址:
http://127.0.0.1:3080
如果 Web GUI 已经运行,需要重启原进程才能加载新的 Host 插件和 Client manifest。
cd /path/to/deepseek-harness
pnpm dsh plugin --profile web remove dsh-workspace-view
如不希望写入 Web Profile,可以将本包链接到 Harness 的依赖解析目录,并通过临时 Patch 启动:
cd /path/to/deepseek-harness
mkdir -p node_modules
ln -sfn /path/to/dsh-workspace-view node_modules/dsh-workspace-view
pnpm dsh web --patch /path/to/dsh-workspace-view/cordis.patch.yml
# 安装依赖
pnpm install
# TypeScript 类型检查
pnpm run typecheck
# 运行测试
pnpm test
# 构建 Host 和 Client 产物
pnpm run build
# 验证已提交的 lib 产物与源码一致
pnpm run check:dist
# 检查发布内容;prepack 会先重新构建
pnpm pack --dry-run
本项目是 Harness checkout 之外的外部插件,不属于 Harness 自带 pnpm run dev:web 的 workspace 扫描范围。
pnpm run build。对于外部插件,可靠的生效方式仍是重启当前 DSH Web 进程,再刷新页面。pnpm run dev:web watcher 正在重建本插件,并且其 HMR receiver 连接到当前 DSH 进程时,才能依赖自动更新。package.json 中的 dsh.client 元数据后:必须重启 DSH Web。127.0.0.1:3080 的 GUI。插件配置位于 cordis.patch.yml:
- insert:
- id: workspace-view
name: dsh-workspace-view
config:
maxEntries: 500
maxScannedEntries: 10000
maxConcurrentScans: 8
ignoredNames:
- .git
- node_modules
| 字段 | 类型 | 默认值 | 约束 | 说明 |
|---|---|---|---|---|
maxEntries |
number |
500 |
1–5000 |
每层最多返回给 Client 的条目数 |
maxScannedEntries |
number |
10000 |
1–50000 |
Host 每层最多扫描的目录项数量,用于限制超大目录的 CPU 与内存消耗 |
maxConcurrentScans |
number |
8 |
1–64 |
Host 同时执行的目录扫描上限;超出时返回 HTTP 429 |
ignoredNames |
string[] |
['.git', 'node_modules'] |
— | Host 完全忽略的文件或目录名称 |
ignoredNames 与隐藏文件开关的行为不同:
ignoredNames 匹配的条目不会由 Host 返回。当扫描或返回结果超过上限时,Client 会在对应目录层级显示截断提示。
插件只提供工作区范围内的只读目录列表能力,不提供文件写入、删除、重命名或执行功能。
主要安全约束:
openat 式原子能力边界;不应把可由不受信任本地进程并发改写的工作区作为强隔离沙箱.
├── assets/
│ └── dsh-workspace-view-logo.png # 仓库 Logo
├── cordis.patch.yml
├── package.json
├── README_en.md
├── src/
│ ├── index.ts # Host 插件与目录查询接口
│ └── client/
│ ├── index.ts # Client Slot 注册
│ ├── controller.ts # 抽屉状态控制器
│ ├── locales.ts # 中英文文案
│ ├── WorkspaceFiles.tsx # 文件树与抽屉界面
│ └── WorkspaceFiles.module.css # 组件样式
├── tests/
│ ├── client.spec.tsx # 请求取消、状态保留和焦点测试
│ └── host.spec.ts # 路由、排序、截断和路径边界测试
├── .github/workflows/ci.yml # 类型、测试、构建和发布检查
├── LICENSE
├── tsconfig.json
└── tsdown.config.ts
构建产物输出到 lib/。package.json 通过 dsh.bundle.patch 声明随包安装的 Cordis Patch,并通过 dsh.client 声明 Web Client bundle 及其依赖图。
shell.overlay 实现,会覆盖页面最右侧区域,而不会参与 DSH 核心列宽求解。CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。