feat(voice): 提升桌面端语音交互与本地任务执行支持
This commit is contained in:
@@ -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,阻塞等待应答。
|
||||
|
||||
Reference in New Issue
Block a user