dsh-meeting-room
Manifest validMeeting notes for dsh: one meeting per conversation, transcribed and speaker-separated on the machine itself, with points, assignments, handwritten notes, reviews and monthly scores in the same panel.
dsh-meeting-room · 会议记录
版本 0.1.0-preview.6(预览版)
DeepSeek Harness 的会议插件:本机转写、发言人分离、要点与工作安排、手写笔记、复盘与纪要。
音频不出本机;转写默认用随 DSH 安装的 SenseVoice,手写识别用随插件安装的本地小模型。 模型可以在「会议管理 → 模型」里换(本地更强模型,或显式同意后的云端模型)。不登录也能写字、识别、建任务、出纪要。
本版新增(0.1.0-preview.6)
- 开始页多一张「开始会议」卡片:和工作区文件/新终端/浏览器排在一起,点一下自动新建会话、 切到该会话、打开会议面板并开始录音,Agent 同时按 meeting-scribe 开工;已在录音时再点只把面板切到前台。
- meeting-scribe 可以不带参数开始:说一句「开始记录」即可,Agent 自建会议、请求面板开录, 每 5 分钟整理要点与工作安排,第一轮用前 5 分钟内容补会议名称,停录后收尾并删掉提醒。
- 面板点「开始记录」也会让 Agent 开工;起名框写明“可以留空”,留空则稍后自动命名。
- 「模型」页统一管本地与云端:上半是本地模型(按语音识别/发言人声纹/手写识别分组), 下半是云端模型;顶部新增**「识别方式」三档**——只用本地(默认)/云端优先(失败降级本地)/ 只用云端(不降级,失败报错)。设置页因此收成五个 tab。
- 断句与发言人更稳:0.7 秒停顿 + 最长 12 秒切句,碎片自动并句;短插话不新建声音, 短句带上文比对;每行最多多少字可调(默认 60)。
- 停止录音的收尾提示:右下角「正在收尾… 剩余 N · 已等待 Ms」不自动消失,直到录音真正停止、 会议保存完成才撤;失败立即撤掉并报错。
- 评分输入不再被往返打断、评分表读屏可用;记录页多一行「上次会议:名称 · 摘要」。
自动化冒烟 node smoke.mjs:206 项全绿(无需麦克风与模型,用临时数据目录)。
设计文档:
- DESIGN.md——「会话 ↔ 会议」与「登录用户 ↔ 会话」的完整关系设计;
- FEATURES.md——会议类型(晨会/复盘会/例会/总结会)、跨会提炼与月度评分的增量功能设计(含实现进度);
- MODELS.md——语音与发言人识别增强、云端模型接口、可安装更强的本地模型 (进度表:M1–M4 已完成,重叠语音、热词注入、流式中间结果等条目按“受限/未做”如实标注);
- TESTING.md——发布前系统化测试清单;
- CHANGELOG.md——发布线每个预览版修了什么(装哪个版本先看它)。
分支约定:
master只放发布状态(发布由标签标记,如v0.1.0-preview.6); 新功能在develop上做,稳定后再合回master并打新标签。
⚠️ 开发本插件时,工作目录必须停在
develop。 profile 里的插件目录通常是指向本仓库的 Junction/硬链接(例如~/.dsh/profiles/<名字>/node_modules/dsh-meeting-room→ 本目录), 因此你切到哪个分支,DSH 加载的就是哪个分支的代码: 切到master(只含发布修复)会让运行中的插件看起来"退回了发布版"(模型页签、云端设置都不见了), 而宿主半边每个进程只加载一次 —— 切回develop后还必须完整重启 DSH 才生效 (客户端半边刷新页面即可)。这个坑真实发生过,所以写在这里。
反馈
预览版就是要挑毛病的:发现任何问题、或想到任何改进意见,都请直接发邮件 —— 杨道泉 yangdaoquan@qq.com
信中麻烦附上:插件版本(面板「更多 → 关于」里可查)、DSH 版本、操作步骤、
以及面板上显示的错误文字或 $DSH_HOME/meeting-room/boot.log。有截图更好。
安装
推荐用 Harness 自己的安装入口(Plugins 页,或 install_bundle / dsh plugin add),
因为它会一次把两件事都做对:写进 profile 的 dependencies,同时把包名追加进
dsh.profile.bundles。
dsh plugin --profile <你的profile名> add dsh-meeting-room
包已发布在 npm(dsh-meeting-room,国内自动走 npmmirror 镜像)。要求 DSH ≥ 0.2.0
(engines.dsh,不满足会被拦住)与 Node ≥ 20。
当前是预发布版,latest 与 preview 两个 tag 都指向它,所以上面这条按包名安装即可;
以后要用预发布线则写 dsh plugin add dsh-meeting-room@preview。
为什么是两件事(手工安装务必看)
插件是否被加载,取决于 profile package.json 里的 dsh.profile.bundles,不是 dependencies。
DSH 的插件管理器就是这么工作的(@deepseek-ai/dsh-plugin-manager 的 reconcile()):
它读取 after.dsh?.profile?.bundles,把新装的包追加进去;而且只有清单里声明了
dsh.bundle 的包才算"profile 层",否则 DSH 会打印一行警告:
dsh: warning: <包名> declares no dsh.bundle — installed as a plain dependency, not a profile layer
只用 pnpm add(或任何只写 dependencies 的方式)装,插件不会被加载。 手工安装请补齐第二步:
// <profile>/package.json
{
"dependencies": { "dsh-meeting-room": "0.1.0-preview.6" },
"dsh": {
"profile": {
"bundles": ["dsh-meeting-room"] // ← 这一项才决定它被加载
}
}
}
装完自检(三件都过才算装好)
# 1) 名字在 bundles 里
grep -n 'dsh-meeting-room' <profile>/package.json # 应出现在 dsh.profile.bundles 中
# 2) 这一层真的进了配置
dsh --profile <你的profile名> --dump-config # 应出现一层 "# == dsh-meeting-room"
# 3) 宿主代码齐全(缺 host-*.js 就是装到了旧包)
ls node_modules/dsh-meeting-room/host-*.js # 应列出 11 个
安装后需要重启 Harness:宿主半边每个进程只加载一次。
安装排错(先看这四条)
-
装完必须重启 Harness。宿主半边每个进程只加载一次,不重启就等于没装。
-
插件目录里只有几个
.js文件 ——...\node_modules\dsh-meeting-room\下只看到index.js、client.js与两个 worker 等少数文件,却没有host-*.js,那么宿主半边会在 加载期就失败(index.js引用了这些兄弟模块),表现是插件整个起不来、也没有$DSH_HOME/meeting-room/boot.log。这是 0.1.0-preview.1 那份包的缺陷:发布清单(
package.json的files)漏掉了多数host-*.js,于是打出来的包里没有宿主代码。已修复:请使用0.1.0-preview.2或更新的版本 (v0.1.0-preview.2标签)。本项目还为此加了发布清单守卫(node smoke.mjs的前几项检查): 它会遍历index.js等文件的相对引用,逐条核对是否被files覆盖 —— 同类问题不会再漏出去。自检一行命令(在插件目录里):
ls node_modules/dsh-meeting-room/host-*.js # 应当列出 11 个 host-*.js -
sherpa-onnx-node的 peer 警告可以忽略。profile 的 pnpm 通常autoInstallPeers: false,所以它只被记录、不被安装;插件的转写走 DSH 自带的语音能力 (ctx.get('speechToText')懒取),缺它只影响转写,其余功能不受影响。 想消除 WARN 可显式安装:pnpm add sherpa-onnx-node@1.13.8 # 在该 profile 目录里 -
插件装上了却完全不生效(Plugins 页里没有它、面板按钮不出现、
dsh --dump-config里 没有这一层)—— 最可能是只装了依赖、没进bundles:pnpm add只写dependencies, 而决定加载的是dsh.profile.bundles(见上面「为什么是两件事」)。 手工把包名加进dsh.profile.bundles后重启即可;用 DSH 自己的安装入口则不会踩到。 -
如果「开始记录」要点两次才录上,说明装的还是旧包(宿主路由缺失时,面板曾把探测失败 当成"就绪",于是第一次点击走了注定失败的直录路径)。0.1.0-preview.3 已修: 面板初始不再谎报就绪、404 不再冒充就绪、准备过程对终态与停滞都有明确出口, 并且会直接告诉你「宿主路由未注册……请更新到 0.1.0-preview.2 或更新版本」。
前提
| 依赖 | 说明 |
|---|---|
| SenseVoice 语音识别 | 由 DSH 安装包提供(sherpa-onnx-node 声明为 peer 依赖,随安装解析;profile 若关闭 autoInstallPeers,缺它只影响转写,其余功能不受影响,见上面「安装排错」第 3 条) |
onnxruntime-node | 随本插件安装,用于手写识别。若安装时 pnpm 提示忽略其构建脚本,Windows x64 上属正常现象,模块仍可加载;其他平台如加载失败,请在该 profile 里 pnpm approve-builds 后重装 |
pinyin-pro | 随本插件安装,用于会议术语的同音订正 |
| Python + python-docx | 仅「导出 Word」需要。优先使用 DSH 运行时自带的 Python;若不含 python-docx,在其中 pip install python-docx。没有 Python 时其余功能不受影响 |
模型在首次使用时联网下载(不在包内),下载后校验大小与 sha256:
- 语音转写模型(SenseVoice):由 DSH 的「语音输入」功能提供;
- 发言人模型(约 28 MB):3D-Speaker CAM++;
- 手写识别模型(约 77 MB):ModelScope DAMO 手写行识别。
自动下载:插件会主动检查这些模型是否就绪。语音模型未就绪时:
- 打开会议面板即显示提示,面板内可直接点击「开始下载模型」,进度实时显示;
- 点「开始记录」会弹出对话框,提示先下载模型(此时录制无意义);
- 若「语音输入」功能尚未启用,点击「立即下载模型」会自动启用语音输入功能并下载模型,全程无需离开面板;
- 下载中关闭面板再打开,会自动续读进度直到就绪。
下载源为 ModelScope 与 GitHub 代理;若全部不可达,对应功能会明确报错,其余功能不受影响。
麦克风权限:录制需要系统允许 DeepSeek Harness 访问麦克风。若点击「开始记录」后未进入录制状态,请到系统「设置 → 隐私 → 麦克风」确认已授权,并确认没有其它应用占用麦克风。
功能
会话与会议
- 一会话、一会议(1:1):新建会话的那一刻就建好它的会议记录;录音、要点、任务、 笔记、文档全部写进同一份,换会话即换会议,彼此独立;
- 子代理 / 团队成员等代理会话不单独建会议,它们的一切活动记到所属根对话的会议里;
- 会话被分支(fork)时,新分支拿到自己的一份新会议;
- 会话销毁时:空会议直接回收,不留空文件;有内容的会议保留为历史记录,可在 「会议管理」里回放或一键打开原会话;
- 录音中的会话不能被静默归档;强制归档会在停止录音(文件补全后保存)之后进行;
- 会议记录是本机产物:归本机会话所有,与登录账号无关,换账号登录不影响任何记录。
会议类型、周期与命名
- 点「开始记录」先确认这场会议:名称、我的角色(主持人 / 参会人 / 旁听三个按钮, 右侧「其他」可自己写角色)、会议类型(通用 / 晨会 / 复盘会 / 例会 / 总结会);
- 选类型会自动把标题填成「类型 · 日期」,也可自己改;不想命名就「暂不命名并开始记录」;
- 周期由类型派生(日 / ISO 周 / 月),供跨会查询使用:晨会查昨天复盘、复盘核销当天晨会、 例会汇总本周、总结会统计本月评分;
- 晨会会自动提示昨日复盘的遗留事项(条数 + 一键派活)。
打开会议与历史会议
- 动作行「打开会议」是带搜索的下拉:按名称 / 日期 / 类型 / 实录关键词即时过滤, 滚动到底自动加载更多,每行两行显示(名称 + 摘要),点名称或整行即打开;
- 查看历史会议时面板是只读的(不会改动历史内容),可「打开原会话」或「返回本会话」;
- 切换前若当前会议有内容:3 秒倒计时自动保存后打开,也可「立即保存并打开」或 「不保存并打开」。
会议实录
- 自动跟随最新发言:新 cue 到达自动滚到底;你往上滚即取消跟随,并出现「回到最新」;
- 多条实录合并为一个任务:勾选若干条 → 「合并为任务」,按顺序用「;」连接成一个草稿任务;
- 点某条实录从该句开始播放;每条右侧「转为任务」;「更多」可复制 SRT / 纯文本 / 给模型订正的请求。
录制与转写
- 麦克风采集 → 停顿切分(0.7 秒静音、最长 12 秒一段)→ 本机 SenseVoice 转写;
- 一句话就是一行:停顿切出来的碎片(「我们下周」/「把方案交上来」)在发言人判出后 自动并成一句,直到句号、问号或感叹号才断开;说话人一变立刻另起一句;
- 发言人识别默认开启:每条讲话标注说话人;会议结束时对整场重聚类,同一声音统一编号; 很短的插话(<1.5 秒)只做「像谁」的匹配、不新建声音,匹配不上就沿用上一位, 避免一声「对」多出一个 S2;
- 发言人命名:把 S1/S2 换成真实姓名;姓名在所有输出(实录、SRT、Markdown、纪要、给模型读的文本)生效,且会终重聚类后跟着声音走。
手写笔记
- 面板的「手写笔记」按钮开合手写板(页签已取消,只剩手写这一种);
- 本地手写识别:离线、约 43 毫秒一行、多行自动分行;
- 圈选 / 轻点选字 / 长按开始圈选;选中后可「识别选中」或直接「转为任务」;
- 识别结果按行各给一个「转为任务」,多行笔记可逐条建任务;
- 「保存为图片」把整页存进会议记录;不录音也能写笔记、识别与转任务。
要点、工作安排与纪要
- 页签里可直接增、改、删要点与任务(类型、内容、负责人、时限、优先级);
- 负责人可从人员名册与已命名发言人里搜索选择;时间可选常用档位或精确日期时间;
- 任务与评分在人工确认前都是草稿,且只有已确认任务会被推送;
- 也可让 Agent 依据实录写:在对话里说一句,它用
meeting_write落库(草稿); - 会议纪要有自己的页签:「生成纪要」出 Markdown、「导出 Word」出
.docx, 两者都会弹出浏览器的下载保存对话框,纪要同时留在会议里可随时打开。
复盘
- 角色在「开始记录」的对话框里选:主持人 / 参会人 / 旁听三个按钮,或「其他」里自己写;
- 「复盘会议」把整场实录发进当前对话,按角色给出关注点,要求模型只依据实录、标注不确定处,产出可存档文档;
- 复盘文档通过工具写进会议记录,在面板「会议纪要」页签里可直接查看。
评分(月度总结会)
- 类型为「总结会」时,面板多出评分页签;
- 可从本月任务统计预填完成率,再逐人打分:课时、完成率、工作质量、学习参与,并写亮点、待改进与依据;
- 总分按权重计算(质量 0.4 / 完成率 0.4 / 学习 0.2),一行一人;
- 可导出 CSV 与 Excel;分数在人工确认前是草稿。
术语与纠错
会议术语每行一条,三种写法:
| 写法 | 作用 |
|---|---|
错词=正确词 | 字面替换 |
陈一鸣 | 同音订正:听到「沉一明」也会改成它 |
*李 | 连单字也按同音订正(单字容易误替换,只在对某个姓氏有把握时用) |
原始转写永远保留:订正只写入 revised,界面、SRT、Markdown、纪要一律「订正优先、原文兜底」,鼠标停在句子上可看原文。
需要按上下文统一人名与错字时:用「更多 → 复制给模型订正」把实录发给模型,或直接让 Agent 用
meeting_revise 写回订正——每次订正都会留下订正对照,原文仍可追溯。
会议术语的编辑入口在「更多 → 会议术语」(内容与本机术语表同一份,边打字边保存)。
「更多 → 关于」显示本机实际安装的版本号、作者与邮箱,并可直接发邮件反馈问题或建议。
模型(会议管理 → 模型)
识别用哪个模型是数据,不是写死的:
-
内置目录就是一直以来的两个固定模型(3D-Speaker CAM++ 声纹、DAMO 手写行识别), 文件、大小、sha256、落盘目录都与以前一致,所以升级不会动你的现有安装;
-
想换更强的模型:下载并安装(边下边校验大小与 sha256,失败不留半个文件)、 从本地文件导入(离线机房、内网镜像、自己训练的模型都行)、启用、删除; 没装好或校验不通过不允许启用 —— 界面不会让你启用一个跑不起来的模型;
-
自己加模型:编辑
$DSH_HOME/meeting-room/models.json(kind/来源与镜像/文件名+大小+sha256/ 目录/语言/说明/许可),页签里会列出来;写坏了会在页面上明确报错,不会被静默忽略; -
会议记录会写下这场用了哪个模型,日后排查识别质量时有据可查;
-
页面分两栏:本地模型(按用途分组:语音识别/发言人声纹/手写识别,录音不出本机) 和云端模型(OpenAI 兼容
/audio/transcriptions,默认关闭,勾选同意才发音频); -
云端一栏顶部是**「识别方式」**,三选一:
方式 行为 只用本地模型(默认) 全程不进网络;即使地址、密钥都填好了也不发请求 云端优先(失败降级本地) 每段先发云端;连续失败 3 次自动回到本地并说明原因 只用云端(不降级) 只发云端;失败时保留本机文字并明确报错,不会悄悄用本机结果冒充云端结果 下面一行「当前生效:…」显示的是已保存的选择(本地/云端/已回退本地),改了下拉框 还没点保存时不会变——避免“以为已经切到云端”的错觉。
-
详细设计(云端接口、识别增强、分批计划)见 MODELS.md。
设置页的五个 tab
「会议管理 → 设置」按功能分成五个 tab,一次只展开一组,互不干扰:
| tab | 管什么 |
|---|---|
| 推送与机器人 | 推送方式(群机器人/工作通知/两者)、钉钉/企微 Webhook、钉钉应用凭据 |
| 实录与切句 | 数字规整开关、最短/最长一段、停顿阈值、静音阈值、每行字数 |
| 发言人识别 | 聚类阈值、结束录音时的全量重判、声纹库(忘记/清空) |
| 评分权重 | 质量/完成率/学习三项权重,合计必须 100% |
| 提炼模板 | 四类会议的一键提炼文案(留空用内置) |
每个 tab 各有自己的保存按钮,切 tab 不会丢掉未保存的输入。
模型(含云端识别)不在这里,见上一节:所有“用哪个模型识别”的决定都在「会议管理 → 模型」 一页里,先本地、后云端,云端默认关闭。
实录怎么写(数字规整)与怎么切句
「会议管理 → 设置 → 实录与切句」:
- 把数字、日期、时间写成平时写的样子(默认开):
二零二六年十月十九号→2026年10月19日、百分之三十→30%、三点半→3点半、三千五百元→3500元。 这是本机规则、不联网;只改"形状",不碰人名与版本号(版本二点零保持原样), 而且识别原文永远保留在实录里,可随时对照。规则可逐条开关(接口里的normalizeRules)。 - 切句参数:最短一段、最长一段、停顿多久算说完、静音判定阈值、每行最多多少字。 录音在浏览器里切段 —— 停顿超过"停顿多久算说完"就结束一段,最短一段之内的停顿不算切点。 最长一段越小,文字上屏越快、请求越多;越大则相反。保存后立刻生效(作用于正在录的会议)。
- 按语义断行:一段录音里常有好几句话(语速快时尤其明显)。宿主在识别后按标点拆行:
先按句号/问号/感叹号/省略号断句;一句仍超过"每行最多多少字"时,退到逗号/顿号/分号处拆;
实在没有标点才硬切。云端识别若返回
segments(Whisper 等模型自带语义分段), 直接采用它的分段与时间,比按字符估时更准。拆分后的每一行仍带原发言人与时间范围, 数字规整、术语订正也会跟着落到每一行。 - 热词说明:本机识别(DSH 的语音能力)不接受热词参数,所以术语表在本机是识别后替换; 只有云端识别(见下节)会把术语表当热词发过去。
发言人识别(阈值、全量重判、声纹库)
「会议管理 → 设置 → 发言人识别」tab:
- 聚类的严格程度:三个预设(人多 0.7/默认 0.6/人少 0.5)加手动值。 人多时调高(宁可多分几个声音,也不把两个人合成一个);人少、或同一人语气变化大时调低。 改阈值会在保存时自动重启识别进程(阈值是启动参数),界面会明说这一次重启;
- 结束录音时全量重判(默认开):停录后的补标覆盖整场实录,替换旧的"只补最后 60 条" —— 长会议的标签不容易断裂。关掉它则退回按上限补标,上限可填;
- 声纹库:给某个声音填上真实姓名时,把它记下来(只存质心向量,不存音频)。
之后同一场或别的会议再听到这个人,「发言人姓名」页会给出
「听起来像 X(相似度)」+「采用这个名字」——建议永不自动写入,必须你确认;
设置页可以逐个「忘记」,也可以清空。库文件是
$DSH_HOME/meeting-room/voices.json。
隐私上:向量从不出现在任何 HTTP 返回里(接口只回姓名与出现次数), 也不会被写进会议记录或工程包(落盘前剥离);「历史会议」视图下不能改姓名, 但可以勾选确认工作安排(见上)。
云端识别(默认关闭)
「会议管理 → 模型」页里的云端模型一栏是云端识别开关(和本地模型同一页,方便直接对比), 顶部「识别方式」决定本地还是云端干活:默认只用本地;选云端优先则失败 3 次自动降级; 选只用云端则失败就报错、不降级。 只有一条规矩:没有你的明确同意,一个请求都不发。
- 不打开:全部在本机识别,插件对外零请求(这条有自动化测试盯着);
- 打开:只把当前这一段音频(不是整场录音)发到你填的地址,走 OpenAI 兼容的
/audio/transcriptions(自建网关、各家云都能接),并在请求里声明不保留; - 设置页摊开显示音频将发往哪个域名,并有「测试连接」(发 0.1 秒静音,不传任何说话内容);
- 密钥只存在本机设置里:界面只显示"已设置"、不回显原文,错误消息与日志里一律脱敏为
sk-***, 会议工程包里也不会有密钥(这三条都有测试断言); - 每分钟 60 次上限、单次 20 秒超时,连续失败 3 次自动回退本机识别并在设置页与面板说明原因 —— 不静默降级,也不反复重试;
- 术语表作为热词随音频一起发过去(名字与行话正是通用模型最容易错的);
- 识别结果会记下用了哪个模型(会议记录里的
asrModel)。
详细设计(声纹云端接口、识别增强、分批计划)见 MODELS.md。
识别不准时按这个顺序调
转写不准、断句不像人话、发言人串号,先把原因分开,不要一起调:
- 先补术语表(「更多 → 会议术语」):人名、地名、产品名、缩写写进去。 本机识别会在识别后按同音订正;云端识别会把它当热词随音频发过去。这一步通常收益最大。
- 断句:默认 0.7 秒停顿 + 最长 12 秒,识别后再按标点拆成「每行最多多少字」的行; 语速快、一行太长时把这个值调小(如 40),语速慢就调大(如 80)。 如果现场停顿多,把「停顿多久算说完」调到 0.9–1.2 秒,句子会更完整(代价是上屏慢一点)。 句子中间的碎片会自动并句,不需要手动合并。
- 发言人:人多时把阈值调高(0.7),人少或同一人语气变化大时调低(0.5); 确认「结束录音时全量重判」是开的;录完再点一次「重新识别发言人」可对整场重判。 叫错名字比不叫名字更糟,所以低于 1.5 秒的插话默认沿用上一位说话人。
- 换更强的模型:「会议管理 → 模型 → 云端模型」里勾选同意,填 OpenAI 兼容地址与密钥,例如:
baseUrl=https://api.openai.com/v1、model=whisper-1(或gpt-4o-transcribe);- 国内网关:
baseUrl=https://api.siliconflow.cn/v1、model=FunAudioLLM/SenseVoiceSmall(以服务商文档为准,接口都是POST {baseUrl}/audio/transcriptions); - 自建 faster-whisper / FunASR 网关同样可用,只要兼容这个接口。
只发当前段音频,请求声明不保留;术语表作为
prompt发过去;失败 3 次自动回本机。 会议记录会写下asrModel,事后能对上是哪个模型出的字。
- 还不行:把某条实录用「更多 → 复制给模型订正」交给 Agent,
再用
meeting_revise写回;订正与原文并存,随时可对照。
会议记录助手技能(meeting-scribe)
插件装好后,技能列表里会多一个 meeting-scribe。它把「边开会边整理」串成一条流程:
- 直接说「开始记录」,或者不带任何参数调用 meeting-scribe,就可以开始,不需要先起名字:
meeting_session {action:"create"}自己建会(用户说了类型才设类型,周期自动推导);meeting_session {action:"record"}请求面板自动开始录音——麦克风仍在浏览器里, 面板几秒内自己开(第一次会询问权限);被浏览器拦住时面板会说明原因;- 建一个 5 分钟循环提醒,每轮用
meeting_read读新增实录, 用meeting_write把要点(决定/信息/风险/待定)与工作安排(负责人、时限、原话) 写回会议,都是草稿,等你在面板确认; - 第一轮(约 5 分钟)按前 5 分钟内容补会议名称(6–16 字):只补空名或 「类型 · 日期」占位,用户起的名字永远不改;
- 每轮先查
meeting_session的recording:录音一停就补齐剩余内容、 写一份会议小结、自动删除那条提醒,并告诉你共整理了多少条。
record只是请求:它不绕过浏览器权限,也不会替你点停止;你停录后它会在下一轮(≤5 分钟)收尾。- 会议名称来不及起时不用停:先录,第一轮会自动补一个能认出来的名字。
- 开始页的引导列表(工作区文件 / 新终端 / 浏览器那一列)里有 「开始会议」: 一点就开录并打开会议面板,Agent 同时开始整理。
- 起名框里标题可以留空:点「留空并开始(稍后自动命名)」,头 5 分钟的内容会替你起标题。
- 直接点面板的「开始记录」也一样:录音开始后,面板会替你把「按 meeting-scribe 开始工作」 这层意思交给 Agent(和你在聊天框里说一句等价),Agent 随即开始整理,不需要再打字。
- 不想用技能时,直接在对话里让 Agent 整理,效果一样。
保存为文件与导入(会议工程包)
- 「更多 → 保存为文件」→ 弹出浏览器保存对话框,把这场会议打成一个 zip:
manifest.json(格式与版本)、meeting.json(完整记录:实录、要点、任务、评分、 发言人标签与姓名、文档索引)、audio/<录音>、files/<纪要等产出>;
- 在「会议管理 → 记录」里点「导入会议」选择该 zip,即可导入本机:
- 导入的是一场新会议(不覆盖已有记录、不挂在任何会话上),内容原样保留,
重名文件自动改名,来源会议记在
importedFrom; - 因此可以把一场会议作为工程带到另一台 DSH 上打开。
- 导入的是一场新会议(不覆盖已有记录、不挂在任何会话上),内容原样保留,
重名文件自动改名,来源会议记在
- 归档格式由
host-package.js用 Node 自带 zlib 直接按 ZIP 规范读写,不引入第三方依赖, 任何常规解压工具都能打开。
推送到钉钉 / 企业微信
在左侧「会议管理」页配置:
- 机器人设置 tab:群机器人 webhook、推送方式(群机器人 / 工作通知 / 两者都发)、钉钉企业内部应用(AppKey / AppSecret / AgentId);
- 人员管理 tab:名册(姓名 / 手机号 / 钉钉 UserId),可手工维护,也可从钉钉同步——先「读取部门」,再选某个科室或全部组织导入。
推送时按负责人分组、每人一条消息:群机器人用手机号 @人,工作通知私发给该负责人的 UserId。
通讯录同步与工作通知都需要企业内部应用具备相应权限;
user/list返回手机号还需字段权限,没有该权限时只同步到姓名与 UserId。
数据位置
| 位置 | 内容 |
|---|---|
$DSH_HOME/meetings/ | 录音 WAV、导出的 SRT / Markdown / Word、手写笔记 PNG |
$DSH_HOME/meeting-room/meetings/ | 会议结构化记录(要点、任务、笔记、订正、发言人姓名),重启后自动恢复 |
$DSH_HOME/meeting-room/webhooks.json | 机器人地址、企业内部应用凭据、人员名册 |
$DSH_HOME/speech-to-text/speakers/ | 发言人模型 |
$DSH_HOME/handwriting/ | 手写识别模型 |
已知限制
- 转写是请求/响应式的,不是流式:文字在说话人停顿后成段出现(最长 5 秒一段),没有逐字上屏;
- 一条 cue 若跨说话人,只记主要的那一位;
- 手写识别是整行模型:请横向书写、字距不要太挤,连笔过多会影响准确率;
- 录音只写 WAV;会议结构化记录不自动清理,需自行管理磁盘。
目录结构
| 路径 | 作用 |
|---|---|
index.js | 宿主半边:事件接线(会话↔会议生命周期、归档准入)、路由注册、工具注册(meeting_read / meeting_write / meeting_note_write / meeting_revise / meeting_save_document);业务逻辑在 host-*.js |
client.js | 浏览器半边:采集、会话右侧面板、会议管理页 |
speaker-worker.js | 子进程:说话人向量提取与画廊 |
handwriting-worker.js | 子进程:本地手写识别 |
host-package.js | 会议工程包的打包与导入(ZIP 读写只用 Node 自带 zlib) |
smoke.mjs | 发布前自动化冒烟:node smoke.mjs |
TESTING.md | 发布前系统化测试清单(自动化 + 手动 A–Q 组) |
minutes-docx.py | 用 python-docx 把纪要渲染成 Word |
cordis.patch.yml | 组合包 patch,把宿主行插进 profile 层栈 |
tools/recognize-note.mjs | 开发工具:对一张手写 PNG 直接跑识别 |
制作
本插件由博尔塔拉融媒体中心媒体传播与认知重点实验室制作。
- 制作人:杨道泉
- 邮箱:yangdaoquan@qq.com
许可
MIT,全文见 LICENSE:
Copyright (c) 2026 博尔塔拉融媒体中心媒体传播与认知重点实验室(杨道泉)
也就是说:可以自由使用、修改、再分发(含商用与机构内部部署),只需保留版权与许可声明; 软件按"现状"提供,不含担保。
本插件调用的第三方组件与运行时下载的模型(onnxruntime-node、pinyin-pro、sherpa-onnx-node、 3D-Speaker CAM++ 声纹模型、DAMO 手写模型等)各自适用其作者的条款,来源与校验值见 THIRD-PARTY-NOTICES.md。
Comments
Loading…
Similar plugins
by maoyuching
Doubao-style voice chat for DSH: press-and-hold mic in the composer converts speech to text and auto-sends, and AI replies are read aloud. Optional LLM condensing (long replies summarized into short s
★ 3
↓ 649/wk
MIT
JavaScript
Sep 25, 2026
dsh plugin --profile web add dsh-voice-chatby liaowenqi123
DSH 多 Agent「会议室」插件:会议室会籍 + fork 上下文入场 + 主持人控场多轮讨论 + 会后各自压缩纪要并回到工作区继续干活。基于 dsh-std 元协议(Community v0.15)。
★ 1
MIT
TypeScript
Sep 24, 2026
dsh plugin --profile web add dsh-meeting-coordinatorby theskywilldawn
星辰会议室:让分散在不同会话里的 AI 坐进同一间房开会 —— 主持人开房定题,按序邀请成员逐一发言,轮次用满即收会出纪要。 LittleStar Meeting Room: bring AI sessions that cannot see each other into one room — one host sets the topic, members speak in turn, and the meeting ends with written minutes.
★ 1
MIT
JavaScript
Oct 14, 2026
dsh plugin --profile web add dsh-littlestar-meetingby huangfuren
Conversation outline panel for the DSH web surface: user questions as root nodes (index, time, tool count and text volume per turn) with the Markdown headings of assistant replies hanging beneath them
★ 0
MIT
JavaScript
Oct 9, 2026
dsh plugin --profile web add dsh-conversationDSH 工作区长期记忆:索引式简报省 token、轮末相关召回、memory 工具按需读写、版本链与体检、轮次结束自动提炼(可草稿审批),设置面板里可视化查看与管理。
★ 0
dsh plugin --profile web add @bangbang-03/dsh-memoryby supersyh-sss
Voice assistant for dsh web: say the wake phrase (e.g. "小鲸") to activate hands-free dictation — what you say is transcribed and typed into the chat box automatically. Supports spoken edit commands (se
★ 3
↓ 202/wk
MIT
JavaScript
Sep 2, 2026
dsh plugin --profile web add dsh-voice-assistant