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

项目分组侧栏 ThinkofRain1213/dsh-project-groups

DeepSeek Harnessv0.3.0
ThinkofRain12134 天前有提交已提供中文文档扫描:含敏感能力

DSH 项目分组插件:1:1…

31.5/100
综合分
2
GitHub 星标
305
npm 周下载
—/5
用户评分

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-project-groups
npm 源 · dsh-project-groups 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · market
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功(非静态推断);本次验证针对插件 v0.3.3,当前版本为 v0.3.0
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 4 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

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

✓npm 包dsh-project-groups @ 0.3.0
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/15 04:19:56

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

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

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)
查看扫描证据(共 25 处,展示前 23 条)
  • 执行外部命令来自配置/变量
    lib/index.js:524
    execFile(file, [...args], {
  • 读取本地文件
    lib/index.js:1241
    stat = statSync(path);
  • 读取本地文件
    lib/index.js:1249
    const sha1 = createHash("sha1").update(readFileSync(path)).digest("hex");
  • 读取本地文件
    lib/index.js:1250
    const after = statSync(path);
  • 读取本地文件
    lib/index.js:1290
    if (path !== void 0 && existsSync(path)) return {
  • 读取本地文件
    lib/index.js:1302
    if (path === void 0 || !existsSync(path)) return { mode: "none" };
  • 读取本地文件
    lib/index.js:1332
    return (await readdir(specsDirectory(ctx))).filter(isSafeSpecName).sort((a, b) => a.localeCompare(b));
  • 写入本地文件
    lib/index.js:1351
    await mkdir(specsDirectory(ctx), { recursive: true });
  • 写入本地文件
    lib/index.js:1353
    await writeFile(path, content, {
  • 删除本地文件
    lib/index.js:1391
    await rm(path);
  • 写入本地文件
    lib/index.js:3076
    await mkdir(path, { recursive: true });
  • 写入本地文件
    src/index.ts:1710
    await mkdir(path, { recursive: true })
  • 执行外部命令来自配置/变量
    src/default-workspace.ts:69
    execFile(
  • 读取本地文件
    src/spec-store.ts:218
    stat = statSync(path)
  • 读取本地文件
    src/spec-store.ts:227
    const sha1 = createHash('sha1').update(readFileSync(path)).digest('hex')
  • 读取本地文件
    src/spec-store.ts:237
    const after = statSync(path)
  • 读取本地文件
    src/spec-store.ts:294
    if (path !== undefined && existsSync(path)) return { mode: 'custom', path, fileName: override }
  • 读取本地文件
    src/spec-store.ts:299
    if (path === undefined || !existsSync(path)) {
  • 读取本地文件
    src/spec-store.ts:338
    const names = await readdir(specsDirectory(ctx))
  • 写入本地文件
    src/spec-store.ts:359
    await mkdir(specsDirectory(ctx), { recursive: true })
  • 写入本地文件
    src/spec-store.ts:368
    await writeFile(path, content, { encoding: 'utf8', flag: 'wx' })
  • 删除本地文件
    src/spec-store.ts:407
    await rm(path)
  • 写入剪贴板
    src/vendored/client/index.ts:615
    const copied = await writeClipboard(sessionId)
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/cordis-plugin-include@deepseek-ai/dsh-agent@deepseek-ai/dsh-agent-preset-registry@deepseek-ai/dsh-api-remotes@deepseek-ai/dsh-api-remote-access@deepseek-ai/dsh-api-session-controller@deepseek-ai/dsh-api-workspace-controller@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-product-analytics@deepseek-ai/dsh-client-shortcuts
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 接管官方侧栏工作区
  • 前端项目分组归属
  • 关闭即恢复官方行为
展开完整介绍(78 字)↓

DSH 项目分组插件:1:1 接管官方侧栏工作区浏览区,把分组从「目录所有权」摘下来,变成纯前端的项目归属,适配完全权限工作流;关闭插件即完全恢复官方行为。

v0.3.42026-10-28
· 修复 · 同时安装 dsh-auto-expand 时,设置页的分组标题会贴到分隔线上。标题与其上方分隔线的间距会从 16px 变成 4px,两处都出现:卡片顶部那一段,以及每条分隔线下方。只装本插件时一切正常,所以症状只在两个插件同时启用时出现;关掉 dsh-auto-expand 立刻恢复。 原因:两个插件的设置卡片都叫 src/client/settings-card.module.css,而 CSS Modules 的类名哈希只由这个文件名算出、不含包名——于是两边生成了完全相同的类名(实测 10 个)。两个插件的样式表会同时生效,dsh-auto-expand 的 .section > :first-child { margin-top: -12px } 因此落到了本插件的 上。那条规则对它自己是对的(它的每组第一个元素是带内边距的行),对本插件不对(本插件的第一个元素是标题,不带内边距)。 修法:生成本插件类名时把包名并入名字来源,两个插件从此各用各的类名。这只改变类名本身,不改变任何样式规则的内容,所以除了上面对这处间距的修复,界面没有任何其它变化。 不受影响的部分:dsh-smooth-cursor-patched、dsh-smooth-stream-patched 等其它插件没有同名样式表,未受此问题影响。 · 内部 · 新增 verify:css-isolation 并接入 pnpm check:比对同级目录所有已构建插件的类名集合,交集必须为空。此前的门禁只测本插件自己,测不出跨插件撞名。
v0.3.32026-10-27
· 0.3.3 — 2026-10-27 · 修复 · 分支出的会话现在继承父会话的项目。此前从「分叉会话」(侧栏菜单 / Ctrl+Alt+F)或「在新对话中分支」(消息下方)产生的子会话一律落到「未分组」,需要手动拖一次。现在分支完成时会自动归入父会话所在的项目,且只写这一次——之后你把它拖到别处或拖回「未分组」,系统都不会再改。 - 父会话本来就在「未分组」时,子会话同样不归类(与官方按父会话归属取用的行为一致)。 - 已存在的历史分支不会自动归位。 · 规范选择对话框的两处显示错误: - 「甲.md」等文件名此前比对话框标题右移 40px,现已与标题左对齐(根因:列表是 ,浏览器默认给了 40px 缩进)。 - 该行字号此前比「选择底层工作区」对话框里的明显偏大,现已一致(根因:font: inherit 简写重置了字号)。 · 变更 · 设置页的纵向间距统一为一种节奏。此前「行与行」与「行到组」都是 32px,而组标题到它下面的内容只有 8px——同一张卡里两种密度,组标题比行标题贴得更近。现在: - 相邻设置行 24px、组标题到内容 6px、卡片顶部与底部各 16px、跨分隔线 32px。 - 三条分隔线现在是等距的:「注入内容」与「状态差异」之间那条此前与另外两条不一致。 - 「底层工作区」的标题与说明改为与其它标题同样的 6px,原来那处是独有的 4px。 · 兼容性 只支持 DSH >=0.2.1-rc.2 <0.2.2。本版跟随 DSH 0.2.1-rc.3 做了 vendored 源码重同步。
v0.3.22026-10-17
DSH 0.2.1 已发布,而 0.3.1 的 peer 钉死在 0.2.0-rc.2 —— 插件会在启动兼容性检查处被判定不兼容、拒绝加载,插件页显示「与 DSH 0.2.1-rc.1 不兼容」。 本版把整棵 vendored 源码与全部依赖跟进到 0.2.1 线,并追到最新的 0.2.1-rc.2。 · 修复 · 插件重新可以加载:三个 @deepseek-ai/dsh-* peer 由 0.2.0-rc.2 改为 0.2.1-rc.2;补入 @deepseek-ai/dsh-api-remote-access;cordis 4.0.1 → 4.0.5(0.2.1 整套包 peer 在 ~4.0.5);zod 由 ^4.4.3 改为精确 4.4.3 —— DSH 自己的包就是不带宽度的精确值,写 ^ 会解析到 4.6.5 并让每个领域 schema 变成类型错误。 · 变更 · src/vendored/ 重新同步到 0.2.1:上游从 0.2.0-rc.2 到 0.2.1-rc.1 改了 16 个文件(+617/−217),其中 7 个是本目录 patch 过的;三方合并产生 23 处冲突并逐一解决。patch 足迹为 10 个文件 / 107 个 hunk(上一版 75 条)。 · 0.2.1-rc.1 → 0.2.1-rc.2 没有任何源码改动:ui-workspace/src 在两个 tag 之间逐字节相同(28 个文件,哈希全等),只有版本号跟着走。 · 「新建会话」的第二个参数做成共存:上游用它传草稿内容与 Agent 预设,本插件原本用它传「新会话落到哪个项目」。现在签名是 startSession(工作区?, beforeOpen?, options?),两者由同一个回调组合。 · 会话行「水位线」模型、新的 keyed toast 插槽架构、折叠条数上限的移除,都跟随上游改动贯穿到了每个 patch 区域。 · 兼容性 · 只支持 DSH 0.2.1-rc.2。更早的宿主会被启动检查拒绝(这是 DSH 的设计,不是插件的判断)。 · 验证 · pnpm check:845 条断言,0 失败 · 用 DSH 自己的兼容规则对 0.2.1-rc.2 运行时求值:无未满足要求
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-project-groups 一个为 DSH(DeepSeek Harness)打造的插件,做四件事: 1. 接管侧栏的「工作区」浏览区,把分组从目录上摘下来,变成纯前端的项目归属; 2. 给每个项目一份工作文档,并把它的格式规范注入会话——规范一变就提醒模型先问再迁移; 3. 登记关联链接:把项目联系到它的上游仓库(GitHub 等),并随会话一起注入; 4. 让你看见注入了什么:设置页显示插件此刻真正写进运行时上下文的那段文字,以及各状态下的分块差异。 插件关掉即完全恢复官方行为:注入与监听器随插件 fiber 销毁,零残留。 为什么需要它 一、分组不该绑在目录上 DSH 官方的工作区是目录所有权记录:一个会话属于某工作区,是因为它 Header 里不可变的 cwd 恰好等于该工作区的 path。成员关系每次读取时现算,从来没作为关系存下来。 这套模型要求你事先手动指定目录。而本插件的用法是完全权限、不按目录划分工作——目录那一套在这里是多余的负担: - 没有任何 RPC 能把会话在工作区之间搬运,cwd 在设计上就是冻结的(deepFreeze); - 新建工作区强制弹目录选择器,初始标题只能是文件夹名; - 于是工作区永远回答不了"这个对话属于我哪个项目"。 所以插件把分组摘下来:项目没有目录,只是给会话贴的一个标签。
展开完整文档(README 剩余 1 节)
dsh-project-groups

一个为 DSH(DeepSeek Harness)打造的插件,做四件事:

1. 接管侧栏的「工作区」浏览区,把分组从目录上摘下来,变成纯前端的项目归属;
2. 给每个项目一份工作文档,并把它的格式规范注入会话——规范一变就提醒模型先问再迁移;
3. 登记关联链接:把项目联系到它的上游仓库(GitHub 等),并随会话一起注入;
4. 让你看见注入了什么:设置页显示插件此刻真正写进运行时上下文的那段文字,以及各状态下的分块差异。

插件关掉即完全恢复官方行为:注入与监听器随插件 fiber 销毁,零残留。

为什么需要它

一、分组不该绑在目录上

DSH 官方的工作区是目录所有权记录:一个会话属于某工作区,是因为它 Header 里不可变的 cwd 恰好等于该工作区的 path。成员关系每次读取时现算,从来没作为关系存下来。

这套模型要求你事先手动指定目录。而本插件的用法是完全权限、不按目录划分工作——目录那一套在这里是多余的负担:

- 没有任何 RPC 能把会话在工作区之间搬运,cwd 在设计上就是冻结的(deepFreeze);
- 新建工作区强制弹目录选择器,初始标题只能是文件夹名;
- 于是工作区永远回答不了"这个对话属于我哪个项目"。

所以插件把分组摘下来:项目没有目录,只是给会话贴的一个标签。

二、文档该有一份"怎么写"的规范

项目文档记的是在做什么、做到哪、下一步,因此需要一套结构(现状 / 关联资产 / 台账…)——而结构会演进。规范一变,旧文档就与新的对不上,但模型自己不知道。

所以插件把当前规范注入运行时上下文;一旦发现文档是按旧规范写的,就要求模型 先问用户,再决定是否重写。

它做什么

官方侧栏工作区浏览器的一切,运行在本插件自己的 bundle id 下(1:1 复刻),在此之上叠加:

- 项目分组——项目行 + 「未分组」桶,替代官方的按工作区分组;
- 拖拽归类——会话在项目之间拖动,或拖回「未分组」;
- 项目自身的增删改排——新建 / 重命名 / 删除 / 拖拽排序,标题唯一;
- 新会话落点——项目行 + / 未分组 + / 顶栏按钮,都落在「底层工作区」;
- 搜索结果归属——结果行显示所属项目,不是工作区;
- 关联链接——给项目登记上游链接(GitHub 等),与「关联目录」并列在编辑对话框里; 只作标记、不做拦截:格式不对只提示,内容不改写、也不会因此存不进去;
- 注入预览——设置页直接显示插件此刻真正会注入的内容,内容取自真实的渲染器而非另写的样本;并按段列出「空 / 一条 / 多条」各形态的差异。

官方的 @deepseek-ai/dsh-client-ui-workspace 行由 cordis.patch.yml 禁用——单槽位双占用、服务双提供是硬启动错误,不是合并。也因此界面 1:1 才成立。

工作文档与规范

每个项目一份 md 文档,统一放在 $DSH_HOME/project-groups/;上传的规范放在同目录的 specs/ 下。路径不可自定义,所以换机器自动正确。

规范的三种来源(设置页「文档规范」):

| 卡片 | 含义 |
| 无 | 不更新格式:无既定格式则自由书写,有既定格式则在其基础上书写 |
| 默认 | 使用插件内置的规范(随包分发,插件升级即自动生效) |
| 自定义 | 用你自己上传的 md 规范,可逐个上传 / 切换 / 删除 |

另有「为每项目单独调整文档规范」开关:开启后,新建与编辑项目对话框会多出一行下拉栏(跟随全局 / 无 / 默认 / 各已上传规范),让单个项目偏离全局选择。

规范的身份是内容哈希,不是文件名——所以覆盖同名规范、或插件升级改动内置规范, 都会被检出为"规范变了"。发现文档按旧规范写时,注入会要求模型用 ask_user_question 问一句:

① 按新规范重写 ② 本次忽略 ③ 在规范再次变更前忽略

选 ① 则模型按 spec/REWRITE-FLOW.md 执行, 唯一不可违背的约束是"不得因格式迁移而丢失信息"。

注入不是每步都做(官方对未变化的文本不重复提交):会话首轮、压缩后、以及影响渲染的值真正变化时。因此「本次忽略」不记任何状态即可——不会循环。

详见 DESIGN.md §26。内置规范见 spec/PROJECT-SPEC.md。

安装

需要 DSH >=0.2.1-rc.2 <0.2.2(即 0.2.1 这一条线)。插件跑在 0.2.1 的壳上, vendor 源码同样取自 0.2.1-rc.3(上游同步流程见 DESIGN.md §5 的 L4.5)。

这条区间由 engines.dsh 声明 —— 声明了它之后,DSH 只按这个区间判定兼容性, peerDependencies 被完全忽略(这是官方的既定规则,不是我们的选择)。
区间上限刻意停在 <0.2.2:只有实际 re-sync 验证过的版本才配放行。

dsh plugin add dsh-project-groups

之后重启 DSH。插件的 cordis.patch.yml 会插入自己的行并禁用官方那一行。

从本地检出安装:

git clone https://github.com/ThinkofRain1213/dsh-project-groups.git
cd dsh-project-groups
pnpm install && pnpm buildbash
dsh plugin add .

验证

- 侧栏界面应与原版 DSH 无法区分——同样的树、搜索、视图选项、对话框;
- 关掉插件后,官方行重新启用,行为完全回到原版。

替换是怎么生效的 jsonc // cordis.patch.yml
- id: ui-workspace
name: "@deepseek-ai/dsh-client-ui-workspace"
disabled: true

- insert:
- id: project-groups
name: dsh-project-groups

bundle patch 按 dsh.profile.bundles 顺序应用。官方那一行由 web-app bundle 层声明,先于本插件应用——所以这条 disable 落在了一行已存在的 entry 上。
scripts/verify-patch.mjs 会把它跑过 Loader 真实的 patch 算法(applyEntryPatches),并断言没有任何 patch 被跳过——因为指向未知 id 的 patch 只会警告后继续,不会报错。

bundle 的构建满足与上游相同的模块边界规则:

- 壳提供的平台模块(react、@deepseek-ai/cordis、槽位注册表、UI primitives)保持 require();
- 接线层与纯折叠层(dsh-util-values、dsh-util-workspace-path、dsh-api-workspace-controller/default-workspace)内联,与上游自己的 bundle 做法一致;
- 其余任何跨插件的值导入都是构建期错误,而不是静默产生一份重复的运行时实例。

scripts/compare-bundle.mjs 断言产物解析的 external 与官方 bundle 完全一致——官方那份直接从已安装的 app.asar 里读出。

开发 bash
pnpm install
pnpm typecheck # tsc --noEmit,覆盖 src(含 vendored 树)
pnpm build # tsdown -> lib/index.js + lib/client.js
pnpm check # typecheck + build + 15 项校验 + 探针(890 条断言)

⚠️ 本地开发(dsh plugin add . / link: 安装)时,改完 src/ 必须两步都做,缺一不可:
1. pnpm build —— 重建 lib/(link: 装的是 lib/ 里的产物,不是源码)
2. 重启 DSH —— Host 半的 lib/index.js 不会热加载

只重建不重启,看到的是旧 Host 行为;只重启不重建,同样不生效。
(客户端 lib/client.js 可能热载,Host 端不行。)
这个坑曾导致一次真实的误判:修复已生效但未重启,被当成"没修好"。

源码结构:

| 路径 | 职责 |
| src/index.ts | Host 半:项目领域、Remote、文档与规范解析、注入装配、底层工作区重建 |
| src/injection.ts | 注入文本渲染(纯函数,不碰文件系统)+ 漂移判定 |
| src/spec-store.ts | 规范与文档的路径解析、SHA-1(按 path+mtime+size 记忆化)、上传读写 |
| src/spec.ts | 领域 schema:项目记录、全局设置、三个状态值 |
| src/client/index.ts | 浏览器入口:注入分组、设置卡片、选择弹窗 |
| src/client/spec-picker.tsx | 规范选择 / 上传 / 删除对话框 |
| src/vendored/ | 官方 client 源码副本 + 108 处语义改动(200 个 diff hunk)、涉及 10 个文件(见其 README) |
| scripts/ | 探针与校验;DESIGN.md 说明每个脚本证明了什么 |
| scripts/lib/boot-dsh.mjs | 真实 DSH 探针的共同起点:profile 自举 + 首启引导层关闭 |
| CHANGELOG.md | 每个版本对使用者可见的变化 |
| DESIGN.md | 架构、已核实的 harness 事实、分层计划与决策记录 |

pnpm check 会跑全部 15 项校验与探针(890 条断言)。
另有 52 个真实 DSH 探针需要本机装有 DSH 与可用端口,故不在默认链上。
它们现在可以真正跑起来了(此前全部跑不起来,见下): bash

在仓库根目录执行。这三个参数依次是 Electron 可执行文件、app.asar、一次性的 DSH_HOME

node scripts/probe-doc-spec.mjs \
"$LOCALAPPDATA/Programs/DeepSeek Harness/DeepSeek Harness.exe" \
"$LOCALAPPDATA/Programs/DeepSeek Harness/resources/app.asar" \
"$TEMP/pg-probe-doc-spec"

探针会自己把 probe 那个 DSH_HOME 准备好:先派生 profile(--from-default-profile web),再 plugin add 本仓库,最后启动。每个探针用独立的 DSH_HOME——多个探针共用一个 home 会让项目累积,而其中一些断言的是精确项目数。

为什么以前跑不起来。 两个环境缺口叠在一起,都已实测复现、也都不是产品缺陷:
1. dsh plugin --profile <name> add 建出的只是用户覆盖层(cordis.patch.yml + package.json),没有 cordis.yml。缺了它进程会正常存活、stdout/stderr 全空、端口从不监听 ⇒ 探针 120 秒后报 boot timeout,且输出里没有任何线索指向真因。
2. 隔离 profile 没有账号凭据,首启会弹出「开始使用 / 登录 DeepSeek 账号」引导,它是一层拦截所有点击的遮罩。而旧探针的关闭清单里没有「关闭」,只有别的弹窗的文案。

两件事现在都由 scripts/lib/boot-dsh.mjs 统一处理(见 DESIGN.md 第 28 章)。

verify:release 专门守住发布相关的事实:版本号在三处一致、locale 描述与功能同步、两版 README 结构对等、files 会打包到新增文件、以及没有误提交的 .tgz。

发布

prepublishOnly 就是 pnpm check,而其中 verify:bundle 会读取本机已安装 DSH 的 app.asar,用来对比产物解析的 external。

⇒ 发布要在装了 DSH 的机器上做;否则那个脚本找不到 app.asar,会以退出码 2 中止(也可手动把官方 lib/client.js 的路径作为参数传给它)。
bash

1. 改版本号:package.json 的 version + CHANGELOG.md 加一段

2. 全量门禁(其中 verify:release 会守住版本号/CHANGELOG/locale/打包清单一致)

pnpm check

3. 提交并打 tag

git commit -am "chore: release vX.Y.Z"
git tag -a vX.Y.Z -m "vX.Y.Z"
git push && git push --tags

4. 建 GitHub Release —— 之后由 CI 发布,不再在本机跑 npm publish

gh release create vX.Y.Z --verify-tag --title "vX.Y.Z" --notes-file <说明.md>

发布走 GitHub Actions + npm Trusted Publishing(OIDC),不存长期 token。
.github/workflows/publish.yml 在 Release 发布时触发 npm publish --provenance;本地 npm publish 只在 npm 侧尚未配置 trusted publisher 时用于首次发布(npm 没有「待生效的发布者」概念,第一次必须手工发)。

⚠️ CI 发布带 --ignore-scripts。 因为 prepublishOnly 就是 pnpm check,而其中的 verify:bundle 要读本机 app.asar —— runner 上没有,会以退出码 2 中止。
工作流已自行跑过 typecheck、build、lib/ 同步校验与 verify:release, validate.yml 还会在同一提交上跑掉除 verify:bundle 以外的全部脚本,所以被跳过的只有那一条依赖本机 DSH 的断言。本机发布(npm publish)仍会跑全量门禁。

排障时先看 Publish npm 工作流是否真的发布了——历史上它可能报 Report idempotent skip 就结束,那说明该版本已存在,不是发布成功。

维护这份 fork

src/vendored/ 起点是上游 packages/client/ui-workspace/src/(dsh-v0.1.7-rc.2)的逐字节副本,但现在已不再逐字节一致:项目分组需要分组缝,现有 107 处语义改动(200 个 diff hunk)、涉及 10 个文件(另有 1 个我方独有文件)。当前来源版本是 0.2.1-rc.3。

每一处都满足同一条不变量——不传即等官方行为——并且全部登记在 src/vendored/README.md 的 patch 表里。
那张表就是重同步时的唯一清单,也是「重新同步 = 复制 + 逐条重打」的依据。

DSH 升级就是重新同步的信号:官方包与整条 harness 线同版本号,本插件的 devDependencies 钉住这份副本的来源版本。

许可

MIT。vendor 的源码同为 MIT,来自同一项目。
预览分享卡片长什么样 ↓ThinkofRain1213/dsh-project-groups
分享 · DeepSeek Harness Hub
ThinkofRain1213/dsh-project-groups

DSH 项目分组插件:1:1…

回到顶部