You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Part of #3505 · PR-7 · Phase 2 · Depends on PR-6 · Backend-blocked: YES (bot:speak)
Approve and execute in-call requests, with an approval model that works when the user isn't looking at the screen.
Scope
Dual-channel approval for in-call tool execution (per the "always require approval" decision):
Post ApprovalRequestCard in the meeting thread (visual, for later).
Emit bot:speak { text: "I'd like to <action>. Say 'approve' to confirm." }.
First response wins: voice (next bot:in_call_request whose commandText parses via existing parse_approval_reply, approval/gate.rs) or the thread card (approval_decide). Timeout: 2 min (shorter than the standard 10-min TTL).
On approve → execute_dispatch, post result in thread, optional bot:speak confirmation. On deny/timeout → post denial + bot:speak "Okay, I won't do that."
approval/gate.rs: add task-local InCallApprovalContext { meeting_id, correlation_id } (mirrors existing APPROVAL_CHAT_CONTEXT); when set, intercept() emits bot:speak alongside the card and listens for a voice decision.
Example end-to-end: "schedule a follow-up in 40 min" → GOOGLECALENDAR_CREATE_EVENT → approval → event created → link posted to thread + verbal confirm; allow inviting attendees.
Frontend: backendMeetSlicependingInCallAction; show "Waiting for approval: " in MeetingBotsCard.tsx.
An in-call request can be approved by voice or thread card, executes the tool, posts the result, and (optionally) confirms verbally — never executing without approval.
Activity
refactor(approval): remove in-call approval context and TTL