Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ All notable changes to this project will be documented in this file.

### Fixes

- Fix voice session immediately disconnecting with WebSocket 1007 by replacing `sendClientContent` with `sendRealtimeInput` to avoid mixing input modes
- Fix workspace intent bar erroring on simple questions / read-only queries instead of showing response text
- Fix bottom bar button/input height mismatch on desktop (Send and Mic buttons now match input height at sm+ breakpoint)
- Fix missing voice and visual feedback after changeset execution via voice approval (PR `#29`)
Expand Down
8 changes: 4 additions & 4 deletions lib/hooks/use-gemini-live.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import { DEMO_HEADER_NAME } from "@/lib/demo/config";
import {
buildPrimarySDKConfig,
buildSidecarSDKConfig,

Check warning on line 18 in lib/hooks/use-gemini-live.ts

View workflow job for this annotation

GitHub Actions / quality

'buildSidecarSDKConfig' is defined but never used
classifyEmotionalState,
} from "@/lib/voice/gemini-live";
import type {
Expand Down Expand Up @@ -354,7 +354,7 @@

// ── Sidecar message handler ──────────────────────────────────────

const handleSidecarMessage = useCallback((message: LiveServerMessage) => {

Check warning on line 357 in lib/hooks/use-gemini-live.ts

View workflow job for this annotation

GitHub Actions / quality

'handleSidecarMessage' is assigned a value but never used
try {
if (message.setupComplete) {
console.log("[gemini-live] Sidecar setup complete — ready for audio");
Expand Down Expand Up @@ -600,11 +600,11 @@
};

// Trigger the model's initial greeting from the system instruction.
// Placed after audio pipeline is wired so mic audio is already flowing
// when the model starts responding. Wrapped in try-catch so a failure
// doesn't tear down the session (model will respond to audio instead).
// Uses sendRealtimeInput (same mode as audio) to avoid mixing with
// sendClientContent, which causes 1007 "invalid argument" when audio
// is also flowing via sendRealtimeInput.
try {
primarySession.sendClientContent({ turnComplete: true });
primarySession.sendRealtimeInput({ text: " " });
} catch {
// Non-critical — model will respond once it receives audio input
}
Expand Down
Loading