Skip to content

Releases

v0.9.20 — 原生悬浮字幕

Choose a tag to compare

@god1sdfghjkl god1sdfghjkl released this 15 Nov 07:20

0.9.20 — 原生悬浮字幕

从 dsh-go 官方仓库找到 dsh-go-example-readaloud 和 docs/plugins/voice.md:
原生朗读除了 audio / voice,还有 micro(推送字幕数据)和 overlay
(App 画的一行悬浮字幕)。这正好补上“像电脑打语音”缺的一块。

新增

  • 清单增加:
    • capabilities: ["micro", "overlay"](与 audio/voice 一起);
    • micro: [{ id: "caption" }];
    • overlays: [{ id: "subtitle", channel: "caption", text: "正在准备朗读…" }]。
  • 朗读 / 试听 / 念最新时返回:
    • audio.play
    • voice.start
    • overlay.show(对话顶栏下浮出一行字幕)
  • 通过 ctx.dshGo.micro('caption') 按约 10 Hz 推 { text, progress }:
    • 字幕按句切分,长句再按标点/60 字切,单条 ≤240 字;
    • 进度按实际合成 WAV 的时长推进,不是瞎估;
    • 合成完成前显示静态「正在准备朗读…」。
  • 播完、被停止、用户开口、用户点 × 关字幕时自动停止推送;字幕关闭不会停掉声音。
  • 新增测试:字幕通道注册、overlay 效果、朗读时实际推送字幕;
    test/dshgo-smoke.mjs 25/0。

验证

  • 官方 manifest schema:通过
  • 官方 view schema:通过(1299 B)
  • 官方 effects:open / read / test / stop / setProvider / setEmotion / readLatest 全部 0 violation
  • npm run test:ci:全绿
  • tarball 无真实 Breeze key

安装

dsh plugin --profile <profile> add ./dsh-plugin-voice-local-0.9.20.tgz

重启 DSH 后手机端重新安装;朗读时看对话顶栏下是否出现字幕。

v0.9.19 — 原生单选组 + 插件详情页入口

Choose a tag to compare

@god1sdfghjkl god1sdfghjkl released this 15 Nov 06:58

0.9.19 — 原生单选组 + 插件详情页入口

继续看了 dsh-go 官方示例(usage / toolbox / album / styles / workbench)的 view 写法,
发现原生视图本身就有单选组 options:selected 由数据绑定,选项带说明,点按返回
value。这比上一版的列表更紧凑,也不用自己画勾。

面板

  • 朗读通道改成 options:
    • 本地模型 — 离线运行,不联网
    • Breeze 云端 — 显示「已配置,可切换」或「未配置,先去设置」
    • 选中态由 data.provider 绑定,系统自己画选中圆点。
  • 自动情感(仅云端显示)改成 options:
    • 关 / 规则(按关键词,零额外请求)/ 智能(主模型逐句判断)
    • 选中态由 data.emotion 绑定。
  • 主操作仍是 念最新 / 试听 / 停止。
  • 面板从 1738 B 降到 1299 B,一屏更清爽。

入口

  • 面板 placement 增加 plugin:较新的 App 会在插件详情页也显示「语音通话」入口;
    老 App 不认识该值会忽略。
  • 输入框胶囊、状态条、聊天页「插件」、sheet 弹层行为不变。

验证

  • 官方 manifest schema:通过
  • 官方 view schema:通过(1299 B,主操作 3 个 + 两组单选)
  • 官方 effects:open / test / stop / setProvider / setEmotion / readLatest 全部 0 violation
  • test/dshgo-smoke.mjs:23/0
  • npm run test:ci:全绿
  • tarball 无真实 Breeze key

安装

dsh plugin --profile <profile> add ./dsh-plugin-voice-local-0.9.19.tgz

v0.9.18 — 通道/情感带勾选列表

Choose a tag to compare

@god1sdfghjkl god1sdfghjkl released this 15 Nov 06:42

0.9.18 — 通道/情感改成带勾选的列表

上一版把通道和情感做成并排按钮,虽然不再循环,但当前选中项只能靠上面一行文字判断,
点起来仍像一排设置按钮。这一版继续参考社区朗读插件,把它们改成带勾选的列表。

面板

  • 主操作仍是:念最新 / 试听 / 停止。
  • 朗读通道:
    • 本地模型 — 离线运行,不联网
    • Breeze 云端 — 显示「已配置,可切换」或「未配置,先去设置」
    • 当前项显示 「✓ 正在用」,并用 good 色标出。
  • 自动情感(仅云端显示):
    • 关 — 不加情感
    • 规则 — 按关键词,零额外请求
    • 智能 — 主模型逐句判断
    • 当前项同样有「✓ 正在用」。
  • 顶部状态:「语音已就绪 · 本地 / 云端」;副标题统一为
    「点输入框麦克风说话,回复会读出来。」
  • 列表项本身可点,点完立即刷新,不再有循环按钮。

数据/兼容

  • 原生状态增加 breezeReady,Breeze 列表项可以准确提示是否已配置。
  • 面板仍只用 v1 组件,老 App 能画;新 App 以 sheet 弹层显示。
  • 官方 view schema 通过(1738 B);官方 effects 校验 open / test / stop / setProvider / setEmotion / readLatest 全部 0 violation。

验证

  • test/dshgo-smoke.mjs:23/0
  • npm run test:ci:全绿
  • tarball 无真实 Breeze key

安装

dsh plugin --profile <profile> add ./dsh-plugin-voice-local-0.9.18.tgz

v0.9.17 — 原生面板重做:念最新 / 明确通道 / 按需状态条

Choose a tag to compare

@god1sdfghjkl god1sdfghjkl released this 15 Nov 06:14

0.9.17 — 重新整理 dsh-go 原生面板

为什么改

上一版面板把「通道 / 状态 / 语音输入 / 自动情感」堆成 5 行 keyValue,
底部再放「试听音色 / 停止朗读 / 情感 / 通道」4 个按钮;情感和通道要循环点按,
当前值不直观,空闲时输入框上方还长期占着「通话 · 就绪」一行。

这次参考 dsh-go 社区朗读插件(鲸鲸朗读)的原生面板写法,重新分层:

新的原生面板

  • 顶部只留一句状态:「语音已就绪 · 本地 / 云端」,未就绪显示「语音未就绪」。
  • 主操作:念最新 / 试听 / 停止。
    • 「念最新」直接读本会话最后一条完整回复,不用再长按消息;
    • 「试听」读一句示例;
    • 「停止」只在实际播放时发 stop,避免无效效果。
  • 朗读:本地 / 云端两个明确按钮;当前值显示在选项上方。
  • 自动情感:关 / 规则 / 智能三个明确按钮;本地 TTS 时自动隐藏,切到云端才出现。
  • 底部只保留「音色 / 最近回复」两行,以及一句输入说明,不再堆技术状态。

状态条

  • 空闲时自动收起,不再长期占用输入框上方;
  • 只在「正在合成…」「正在朗读…」「语音未就绪」时出现;
  • 每秒刷新;入口仍保留在输入框胶囊「语音」和面板入口里。

其他

  • 记住最近一条完整助手回复:监听 session/event 的 assistant/message + turn/end,
    结构不兼容时静默降级。
  • 所有按钮成功只返回 { type: 'refresh', id: 'voice-panel' },不弹 toast。
  • 官方 manifest schema 通过;官方 view schema 通过(1189 B,3 个操作区);
    官方 effects 校验:open / test / stop / setProvider / setEmotion / readLatest
    全部 0 violation。
  • test/dshgo-smoke.mjs:23/0;npm run test:ci 全绿。
  • tarball 无真实 Breeze key。

安装

dsh plugin --profile <profile> add ./dsh-plugin-voice-local-0.9.17.tgz

v0.9.16 — dsh-go 原生弹层

Choose a tag to compare

@god1sdfghjkl god1sdfghjkl released this 14 Nov 20:47

0.9.16 — dsh-go 原生弹层(sheet)

改动

  • 原生「语音通话」面板加了 presentation: "sheet":
    • 点输入框上方「通话」状态条、胶囊「语音」、聊天页「插件」入口时,
      面板以弹层盖在当前对话上;
    • 关闭/下滑收起后回到聊天和状态条,不再整页跳转。
  • 面板仍保持 5 行状态和 4 个按钮(试听 / 停止 / 情感 / 通道)。
  • 老 App 不认 presentation 时自动按整页打开,不会坏。
  • test/dshgo-smoke.mjs 增加 sheet 断言。

边界

dsh-go 原生插件协议没有可拖拽到屏幕任意位置的原生悬浮小窗。这次是原生里最接近
「展开 / 收起小窗」的形态:固定状态条 + 可收起的原生 sheet。真要像系统悬浮球一样
任意拖动,只能:

  1. 用 shell.overlay 网页岛(WebView,不是原生,且麦克风仍由 App 负责);
  2. 修改 dsh-go App,增加原生悬浮窗。

验证

  • 官方 manifest schema:通过(presentation 合法)
  • 官方 view schema:通过(视图未改,849 B、5 keyValue、4 按钮)
  • test/dshgo-smoke.mjs:25/0
  • npm run test:ci:全绿
  • tarball 无真实 Breeze key

安装

dsh plugin --profile <profile> add ./dsh-plugin-voice-local-0.9.16.tgz

v0.9.15 — 原生语音通话面板 + 诊断修复

Choose a tag to compare

@god1sdfghjkl god1sdfghjkl released this 14 Nov 18:52

0.9.15 — dsh-go 原生「语音通话」面板 + 诊断修复

界面

  • 原生面板改成通话卡片:顶部动态「语音通话已就绪 / 未就绪」,
    中间「朗读通道 / 音色 / 语音输入 / 自动情感 / 状态」,底部 4 个按钮:
    试听音色 / 停止朗读 / 情感 / 通道。
  • 状态条改为「通话 · 就绪 / Breeze / 自动情感 / 智能情感 / 未就绪」。
  • 插件标题、面板标题统一为「语音通话」。
  • 「语音输入」明确显示 dsh-go 官方语音输入(App 自带麦克风/SenseVoice),
    不再误显示插件的 asrProvider。
  • 「通道」按钮:BreezeBlue 已配置时在云端 / 本地 TTS 之间切换,并写回
    tts-api.json;未配置时保持本地 TTS。

修复 dsh-go 诊断里的 3 项

  • refresh / emotion / open / toast 全部返回显式 {type:...},不再依赖简写。
  • 情感切换成功只刷新面板,不弹 toast,避免「提示太频繁」。
  • 「停止朗读」先检查是否有活跃 audio/voice 会话;没有时只刷新,
    不再发 audio.stop + voice.stop,避免两条「动作格式不对 / 没有协商实例」。
  • 状态显示更准确:声纹开启但未录入时显示「开(未录入)」。

验证

  • dsh-go 官方 manifest schema:通过。
  • 官方 view schema:通过(849 B、5 个 keyValue、4 个按钮)。
  • 官方 effects 校验:open、refresh、audio.play/stop、voice.start/stop
    全部 0 violation。
  • test/dshgo-smoke.mjs:25/0。
  • npm run test:ci:全绿。
  • Tarball 扫描无真实 Breeze key。

安装

dsh plugin --profile <profile> add ./dsh-plugin-voice-local-0.9.15.tgz

桌面端 host 侧代码需重启 DSH;网页端刷新。手机端重新安装 0.9.15 后,
原生「语音通话」面板会刷新;之前诊断里的 3 项应消失。

真机说明

以上为宿主侧/协议层验证;dsh-go 真机上的面板布局、原生音频会话和诊断清零
仍需安装后确认。语音输入走 App 官方麦克风/SenseVoice,不需要网页。

v0.9.14 — dsh-go 原生面板情感切换

Choose a tag to compare

@god1sdfghjkl god1sdfghjkl released this 14 Nov 17:44

0.9.14 — dsh-go 原生面板继续优化

在 0.9.13 的固定胶囊/状态条/原生面板上继续补齐:

  • 原生面板「情感」按钮:按「关 → 关键词规则 → 智能(LLM)→ 关」循环,
    立即写回 tts-api.json,不用打开网页就能切换情感模式。
  • 状态条更准:区分「语音 · 自动情感」和「语音 · 智能情感」;
    本地 TTS 下情感显示「不适用(本地 TTS)」,不会误以为规则/LLM 生效。
  • 音色显示:Breeze · voc_…,比裸 id 更清楚。
  • 面板提示:加一行「点输入框的麦克风说话;长按助手回复可朗读整条消息」。
  • 面板仍在上限内:试听 / 停止 / 情感 / 刷新 共 4 个按钮;910 B。

检查

  • dsh-go 官方 manifest schema:通过。
  • dsh-go 官方 view schema:通过(910 B、6 keyValue、4 按钮)。
  • 官方 effects 校验:toast + refresh、audio.play + voice.start、
    audio.stop + voice.stop、refresh 全部 0 violation。
  • test/dshgo-smoke.mjs:21/0(含三段情感循环、情感动作、面板绑定、未就绪提示)。
  • npm run test:ci:全绿。

安装

dsh plugin --profile <profile> add ./dsh-plugin-voice-local-0.9.14.tgz

桌面端 host 侧代码需重启 DSH;网页端刷新。手机端装 0.9.14 后,
在原生「语音」面板里直接点「情感」即可循环,不需要网页。

真机说明

以上为宿主侧/协议层验证;dsh-go 真机上的胶囊、状态条、面板布局和原生音频会话仍需
安装后确认。语音输入走 App 自带麦克风,不需要网页。

v0.9.13 — dsh-go 原生语音入口

Choose a tag to compare

@god1sdfghjkl god1sdfghjkl released this 14 Nov 17:34

0.9.13 — dsh-go 原生固定语音入口(A 方案)

不依赖网页,在 dsh-go 原生界面直接使用:

  • 输入框胶囊「语音」:点按打开原生「语音」面板。
  • 输入框上方状态条:显示「语音 · 就绪 / Breeze / 智能情感 / 未就绪」,点按同样打开面板。
  • 原生「语音」面板:朗读通道、音色、自动情感、ASR、声纹、状态;
    「试听音色 / 停止朗读 / 刷新」。
  • 语音输入仍用 dsh-go 自带麦克风;插件不申请原生录音权限。
  • 长按助手回复「朗读」继续保留;试听与朗读共用同一套 audio/voice 会话。
  • 面板视图只用 v1 组件,754 B,6 个 keyValue、3 个按钮。

检查

  • dsh-go 官方 manifest schema:通过。
  • dsh-go 官方 view schema:通过(754 B)。
  • 官方 effects 校验:open / audio.play / voice.start / audio.stop / voice.stop / refresh 全部通过,0 violation。
  • test/dshgo-smoke.mjs:19/0(含未就绪提示)。
  • npm run test:ci:全绿(client 42/0、models 34/0、emotion 17/0、downloader 15/0、dsh-go 19/0 等)。

安装

dsh plugin --profile <profile> add ./dsh-plugin-voice-local-0.9.13.tgz

桌面端 host 侧代码需要重启 DSH 后生效;网页端刷新页面即可。

真机说明

以上为宿主侧/协议层验证;dsh-go 真机上的胶囊、状态条、面板布局和原生音频会话仍需
在手机上安装后确认。语音输入走 App 自带麦克风,不需要网页。

v0.9.12

Choose a tag to compare

@god1sdfghjkl god1sdfghjkl released this 14 Nov 16:54

0.9.12 — 智能情感(可选)+ dsh-go 原生朗读适配

BreezeBlue 智能情感(默认关)

  • 在本地关键词规则之上,新增可选的 LLM 按句判断:DSH 主模型输出
    emotion / intensity / instruction,映射到 Breeze 的 instructions + guidance_scale。
  • 当前句播放时预取下一句的表演说明;2.2 秒超时、按句缓存,失败/坏 JSON 自动回退规则。
  • 面板新增「情感模式 → 智能判断 · 智能情感(LLM)开/关」,默认关,不改变现有行为。
  • 插件内部的这次小请求不会触发 llm/stream 自动朗读,避免“自己读自己”。

dsh-go 原生界面专门适配

  • dsh-go 原生「朗读」没有网页端 voice=1 SSE:llm/stream tap 现在无论有没有语音客户端
    都记录主模型路由,智能情感在原生朗读里也能沿用同一个主模型。
  • media 一次产出整段 WAV,因此按整条消息只算一次表演说明,再让所有分段共用;
    8 段不再等 8 次 LLM,更适合 dsh-go 的 30 秒 media 预算。
  • 网页端仍保持逐句预取;本地/桌面行为不受影响。

测试

  • test/smart-emotion-smoke.mjs:假 LLM + 假 Breeze 流的端到端链路(7/0)。
  • test/emotion-smoke.mjs:17/0;test/dshgo-smoke.mjs:10/0;
    test/tts-api-smoke.mjs、test/breeze-smoke.mjs 全绿。
  • npm run test:ci 全绿。

安装

dsh plugin --profile <profile> add ./dsh-plugin-voice-local-0.9.12.tgz

API Key 只存本机 $DSH_HOME/voice-local/tts-api.json,不随包发布。npm 发布仍待账号限制解除,
当前使用 GitHub Release tarball。

v0.9.11 — BreezeBlue 自动情感

Choose a tag to compare

@god1sdfghjkl god1sdfghjkl released this 14 Nov 16:13

v0.9.11 — BreezeBlue 自动情感

新增

  • 按文字自动切换情感:新增 lib/tts/emotion.js,对每一句 TTS 文本做本地判断:
    开心 / 难过 / 生气 / 惊讶 / 紧张 / 温柔 / 俏皮 / 认真 / 自然。
    • 依据情绪词、语气词、感叹号、省略号、连续问号等信号。
    • 自动映射到 Breeze 的 instructions + guidance_scale + speed,每句可不同。
    • 无明显信号时用「自然」,避免整段过度表演。
    • 纯本地规则,不额外调用 LLM,不增加首字延迟。
  • 开关与持久化:语音 API 面板新增「情感模式 · 自动情感 开/关」;breezeAutoEmotion
    写入 tts-api.json,状态接口返回。
  • 自动情感开启时忽略手动「表演说明 / 情感强度 / 语速」,音量仍按滑杆;关闭后恢复手动参数。
  • 新增 test/emotion-smoke.mjs(12/0);breeze-smoke 覆盖单次请求情感(15/0);
    tts-api-smoke 覆盖 autoEmotion 持久化。

实测

  • 太好了,我终于成功了! → 开心,2.12s
  • 对不起,我要走了…… → 难过,3.29s
  • 试听文件在桌面,未入仓;API Key 仅本机保存,仓库/Release 不含密钥。

安装

dsh plugin --profile <profile> add ./dsh-plugin-voice-local-0.9.11.tgz

npm 发布仍待账号限制解除;当前使用 GitHub Release 附件。