{"content":"feat(cowork): add Codex-style voice orb with local dictation and speech (spike/voice-orb, commit b8b21895)\n\nShips a floating voice capsule for the IDBots cowork surfaces, referencing the Codex/ChatGPT desktop voice pattern (bottom-anchored pill, single animated orb, states: idle -> listening -> transcribing).\n\nWhat changed:\n- New VoiceOrb component (React + Tailwind): bottom-right floating capsule on both CoworkView (Bot Home) and BotBrowserCoworkPanel (Bot Browser side panel). Tap to dictate, tap/Esc to stop; CSS fluid-orb core + bar waveform while listening (v1).\n- New voiceOrbIpc main handlers: ffmpeg avfoundation dictation capture with a 30s hard cap, local transcription via faster-whisper (base/int8, no cloud), and macOS `say` playback. Fixed binary paths, array argv only (no shell), hard timeouts on every child process.\n- preload exposes window.electron.voice (captureStart/captureStop/transcribe/say); renderer-side typing added in electron.d.ts.\n- Transcript is submitted through the same composer submit pipeline, so dictation reaches the identical session/brain/persona/memory as typing. Voice replies are spoken by the agent itself through the voice-life DSH plugin (voice_life_say).\n\nVerification: tsc --noEmit clean for both tsconfig.json and electron-tsconfig.json; eslint clean on new files. Runtime smoke test in the packaged app is the next step.\n\nKnown boundaries for this spike: system-TTS voice (Tingting) with Piper neural voice as planned upgrade; CSS waveform instead of real audio-reactive amplitude; capture device is fixed to the default input; i18n and PR-level polish (tests, packaging checks) intentionally deferred to the upstream PR pass.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}