deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:zzh799/dsh-mobile-adaptive
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
dsh web 的移动端适配插件。以 dsh 客户端插件形式挂载,纯 CSS/JS 注入,不改 dsh 业务逻辑;桌面(>=1024px)零改动。
| 功能 | 说明 |
|---|---|
| 侧边栏折叠 | <1024px 侧栏隐藏为覆盖式抽屉;注入汉堡按钮 + 点遮罩/菜单项/Escape 关闭 |
| 设置页单列 | <1024px 设置面板全屏化 + 两层导航(分区列表 → 具体设置项,带返回);控件拉满宽度、触控 ≥44px |
| 目录浏览移动端化 | 仅对 dsh 已有的目录树(browse)对话框做样式适配:窄屏全屏 + Miller 双栏收敛为单栏 + 行高 ≥44px。是否开启 browse 由 profile 配置决定,插件不改业务 |
| 本地上传 | 输入框附件按钮 + 进度面板;批量上传、逐文件进度、落盘 <当前会话工作区>/上传/、重名自动改名、失败可重试 |
| 顶部工具条 | ≤1023px:权限/模型选择从输入栏上移到会话头部,原头部条目收进 + 号弹出面板;桌面端全部还原 |
src/client.tsx 浏览器半边:抽屉交互、上传按钮 + 进度面板、store
src/mobile.css 全部移动端结构样式(锚定 data-slot / 属性选择器)
src/index.ts 宿主半边:挂载 /dsh-mobile-adaptive 上传通道
src/upload-host.ts 上传后端:分片落盘、改名、护栏、清扫
build.mjs esbuild 构建(closure-factory 工件),--watch 热更
本包同时声明 组合包(dsh.bundle,见根目录 cordis.patch.yml)与 客户端插件(dsh.client)。用标准流程安装并自动激活宿主 + 浏览器两半边,无需手改 profile:
dsh plugin --profile web add dsh-mobile-adaptive
本地开发链接本机仓库(改动即生效):
dsh plugin --profile web add link:<本机仓库绝对路径>
安装后重启 dsh web 使新插件生效(先停止已在运行的 dsh web,再重新启动):
dsh web
从 git 安装(
dsh plugin --profile web add github:zzh799/dsh-mobile-adaptive)时,prepare脚本会在安装后构建lib/;pnpm ≥10 默认拦截构建,需把 pnpm 提示的包键加入 profile 的pnpm-workspace.yaml的allowBuilds再重试。
cd <本机仓库路径>
node build.mjs # 一次性构建
node build.mjs --watch # 开发:浏览器半边热更
注意:浏览器半边(lib/client.js)热更;宿主半边(lib/index.js,上传通道)改动需重启 dsh web。
原因:dsh 由 launchd 托管、绑定 127.0.0.1,远程访问走组网 + NGINX 转发。directory-picker-auto boot 采样只见「回环 + darwin」,误判成桌面场景而挂载 native(Finder 选择器)。手机上点"打开工作区/目录选择"会在无人值守的 Mac 上弹 Finder,浏览器侧无 UI、功能不可用。故显式固定为 browse(应用内目录树)。
方法(配置在 ~/.dsh/profiles/web/cordis.patch.yml,profile 补丁层,非插件代码):
# 关掉 auto 判定(否则仍动态挂载 native),静态装配 browse 那一对。
- id: directory-picker
disabled: true
- insert:
- id: directory-picker-browse
name: '@deepseek-ai/dsh-host-directory-picker-browse'
- id: directory-picker-browse-surface
name: '@deepseek-ai/dsh-client-ui-directory-picker-browse'
要点:
/dsh-mobile-adaptive(upload/begin|append|commit|abort),复用宿主连接传输层的信任围栏,不新增 HTTP 面。<cwd>/上传/:cwd 必须是已存在的绝对路径目录;文件名清洗为单路径段(剥分隔符/控制字符、240 字节截断),无法逃逸暂存目录。link()(EEXIST 换 (1) (2) … 至 999),无 TOCTOU 窗口,并发同名不互相覆盖。received === expected,不完整会话拒绝落盘;.part 临时文件 1 小时清扫、卸载时清除。<1024px 详情列轨道归零;≤767px 隐藏 ContextMeter(给输入工具行让位)。100dvh 需 iOS 15.4+;旧版回退 100vh。./上传/、重名自动改名 ✓>=1024px):除附件按钮移至 + 命令按钮右侧外,与改动前一致,无回归 ✓CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。