DeepSeek Harness Web UI 的竖屏与移动端适配——浮层抽屉、全宽对话、底部弹层对话框、安全区处理。低于 1024px 时生效,≥1024px 时不做任何改动。
31.5/100
综合分
2
GitHub 星标
565
npm 周下载
—/5
用户评分
数据截至 2026/10/29 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add @ddtcorex/dsh-maestro-mobilenpm 源 · @ddtcorex/dsh-maestro-mobile 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · ui
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 6 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包@ddtcorex/dsh-maestro-mobile @ 1.7.1
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/12 06:03:02
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 17 处,展示前 17 条)
- 发起网络请求lib/client.js:8952
const response = await fetch(DELETE_ROUTE_PATH, { - 读取本地文件lib/delete-session.js:234
entries = await readdir(dir, { withFileTypes: true }); - 写入本地文件lib/delete-session.js:248
await rename(join(dir, entry.name), join(dir, to)); - 写入本地文件lib/delete-session.js:259
await mkdir(trashRoot, { recursive: true }); - 写入本地文件lib/delete-session.js:260
await rename(dir, trashDir); - 写入本地文件lib/delete-session.js:267
await writeFile(join(trashDir, 'manifest.json'), `${JSON.stringify(manifest, null, 2)}\n`); - 读取本地文件lib/delete-session.js:283
for (const name of await readdir(trashRoot)) { - 读取本地文件lib/delete-session.js:285
const stats = await stat(join(trashRoot, name)); - 删除本地文件递归lib/delete-session.js:287
await rm(join(trashRoot, name), { recursive: true, force: true }); - 读取本地文件src/delete-session.ts:323
entries = await readdir(dir, { withFileTypes: true }) - 写入本地文件src/delete-session.ts:335
await rename(join(dir, entry.name), join(dir, to)) - 写入本地文件src/delete-session.ts:346
await mkdir(trashRoot, { recursive: true }) - 写入本地文件src/delete-session.ts:347
await rename(dir, trashDir) - 写入本地文件src/delete-session.ts:354
await writeFile(join(trashDir, 'manifest.json'), `${JSON.stringify(manifest, null, 2)}\n`) - 读取本地文件src/delete-session.ts:371
for (const name of await readdir(trashRoot)) { - 读取本地文件src/delete-session.ts:373
const stats = await stat(join(trashRoot, name)) - 删除本地文件递归src/delete-session.ts:374
if (stats.mtimeMs < cutoff) await rm(join(trashRoot, name), { recursive: true, force: true })
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-api-session-controller@deepseek-ai/dsh-api-workspace-controller@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-store@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-layout@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-renderer@deepseek-ai/dsh-client-ui-session@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-sidebar@deepseek-ai/dsh-client-ui-slots给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 竖屏移动端适配
- 浮层抽屉与底部弹层
- 安全区处理
最近更新
在 GitHub 查看全部 →v1.8.12026-10-28
· 修复
· 会话头部抽屉开关:0.2.2 的遮罩 titleCluster 让绝对定位的控件点不动(存在、有尺寸,但永远收不到点击)。手机分支现在关掉这层遮罩,开关保持在输入框边槽的 x=16 位置。
· 会话删除路由:它在 webServer 上注册了一条精确的 /api 路径,而启动 token 防护是 /api 前缀路由,会被精确路由遮蔽,于是处理函数未经鉴权就执行了。现在改为调用 connection.requestRejection(),宿主没有发布该服务时按 503 拒绝。
· 设置面板:内容只占一列,不再是五个左边缘;标签条只在被裁切的一边淡出;面板改为纵向排列,不再沿用宿主的网格(拖拽手柄原先被自动放进 36px 的头部单元格);某行的切换器不再溢出该列;面板遵守自身的高度上限。
· 响应压缩现在只在宿主不压缩时才安装:0.2.2 自带 compression@1.8.2,部署的配置档也启用了它,所以进程级补丁纯属多余。
· 契约扫描先对交互控件做命中测试,再跑一遍真实会话(同一页面上 hit=15 skip=33 -> hit=26 skip=25)。
· 变更
· 对等依赖范围接受正在运行的 DSH 预发布版(>=0.2.2-0 <0.3.0-0,cordis ~4.0.6-alpha.1);devDependencies 锁定同一版本,让 pnpm verify 针对插件实际运行的宿主做类型检查。
· 删掉不起作用的 dsh.client.inject 条目(dsh-client-ui-primitives 是平台种子,不是启动行)。
· 变更内容
· 修复:让插件在 DSH 0.2.2-alpha.2 上正常工作(开关、删除路由鉴权、设置面板)
完整变更日志:
v1.8.02026-10-26
· 新增
· 横屏键盘区域的输入框留白——当框架带有 data-mobile-nav-composer-tight 时,吸底输入区层级高于不透明的会话头部(z-index: 31),统计行把高度让给编辑行,因此键盘弹起时旋转到横屏不再遮住输入行。纯几何加迟滞,失败即放行,补齐仅 iOS 的键盘抬升。移植自 dsh-web-mobile v3.2.2(#246)。
· 手动提问卡片全屏并支持答案回滚——卡片头部的展开按钮把卡片撑到实测的头部到输入框区域(仅当该区域超过宿主 min(60vh, 520px) 上限时),聚焦的答案输入框会滚回正文与可视视口的交集,键盘弹起时打字仍可见。仅手动切换,失败即回退宿主默认。移植自 dsh-web-mobile v3.2.2(#246)。
· 修复
· 抽屉菜单点击留在抽屉内——打开菜单的 panelRow 按钮(aria-haspopup)不再算作导航,因此「更多」菜单不再关闭抽屉、浮在会话之上。移植自 dsh-web-mobile v3.2.2(#246)。
· 提问卡片溢出收敛与 44px 触控目标——卡片正文固定 overflow-x: hidden,问题标题上限为 min(23vh, 155px) 并内部滚动,头部操作区间距加宽到 20px,点击区 44x44。移植自 dsh-web-mobile v3.2.2(#246)。
· 变更内容
· feat(mobile):移植上游 v3.2.2 手机端批次
· chore(release):1.8.0
完整变更日志:
v1.7.42026-10-21
· 修复
· 大型 JSON 响应不再阻塞宿主事件循环——响应压缩已移出事件循环(brotliCompress / gzip 走 libuv 线程池);end() 在响应头写出前就返回,回复由 zlib 回调完成。在这段窗口内刷新响应头的调用方胜出(响应体原样重放),压缩出错时降级为不压缩,回调永不抛错(进程级补丁)。修复了首次运行提示卡在保存中、被数兆字节响应挡住的问题。移植自 dsh-web-mobile v3.2.1(#233)。
· 图片灯箱在平板上保留全视口点击区域——平板对话框上限(min(100vw - 32px, 720px) 居中)通过 :not(...) 分支匹配到了宿主 ImageLightbox(stage 的最后一个子元素是关闭按钮 > svg),右侧留下一条死区。加一条 div[role="dialog"][aria-modal="true"]:has(> :first-child > img) 的正向覆盖,在上限之后恢复全幅显示。移植自 dsh-web-mobile v3.2.1(#234)。
· 变更内容
· fix(mobile): 将大型 JSON 压缩移出事件循环
· fix(mobile): 平板上的图片灯箱保持全视口
· chore(release): 1.7.4
完整变更日志:
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成dsh-maestro-mobile
DeepSeek Harness(DSH)Web UI 的移动端适配。在宽度小于 1024px 的触控优先设备上,侧边栏变成浮层抽屉,对话框变成底部面板,输入区针对手机做调整;任何鼠标驱动的窗口,无论宽度多少,都完全不生效——窄桌面窗口或缩放显示永远不会进入移动端外壳。
功能一览
| 能力 | 实现方式 |
| 侧边栏 → 抽屉 | 宽度小于 1024px 的触控优先设备上,侧边栏变成左侧浮层抽屉(约 80vw,打开时 transform:none);桌面端在任何宽度下都不受影响 |
| 对话框 → 底部面板 | 设置、资源管理器、预览变成适合移动端的底部面板,处理 env(safe-area-inset-) 并避开刘海 |
| 状态栏与安全区域 | 状态栏 / 刘海内边距、浅色 / 深色 theme-color,以及 touch-action: manipulation + gesturestart 防护,阻止双击缩放 |
| 输入区保持整洁 | 权限胶囊、模型名、切换菜单用固定尺寸钉住,窄屏上不会挤压或重叠 |
| 平板友好 | 768–1023px 居中、限制宽度的面板;手机和平板几何分别验证 |
| 便于诊断 | 追加 ?
展开完整文档(README 剩余 1 节)
dsh-maestro-mobile DeepSeek Harness(DSH)Web UI 的移动端适配。在宽度小于 1024px 的触控优先设备上,侧边栏变成浮层抽屉,对话框变成底部面板,输入区针对手机做调整;任何鼠标驱动的窗口,无论宽度多少,都完全不生效——窄桌面窗口或缩放显示永远不会进入移动端外壳。 功能一览 | 能力 | 实现方式 | | 侧边栏 → 抽屉 | 宽度小于 1024px 的触控优先设备上,侧边栏变成左侧浮层抽屉(约 80vw,打开时 transform:none);桌面端在任何宽度下都不受影响 | | 对话框 → 底部面板 | 设置、资源管理器、预览变成适合移动端的底部面板,处理 env(safe-area-inset-) 并避开刘海 | | 状态栏与安全区域 | 状态栏 / 刘海内边距、浅色 / 深色 theme-color,以及 touch-action: manipulation + gesturestart 防护,阻止双击缩放 | | 输入区保持整洁 | 权限胶囊、模型名、切换菜单用固定尺寸钉住,窄屏上不会挤压或重叠 | | 平板友好 | 768–1023px 居中、限制宽度的面板;手机和平板几何分别验证 | | 便于诊断 | 追加 ?dsh-maestro-mobile-debug=1,出现浮动条,显示视口 / 帧 / 浮动面板 / JS 错误状态 | 环境要求 - Node.js ≥ 22,pnpm ≥ 11 - 运行中的 DeepSeek Harness web 配置档(pnpm dsh web),DSH 0.2.x(已在 0.2.2-alpha.2 上验证) - Chromium 105+,支持 :has() 选择器 响应压缩由宿主负责,前提是宿主已启用:webServer 配置了 compression: gzip(部署用的配置档就是这样)时,插件不碰响应,因为 DSH 自己的中间件已经提供 brotli/gzip,并在 writeHead 竞争中胜出。配置档保持宿主默认(compression: none)时,插件安装自己的透明 gzip/brotli 补丁。 安装 from the registry dsh plugin --profile web add @ddtcorex/dsh-maestro-mobile local development (live link: edit + rebuild just works) dsh plugin --profile web add link:/path/to/dsh-maestro-mobile lib/ 是 gitignore 的构建产物:pnpm build 在本地生成,pnpm-workspace.yaml 带有全新安装所需的 allowBuilds.esbuild 条目。安装后或任何 pnpm build 之后重启 dsh web。 手动添加 cordis.yml 行 如果你不用 dsh plugin,把这一行加到 cordis.yml: - id: maestro-mobile name: '@ddtcorex/dsh-maestro-mobile' 开发 pnpm install # install (pnpm@11.7.0, lockfile v9) pnpm verify # type-check host + client (tsc --noEmit) pnpm test # node --test tests/.test.ts (full suite) pnpm test:core # node --test tests/reconciler-core.test.ts tests/composer-keyboard-touch.test.ts (fast subset) pnpm build # tsc host + client && node scripts/build-client.mjs -> lib/ 任何源码改动后,pnpm build 都是必须通过的关卡;lib/ 是 gitignore 的构建产物,所以改动在本地重新构建刷新之前都算没完成。 可选的 CDP 回归探测(需要 :3080 上有运行中的 DSH Web,以及 PIN cookie;如果想探测原始服务器,按 docs/upstream/upgrade-runbook.md §2 设置 DSH_PROBE_URL=http://127.0.0.1:3082/?token=<launch-token>): DSH_PROBE_SESSION_ID=<id> pnpm smoke:cdp 架构 - 宿主 / 客户端拆分是关键设计:src/index.ts 负责会话删除路由(POST /api/mobile-nav.session.delete)以及条件性的响应压缩补丁;所有浏览器行为都在 src/client/ 里。 - 删除路由通过宿主鉴权(connection.requestRejection),因为 /api 的启动 token 防护是前缀路由,会被精确路由遮蔽;宿主没有发布连接服务时,它按失败关闭处理,返回 503 admission-unavailable。 - src/client/index.tsx 注入 ['slots','layout','locale','sessionLogDownload','sessions','workspaces'],注册 locale 字典,注入一个 标签,并注册三个插槽(会话头部的 MobileNavToggle、侧边栏底部的 MobileDrawerFooter、ShellOverlay 背景 + FAB)。 - 共享的全树协调器:src/client/core/reconciler-core.ts(零依赖引擎)+ phone-chrome.ts(单个 MutationObserver 驱动 installMobileEffect)。 - 样式按 tokens → base → layout → sheet → explorer-sheet → composer → settings-sheet → misc 拼接进一个标签;移动端规则命中 (max-width: 1023px) and (pointer: coarse)。 许可证 MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
ddtcorex/dsh-maestro-mobile
DeepSeek Harness Web UI 的竖屏与移动端适配——浮层抽屉、全宽对话、底部弹层对话框、安全区处理。低于 1024px 时生效,≥1024px 时不做任何改动。
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,350已汉化DSH
71.5
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,506已汉化DSH
71.1
AI 矢量设计工具ZSeven-W/openpencil
全球首个 AI 原生开源矢量设计工具。
★ 7,027已汉化DSH
71.1
这是你的仓库?认领条目