Commit Graph

23 Commits

Author SHA1 Message Date
df2cf549c9 refactor: 统一实时协议类型并扩展会话状态字段 2026-03-06 06:53:50 +08:00
48c8444b3f refactor: 重构配置结构,解耦热词、统一认证、移除 TLS 开关
- 新增 ASRConfig,热词从 doubao 提升为 provider 无关配置
- 移除 SecurityConfig,token 移入 ServerConfig
- 移除 tls_auto 配置项,TLS 始终启用(getUserMedia 要求 HTTPS)
- validate() 改为基于 provider 白名单验证,增加 resource_id 校验
- 简化 main.go:移除 scheme 变量和 HTTP 降级分支
- 更新 config.example.yaml 为新结构并修正环境变量前缀
2026-03-02 04:36:22 +08:00
0720505ef6 refactor: 使用 Viper 重构配置管理并实现生产级热重载
- 引入 Viper 库替代手动 YAML 解析
- 实现基于 fsnotify 的配置文件热重载
- 使用 atomic.Value 保证并发安全的配置读写
- 添加配置验证(必填字段检查)
- 深拷贝 Hotwords 切片防止数据竞争
- 使用绝对路径匹配提升跨平台可靠性
- 支持启动失败后重试(不锁死状态)
- 提供 stop 函数正确清理 watcher 资源
- 通过 Oracle 多轮审计确认生产就绪
2026-03-02 02:57:47 +08:00
dd55be6f5b refactor: 使用 Viper 替换手动配置管理,支持原生热重载 2026-03-02 01:56:08 +08:00
b786d9f90b feat: 实现本地热词管理,移除平台绑定
- 使用 corpus.context 参数直接传递热词列表(豆包文档支持)
- 移除 boosting_table_id 配置,避免绑定火山引擎控制台
- 实现 BuildHotwordsContext 函数,将本地热词转换为 JSON 格式
- 热词配置完全本地化,便于迁移到其他 ASR 平台

配置示例:
  hotwords:
    - 张三
    - 李四
    - VoicePaste

程序自动转换为豆包 API 要求的格式:
{"hotwords":[{"word":"张三"},{"word":"李四"},{"word":"VoicePaste"}]}
2026-03-02 01:36:14 +08:00
4120d6451e refactor: 简化热词配置为豆包控制台 ID
- 移除本地热词列表配置,改为直接使用豆包控制台的热词表 ID
- 删除 internal/asr/hotwords.go(不再需要本地解析)
- 简化 client.go 逻辑,直接传递 boosting_table_id
- 移除 protocol.go 中的 boosting_table_name 字段
- 更新配置示例,添加控制台链接说明

使用方法:
1. 在豆包控制台创建热词表:https://console.volcengine.com/speech/hotword
2. 复制热词表 ID 到 config.yaml 的 boosting_table_id 字段
2026-03-02 01:16:34 +08:00
96d685fdf2 feat: 添加豆包 ASR 热词功能支持
- 在 config.yaml 中添加 hotwords 配置项,支持本地管理热词列表
- 实现热词解析、格式化和表名生成工具(internal/asr/hotwords.go)
- 在 ASR 连接建立时自动将热词发送给豆包(boosting_table_name 参数)
- 支持热词权重配置(1-10,默认 4),格式:"词|权重" 或 "词"
- 支持配置热重载,修改热词后新连接自动生效
- 为未来动态热词功能预留扩展接口

热词格式示例:
  hotwords:
    - 张三|8
    - VoicePaste|10
    - 人工智能|6
2026-03-02 00:55:37 +08:00
b87fead2fd refactor: 优化代码质量,遵循 KISS 原则
- 移除自签证书回退逻辑,简化为仅使用 AnyIP 证书
- 删除 internal/tls/generate.go(不再需要)
- 重构 main.go:提取初始化逻辑,main() 从 156 行降至 13 行
- 重构 internal/ws/handler.go:提取消息处理,handleConn() 从 131 行降至 25 行
- 重构 internal/config/load.go:使用 map 驱动消除重复代码
- 优化前端 startRecording():使用标准 AbortController API
- 优化前端 showToast():预定义 DOM 元素,代码减少 50%

代码行数减少 90 行,复杂度显著降低,所有构建通过
2026-03-02 00:25:14 +08:00
8c7b9b45fd feat: 启用豆包二遍识别模式以提升实时性和准确率
- 切换到 bigmodel_async endpoint 并启用 enable_nonstream
- 第一遍流式识别提供实时文字预览
- VAD 分句后自动触发第二遍非流式识别提升准确率
- 修改文本处理逻辑从累加改为替换(适配 full 模式)
- 统一配置字段命名:app_key → app_id, access_key → access_token
2026-03-01 21:34:54 +08:00
e4b5841c93 fix: 修复历史记录不保存的问题(final 消息类型被错误覆盖为 partial) 2026-03-01 06:43:59 +08:00
bfaa792760 fix: 修复语音停顿导致提前粘贴的问题(累积文本,松开按钮才粘贴) 2026-03-01 06:34:55 +08:00
350e405fac feat: ASR 从双向流式切换为流式输入模式(bigmodel_nostream)
- endpoint 从 bigmodel_async 改为 bigmodel_nostream
- 二进制协议去掉 sequence 字段,初始请求和音频帧均不带序号
- 最后一帧使用 FlagLastNoSeq 标志
- RequestMeta 新增 result_type=single、end_window_size=400
- ShowUtterances 关闭(nostream 模式不需要)
- readLoop 简化:nostream 模式下直接返回 final 结果
2026-03-01 06:12:58 +08:00
2dbc916652 refactor: 移除二维码和交叉编译,改为列出所有 LAN IP 地址;清理依赖 2026-03-01 04:45:27 +08:00
193f208d80 fix: 修复 Windows 上 Ctrl+V 粘贴失效,改用 KeyDown/KeyUp 手动控制修饰键 2026-03-01 04:27:15 +08:00
75abe72bf6 fix: 修复停止录音后未等待豆包返回最终结果,导致历史记录和自动粘贴失效 2026-03-01 04:21:57 +08:00
9420d43392 fix: token 改为配置文件读取,不再自动生成;UI 全部汉化 2026-03-01 04:09:55 +08:00
2ce0323ba5 fix: 修复豆包 ASR 音频格式字段,format 应为 pcm,codec 应为 raw 2026-03-01 04:01:46 +08:00
8b9070aac8 feat: add AnyIP certificate download with cache and fallback chain 2026-03-01 03:20:31 +08:00
35032c1777 feat: add Doubao ASR client and paste module 2026-03-01 03:03:46 +08:00
39e56e5acc feat: add WebSocket handler with token auth and session management 2026-03-01 03:03:34 +08:00
4ebc9226ed feat: add Fiber HTTPS server with embedded static files 2026-03-01 03:03:15 +08:00
044a8aa166 feat: add TLS certificate management with AnyIP and self-signed fallback 2026-03-01 03:03:06 +08:00
6b74ad399d feat: add config loading with YAML, env override, and hot-reload 2026-03-01 03:02:57 +08:00