seminar-copilot-dsh-plugin
Verifiedseminar-copilot-dsh-plugin · v0.3.1 · MIT · Web UI
DeepSeek Harness Web GUI plugin for Seminar Copilot: one-click local seminar recording, ASR backend settings (local MLX Whisper / Aliyun Bailian), auto-start of the dev stack.
Install
dsh plugin add seminar-copilot-dsh-plugin Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Creators
Readme
seminar-copilot-dsh-plugin
把 Seminar Copilot 接入 DeepSeek Harness Web GUI 的外部动态插件(宿主侧 + 客户端)。
功能
- 在右侧栏「开始」引导页的「新建终端」下方新增「会议录音」入口(guide order 30)。
- 点击后打开嵌入
http://127.0.0.1:5173(Vite dev server)的侧栏 tab。 - 自动启动:服务未运行时,客户端请求插件宿主侧的
127.0.0.1:8766控制端点, 由 DSH 主进程拉起scripts/dev.sh(FastAPI 8765 + Vite 5173),页面显示启动 进度并轮询就绪后自动加载 iframe;控制端点不可用时回退为手动命令提示。 - 识别设置面板:在线视图右上角「识别设置」可在本地 Whisper 与阿里云百炼
两种 ASR 后端间切换,填写 DashScope API Key、识别模型与语言,支持
「保存并重启」。配置保存于
~/.dsh/seminar-copilot/config.json(0600), 由宿主在拉起 dev.sh 时以进程级环境变量注入——不注册全局环境变量, 不写 shell 配置;API Key 在任何接口中只返回掩码。 keepMounted: true:录音中的 iframe 在切换 tab / 会话 / 折叠侧栏时保持挂载。
安装
前提:已克隆 seminar-copilot 仓库并完成其前后端依赖安装(见仓库 README)。
从 npm 安装到 DSH web profile:
pnpm dsh plugin --profile web add seminar-copilot-dsh-plugin
首次使用打开「会议录音」tab → 右上角「识别设置」,把「Seminar Copilot 仓库路径」 改为你机器上仓库克隆的绝对路径,保存即可。之后打开 tab 会自动拉起服务。
本地开发(file: 依赖是拷贝而非符号链接,修改后需重新同步):
pnpm dsh plugin --profile web add file:/path/to/seminar-copilot/dsh-plugin
cp dsh-plugin/{index.js,client.js,package.json} ~/.dsh/profiles/web/node_modules/seminar-copilot-dsh-plugin/
新增/移除插件包或宿主侧(index.js)变更需重启 Web GUI(dsh-web.sh restart)生效。
配置项(~/.dsh/seminar-copilot/config.json)
| 键 | 取值 | 说明 |
|---|---|---|
asrBackend |
mlx(默认)/ bailian |
识别后端 |
dashscopeApiKey |
字符串 | 百炼模式的 DashScope Key,仅存本地、掩码展示 |
bailianModel |
paraformer-v2(默认) |
百炼识别模型 |
asrLanguage |
auto / zh / en |
识别语言 |
repoPath |
绝对路径 | seminar-copilot 仓库克隆位置 |
注入后端进程的环境变量(仅当对应功能启用时):SEMINAR_ASR_BACKEND 始终注入;
百炼模式额外注入 DASHSCOPE_API_KEY、SEMINAR_BAILIAN_MODEL、
SEMINAR_ASR_LANGUAGE(非 auto 时)。进程环境变量优先于仓库 .env.local
(dev.sh 自 0.3.0 起按「补默认」方式加载该文件)。
宿主侧控制端点(127.0.0.1:8766,仅 loopback)
GET /status→{ backend, frontend, managed, config }:前后端健康状态与公开配置。POST /start→{ result }:幂等启动;已在运行的外部实例直接收养,不重复拉起。POST /stop/POST /restart:停止 / 重启插件拉起的实例;外部启动的实例返回 409。GET /config→ 当前配置(API Key 只返回掩码)。POST /config→ 更新配置;dashscopeApiKey缺省/空串=保持不变,null=清除。
dev.sh 以独立进程组 detached 启动,日志写入 /tmp/seminar-copilot-dev.log;
DSH 宿主退出时按进程组 SIGTERM 回收自己拉起的进程。
结构
package.json:声明main(宿主侧)与exports["./client"](浏览器侧), 以及dsh.bundle.patch/dsh.client.platform。cordis.patch.yml:向 cordis 插件树插入一行(idseminar-copilot)。index.js:宿主侧——控制端点 + 配置持久化与进程级注入 + 按需拉起 dev.sh。client.js:浏览器侧模块,经window.__ModuleLoader__.load注册, React 与@deepseek-ai/dsh-client-ui-primitives由宿主外部化提供。
约束
- 后端 CORS 仅允许 5173 源,因此服务健康探测使用
mode: "no-cors"(不透明响应); 8766 控制端点是插件自己的服务,主动设置Access-Control-Allow-Origin: *。 - iframe 需要
allow="microphone";5173 localhost 属于安全上下文,麦克风可用。 - 百炼模式下录音片段会上传到阿里云识别,请在设置面板确认隐私提示后再启用。
- 8766 仅监听 loopback、无任何鉴权:本机任何进程都能触发启动与改配置。
这与本地优先的定位一致,但不要把 DSH 暴露到局域网(
--host 0.0.0.0)。