@flowingspring/dsh-voco 0.3.10 → 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 +43 -478
- package/packages/voice-app/lib/client.js.map +1 -0
- package/README.i18n.yaml +0 -6
- package/README.zh.md +0 -108
- package/lib/client.js.map +0 -1
- /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
|
}
|