feat(call): Web Speech fallback for LAN/Windows calls - #21
Conversation
polar: supamaus in FUNDING.yml puts the Sponsor button on the repo, with the direct checkout link (one-time pay-what-you-want or monthly) as the custom entry. The README section says the quiet part out loud: nothing ever sits behind a paywall. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Add Polar funding: Sponsor button + README support section
…companion-awake feat(computer): add secure VPS parity and companion uptime
…on-computer-tools fix(drivers): scope local-computer approvals to real desktop-control tools only
Same for-the-badge style and 40px height as the download row, heart front and center, one click to the Polar checkout. (Re-lands the badge commit that missed the milind-soni#460 merge.) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Big support badge under the download buttons
The branch's hide-until-skin-handshake (waitsForSkinSync + show:!...) lost its definition when main's windowChromeOptions refactor auto-merged over the BrowserWindow options; the kept fallback block then referenced an undefined identifier and createWindow threw at startup — caught by the Linux packaged-app smoke. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ace-v3 feat(browser): a built-in browser per bot — Browser tab in the computer panel, driven over CDP
…soni#573) * fix(browser): harden built-in browser isolation and takeover * test(browser): make hardening checks cross-platform * test(browser): isolate Windows LPAC runner setup * test(browser): keep macOS fixture sandboxed * docs(browser): clarify headless Electron fixture * test(browser): preserve renderer sandbox on Windows * docs(browser): describe Windows fixture scope precisely * fix(browser): close review hardening gaps * test(browser): preserve Windows Electron sandbox * test(browser): mirror Chromium Windows sandbox setup * test(browser): avoid Windows runner GPU regression * test(browser): avoid GPU process in headless Windows fixture * test(browser): isolate Windows runner regression * test(browser): use Windows desktop sandbox runner * fix(browser): close remaining isolation gaps * test(browser): strengthen nested secret regression * fix(browser): close final isolation gaps * test(browser): handle Windows child termination * test(browser): allocate isolated server ports safely
There was a problem hiding this comment.
This PR successfully implements Web Speech API fallback for browser-based calls, enabling call functionality on LAN/Windows environments without requiring the macOS dictation helper. The implementation is well-structured with proper abstraction, error handling, and security considerations.
Key improvements:
- Adds browser speech recognition fallback using Web Speech API with proper secure context checks
- Maintains the existing half-duplex call flow to prevent feedback loops
- Includes comprehensive error handling and user-friendly error messages
- Properly abstracts speech capture with clean separation between native and browser implementations
- Adds Vite config support for
allowedHosts: trueto enable nginx TLS offload scenarios
The code follows good practices with appropriate error handling, state management, and user feedback. No blocking issues identified.
You can now have the agent implement changes and create commits directly on your pull request's source branch. Simply comment with /q followed by your request in natural language to ask the agent to make changes.
* feat(gemini): let bots coordinate with teammates * test(gemini): complete MCP client handshake
…r your next message In computer/browser modes every turn ends with a screen capture that runs AFTER the bot goes idle (a real screenshot round trip). A fast follow-up send — or the steer-queue drain — landed first, and the frame then chained onto the new leaf, stranding the user's message ABOVE the screenshot. In browser mode this reproduced on nearly every send. The fold now anchors the frame to the turn's actual last message before the capture starts, and the store gains insertMessageAfter: when the anchor is no longer the leaf, the artifact is inserted mid-chain and the anchor's children are re-parented onto it, so the transcript reads turn → screenshot → follow-up and the leaf stays with the user's message. The renderer adopts a new message as the leaf only when it actually chains onto the current one, matching the server rule. Room threads keep the old append (their order is array-based, not chained); called out in the fold comment. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…-ordering fix(chat): settle screenshots chain-insert at the turn instead of after your next message
…orking indicators Mid-turn 1:1 sends wait in the server steer queue and stay off the transcript until drain (they must never become the active leaf). Render that queue as ghost rows at the transcript tail — dashed bubbles in send order, each with its own cancel — instead of only a composer chip. The chip remains for rooms, whose queue is composer-local. Long-lived indicators stop repainting every vsync: new steps()-eased status-pulse keyframes drive a three-dot WorkingDots cluster replacing the header/tool/provisioning spinners and the timeline pulse, and the working row gains a self-ticking elapsed timer that mutates its own text node instead of committing through React. Scrollbar grabs and ArrowUp outside inputs now break bottom-follow like wheel-up already did; overscroll-y-contain stops trackpad chaining. Drops the dead message.queued caption (the server no longer sets that flag). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Queued sends as ghost transcript rows + duty-cycled working indicators
…erimental-settings Codex/promote experimental settings
Ask bot A to make a routine for bot B and it scheduled the routine on itself: the tool had no way to name a target and the API hard-bound the card and routine to the sender. propose_routine now takes an optional flat for_bot_id (id from list_bots; omitted = self, unchanged). The route resolves and authorizes the target with teaching errors (unknown id, different section), the target rides inside the card's fingerprinted operation so a shown card cannot be redirected, and on confirm the routine is created with the target's botId so runs use that bot's engine and permissions. The target is re-authorized at confirm time — the card can sit open while the target bot is deleted or moved — and a refusal lands on the card as held text. Card authority, quotas, and propose_routine_action stay with the proposing bot. Part 1 of milind-soni#583. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…d-ending
A busy target returned a flat busy bounce ('try again after it
finishes') — a mid-turn dead-end that models rarely act on, so the
exchange evaporated. Both bounce points (initial check and the
post-approval re-check) now demote the synchronous ask into a durable
delegation through the existing ledger: bounded busy retries, receipts,
restart-safe, drains when the peer's blocking turn settles. The asker's
reply carries the task id with check_delegation/wait_delegation
guidance and the standard 'Delegated to @b: asked while busy' chip
lands on its thread. If the ledger refuses (cap/depth), the plain busy
bounce is returned. The busy check also moved below sender validation
so unknown senders get their 403 first.
Part 2 of milind-soni#583.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…omputer feat(ios): support multiple paired computers
…ueue ask_bot to a busy peer queues a delegation instead of dead-ending
Routines proposed for another bot now schedule on that bot
…er-delivery Make queued bot replies return reliably
d6804f3 to
b29900a
Compare
Squash of matthewhand/OpenMausBot review PRs: - #11 LAN loopback viewer - #12 agent comm popups - #14 OpenAI-compatible TTS - #15 custom HTTP/SSE MCP servers - #16 LAN Bearer auth - #17 Windows NSSM service - #21 Web Speech fallback for LAN/Windows calls - #22 hide inter-bot channels and specialist bots Plus tool-call inspector popup and the 8800/8802 review harness. Not included: #18 review-only (do not merge), #20 upstream sync (this commit is the consolidation), #24 per-item hide (conflicts with #22 sidebar hide).
|
Superseded by squash commit 36a058e on |
Browser/Web Speech API fallback when the macOS dictation helper is absent. Call button no longer requires Apple STT. HTTPS or localhost still required for the mic. allowedHosts:true so nginx TLS offload can proxy Vite.