Skip to content

seminar-copilot-dsh-plugin

Verified

seminar-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 插件树插入一行(id seminar-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)。