Skip to content

Releases: 9931666/dsh-plugin-roundtable

RoundTable v1.0.0-rc.1

Pre-release

Choose a tag to compare

@github-actions github-actions released this 24 Sep 15:42

RoundTable v1.0.0-rc.1

第一个 1.0 候选版本。这一版不是加功能,而是把「插件能不能长期自己活下去」这件事补齐:
宿主支持矩阵成为可校验的单一来源、版本差异收敛进一个模块、发布与诊断变成可执行的门禁。

发行渠道:GitHub(本插件不发布到 npm —— 作者因个人原因无法注册 npm 账户,
@huanlin scope 拿不到,registry 上不存在这个包)。安装请从源码:
git clone https://github.com/9931666/dsh-plugin-roundtable → pnpm install → pnpm build → dsh plugin --profile web add .
下文出现的 npm publish / npm dist-tag 步骤仅作本轮发布过程记录,不要再执行。

宿主基线:DeepSeek Harness 0.1.5-rc.3


0. 为什么是 1.0

此前插件的"成熟度"取决于维护者的记性:改动散在工作区、版本漂移靠人发现、
发布靠临场操作。这一版把这些变成了代码与门禁:

问题 之前 现在
支持哪些宿主? 散落在 docs / package.json / 注释里各说各话 compatibility.json 唯一来源,scripts/compatibility.mjs 强制一致
宿主 API 变了怎么办? 散落 5 个文件里各自判断 收敛进 src/harness-compat.ts 一处
发布前该确认什么? 靠记性 scripts/release.mjs 九项检查,含产物 SHA-256
用户报"界面不见了"怎么查? 来回猜、要日志 scripts/doctor.mjs 一条只读命令给证据

1. 宿主支持矩阵(B2 · 新)

新增 compatibility.json 作为矩阵与能力清单的唯一来源,并由
scripts/compatibility.mjs 校验四份声明彼此一致:

  1. 矩阵里的 required / optional 能力清单;
  2. package.json 的 devDependencies(类型基线)必须精确指向 recommendedHost;
  3. package.json 的 peerDependencies 区间必须覆盖该基线;
  4. src/harness-compat.ts 的 CAPABILITY_SPECS 必须登记每个能力的探测点。

为什么这条最重要:devDependencies 决定使用者 pnpm install 后拿到哪一版
类型。基线漂了,表现是"本机全绿、用户装完就坏",而这类故障最难查。

矩阵同时记录 baseline.packages(17 个包)与 previewTag。

2. 兼容边界集中化(B1 · 新)

新增 src/harness-compat.ts,所有与 DSH 版本相关的形状集中于此,做法借鉴社区
项目 dsh-agent-teams 的 harness-compat.ts:

  • CAPABILITY_SPECS:12 个探测点,每项记录用途、失效时用户看到什么、证据;
  • optionalService() / webRouteHostOf() / workspaceRegistryOf():服务探测
    统一入口,探测结果留痕(每个能力只记第一条,避免轮询刷爆);
  • asDisposer() / effectWithOptionalDisposer():rpc.handle 返回值形状判定;
  • projectionValuesOf():sessionProjections 读取,绝不抛错。

两条铁律写在模块头上:探测绝不成为新的加载门禁;降级必须留痕。

原先散在 index.ts / rpc.ts / token-usage.ts 的版本判断与结构式服务探测已迁移进来。

3. 修掉一处真实的类型基线漂移(体检发现)

按新门禁对 rc.3 跑体检时,compatibility.mjs 当场报出 19 项失败:

  • package.json 没有显式的宿主基线声明;
  • 17 个 devDependencies 仍指向 0.1.5-rc.2,而本机运行的是 0.1.5-rc.3;
  • HARNESS_RANGE 也硬编码着 rc.2。

全部对齐到 rc.3,并补上 package.json 的 roundtable.hostBaseline。

4. 修掉 cordis 混装导致的全量类型错误

对齐基线后第一次对 rc.3 类型跑 tsc,60+ 处报错,形如:

Property 'subagents' does not exist on type 'Context'
Argument of type '"subagent/end"' is not assignable to parameter of type 'keyof Events'

根因不是 rc.3 破坏了 API,而是两处 @deepseek-ai/cordis@4.0.2 是不同物理副本:
宿主与插件各有一份,TypeScript 视为两个不同模块,于是
declare module '@deepseek-ai/cordis' { interface Context { … } } 的声明合并失效。

把插件的 cordis 指向宿主那一个副本后,tsc 0 错误。
scripts/doctor.mjs 现在会主动比对这两条路径,并在不一致时给出上面这段解释。

这是本版最有价值的一条经验:rc 线上"类型全红"不一定是 API 破坏,先查是不是混装。

5. 发布门禁与产物验证(A1 · 新)

新增 scripts/verify-package.mjs(19 项检查):

  • files 清单非空;main / types / exports / dsh.bundle.patch 指向的文件
    在仓库里真实存在;
  • cordis.patch.yml 在 files 里 —— 不在的话消费者装上后插件不会被注册;
  • 产物 lib/ 里没有 .ts/.tsx 残留;
  • 每个宿主侧源码模块都在产物里有痕迹(强检查:所有 lib/*.js 拼起来必须
    提到每个模块的导出符号)。

最后这条替代了原先的"相对导入 → 同名 .js"检查:打包器会做
code-splitting,那种检查恒真、等于没检查。

顺带省掉 557 kB:lib/client.js.map 此前被一起发布(占解包体积 36%),
而浏览器半体是宿主直接加载的 bundle,默认不会去取它。sourcemap 改为按需
(RT_SOURCEMAP=1)打开。

6. 发布护栏(A2 · 新)

新增 scripts/release.mjs:

  • 渠道判定:预发布只能进 next,稳定版才允许进 latest;
  • 防 latest 倒退:稳定发布前查 registry,比现有 latest 更低就拒绝;
  • 首次发布识别 + scope 归属提醒(@huanlin 无权限时是 403 而非 404);
  • 产物指纹:打包候选 tarball 并输出 SHA-256 / SHA-1 / integrity。

刻意不调用 npm 命令:registry 走 HTTPS 直连、打包用内置 ustar 实现,
于是这个门禁在任何环境都跑得动(本机 npm 全局缓存在沙箱外,Windows 上脚本化
调用 npm.cmd 也会 EINVAL/EPERM)。

7. 只读诊断(A3 · 新)

新增 scripts/doctor.mjs:报告宿主/插件精确版本与位置、探测混装(同族包
多版本)、比对 cordis 实例同一性、打印能力清单。它不执行插件、不修改配置,
并且明确声明:通过 ≠ 插件能用,它只排除安装层故障。

8. 工程修补

  • 补声明 @deepseek-ai/dsh-client-ui-renderer(dsh.client.inject 里一直在用,
    却不在任何 dependencies 中);
  • HARNESS_RANGE 与 COMPATIBILITY.recommendedHost 由测试强制一致;
  • 新增 npm scripts:compatibility / verify:package / doctor / release /
    publish:guard。

验证记录

项 结果
npm run typecheck(宿主 + 浏览器,对 rc.3) 通过,0 错误
node --test 132/132 通过,0 失败(15 个测试文件)
npm run build 通过
node scripts/compatibility.mjs 45/45 通过
node scripts/verify-package.mjs 19/19 通过(22 个模块全部命中)
node scripts/release.mjs 9/9 通过,产物已出指纹
node scripts/doctor.mjs 宿主 0.1.5-rc.3;混装 ✓;cordis 同一性 ✓
候选产物 50 个文件,406.6 kB 打包 / 963.1 kB 解包(自建打包器)
npm 11 实测 51 个文件,404.6 kB 打包 / 921.5 kB 解包

已知边界

  • rc.3 之外的宿主未验证。矩阵目前只有 0.1.5-rc.3 一条;0.1.6-alpha.* 是
    另一条线,未纳入。
  • 预发布升级路径:先发到 next,自行安装验证后再
    npm dist-tag add @huanlin/dsh-plugin-roundtable@1.0.0-rc.1 latest。

    已作废:本插件不发 npm(见文首「发行渠道」)。预发布与稳定版的区别现在只体现在
    GitHub Release 的 prerelease 标记上(.github/workflows/publish.yml 自动判定)。
  • 前端测试仍为零:RoundTableView.tsx(1,723 行)没有测试覆盖,因为它需要
    先把纯逻辑从组件里抽出来。这是已知欠账,不影响本版发布。
  • git 里的 pnpm-lock.yaml 与 devDependencies 已指向 rc.3,但本机
    pnpm install 因 store 数据库不可用而失败;node_modules 的 rc.3 解析是手工
    对齐的(junction 指向宿主副本)。在能跑 pnpm 的机器上重装一次即可复现。

生效方式

  • 浏览器半体:重建后刷新页面即可。
  • 宿主半体(inject / 事件 / RPC 通道):需要重启 DSH。

DSH-RoundTable v0.2.0

Choose a tag to compare

@9931666 9931666 released this 26 Aug 13:15

RoundTable v0.2.0 — 更新说明(Release Notes)

一句话:这一版把圆桌会议从"能开会",升级为"好用、省 token、还带厂商头像"。


本次更新内容(v0.1.0 → v0.2.0)

1. 🗑 会议可删除

  • 右栏顶部新增「删除会议」按钮(确认弹窗后彻底删除磁盘文件 + 连带清里头的专家子代理,不留孤儿)
  • 之前删除按钮挤在标题行最右、窄屏容易看不见,这次移到右栏固定位置

2. 📋 专家管理界面 + 用户行为记录(核心机制)

  • 右栏「专家/分工」点「+」打开 专家管理弹窗:
    • 列出所有专家(名称 / 角色 / 模型 / 状态),可直接删除
    • 新增专家:填名称、角色,从模型下拉选厂商模型(支持 DeepSeek/GLM/千问/Kimi/MiniMax 等)
  • 行为记录文档:你在 UI 里删/加专家,不会立刻改会议,而是先记入 user-actions.jsonl;主持人下一轮自动勘察并执行,全部完成后清空。UI 与主持人认知不再脱节
  • 新专家会先显示"待生效",下一轮主持人才正式拉人进会

3. 📚 知识库(阅览版)

  • 右栏「知识库」+,填一个电脑上的文件夹路径,即可列出里面的文件与格式(纯阅览,不打开文件、不上传)
  • 勾选「已修改知识库部分内容」,主持人下一轮会重新阅览知识库、更新理解
  • 省 token:主持人按需读取指定文件、优先给摘要、不整库搬运,避免"主持人读一遍+专家读一遍"的双倍消耗

4. 💰 回答限制(省 token)

  • 设置页新增「回答限制」:
    • 专家每轮输出上限:给每个专家模型调用设 max_tokens,防止单个专家一轮烧太多
    • 每轮最多意见数:超过就收敛
  • 专家 prompt 内置"简洁约束":只答相关、不用假设、不举无关例子、无华丽修辞

5. 🔧 代码收尾

  • 全量代码审查:清理死代码(含 8 处无效事件调用)、修复设置页一处重复文案、收敛 13 个工具的重复样板。行为不变,纯质量提升

6. 🎨 厂商 Logo 头像

  • 专家头像从"缩写色块"升级为厂商真实 Logo:DeepSeek 蓝鲸 / GLM / Gemini / Claude / Kimi / MiniMax
  • 圆形裁切、白底透明化、自动居中,深色 Logo 配深色圆底
  • 内置 base64 管线,离线可用;没配 Logo 的厂商自动回退缩写

三大亮点(宣传口径 · 本次增强版)

  1. 多模型专家同台:不同厂商模型(DeepSeek / GLM / 千问 / Kimi / MiniMax)一起开会,各有品牌 Logo 头像、独立角色分工;分歧本身成为信息。
  2. 可视化拓扑 + 专家管理:环形拓扑图(连线箭头 / 呼吸灯 / 消息脉冲 / 拖拽连线),搭配极简两栏;现在还能在 UI 里直接加专家、选模型、删专家。
  3. 省 token 不失控:预算熔断(超轮数/Token 自动闭麦)+ 专家每轮输出上限 + 回答限制,多模型开会也不怕烧钱。
  4. 人类决策 + 主持人统筹:分歧时会议暂停、弹卡由你拍板;主持人再把全程压缩成结构化摘要收敛结案。

使用要点(升级用户)

  • 会议状态在 <workspace>/.roundtable/<meetingId>/,历史会议与版本升级兼容,无需迁移
  • UI 改动(专家管理、知识库、Logo、设置)全部刷新页面即生效;本次也含少量 Host 端改动,升级后重启一次 DSH 即可
  • 专家管理的新增/删除走"下一轮生效",执行无误才会真正拉人/移除

说明

Screenshot 2026-08-26 211352