Skip to content

Commit 52196c6

Browse files
committed
Adapt Windows transport probe to startup output
1 parent 7dbdf19 commit 52196c6

1 file changed

Lines changed: 48 additions & 16 deletions

File tree

tests/e2e/transport.spec.ts

Lines changed: 48 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ type WsEventFrame = {
2222
};
2323

2424
type 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+
661693
function countTrackedSockets(tracker: TransportTrackerSnapshot, fragment: string) {
662694
return tracker.urls.filter((url) => url.includes(fragment)).length;
663695
}

0 commit comments

Comments
 (0)