dsh-plugin-meeting
A DeepSeek Harness plugin that listens to any meeting playing through the default Windows render device, transcribes it locally with SenseVoice, has the configured DSH model proofread each turn in the meeting's domain and optionally translate it, keeps a rolling summary, and answers questions from the meeting with optional web lookup.
Audio never leaves the machine. Only recognized text reaches the model you already configured in DSH.
Features
- Native WASAPI loopback capture of the default render endpoint — no virtual audio cable, no screen-share picker, no browser media permissions.
- Offline SenseVoice recognition through DSH's optional Voice Input bundle.
- Domain-aware LLM correction (medical, technology, gaming, finance, legal, education, manufacturing, marketing, research, custom) using the meeting topic and an optional glossary.
- Meeting agenda upload/paste/drag-and-drop (
txt,md,csv,json), Office documents (PDF,Word,PPT,Excel, ODF), and images (png,jpg,webp,bmp): Word/PPT/ODF text is read directly; PDF, legacy Office and images are rendered locally with DSH's LibreOffice kit and read with Windows OCR. Nothing is parsed on upload: clicking Apply sends the text to the configured DSH model, which returns time / speaker / unit / topic columns plus the meeting topic and domain (merged rows and OCR noise included). Click the agenda bar to pin the current item, and click a speaker chip to reassign that turn. Time ranges, speaker names and organizations become the current-item indicator, speaker-name suggestions, and reference context for correction, minutes and Q&A. - A durable my name + role + meeting domain profile (set in the panel
settings, stored at
~/.dsh/meetings/profile.json): it never depends on the current meeting or the app session. - My speech drafts: after an agenda upload, only when the user's own name appears in the agenda, the model writes the content of the user's own sessions — no generic host script, nothing for other speakers. The writing instructions are editable and the draft can be regenerated at any time; the Markdown result survives page reloads and is stored with the meeting.
- Cue cards (串词), just in time: transitions are not written up front. While the meeting is being listened to, two minutes before one of the user's moments the plugin writes that one card from the agenda and what has been recognized so far. The role decides its shape: a host gets an opening, a per-session transition that summarises the session that just ended and introduces the next one, and a closing; a speaker or panelist only gets "thanks for the introduction". A card can also be requested from the panel for any of the user's agenda items.
- Local CAM++ voice clustering into 发言人 1/2/3 (about 27 MB): consecutive turns by one speaker are merged into one continuous block; a one-minute pass re-corrects the whole conversation to join lines split by the 10-second ASR window. Labels are suggestions, not identity recognition, and can be renamed with an organization.
- Optional microphone capture labelled 自己 (yourself), separate from the meeting speakers. Headphones are recommended to avoid echo duplicates.
- Per-line translation is off by default; English, Simplified Chinese, Japanese, or Korean can be enabled per meeting.
- A right-hand sidebar: opening the panel shifts the DSH shell left, and the header icon breathes green while listening.
- Raw ASR text kept behind a disclosure, with retry for failed corrections.
- Minutes on demand (conclusion / discussion / decisions / action items / risks); nothing is generated on a timer, and the agenda is included in the prompt and a final version when the meeting ends.
- Q&A grounded in the minutes and transcript, with
[mm:ss]citations and optionalctx.websearch sources. - On-disk history under
~/.dsh/meetings/<id>/.
My speech drafts (讲词 / 串词)
- Open settings → 我的信息, enter 我的姓名 (and optionally the organization) and save. The profile is stored on this machine and survives restarts.
- Upload or paste the meeting agenda. If at least one agenda speaker matches
the saved name, the plugin automatically writes:
- 我的讲词 — for the agenda slots that belong to the user;
- 我的串词 — the transitions the user has to say around those slots.
- Open the 讲词串词 tab to read or regenerate the draft. The textarea in 生成提示词 is the writing instruction sent to the model; edit it and press 用这个提示词重新生成. Leave it empty to use the built-in default.
Nothing is generated when no name is saved, or when the saved name does not appear in the agenda: the draft is for the user only, never a generic script, and an unmatched name must not spend a model call.
First open of the day (setup flow)
When there is no meeting record for today yet, opening the panel starts a three-step setup: name / organization / role, agenda upload (txt, md, csv, json, PDF, Word, PPT, Excel, ODF, screenshots); the pages are rendered to images and handed to the model together with the extracted text, and the model decides whether to read the text, look at the pages, or both) parsed into a structured agenda (and into the meeting topic, domain and the user's role), then confirmation in an editable table — start/end time, speaker, organization and topic can all be changed, rows added or removed, and microphone capture is a checkbox (on by default).
As soon as that is confirmed, a host — or whoever owns the first agenda slot — gets their first cue card (opening / thanks) immediately, without starting the meeting. The same structured table is available in the settings panel, and "重新初始化会议" re-runs the flow.
Requirements
- Windows 10/11 x64.
- DSH 0.2.1+ with the official Voice Input bundle enabled
(
@deepseek-ai/dsh-experimental-voice-input-bundle). - A configured DSH default model and credentials.
- Optional: a configured DSH web-search provider for Q&A lookup.
- The local SenseVoice model (about 240 MB) and, if speaker labels are on, the CAM++ speaker-embedding model (about 27 MB) are downloaded on first use.
Install
dsh plugin --profile desktop add D:\path\to\dsh-plugin-meeting
Then enable Voice Input and Meeting Assistant in DSH's plugin manager. Open the meeting assistant from the Session header, open settings, and click Download and prepare model (about 240 MB) the first time.
See README.zh.md for the full Chinese guide, architecture, privacy notes, and troubleshooting.
Architecture
system audio -> WASAPI loopback (native helper) -> downmix/resample 16 kHz
-> energy VAD utterances -> CAM++ speaker embedding + online clustering
-> SenseVoice (local) -> DSH LLM (domain correction + translation) -> SSE
-> rolling summary (LLM) and Q&A (minutes + transcript + optional web search)
agenda (txt/md/csv/json) -> current time slot + speaker/org reference
agenda + my-name profile -> only slots whose speaker matches my name
-> LLM (editable writing prompt) -> Markdown 讲词/串词
-> stored with the meeting, or as a pending draft before it starts
The native helper is native/LoopbackCapture.cs (C# / .NET Framework 4.x). A
prebuilt native/LoopbackCapture.exe ships with the package; rebuild with
node scripts/build-native.mjs.
Development
npm run check
npm run selftest
node scripts/build-native.mjs --check
client.js is loaded as a classic script through DSH's module loader; reload the
page after editing it. Host modules are reloaded by DSH HMR.
License
MIT
No comments yet. Be the first to write one.