codexmobile-relay / client /src /voice-utils.js
Codex
deploy: CodexMobile Relay
90f0300
Raw
History Blame Contribute Delete
1.55 kB
export function realtimePayloadErrorMessage(payload) {
return String(payload?.error?.message || payload?.error || payload?.message || '');
}
export function isBenignRealtimeCancelError(payload) {
return /Conversation has none active response/i.test(realtimePayloadErrorMessage(payload));
}
export function normalizeVoiceCommandText(value) {
return String(value || '')
.toLowerCase()
.replace(/[\s,。!?、,.!?;;::"'“”‘’()()【】\[\]<>《》]/g, '');
}
export function isVoiceHandoffCommand(value) {
const text = normalizeVoiceCommandText(value);
if (!text) {
return false;
}
const wantsSummary = /总结|整理|归纳|汇总|梳理|提炼|概括|组织|形成任务|变成任务|整理成任务/.test(text);
const wantsHandoff = /交给|发给|发送给|提交给|提交|让|叫|拿给|丢给|转给|传给|给/.test(text);
const wantsAction = /执行|处理|做|改|实现|修|查|跑|操作|落实|开始干/.test(text);
const mentionsExecutor =
/codex|code[x叉]?|代码|扣德克斯|扣得克斯|扣的克斯|扣得|扣德|科德克斯|科得克斯|寇德克斯|口德克斯|口得克斯|助手|后台|你/.test(text);
if (mentionsExecutor && ((wantsSummary && wantsHandoff) || (wantsSummary && wantsAction) || (wantsHandoff && wantsAction))) {
return true;
}
if (wantsSummary && wantsHandoff) {
return true;
}
if (/交给codex|发给codex|提交给codex|让codex|交给代码|发给代码|提交给代码|让代码/.test(text)) {
return true;
}
return false;
}