feat(voice): 提升桌面端语音交互与本地任务执行支持

This commit is contained in:
Blizzard
2026-07-24 16:40:25 +08:00
parent e9a8b9b4c6
commit aba88193d8
33 changed files with 1909 additions and 102 deletions
+27
View File
@@ -285,6 +285,33 @@ func (b *Bus) SubscribeExec(taskID string, onEvent func([]byte), onDone func())
return sub.Unsubscribe, nil
}
// ---- 语音事件(JARVIS 动作/主动播报,core NATS pub-sub----
// PublishVoiceEvent 给某用户的语音会话发一条事件(navigate/announce)。
// 无人订阅(用户没开语音)就静默丢弃——即时性消息,不补投。
func (b *Bus) PublishVoiceEvent(uid string, ev *contract.VoiceEvent) error {
data, err := json.Marshal(ev)
if err != nil {
return err
}
return b.nc.Publish(contract.VoiceEventSubject(uid), data)
}
// SubscribeVoiceEvent 订阅某用户的语音事件(语音 WS 会话建立时挂上,会话结束退订)。
func (b *Bus) SubscribeVoiceEvent(uid string, onEvent func(*contract.VoiceEvent)) (unsub func() error, err error) {
sub, err := b.nc.Subscribe(contract.VoiceEventSubject(uid), func(m *nats.Msg) {
var ev contract.VoiceEvent
if json.Unmarshal(m.Data, &ev) != nil {
return
}
onEvent(&ev)
})
if err != nil {
return nil, fmt.Errorf("subscribe voice event: %w", err)
}
return sub.Unsubscribe, nil
}
// ---- MCP 工具调用(core NATS request-reply----
// CallTool 同步调用一个 MCP 工具:发到 subject,阻塞等待应答。