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

会话分屏网格 metal-huang/dsh-workspace-split

DeepSeek Harness
metal-huang2 天前有提交已提供中文文档扫描:含敏感能力

把多个正在运行的 DeepSeek Harness…

36.1/100
综合分
4
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查未通过:缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add metal-huang/dsh-workspace-split
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · ui
装得上吗
作者未把包发布到 npm,只能用源码安装
插件本身没问题,是分发方式不同
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 2 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-workspace-split-workspace(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/3 11:52:58

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件
查看扫描证据(共 20 处,展示前 20 条)
  • 执行外部命令来自配置/变量
    gate/build_plugin.mjs:16
    const output = execFileSync(process.execPath, ['build.mjs'], { cwd: PLUGIN_DIR, encoding: 'utf8' })
  • 读取本地文件
    gate/commit_msg.mjs:35
    const lines = readFileSync(file, 'utf8')
  • 执行外部命令来自配置/变量
    gate/dup_check.mjs:29
    output = execFileSync(
  • 读取本地文件
    gate/format_check.mjs:35
    entries = readdirSync(join(ROOT, relativeDir), { withFileTypes: true })
  • 读取本地文件
    gate/format_check.mjs:59
    source = readFileSync(absolute, 'utf8')
  • 执行外部命令固定命令
    gate/lib.mjs:25
    return execFileSync('git', args, { cwd: ROOT, encoding: 'utf8' }).trim()
  • 读取本地文件
    gate/lib.mjs:40
    return JSON.parse(readFileSync(file, 'utf8'))
  • 写入本地文件
    gate/lint_runner.mjs:19
    mkdirSync(REPORTS_DIR, { recursive: true })
  • 写入本地文件
    gate/lint_runner.mjs:20
    writeFileSync(
  • 写入本地文件
    gate/post_commit.mjs:12
    mkdirSync(markerDir, { recursive: true })
  • 写入本地文件
    gate/post_commit.mjs:13
    writeFileSync(
  • 读取本地文件
    gate/pre_commit.mjs:58
    if (!existsSync(absolute)) continue
  • 读取本地文件
    gate/pre_commit.mjs:62
    if (!(await prettier.check(readFileSync(absolute, 'utf8'), { ...options, filepath: absolute }))) {
  • 读取本地文件
    gate/ratchet_tighten.mjs:35
    return JSON.parse(readFileSync(file, 'utf8'))
  • 写入本地文件
    gate/ratchet_tighten.mjs:57
    writeFileSync(file, `${JSON.stringify(value, null, 2)}\n`)
  • 执行外部命令来自配置/变量
    gate/ratchet_tighten.mjs:88
    dupOutput = execFileSync(
  • 读取本地文件
    gate/ratchet_tighten.mjs:149
    entries = readdirSync(join(ROOT, relativeDir), { withFileTypes: true })
  • 读取本地文件
    gate/ratchet_tighten.mjs:172
    if (!existsSync(absolute)) continue
  • 读取本地文件
    gate/ratchet_tighten.mjs:176
    if (!(await prettier.check(readFileSync(absolute, 'utf8'), { ...options, filepath: absolute }))) {
  • 写入本地文件
    gate/ratchet_tighten.mjs:191
    writeFileSync(FORMAT_FILE, `${JSON.stringify({ files: kept.sort() }, null, 2)}\n`)
扫描于 2026/11/4(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

README

由 DeepSeek 最新模型翻译生成
dsh-workspace-split English · 中文说明 把多个正在运行的 DeepSeek Harness 会话并排放在同一个窗口里,每个格子都能直接输入。为「同时盯多个项目」而做:一屏看完所有会话的进展,不用来回切标签。 它能做什么 - 活的会话网格。行列自己选,最多 5 行 × 6 列,每个格子是一个运行中的会话,带完整对话记录。 - 每个格子都能打字,也能放附件。每格有独立输入框,可以粘贴、拖入或选择 PNG / JPEG / WebP / GIF,也可以从 + 菜单附加任意文件;上传走 ctx.fileUpload,文件随文字一起发出;分屏布局不会自己变。 - 每格可选模型、推理等级和访问模式。输入框下方的座位读取与主会话相同的 Session 投影和 Remote 目录,写入走 session.selectModel 与 /permission <preset>;切到完全权限时同样要求风险确认。 - 斜杠命令与 @ 引用。/命令 走 session.command,不消耗一轮对话; @ 通过公开引用接口列出文件与会话,插入的文本与主会话一致。 - 审批与提问直接在格子里回答。该会话有等待中的审批或 ask_user_question 时,输入框会换成一张紧凑卡片;回答调用的是主会话面板同一个 pending 对象。 - 上下文占用。
展开完整文档(README 剩余 1 节)
dsh-workspace-split

English · 中文说明

把多个正在运行的 DeepSeek Harness 会话并排放在同一个窗口里,每个格子都能直接输入。为「同时盯多个项目」而做:一屏看完所有会话的进展,不用来回切标签。

它能做什么

- 活的会话网格。行列自己选,最多 5 行 × 6 列,每个格子是一个运行中的会话,带完整对话记录。
- 每个格子都能打字,也能放附件。每格有独立输入框,可以粘贴、拖入或选择 PNG / JPEG / WebP / GIF,也可以从 + 菜单附加任意文件;上传走 ctx.fileUpload,文件随文字一起发出;分屏布局不会自己变。
- 每格可选模型、推理等级和访问模式。输入框下方的座位读取与主会话相同的 Session 投影和 Remote 目录,写入走 session.selectModel 与 /permission <preset>;切到完全权限时同样要求风险确认。
- 斜杠命令与 @ 引用。/命令 走 session.command,不消耗一轮对话; @ 通过公开引用接口列出文件与会话,插入的文本与主会话一致。
- 审批与提问直接在格子里回答。该会话有等待中的审批或 ask_user_question 时,输入框会换成一张紧凑卡片;回答调用的是主会话面板同一个 pending 对象。
- 上下文占用。底部显示与主会话一致的 projected / window token 读数;投影缺失时整块隐藏。
- 一格放会话,或放项目。可以钉住某个会话,也可以钉住一个项目,在格子里切换这个项目的不同会话;自由格的下拉里每行带彩色项目徽章(跟标题栏同一套),还能直接按标题或项目名搜索,↑↓ + Enter 选。
- 归档就让位。在侧栏归档一个会话后,Host 确认归档时绑着它的格子就放开(同一轮更新,分屏自己不做乐观更新):会话格子清空,项目格子只清会话、项目作用域还在;格子选择器和拖入解析都不再列出归档会话,取消归档后又能选回来。
- 实时状态。标题上的圆点表示该会话是否正在跑;标题前还有一个彩色项目徽标,开了很久也能一眼看出这个会话属于哪个项目。
- 点一下就算读过。会话跑完时侧栏亮起的「已完成」亮点,进分屏点一下那个格子就灭——不用切回主视图。
- 密度跟着格子走。格子变窄时文字自动缩小,小格子里也能看到有用的信息量;在某格上 Ctrl + 滚轮只调这一格。标题头跟随格子宽度的自动缩放,但不跟随手动缩放,所以标题既不会比正文显得过大,也能保持对齐。
- Markdown 与公式。表格、代码块、任务清单,TeX 用 KaTeX 渲染。
- 图片点开看大图。对话里的图片缩略图点一下就铺满窗口,点任意处或按 Esc 关闭;预览走独立浮层,不受格子缩放和裁切影响。
- 看到过程,不只看结果。思考与工具调用按轮折叠成一个「处理过程」组,并显示耗时;工具执行期间标「运行中」,底部状态行说明当前在做什么;本轮失败会显示提供方错误而不是静默结束;草稿为空时发送键变成停止键。
- 队列、插话、移除。运行中被排在后面的消息会列在输入框上方,可以「插话」或「移除」,与主会话的 QueueDock 一致。
- 工具调用可展开。参数和输出就地展开,失败有标记。
- 轮次导航轨。右侧刻度点击跳转,没加载过的轮次会先拉历史。
- 布局持久化。网格、格内会话、每格缩放都会恢复。

会话是怎么接进来的

会话数据走公开的 ctx.sessions 接口(list、retain、事件源),输入走 session.prompt。每个格子的对话记录、Markdown、工具卡和输入框都由本插件自己渲染,样式沿用 DSH 的主题变量与视觉规则,跟随应用主题。

除一处例外,所有 DSH 相关能力都走公开服务与 Remote 命名空间:ctx.fileUpload、 ctx.uiSession、ctx.remote.session、ctx.remote.permissionPresets、 ctx.remote.fileReferences、ctx.remote.sessionReferenceResolver。

那处例外是「点格子清未读亮点」:DSH 只在会话进入主视图时清 completionUnread,公开面没有写入口,所以这里读的是 ctx.uiSession 实例上未公开的确认集合(completionUnread 与 publishStatus())。这是有意的越界,代价与兜底写在 TECH 13.5;官方公开对应方法后就换过去。

test/dsh-contract.test.js 会对照本机安装的 DSH 断言这些方法与类型名(包括上面那处例外用到的两个内部成员);官方改名或删除时,门禁会带着缺失的符号失败,而不是让某个格子静默坏掉——内部成员缺失时,清未读降级为「亮点留着」,不会报错。用 DSH_CONTRACT_ROOT 可指定别的安装目录;没装 DSH 时该测试自动跳过。

环境要求

- DeepSeek Harness 0.2.1-rc.2 或更新版本(桌面版或 Web 版均可)。
- 同一份构建在桌面版和 dsh web 里都能用。

安装

dsh plugin add @metal-huang/dsh-workspace-split

装完重启应用(或在网页里刷新)。开关出现在侧边栏底部、账号旁边。

从本地检出安装

git clone https://github.com/metal-huang/dsh-workspace-split.git
cd dsh-workspace-split
npm install
cd packages/dsh-workspace-split && npm install && npm run build
dsh plugin add "$PWD/packages/dsh-workspace-split"

用法

| 动作 | 位置 |
| 进 / 出分屏 | 左键点侧边栏底部的 ⊞ |
| 选网格大小 | 右键点同一个 ⊞ |
| 给格子指定会话 | 用格子标题里的选择器,或从侧边栏拖一个会话行进格子 |
| 改会话名 | 标题旁的 ✎ |
| 只调整某一格的文字大小 | 在该格上 Ctrl + 滚轮 |
| 提高格子上限 | 设置 → 通用 → 分屏网格 |

全屏默认最多 10 格(单窗口硬上限 12 格,两项都可配)。6 格比较舒服,超过 6 格开新的会先确认一次。

开发

npm install # 仓库工具链
npm run check # 门禁:lint + 重复代码 + 格式 + 测试
npm run build # 重建客户端产物
npm run release # 发布桌面 profile 用的快照

packages/dsh-workspace-split/src/client.js 是源码;同目录的 client.js 是构建产物,不要手改,也不入库——在该包里 npm install 会走 prepare 构建一次,之后改源码用 npm run build 重建。

仓库规则见 AGENTS.md,产品与设计文档见 docs/。

许可证

MIT
预览分享卡片长什么样 ↓metal-huang/dsh-workspace-split
分享 · DeepSeek Harness Hub
metal-huang/dsh-workspace-split

把多个正在运行的 DeepSeek Harness…

这是你的仓库?认领条目

回到顶部