@@ -22,6 +22,7 @@ type WsEventFrame = {
2222} ;
2323
2424type WsTransportBaseline = {
25+ agentProbeMode : 'startup' | 'stdin' ;
2526 controlPlaneCommands : string [ ] ;
2627 websocketUrls : string [ ] ;
2728 workspaceId : string ;
@@ -123,13 +124,22 @@ test.describe('workspace transport baseline', () => {
123124 test ( 'terminal and agent streams still arrive over /ws' , async ( { page } ) => {
124125 const baseline = await observeWsTransport ( page ) ;
125126
126- expect ( baseline . controlPlaneCommands ) . toEqual ( [
127- 'terminal_create' ,
128- 'terminal_write' ,
129- 'create_session' ,
130- 'agent_start' ,
131- 'agent_send' ,
132- ] ) ;
127+ expect ( baseline . controlPlaneCommands ) . toEqual (
128+ baseline . agentProbeMode === 'stdin'
129+ ? [
130+ 'terminal_create' ,
131+ 'terminal_write' ,
132+ 'create_session' ,
133+ 'agent_start' ,
134+ 'agent_send' ,
135+ ]
136+ : [
137+ 'terminal_create' ,
138+ 'terminal_write' ,
139+ 'create_session' ,
140+ 'agent_start' ,
141+ ] ,
142+ ) ;
133143 expect ( baseline . websocketUrls . some ( ( url ) => url . includes ( '/ws' ) ) ) . toBe ( true ) ;
134144 expect ( baseline . terminalFrame . event ) . toBe ( 'terminal://event' ) ;
135145 expect ( baseline . terminalFrame . payload . workspace_id ) . toBe ( baseline . workspaceId ) ;
@@ -200,6 +210,7 @@ async function observeWsTransport(page: Page): Promise<WsTransportBaseline> {
200210 await installTransportProbe ( page ) ;
201211 const workspace = await openWorkspace ( page ) ;
202212 await waitForBackendSocket ( page ) ;
213+ const agentProbe = buildAgentProbe ( workspace . target ) ;
203214
204215 const controlPlaneCommands : string [ ] = [ ] ;
205216
@@ -230,19 +241,21 @@ async function observeWsTransport(page: Page): Promise<WsTransportBaseline> {
230241 workspaceId : workspace . workspaceId ,
231242 sessionId,
232243 provider : 'shell' ,
233- command : buildAgentProbeCommand ( workspace . target ) ,
244+ command : agentProbe . command ,
234245 cols : 120 ,
235246 rows : 30 ,
236247 } ) ;
237248 controlPlaneCommands . push ( 'agent_start' ) ;
238249
239- await invokeRpc ( page , 'agent_send' , {
240- workspaceId : workspace . workspaceId ,
241- sessionId,
242- input : buildAgentProbeInput ( workspace . target ) ,
243- appendNewline : true ,
244- } ) ;
245- controlPlaneCommands . push ( 'agent_send' ) ;
250+ if ( agentProbe . input ) {
251+ await invokeRpc ( page , 'agent_send' , {
252+ workspaceId : workspace . workspaceId ,
253+ sessionId,
254+ input : agentProbe . input ,
255+ appendNewline : true ,
256+ } ) ;
257+ controlPlaneCommands . push ( 'agent_send' ) ;
258+ }
246259
247260 const terminalFrame = await waitForWsEvent (
248261 page ,
@@ -254,11 +267,12 @@ async function observeWsTransport(page: Page): Promise<WsTransportBaseline> {
254267 'agent://event' ,
255268 ( payload ) => payload . workspace_id === workspace . workspaceId
256269 && payload . session_id === sessionId
257- && String ( payload . data ?? '' ) . includes ( 'transport-agent' ) ,
270+ && String ( payload . data ?? '' ) . includes ( agentProbe . expectedText ) ,
258271 ) ;
259272 const tracker = await readTransportTracker ( page ) ;
260273
261274 return {
275+ agentProbeMode : agentProbe . mode ,
262276 controlPlaneCommands,
263277 websocketUrls : tracker . urls ,
264278 workspaceId : workspace . workspaceId ,
@@ -658,6 +672,24 @@ function buildAgentProbeInput(target: WorkspaceHandle['target']) {
658672 return 'transport-agent' ;
659673}
660674
675+ function buildAgentProbe ( target : WorkspaceHandle [ 'target' ] ) {
676+ if ( isWindowsNativeTarget ( target ) ) {
677+ return {
678+ mode : 'startup' as const ,
679+ command : 'cmd /Q /D /C echo transport-agent' ,
680+ input : null ,
681+ expectedText : 'transport-agent' ,
682+ } ;
683+ }
684+
685+ return {
686+ mode : 'stdin' as const ,
687+ command : buildAgentProbeCommand ( target ) ,
688+ input : buildAgentProbeInput ( target ) ,
689+ expectedText : 'transport-agent' ,
690+ } ;
691+ }
692+
661693function countTrackedSockets ( tracker : TransportTrackerSnapshot , fragment : string ) {
662694 return tracker . urls . filter ( ( url ) => url . includes ( fragment ) ) . length ;
663695}
0 commit comments