🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

移动端适配 ddtcorex/dsh-maestro-mobile

DeepSeek Harnessv1.7.1
ddtcorex6 天前有提交已提供中文文档扫描:含敏感能力

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-mobile
npm 源 · @ddtcorex/dsh-maestro-mobile 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · ui
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功(非静态推断);本次验证针对插件 v1.8.0,当前版本为 v1.7.1
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 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
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 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
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 竖屏移动端适配
  • 浮层抽屉与底部弹层
  • 安全区处理
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
预览分享卡片长什么样 ↓ddtcorex/dsh-maestro-mobile
分享 · DeepSeek Harness Hub
ddtcorex/dsh-maestro-mobile

DeepSeek Harness Web UI 的竖屏与移动端适配——浮层抽屉、全宽对话、底部弹层对话框、安全区处理。低于 1024px 时生效,≥1024px 时不做任何改动。

这是你的仓库?认领条目

回到顶部