@flowingspring/dsh-voco 0.3.11 → 0.3.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +156 -0
- package/README.md +93 -45
- package/cordis.patch.yml +26 -26
- package/package.json +68 -87
- package/{lib → packages/voice-app/lib}/client.js +39 -39
- package/README.i18n.yaml +0 -6
- package/README.zh.md +0 -108
- /package/{lib → packages/voice-app/lib}/client.js.map +0 -0
- /package/{lib → packages/voice-app/lib}/index.js +0 -0
- /package/{lib → packages/voice-app/lib}/invariant.js +0 -0
- /package/{lib → packages/voice-app/lib}/plugins/llm-tool-call-compat.js +0 -0
- /package/{lib → packages/voice-app/lib}/plugins/voice-assistant.js +0 -0
- /package/{lib → packages/voice-app/lib}/plugins/voice-local.js +0 -0
- /package/{lib → packages/voice-app/lib}/plugins/voice-web.js +0 -0
- /package/{lib → packages/voice-app/lib}/plugins/voice.js +0 -0
- /package/{lib → packages/voice-app/lib}/types/index.d.ts +0 -0
- /package/{lib → packages/voice-app/lib}/types/invariant.d.ts +0 -0
package/README.en.md
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# dsh-voco
|
|
2
|
+
|
|
3
|
+
English | [中文](README.md)
|
|
4
|
+
|
|
5
|
+
`dsh-voco` is a voice conversation plugin for the DeepSeek Harness (DSH) Web UI. Speak a request naturally and work that needs project tools is delegated to a background Agent. The complete task report stays in the DSH task UI while Voice speaks a concise result.
|
|
6
|
+
|
|
7
|
+
The plugin uses SiliconFlow cloud speech recognition and Edge TTS. It is not a standalone browser extension and does not require a separate background service.
|
|
8
|
+
|
|
9
|
+
## Prerequisites
|
|
10
|
+
|
|
11
|
+
- Node.js 22.19 or newer (used by the DSH CLI).
|
|
12
|
+
- A DSH Web profile that can start successfully.
|
|
13
|
+
- A SiliconFlow API key. Voco uses the currently free [`XingChenAGI/XingChenASR-V3.2-Ultra`](https://cloud.siliconflow.cn/models?target=XingChenAGI/XingChenASR-V3.2-Ultra) speech-to-text model, but every user still needs their own key. Current availability and pricing are governed by the SiliconFlow model page.
|
|
14
|
+
- A modern browser with microphone support.
|
|
15
|
+
|
|
16
|
+
Install the DSH CLI first if it is not already available:
|
|
17
|
+
|
|
18
|
+
```powershell
|
|
19
|
+
npm install -g @deepseek-ai/dsh
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Option 1: Install from npm (recommended)
|
|
23
|
+
|
|
24
|
+
This is the intended path for regular users. It installs the one public plugin package without downloading or editing this repository:
|
|
25
|
+
|
|
26
|
+
```powershell
|
|
27
|
+
dsh plugin --profile web add @flowingspring/dsh-voco
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Start the DSH Web UI:
|
|
31
|
+
|
|
32
|
+
```powershell
|
|
33
|
+
dsh web
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Open the local URL printed by DSH, click the microphone in a session, and allow microphone access in the browser.
|
|
37
|
+
|
|
38
|
+
## Option 2: Install from a GitHub Release
|
|
39
|
+
|
|
40
|
+
GitHub Releases provide the same prebuilt plugin package as npm. No source checkout or pnpm development environment is required:
|
|
41
|
+
|
|
42
|
+
```powershell
|
|
43
|
+
dsh plugin --profile web add https://github.com/lgquan/dsh-voco/releases/download/v0.3.12/flowingspring-dsh-voco-0.3.12.tgz
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Release page: [v0.3.12](https://github.com/lgquan/dsh-voco/releases/tag/v0.3.12)
|
|
47
|
+
|
|
48
|
+
Whichever installation method you choose, start the Web UI through DSH:
|
|
49
|
+
|
|
50
|
+
```powershell
|
|
51
|
+
dsh web
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Configure the SiliconFlow API key
|
|
55
|
+
|
|
56
|
+
The only required secret is `SILICONFLOW_API_KEY`. Get your own key from the [SiliconFlow console](https://siliconflow.cn/). Speech-to-text uses SiliconFlow's currently free [`XingChenAGI/XingChenASR-V3.2-Ultra`](https://cloud.siliconflow.cn/models?target=XingChenAGI/XingChenASR-V3.2-Ultra) model; current availability and pricing are governed by the model page. Never put a real key in source code, commit it to GitHub, or share it with other users.
|
|
57
|
+
|
|
58
|
+
### Recommended: DSH settings
|
|
59
|
+
|
|
60
|
+
After starting DSH, open **Settings → Plugins → Plugin configuration**, expand **Voice Assistant (Voco)**, enter the API key, and save. The key is written to the DSH credentials store rather than the regular settings file, and the UI never reads the secret back. Start or reconnect Voice after saving.
|
|
61
|
+
|
|
62
|
+
Environment variables and `.env` remain supported for automation and existing deployments.
|
|
63
|
+
|
|
64
|
+
### Temporary: current PowerShell session
|
|
65
|
+
|
|
66
|
+
Set the variable in the same terminal that starts DSH:
|
|
67
|
+
|
|
68
|
+
```powershell
|
|
69
|
+
$env:SILICONFLOW_API_KEY = "sk-your-api-key"
|
|
70
|
+
dsh web
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
The value disappears when that terminal closes.
|
|
74
|
+
|
|
75
|
+
### Persistent: DSH user environment file
|
|
76
|
+
|
|
77
|
+
Create `.env` in the DSH user directory. On Windows the default path is `%USERPROFILE%\.dsh\.env` (or `$DSH_HOME/.env` when `DSH_HOME` is set):
|
|
78
|
+
|
|
79
|
+
```dotenv
|
|
80
|
+
SILICONFLOW_API_KEY=sk-your-api-key
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
You may also create `.env` in the directory from which you run `dsh web`. The DSH credentials service reads these environment layers, and the plugin resolves `SILICONFLOW_API_KEY` through that service for each new voice connection. Do not enter the npm installation directory or edit files under `node_modules`.
|
|
84
|
+
|
|
85
|
+
An already inherited environment variable takes precedence, followed by the DSH credentials store and then `.env` fallbacks. Restart `dsh web` after changing `.env`, because the environment is loaded once per process.
|
|
86
|
+
|
|
87
|
+
## After installation
|
|
88
|
+
|
|
89
|
+
1. Run `dsh web` and open the DSH Web UI.
|
|
90
|
+
2. Create or select a session.
|
|
91
|
+
3. Click the microphone and grant browser permission.
|
|
92
|
+
4. Speak naturally. About 1.5 seconds of continuous silence ends an utterance and sends it to cloud recognition. You can also hold the microphone for about 400 ms to use push-to-talk; release it to submit only that utterance. A disconnected session stays muted after a push-to-talk submission so its spoken reply can arrive.
|
|
93
|
+
5. Ordinary conversation is handled in the frontend; work that needs project files, Shell, or other tools is delegated to the background Agent.
|
|
94
|
+
|
|
95
|
+
Voice sessions support interruption, reconnects, and history restoration. Each Voice Session keeps its own background Agent Session binding. When the context rotation threshold is reached, Voco creates a new child session for later tasks while keeping it under the same Voice Session.
|
|
96
|
+
|
|
97
|
+
## Update
|
|
98
|
+
|
|
99
|
+
Update from npm:
|
|
100
|
+
|
|
101
|
+
```powershell
|
|
102
|
+
dsh plugin --profile web add @flowingspring/dsh-voco
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
You can also install a specific GitHub Release `.tgz` URL. Restart `dsh web` after updating.
|
|
106
|
+
|
|
107
|
+
## Uninstall
|
|
108
|
+
|
|
109
|
+
```powershell
|
|
110
|
+
dsh plugin --profile web remove @flowingspring/dsh-voco
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Uninstalling the plugin does not remove a saved API key. To remove it completely, delete `SILICONFLOW_API_KEY` from `refs` in `%USERPROFILE%\.dsh\.credentials.yaml` (or `$DSH_HOME/.credentials.yaml` when configured), and remove the same name from the process environment or any `.env` file.
|
|
114
|
+
|
|
115
|
+
Uninstalling the plugin does not delete existing DSH sessions or Voice history. Confirm the relevant data directory before removing any stored data manually.
|
|
116
|
+
|
|
117
|
+
## Highlights
|
|
118
|
+
|
|
119
|
+
- SiliconFlow's free [`XingChenAGI/XingChenASR-V3.2-Ultra`](https://cloud.siliconflow.cn/models?target=XingChenAGI/XingChenASR-V3.2-Ultra) cloud speech-to-text model.
|
|
120
|
+
- Edge TTS `zh-CN-XiaoxiaoNeural` voice output.
|
|
121
|
+
- Voice, typed messages, and background Agent tasks in one DSH session.
|
|
122
|
+
- Immediate acknowledgement before delegation; full reports remain in the task UI.
|
|
123
|
+
- Voice binding survives navigation, reconnects, and DSH restarts.
|
|
124
|
+
- Optional integration with `@flowingspring/dsh-workspace-memory` for Workspace memory.
|
|
125
|
+
|
|
126
|
+
## Troubleshooting
|
|
127
|
+
|
|
128
|
+
### Missing API key when clicking the microphone
|
|
129
|
+
|
|
130
|
+
Make sure the DSH process can read `SILICONFLOW_API_KEY`. After creating or changing `.env`, stop the old DSH process and run `dsh web` again.
|
|
131
|
+
|
|
132
|
+
### No microphone or audio output
|
|
133
|
+
|
|
134
|
+
Check browser microphone permission and the system input device. Use the page served by `dsh web`; do not open an HTML file directly.
|
|
135
|
+
|
|
136
|
+
### Recognition fails or takes a long time
|
|
137
|
+
|
|
138
|
+
Speech recognition needs network access to SiliconFlow. Check connectivity, key validity, account quota, and the latency of the selected model and provider.
|
|
139
|
+
|
|
140
|
+
### Tuning silence detection
|
|
141
|
+
|
|
142
|
+
Advanced settings live in the plugin profile's `cordis.patch.yml`, including `silenceDurationMs`, `speechThreshold`, `minSpeechDurationMs`, and `maxUtteranceMs`. Most users can keep the defaults.
|
|
143
|
+
|
|
144
|
+
## Optional Workspace Memory
|
|
145
|
+
|
|
146
|
+
Workspace Memory is not required by Voco. Install `@flowingspring/dsh-workspace-memory` separately when needed; Voco also works by itself. See that project's documentation for its own installation and configuration.
|
|
147
|
+
|
|
148
|
+
## Development and support
|
|
149
|
+
|
|
150
|
+
- Source and issues: [GitHub](https://github.com/lgquan/dsh-voco)
|
|
151
|
+
- npm package: [`@flowingspring/dsh-voco`](https://www.npmjs.com/package/@flowingspring/dsh-voco)
|
|
152
|
+
- Architecture notes: [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md)
|
|
153
|
+
|
|
154
|
+
## License
|
|
155
|
+
|
|
156
|
+
[MIT](LICENSE)
|
package/README.md
CHANGED
|
@@ -1,108 +1,156 @@
|
|
|
1
|
-
#
|
|
1
|
+
# dsh-voco
|
|
2
2
|
|
|
3
|
-
[
|
|
4
|
-
[](https://github.com/lgquan/dsh-voco/blob/master/LICENSE)
|
|
3
|
+
[English](README.en.md) | 中文
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
`dsh-voco` 是面向 DeepSeek Harness(DSH)Web UI 的语音对话插件。它让你用自然语言说出需求,并将需要项目工具的工作委派给后台 Agent;完整任务报告仍保留在 DSH 会话中,语音只播报简洁结果。
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
插件使用硅基流动云端语音识别和 Edge TTS。它不是独立的浏览器扩展,也不需要单独运行一个后台服务。
|
|
9
8
|
|
|
10
|
-
##
|
|
9
|
+
## 安装前准备
|
|
11
10
|
|
|
12
|
-
|
|
11
|
+
- Node.js 22.19 或更高版本(安装 DSH CLI 时使用)。
|
|
12
|
+
- 一个已经可以运行的 DSH Web profile。
|
|
13
|
+
- 一个硅基流动 API Key。插件使用当前免费的语音转文字模型 [`XingChenAGI/XingChenASR-V3.2-Ultra`](https://cloud.siliconflow.cn/models?target=XingChenAGI/XingChenASR-V3.2-Ultra),但仍需用户自行申请 Key;免费状态和使用规则以硅基流动模型页面为准。
|
|
14
|
+
- 支持麦克风的现代浏览器。
|
|
13
15
|
|
|
14
|
-
|
|
16
|
+
如果还没有 DSH CLI,先安装:
|
|
15
17
|
|
|
16
18
|
```powershell
|
|
17
19
|
npm install -g @deepseek-ai/dsh
|
|
18
20
|
```
|
|
19
21
|
|
|
20
|
-
|
|
22
|
+
## 方式一:从 npm 安装(推荐)
|
|
23
|
+
|
|
24
|
+
这是普通用户最简单的安装方式。只安装公开的单一插件包,不需要下载或修改本仓库源码:
|
|
21
25
|
|
|
22
26
|
```powershell
|
|
23
27
|
dsh plugin --profile web add @flowingspring/dsh-voco
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
安装完成后启动 DSH Web:
|
|
31
|
+
|
|
32
|
+
```powershell
|
|
24
33
|
dsh web
|
|
25
34
|
```
|
|
26
35
|
|
|
27
|
-
|
|
36
|
+
打开终端显示的本地地址,在会话中点击麦克风并允许浏览器使用麦克风即可。
|
|
37
|
+
|
|
38
|
+
## 方式二:通过 GitHub Release 安装
|
|
28
39
|
|
|
29
|
-
GitHub
|
|
40
|
+
GitHub Release 提供和 npm 相同的预构建插件包,不需要 clone 源码或准备 pnpm 开发环境:
|
|
30
41
|
|
|
31
42
|
```powershell
|
|
32
|
-
dsh plugin --profile web add https://github.com/lgquan/dsh-voco/releases/download/v0.3.
|
|
43
|
+
dsh plugin --profile web add https://github.com/lgquan/dsh-voco/releases/download/v0.3.12/flowingspring-dsh-voco-0.3.12.tgz
|
|
33
44
|
```
|
|
34
45
|
|
|
35
|
-
Release
|
|
46
|
+
Release 页面:[v0.3.12](https://github.com/lgquan/dsh-voco/releases/tag/v0.3.12)
|
|
47
|
+
|
|
48
|
+
无论选择哪种安装方式,最后都通过 DSH 启动 Web UI:
|
|
49
|
+
|
|
50
|
+
```powershell
|
|
51
|
+
dsh web
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## 配置硅基流动 API Key
|
|
55
|
+
|
|
56
|
+
插件只需要一个密钥:`SILICONFLOW_API_KEY`。请先在[硅基流动控制台](https://siliconflow.cn/)申请自己的 API Key。语音转文字使用硅基流动当前免费的 [`XingChenAGI/XingChenASR-V3.2-Ultra`](https://cloud.siliconflow.cn/models?target=XingChenAGI/XingChenASR-V3.2-Ultra);免费状态和使用规则以后续模型页面为准。不要把真实密钥写进源码、提交到 GitHub,或发送给其他人。
|
|
36
57
|
|
|
37
|
-
|
|
58
|
+
### 推荐配置:DSH 设置页面
|
|
38
59
|
|
|
39
|
-
|
|
60
|
+
启动 DSH 后打开“设置 → 插件 → 插件配置”,展开“语音助手(Voco)”,填写 API Key 并保存。密钥写入 DSH 的凭据库,不会写进普通设置文件,界面也不会读回密钥明文。保存后重新开启或重连语音即可生效。
|
|
40
61
|
|
|
41
|
-
|
|
62
|
+
下面的环境变量和 `.env` 方式继续保留,适合自动化或已有部署。
|
|
42
63
|
|
|
43
|
-
|
|
64
|
+
### 临时配置:当前 PowerShell 会话
|
|
44
65
|
|
|
45
|
-
|
|
66
|
+
在启动 DSH 的同一个终端中设置:
|
|
46
67
|
|
|
47
68
|
```powershell
|
|
48
69
|
$env:SILICONFLOW_API_KEY = "sk-your-api-key"
|
|
49
70
|
dsh web
|
|
50
71
|
```
|
|
51
72
|
|
|
52
|
-
|
|
73
|
+
关闭该终端后,变量会失效。
|
|
74
|
+
|
|
75
|
+
### 持久配置:DSH 用户环境文件
|
|
76
|
+
|
|
77
|
+
可以创建 DSH 用户目录下的 `.env`。默认位置是 Windows 的 `%USERPROFILE%\.dsh\.env`(如果设置了 `DSH_HOME`,则使用 `$DSH_HOME/.env`):
|
|
53
78
|
|
|
54
79
|
```dotenv
|
|
55
80
|
SILICONFLOW_API_KEY=sk-your-api-key
|
|
56
81
|
```
|
|
57
82
|
|
|
58
|
-
|
|
83
|
+
也可以在执行 `dsh web` 的当前目录创建 `.env`。DSH 凭据服务会读取这些环境层,插件在每次新建语音连接时通过凭据服务解析 `SILICONFLOW_API_KEY`。无需进入 npm 安装目录,也不要修改 `node_modules` 中的文件。
|
|
84
|
+
|
|
85
|
+
如果同时设置了系统环境变量、DSH 凭据库和 `.env`,已经继承的环境变量优先,其次是 DSH 凭据库。修改 `.env` 后请重启 `dsh web`,因为环境在进程启动时读取一次。
|
|
86
|
+
|
|
87
|
+
## 安装后怎么使用
|
|
59
88
|
|
|
60
|
-
|
|
89
|
+
1. 运行 `dsh web` 并打开 DSH Web UI。
|
|
90
|
+
2. 新建或选择一个会话。
|
|
91
|
+
3. 点击麦克风按钮并允许浏览器权限。
|
|
92
|
+
4. 直接说话;连续静音约 1.5 秒后,当前语句会提交给云端识别。也可以长按麦克风约 400 毫秒按住说话,松手后只提交这一段;未连接时长按会在提交后保持静音,以便接收语音回复。
|
|
93
|
+
5. 普通聊天由前台处理,需要读写项目或运行工具的工作会交给后台 Agent。
|
|
61
94
|
|
|
62
|
-
|
|
63
|
-
2. Create or select a session, click the microphone, and grant browser permission.
|
|
64
|
-
3. Speak naturally. About 1.5 seconds of continuous silence submits an utterance.
|
|
65
|
-
4. Ordinary conversation is answered in the frontend; work that needs project tools is delegated to the background Agent.
|
|
95
|
+
语音会话可以被打断、断线重连和恢复历史。每个语音会话会持续绑定自己的后台 Agent Session;上下文达到轮换阈值时,插件会为后续任务创建新的子会话,但仍归属于同一语音会话。
|
|
66
96
|
|
|
67
|
-
|
|
97
|
+
## 更新
|
|
68
98
|
|
|
69
|
-
|
|
99
|
+
使用 npm 更新到最新版本:
|
|
70
100
|
|
|
71
101
|
```powershell
|
|
72
102
|
dsh plugin --profile web add @flowingspring/dsh-voco
|
|
73
103
|
```
|
|
74
104
|
|
|
75
|
-
|
|
105
|
+
也可以改用指定的 GitHub Release `.tgz` 地址。更新后重启 `dsh web`。
|
|
76
106
|
|
|
77
|
-
##
|
|
107
|
+
## 卸载
|
|
78
108
|
|
|
79
109
|
```powershell
|
|
80
110
|
dsh plugin --profile web remove @flowingspring/dsh-voco
|
|
81
111
|
```
|
|
82
112
|
|
|
83
|
-
|
|
113
|
+
卸载插件不会自动删除已经保存的 API Key。需要彻底清除时,从 `%USERPROFILE%\.dsh\.credentials.yaml`(设置了 `DSH_HOME` 时为 `$DSH_HOME/.credentials.yaml`)的 `refs` 下删除 `SILICONFLOW_API_KEY`,并同时清理系统环境变量或 `.env` 中的同名配置。
|
|
114
|
+
|
|
115
|
+
卸载插件不会删除已经保存的 DSH 会话和语音历史;如需清理数据,请先确认对应数据目录后再手动处理。
|
|
116
|
+
|
|
117
|
+
## 主要能力
|
|
118
|
+
|
|
119
|
+
- SiliconFlow 免费模型 [`XingChenAGI/XingChenASR-V3.2-Ultra`](https://cloud.siliconflow.cn/models?target=XingChenAGI/XingChenASR-V3.2-Ultra) 云端语音转文字。
|
|
120
|
+
- Edge TTS `zh-CN-XiaoxiaoNeural` 中文语音回复。
|
|
121
|
+
- 语音、文字和后台 Agent 任务可以在同一 DSH 会话中协作。
|
|
122
|
+
- 委派前即时播报确认语,完整报告保留在任务界面。
|
|
123
|
+
- 页面切换、断线重连和 DSH 重启后恢复语音会话绑定。
|
|
124
|
+
- 可选接入 `@flowingspring/dsh-workspace-memory`;语音主会话和每个完成的委派子任务都会进入同一个 Workspace 长期记忆范围。
|
|
125
|
+
|
|
126
|
+
## 常见问题
|
|
127
|
+
|
|
128
|
+
### 点击麦克风提示缺少 API Key
|
|
129
|
+
|
|
130
|
+
确认启动 DSH 的进程能读到 `SILICONFLOW_API_KEY`。如果刚创建或修改了 `.env`,先停止旧的 DSH 进程,再重新运行 `dsh web`。
|
|
131
|
+
|
|
132
|
+
### 浏览器没有声音或无法录音
|
|
133
|
+
|
|
134
|
+
检查当前页面是否获得麦克风权限、系统输入设备是否正常,并确认使用的是 `dsh web` 提供的页面,而不是直接打开 HTML 文件。
|
|
135
|
+
|
|
136
|
+
### 识别失败或等待时间较长
|
|
84
137
|
|
|
85
|
-
|
|
138
|
+
语音识别需要访问硅基流动网络服务。请检查网络、API Key 有效期、账户额度,以及所选模型和 Provider 的响应延迟。
|
|
86
139
|
|
|
87
|
-
|
|
140
|
+
### 想调整静音和起音阈值
|
|
88
141
|
|
|
89
|
-
|
|
90
|
-
- Edge TTS `zh-CN-XiaoxiaoNeural` voice responses.
|
|
91
|
-
- Interruption, navigation, reconnects, and restored history.
|
|
92
|
-
- Immediate acknowledgement before delegation; full reports remain in the DSH task UI.
|
|
93
|
-
- Optional `@flowingspring/dsh-workspace-memory` integration for both the source Voice Session and every completed delegated child task.
|
|
142
|
+
高级参数位于插件 profile 的 `cordis.patch.yml`,包括 `silenceDurationMs`、`speechThreshold`、`minSpeechDurationMs` 和 `maxUtteranceMs`。普通用户通常不需要修改这些参数。
|
|
94
143
|
|
|
95
|
-
##
|
|
144
|
+
## 可选 Workspace Memory
|
|
96
145
|
|
|
97
|
-
|
|
98
|
-
- **Microphone unavailable**: check browser permission and the system input device, and make sure the page is served by `dsh web`.
|
|
99
|
-
- **Recognition fails or is slow**: check network access, key validity, SiliconFlow quota, and model/provider latency.
|
|
146
|
+
长期记忆不是 Voco 的必需依赖。需要时另外安装 `@flowingspring/dsh-workspace-memory`;只安装 Voco 也可以独立使用。安装 Memory 后,完成的委派任务会提交用户原始请求和最终可见结果,不会提交 reasoning、工具日志或注入上下文。Memory 插件的安装和配置请参阅其项目文档。
|
|
100
147
|
|
|
101
|
-
##
|
|
148
|
+
## 开发与反馈
|
|
102
149
|
|
|
103
|
-
- [GitHub
|
|
104
|
-
-
|
|
150
|
+
- 源码与问题反馈:[GitHub](https://github.com/lgquan/dsh-voco)
|
|
151
|
+
- npm 包:[`@flowingspring/dsh-voco`](https://www.npmjs.com/package/@flowingspring/dsh-voco)
|
|
152
|
+
- 架构说明:[`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md)
|
|
105
153
|
|
|
106
|
-
##
|
|
154
|
+
## 许可证
|
|
107
155
|
|
|
108
156
|
[MIT](LICENSE)
|
package/cordis.patch.yml
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
# Voice interaction mode layered after dsh-base and dsh-web-app.
|
|
2
|
-
- insert:
|
|
1
|
+
# Voice interaction mode layered after dsh-base and dsh-web-app.
|
|
2
|
+
- insert:
|
|
3
3
|
- id: llm-tool-call-compat
|
|
4
4
|
name: '@flowingspring/dsh-voco/llm-tool-call-compat'
|
|
5
5
|
|
|
6
6
|
- id: voice
|
|
7
7
|
name: '@flowingspring/dsh-voco/voice'
|
|
8
|
-
config:
|
|
9
|
-
provider: local
|
|
10
|
-
|
|
8
|
+
config:
|
|
9
|
+
provider: local
|
|
10
|
+
|
|
11
11
|
- id: voice-local
|
|
12
12
|
name: '@flowingspring/dsh-voco/voice-local'
|
|
13
|
-
config:
|
|
14
|
-
interactionMode: frontend-agent
|
|
15
|
-
inputSampleRate: 16000
|
|
16
|
-
outputSampleRate: 48000
|
|
17
|
-
ttsRate: '+20%'
|
|
18
|
-
silenceDurationMs: 1500
|
|
19
|
-
speechThreshold: 0.015
|
|
20
|
-
minSpeechDurationMs: 250
|
|
21
|
-
maxUtteranceMs: 60000
|
|
22
|
-
|
|
13
|
+
config:
|
|
14
|
+
interactionMode: frontend-agent
|
|
15
|
+
inputSampleRate: 16000
|
|
16
|
+
outputSampleRate: 48000
|
|
17
|
+
ttsRate: '+20%'
|
|
18
|
+
silenceDurationMs: 1500
|
|
19
|
+
speechThreshold: 0.015
|
|
20
|
+
minSpeechDurationMs: 250
|
|
21
|
+
maxUtteranceMs: 60000
|
|
22
|
+
|
|
23
23
|
- id: voice-assistant
|
|
24
24
|
name: '@flowingspring/dsh-voco/voice-assistant'
|
|
25
|
-
config:
|
|
26
|
-
maxPendingObservations: 64
|
|
25
|
+
config:
|
|
26
|
+
maxPendingObservations: 64
|
|
27
27
|
restoreConversation: true
|
|
28
28
|
memoryRecallTimeoutMs: 250
|
|
29
29
|
maxRestoredUtterances: 24
|
|
@@ -32,16 +32,16 @@
|
|
|
32
32
|
taskSessionRotationReserveTokens: 2048
|
|
33
33
|
taskSessionHandoffMaxChars: 12000
|
|
34
34
|
completedAnnouncement: 任务已完成。
|
|
35
|
-
failedAnnouncement: 任务失败了,请查看屏幕上的错误信息。
|
|
36
|
-
cancelledAnnouncement: 任务已取消。
|
|
37
|
-
interruptedAnnouncement: 上次任务因服务关闭而中断,没有自动重放。你可以告诉我是否继续。
|
|
38
|
-
|
|
35
|
+
failedAnnouncement: 任务失败了,请查看屏幕上的错误信息。
|
|
36
|
+
cancelledAnnouncement: 任务已取消。
|
|
37
|
+
interruptedAnnouncement: 上次任务因服务关闭而中断,没有自动重放。你可以告诉我是否继续。
|
|
38
|
+
|
|
39
39
|
- id: voice-web
|
|
40
40
|
name: '@flowingspring/dsh-voco/voice-web'
|
|
41
|
-
inject: [webRuntime]
|
|
42
|
-
config:
|
|
43
|
-
trustedHosts: !!js ctx.webRuntime.trustedHosts
|
|
44
|
-
maxAudioFrameBytes: 65536
|
|
45
|
-
|
|
41
|
+
inject: [webRuntime]
|
|
42
|
+
config:
|
|
43
|
+
trustedHosts: !!js ctx.webRuntime.trustedHosts
|
|
44
|
+
maxAudioFrameBytes: 65536
|
|
45
|
+
|
|
46
46
|
- id: ui-voice
|
|
47
47
|
name: '@flowingspring/dsh-voco'
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
2
|
"name": "@flowingspring/dsh-voco",
|
|
3
3
|
"description": "Persistent voice conversations for DSH with cloud speech recognition, Edge TTS, and background Agent delegation",
|
|
4
|
-
"version": "0.3.
|
|
4
|
+
"version": "0.3.12",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"deepseek-harness",
|
|
7
7
|
"dsh",
|
|
@@ -15,65 +15,55 @@
|
|
|
15
15
|
"bugs": {
|
|
16
16
|
"url": "https://github.com/lgquan/dsh-voco/issues"
|
|
17
17
|
},
|
|
18
|
-
"publishConfig": {
|
|
19
|
-
"access": "public"
|
|
20
|
-
},
|
|
21
|
-
"repository": {
|
|
22
|
-
"type": "git",
|
|
23
|
-
"url": "git+https://github.com/lgquan/dsh-voco.git"
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"exports": {
|
|
18
|
+
"publishConfig": {
|
|
19
|
+
"access": "public"
|
|
20
|
+
},
|
|
21
|
+
"repository": {
|
|
22
|
+
"type": "git",
|
|
23
|
+
"url": "git+https://github.com/lgquan/dsh-voco.git"
|
|
24
|
+
},
|
|
25
|
+
"type": "module",
|
|
26
|
+
"main": "packages/voice-app/lib/index.js",
|
|
27
|
+
"types": "packages/voice-app/lib/types/index.d.ts",
|
|
28
|
+
"exports": {
|
|
30
29
|
".": {
|
|
31
|
-
"types": "./lib/types/index.d.ts",
|
|
32
|
-
"default": "./lib/index.js"
|
|
30
|
+
"types": "./packages/voice-app/lib/types/index.d.ts",
|
|
31
|
+
"default": "./packages/voice-app/lib/index.js"
|
|
33
32
|
},
|
|
34
33
|
"./client": {
|
|
35
|
-
"default": "./lib/client.js"
|
|
34
|
+
"default": "./packages/voice-app/lib/client.js"
|
|
36
35
|
},
|
|
37
36
|
"./invariant": {
|
|
38
|
-
"types": "./lib/types/invariant.d.ts",
|
|
39
|
-
"default": "./lib/invariant.js"
|
|
37
|
+
"types": "./packages/voice-app/lib/types/invariant.d.ts",
|
|
38
|
+
"default": "./packages/voice-app/lib/invariant.js"
|
|
40
39
|
},
|
|
41
|
-
"./llm-tool-call-compat": "./lib/plugins/llm-tool-call-compat.js",
|
|
42
|
-
"./voice": "./lib/plugins/voice.js",
|
|
43
|
-
"./voice-local": "./lib/plugins/voice-local.js",
|
|
44
|
-
"./voice-assistant": "./lib/plugins/voice-assistant.js",
|
|
45
|
-
"./voice-web": "./lib/plugins/voice-web.js",
|
|
40
|
+
"./llm-tool-call-compat": "./packages/voice-app/lib/plugins/llm-tool-call-compat.js",
|
|
41
|
+
"./voice": "./packages/voice-app/lib/plugins/voice.js",
|
|
42
|
+
"./voice-local": "./packages/voice-app/lib/plugins/voice-local.js",
|
|
43
|
+
"./voice-assistant": "./packages/voice-app/lib/plugins/voice-assistant.js",
|
|
44
|
+
"./voice-web": "./packages/voice-app/lib/plugins/voice-web.js",
|
|
46
45
|
"./cordis.patch.yml": "./cordis.patch.yml",
|
|
47
46
|
"./package.json": "./package.json"
|
|
48
|
-
},
|
|
49
|
-
"files": [
|
|
50
|
-
"lib/index.js",
|
|
51
|
-
"lib/invariant.js",
|
|
52
|
-
"lib/client.js",
|
|
53
|
-
"lib/client.js.map",
|
|
54
|
-
"lib/plugins/*.js",
|
|
55
|
-
"cordis.patch.yml",
|
|
56
|
-
"lib/types/**/*.d.ts"
|
|
57
|
-
],
|
|
58
|
-
"license": "MIT",
|
|
59
|
-
"dsh": {
|
|
60
|
-
"bundle": {
|
|
61
|
-
"patch": "./cordis.patch.yml"
|
|
62
|
-
},
|
|
63
|
-
"client": {
|
|
64
|
-
"inject": [
|
|
65
|
-
"@deepseek-ai/dsh-client-connection",
|
|
66
|
-
"@deepseek-ai/dsh-client-locale",
|
|
67
|
-
"@deepseek-ai/dsh-client-runtime",
|
|
68
|
-
"@deepseek-ai/dsh-client-ui-settings",
|
|
69
|
-
"@deepseek-ai/dsh-client-ui-settings-plugins",
|
|
70
|
-
"@deepseek-ai/dsh-client-ui-conversation",
|
|
71
|
-
"@deepseek-ai/dsh-client-ui-layout",
|
|
72
|
-
"@deepseek-ai/dsh-client-ui-sidebar"
|
|
73
|
-
],
|
|
74
|
-
"platform": "web"
|
|
75
|
-
}
|
|
76
47
|
},
|
|
48
|
+
"packageManager": "pnpm@11.7.0",
|
|
49
|
+
"engines": {
|
|
50
|
+
"node": "^22.19.0 || >=24.0.0"
|
|
51
|
+
},
|
|
52
|
+
"scripts": {
|
|
53
|
+
"build": "tsc -b && pnpm --dir packages/voice-app exec tsdown",
|
|
54
|
+
"prepare": "pnpm run build",
|
|
55
|
+
"test": "vitest run",
|
|
56
|
+
"typecheck": "tsc -b"
|
|
57
|
+
},
|
|
58
|
+
"files": [
|
|
59
|
+
"cordis.patch.yml",
|
|
60
|
+
"packages/voice-app/lib/index.js",
|
|
61
|
+
"packages/voice-app/lib/invariant.js",
|
|
62
|
+
"packages/voice-app/lib/client.js",
|
|
63
|
+
"packages/voice-app/lib/client.js.map",
|
|
64
|
+
"packages/voice-app/lib/plugins/*.js",
|
|
65
|
+
"packages/voice-app/lib/types/**/*.d.ts"
|
|
66
|
+
],
|
|
77
67
|
"dependencies": {
|
|
78
68
|
"@deepseek-ai/schemastery": "^3.18.1",
|
|
79
69
|
"node-edge-tts": "1.2.10",
|
|
@@ -107,39 +97,30 @@
|
|
|
107
97
|
"react": "^18.2.0"
|
|
108
98
|
},
|
|
109
99
|
"devDependencies": {
|
|
110
|
-
"@
|
|
111
|
-
"
|
|
112
|
-
"
|
|
113
|
-
"
|
|
114
|
-
"
|
|
115
|
-
"
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
"
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
"
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
"@flowingspring/dsh-voice": "workspace:*",
|
|
137
|
-
"@flowingspring/dsh-voice-assistant": "workspace:*",
|
|
138
|
-
"@flowingspring/dsh-voice-local": "workspace:*",
|
|
139
|
-
"@flowingspring/dsh-voice-web": "workspace:*",
|
|
140
|
-
"@types/react": "~18.3.1",
|
|
141
|
-
"@types/ws": "^8.18.1",
|
|
142
|
-
"react": "^18.2.0",
|
|
143
|
-
"react-dom": "^18.2.0"
|
|
144
|
-
}
|
|
100
|
+
"@types/node": "^22.20.0",
|
|
101
|
+
"jsdom": "^30.0.1",
|
|
102
|
+
"lightningcss": "^1.32.0",
|
|
103
|
+
"tsdown": "^0.22.2",
|
|
104
|
+
"typescript": "^6.0.3",
|
|
105
|
+
"vitest": "^4.1.11"
|
|
106
|
+
},
|
|
107
|
+
"dsh": {
|
|
108
|
+
"bundle": {
|
|
109
|
+
"patch": "./cordis.patch.yml"
|
|
110
|
+
},
|
|
111
|
+
"client": {
|
|
112
|
+
"inject": [
|
|
113
|
+
"@deepseek-ai/dsh-client-connection",
|
|
114
|
+
"@deepseek-ai/dsh-client-locale",
|
|
115
|
+
"@deepseek-ai/dsh-client-runtime",
|
|
116
|
+
"@deepseek-ai/dsh-client-ui-settings",
|
|
117
|
+
"@deepseek-ai/dsh-client-ui-settings-plugins",
|
|
118
|
+
"@deepseek-ai/dsh-client-ui-conversation",
|
|
119
|
+
"@deepseek-ai/dsh-client-ui-layout",
|
|
120
|
+
"@deepseek-ai/dsh-client-ui-sidebar"
|
|
121
|
+
],
|
|
122
|
+
"platform": "web"
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
"license": "MIT"
|
|
145
126
|
}
|
|
@@ -19,11 +19,11 @@ window.__ModuleLoader__.load({
|
|
|
19
19
|
document.head.appendChild(tag);
|
|
20
20
|
}
|
|
21
21
|
var VoiceControl_module_css_default = {
|
|
22
|
-
"voice-pulse": "TFZsua_voice-pulse",
|
|
23
|
-
"active": "TFZsua_active",
|
|
24
|
-
"controls": "TFZsua_controls",
|
|
25
22
|
"button": "TFZsua_button",
|
|
26
|
-
"interruptButton": "TFZsua_interruptButton"
|
|
23
|
+
"interruptButton": "TFZsua_interruptButton",
|
|
24
|
+
"controls": "TFZsua_controls",
|
|
25
|
+
"active": "TFZsua_active",
|
|
26
|
+
"voice-pulse": "TFZsua_voice-pulse"
|
|
27
27
|
};
|
|
28
28
|
//#endregion
|
|
29
29
|
//#region ../ui-voice/src/client/VoiceControl.tsx
|
|
@@ -222,23 +222,23 @@ window.__ModuleLoader__.load({
|
|
|
222
222
|
document.head.appendChild(tag);
|
|
223
223
|
}
|
|
224
224
|
var VoiceNodeViews_module_css_default = {
|
|
225
|
-
"taskDetails": "Kt2smW_taskDetails",
|
|
226
|
-
"taskUpdate": "Kt2smW_taskUpdate",
|
|
227
|
-
"utterance": "Kt2smW_utterance",
|
|
228
|
-
"miniWave": "Kt2smW_miniWave",
|
|
229
|
-
"voiceBadge": "Kt2smW_voiceBadge",
|
|
230
|
-
"taskCard": "Kt2smW_taskCard",
|
|
231
225
|
"taskTitle": "Kt2smW_taskTitle",
|
|
232
|
-
"taskChevron": "Kt2smW_taskChevron",
|
|
233
|
-
"bubble": "Kt2smW_bubble",
|
|
234
|
-
"taskDot": "Kt2smW_taskDot",
|
|
235
|
-
"taskInput": "Kt2smW_taskInput",
|
|
236
226
|
"taskStatus": "Kt2smW_taskStatus",
|
|
227
|
+
"taskUpdate": "Kt2smW_taskUpdate",
|
|
228
|
+
"taskDot": "Kt2smW_taskDot",
|
|
237
229
|
"taskSummary": "Kt2smW_taskSummary",
|
|
230
|
+
"taskCancel": "Kt2smW_taskCancel",
|
|
231
|
+
"taskActions": "Kt2smW_taskActions",
|
|
232
|
+
"voiceBadge": "Kt2smW_voiceBadge",
|
|
233
|
+
"taskInput": "Kt2smW_taskInput",
|
|
234
|
+
"bubble": "Kt2smW_bubble",
|
|
238
235
|
"taskLink": "Kt2smW_taskLink",
|
|
236
|
+
"taskDetails": "Kt2smW_taskDetails",
|
|
237
|
+
"taskCard": "Kt2smW_taskCard",
|
|
238
|
+
"miniWave": "Kt2smW_miniWave",
|
|
239
239
|
"meta": "Kt2smW_meta",
|
|
240
|
-
"
|
|
241
|
-
"
|
|
240
|
+
"utterance": "Kt2smW_utterance",
|
|
241
|
+
"taskChevron": "Kt2smW_taskChevron"
|
|
242
242
|
};
|
|
243
243
|
//#endregion
|
|
244
244
|
//#region ../ui-voice/src/client/VoiceNodeViews.tsx
|
|
@@ -377,10 +377,10 @@ window.__ModuleLoader__.load({
|
|
|
377
377
|
}
|
|
378
378
|
var VoiceOverlay_module_css_default = {
|
|
379
379
|
"root": "GPPB2G_root",
|
|
380
|
-
"status": "GPPB2G_status",
|
|
381
|
-
"wave": "GPPB2G_wave",
|
|
382
380
|
"voice-wave": "GPPB2G_voice-wave",
|
|
383
|
-
"
|
|
381
|
+
"wave": "GPPB2G_wave",
|
|
382
|
+
"stop": "GPPB2G_stop",
|
|
383
|
+
"status": "GPPB2G_status"
|
|
384
384
|
};
|
|
385
385
|
//#endregion
|
|
386
386
|
//#region ../ui-voice/src/client/VoiceOverlay.tsx
|
|
@@ -439,8 +439,8 @@ window.__ModuleLoader__.load({
|
|
|
439
439
|
document.head.appendChild(tag);
|
|
440
440
|
}
|
|
441
441
|
var VoiceSessionMarkers_module_css_default = {
|
|
442
|
-
"
|
|
443
|
-
"
|
|
442
|
+
"slot": "_0brRca_slot",
|
|
443
|
+
"marker": "_0brRca_marker"
|
|
444
444
|
};
|
|
445
445
|
//#endregion
|
|
446
446
|
//#region ../ui-voice/src/client/VoiceSessionMarkers.tsx
|
|
@@ -550,30 +550,30 @@ window.__ModuleLoader__.load({
|
|
|
550
550
|
document.head.appendChild(tag);
|
|
551
551
|
}
|
|
552
552
|
var VocoSettingsCard_module_css_default = {
|
|
553
|
-
"
|
|
554
|
-
"
|
|
555
|
-
"
|
|
553
|
+
"headText": "G5LlXq_headText",
|
|
554
|
+
"providerDetail": "G5LlXq_providerDetail",
|
|
555
|
+
"badgeMuted": "G5LlXq_badgeMuted",
|
|
556
556
|
"failed": "G5LlXq_failed",
|
|
557
|
+
"providerDetails": "G5LlXq_providerDetails",
|
|
557
558
|
"chevron": "G5LlXq_chevron",
|
|
559
|
+
"card": "G5LlXq_card",
|
|
558
560
|
"pending": "G5LlXq_pending",
|
|
559
|
-
"
|
|
560
|
-
"name": "G5LlXq_name",
|
|
561
|
-
"footer": "G5LlXq_footer",
|
|
562
|
-
"cardOpen": "G5LlXq_cardOpen",
|
|
561
|
+
"label": "G5LlXq_label",
|
|
563
562
|
"save": "G5LlXq_save",
|
|
564
|
-
"
|
|
565
|
-
"
|
|
566
|
-
"
|
|
567
|
-
"badgeMuted": "G5LlXq_badgeMuted",
|
|
563
|
+
"cardOpen": "G5LlXq_cardOpen",
|
|
564
|
+
"body": "G5LlXq_body",
|
|
565
|
+
"readOnly": "G5LlXq_readOnly",
|
|
568
566
|
"hint": "G5LlXq_hint",
|
|
569
|
-
"providerDetail": "G5LlXq_providerDetail",
|
|
570
|
-
"badge": "G5LlXq_badge",
|
|
571
|
-
"input": "G5LlXq_input",
|
|
572
|
-
"providerDetails": "G5LlXq_providerDetails",
|
|
573
|
-
"field": "G5LlXq_field",
|
|
574
|
-
"card": "G5LlXq_card",
|
|
575
567
|
"description": "G5LlXq_description",
|
|
576
|
-
"
|
|
568
|
+
"footer": "G5LlXq_footer",
|
|
569
|
+
"header": "G5LlXq_header",
|
|
570
|
+
"chevronOpen": "G5LlXq_chevronOpen",
|
|
571
|
+
"input": "G5LlXq_input",
|
|
572
|
+
"discard": "G5LlXq_discard",
|
|
573
|
+
"fieldHead": "G5LlXq_fieldHead",
|
|
574
|
+
"name": "G5LlXq_name",
|
|
575
|
+
"badge": "G5LlXq_badge",
|
|
576
|
+
"field": "G5LlXq_field"
|
|
577
577
|
};
|
|
578
578
|
//#endregion
|
|
579
579
|
//#region ../ui-voice/src/client/VocoSettingsCard.tsx
|
package/README.i18n.yaml
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
|
|
2
|
-
# side as of the last confirmed-consistent state. Both languages carry equal authority;
|
|
3
|
-
# after editing either side, bring the other along and re-record with:
|
|
4
|
-
# pnpm run verify-translation-pairing --write packages/bundle/voice-app/README.md
|
|
5
|
-
README.md: 3582129953c75938c6c08caa11526d5179f0631f
|
|
6
|
-
README.zh.md: f7253637cf50cf5b9677bee512e45fdadd8cc712
|
package/README.zh.md
DELETED
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
# `@flowingspring/dsh-voco`
|
|
2
|
-
|
|
3
|
-
[](https://www.npmjs.com/package/@flowingspring/dsh-voco)
|
|
4
|
-
[](https://github.com/lgquan/dsh-voco/blob/master/LICENSE)
|
|
5
|
-
|
|
6
|
-
[English](README.md) | 中文
|
|
7
|
-
|
|
8
|
-
面向 DeepSeek Harness(DSH)Web UI 的可恢复、可打断语音对话插件。它使用硅基流动云端语音识别和 Edge TTS,并把需要工具的工作委派给后台 Agent。
|
|
9
|
-
|
|
10
|
-
## 安装
|
|
11
|
-
|
|
12
|
-
### npm 安装(推荐)
|
|
13
|
-
|
|
14
|
-
先安装 DSH CLI:
|
|
15
|
-
|
|
16
|
-
```powershell
|
|
17
|
-
npm install -g @deepseek-ai/dsh
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
将插件加入 Web profile 并启动:
|
|
21
|
-
|
|
22
|
-
```powershell
|
|
23
|
-
dsh plugin --profile web add @flowingspring/dsh-voco
|
|
24
|
-
dsh web
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
### GitHub Release 安装
|
|
28
|
-
|
|
29
|
-
GitHub Release 提供已经构建好的插件包,不需要下载源码或安装 pnpm:
|
|
30
|
-
|
|
31
|
-
```powershell
|
|
32
|
-
dsh plugin --profile web add https://github.com/lgquan/dsh-voco/releases/download/v0.3.11/flowingspring-dsh-voco-0.3.11.tgz
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
Release 页面:[v0.3.11](https://github.com/lgquan/dsh-voco/releases/tag/v0.3.11)
|
|
36
|
-
|
|
37
|
-
## 配置 API Key
|
|
38
|
-
|
|
39
|
-
语音识别需要你自己的[硅基流动 API Key](https://siliconflow.cn/),配置名只有一个:`SILICONFLOW_API_KEY`。语音转文字使用硅基流动当前免费的 [`XingChenAGI/XingChenASR-V3.2-Ultra`](https://cloud.siliconflow.cn/models?target=XingChenAGI/XingChenASR-V3.2-Ultra);免费状态和使用规则以模型页面为准。Edge TTS 不需要 API Key。
|
|
40
|
-
|
|
41
|
-
推荐在 DSH 中打开“设置 → 插件 → 插件配置”,展开“语音助手(Voco)”,填写 API Key 并保存。密钥保存在 DSH 凭据库中,不写入普通设置文件;保存后重新开启或重连语音即可生效。
|
|
42
|
-
|
|
43
|
-
环境变量和 `.env` 仍作为兼容与自动化配置方式保留。
|
|
44
|
-
|
|
45
|
-
在启动 DSH 的同一个 PowerShell 中临时设置:
|
|
46
|
-
|
|
47
|
-
```powershell
|
|
48
|
-
$env:SILICONFLOW_API_KEY = "sk-your-api-key"
|
|
49
|
-
dsh web
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
要持久保存,可创建 DSH 用户环境文件 `%USERPROFILE%\.dsh\.env`(设置了 `DSH_HOME` 时使用 `$DSH_HOME/.env`):
|
|
53
|
-
|
|
54
|
-
```dotenv
|
|
55
|
-
SILICONFLOW_API_KEY=sk-your-api-key
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
也可在运行 `dsh web` 的当前目录放置 `.env`。修改后重启 DSH;不要修改 npm 安装目录或 `node_modules` 中的文件,也不要把真实密钥提交到 GitHub。
|
|
59
|
-
|
|
60
|
-
## 首次使用
|
|
61
|
-
|
|
62
|
-
1. 运行 `dsh web` 并打开 DSH Web UI。
|
|
63
|
-
2. 新建或选择会话,点击麦克风并允许浏览器权限。
|
|
64
|
-
3. 直接说话,连续静音约 1.5 秒后提交一句话;也可以长按麦克风约 400 毫秒按住说话,松手后提交这一段。
|
|
65
|
-
4. 普通聊天由前台回答,需要项目工具的工作会委派给后台 Agent。
|
|
66
|
-
|
|
67
|
-
每个语音会话持续绑定自己的后台 Agent Session。上下文达到轮换阈值后,后续任务会自动进入新的子会话,但仍与原语音会话绑定。
|
|
68
|
-
|
|
69
|
-
## 更新
|
|
70
|
-
|
|
71
|
-
```powershell
|
|
72
|
-
dsh plugin --profile web add @flowingspring/dsh-voco
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
也可以安装指定的 GitHub Release。更新后重启 `dsh web`。
|
|
76
|
-
|
|
77
|
-
## 卸载
|
|
78
|
-
|
|
79
|
-
```powershell
|
|
80
|
-
dsh plugin --profile web remove @flowingspring/dsh-voco
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
卸载不会自动删除 DSH 会话或语音历史。
|
|
84
|
-
|
|
85
|
-
卸载也不会删除已经保存的 API Key。需要彻底清除时,从 `%USERPROFILE%\.dsh\.credentials.yaml`(设置了 `DSH_HOME` 时为 `$DSH_HOME/.credentials.yaml`)的 `refs` 下删除 `SILICONFLOW_API_KEY`,并同时清理系统环境变量或 `.env` 中的同名配置。
|
|
86
|
-
|
|
87
|
-
## 功能
|
|
88
|
-
|
|
89
|
-
- SiliconFlow 免费模型 [`XingChenAGI/XingChenASR-V3.2-Ultra`](https://cloud.siliconflow.cn/models?target=XingChenAGI/XingChenASR-V3.2-Ultra) 云端语音转文字。
|
|
90
|
-
- Edge TTS `zh-CN-XiaoxiaoNeural` 语音回复。
|
|
91
|
-
- 语音打断、页面切换、断线重连和历史恢复。
|
|
92
|
-
- 委派前即时确认,完整报告保留在 DSH 任务界面。
|
|
93
|
-
- 可选接入 `@flowingspring/dsh-workspace-memory`,让语音主会话和每个完成的委派子任务共享同一 Workspace 长期记忆范围。
|
|
94
|
-
|
|
95
|
-
## 排查
|
|
96
|
-
|
|
97
|
-
- **缺少 API Key**:确认 `SILICONFLOW_API_KEY` 在启动 DSH 的进程中可见;修改 `.env` 后重启 `dsh web`。
|
|
98
|
-
- **无法录音**:检查浏览器麦克风权限和系统输入设备,并确认页面来自 `dsh web`。
|
|
99
|
-
- **识别失败或较慢**:检查网络、Key 有效期、硅基流动账户额度及模型/Provider 延迟。
|
|
100
|
-
|
|
101
|
-
## 链接
|
|
102
|
-
|
|
103
|
-
- [GitHub 源码与问题反馈](https://github.com/lgquan/dsh-voco)
|
|
104
|
-
- [npm 包](https://www.npmjs.com/package/@flowingspring/dsh-voco)
|
|
105
|
-
|
|
106
|
-
## 许可证
|
|
107
|
-
|
|
108
|
-
[MIT](LICENSE)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|