@@ -3,10 +3,6 @@ import { mkdtemp, rm, writeFile } from "node:fs/promises";
33import { tmpdir } from "node:os" ;
44import path from "node:path" ;
55import { pathToFileURL } from "node:url" ;
6- import { GoogleGenAI , Modality } from "@google/genai" ;
7- import { chromium , type Browser } from "playwright" ;
8- import { createServer } from "vite" ;
9- import { buildOpenAIRealtimeVoiceProvider } from "../../extensions/openai/realtime-voice-provider.ts" ;
106import { readBoundedResponseText } from "../lib/bounded-response.ts" ;
117import {
128 parseStrictIntegerOption ,
@@ -30,6 +26,10 @@ type RealtimeSmokeCliOptions = {
3026 help : boolean ;
3127} ;
3228
29+ // Keep live stacks behind their owning smoke paths so help and safety helpers stay lightweight.
30+ type Browser = import ( "playwright" ) . Browser ;
31+ type ViteDevServer = Awaited < ReturnType < ( typeof import ( "vite" ) ) [ "createServer" ] > > ;
32+
3333type SmokeResult = {
3434 name : string ;
3535 ok : boolean ;
@@ -269,6 +269,8 @@ async function createOpenAIClientSecret(
269269}
270270
271271async function smokeOpenAIBackendBridge ( apiKey : string ) : Promise < SmokeResult > {
272+ const { buildOpenAIRealtimeVoiceProvider } =
273+ await import ( "../../extensions/openai/realtime-voice-provider.ts" ) ;
272274 const provider = buildOpenAIRealtimeVoiceProvider ( ) ;
273275 const events : string [ ] = [ ] ;
274276 const bridge = provider . createBridge ( {
@@ -445,6 +447,7 @@ async function smokeOpenAIWebRtc(browser: Browser, apiKey: string): Promise<Smok
445447}
446448
447449async function createGoogleLiveToken ( apiKey : string ) : Promise < string > {
450+ const { GoogleGenAI, Modality } = await import ( "@google/genai" ) ;
448451 const ai = new GoogleGenAI ( {
449452 apiKey,
450453 httpOptions : { apiVersion : "v1alpha" } ,
@@ -574,9 +577,10 @@ async function smokeGoogleLiveBrowserWs(browser: Browser, apiKey: string): Promi
574577}
575578
576579async function smokeGatewayRelayBrowser ( browser : Browser ) : Promise < SmokeResult > {
577- let server : Awaited < ReturnType < typeof createServer > > | undefined ;
580+ let server : ViteDevServer | undefined ;
578581 const dir = await mkdtemp ( path . join ( tmpdir ( ) , "openclaw-realtime-talk-" ) ) ;
579582 try {
583+ const { createServer } = await import ( "vite" ) ;
580584 const repoRoot = process . cwd ( ) . replaceAll ( "\\" , "/" ) ;
581585 const relayModulePath = JSON . stringify (
582586 `/@fs/${ repoRoot } /ui/src/ui/chat/realtime-talk-gateway-relay.ts` ,
@@ -766,6 +770,7 @@ async function main(argv = process.argv.slice(2)): Promise<void> {
766770 console . log ( usage ( ) ) ;
767771 return ;
768772 }
773+ const { chromium } = await import ( "playwright" ) ;
769774 const openAIKey = getEnv ( "OPENAI_API_KEY" ) ;
770775 const googleKey = getEnv ( "GEMINI_API_KEY" ) ?? getEnv ( "GOOGLE_API_KEY" ) ;
771776 const browser = await chromium . launch ( {
0 commit comments