@@ -17,6 +17,7 @@ import * as ChildProcessSpawner from "effect/unstable/process/ChildProcessSpawne
1717import * as AcpErrors from "effect-acp/errors" ;
1818
1919import {
20+ ANTIGRAVITY_AUTH_BROWSER_MARKER ,
2021 ANTIGRAVITY_AUTH_STDOUT_PREFIX ,
2122 ANTIGRAVITY_PERSONAL_AUTH ,
2223 ANTIGRAVITY_SIGN_IN_REQUIRED_MESSAGE ,
@@ -26,6 +27,7 @@ import {
2627 antigravityProfileSettings ,
2728 buildAntigravityAcpSpawnInput ,
2829 isAntigravitySignInRequiredError ,
30+ makeAntigravityStderrHandler ,
2931 makeAntigravityStdoutTransform ,
3032 parseAntigravityAuthorizationUrl ,
3133 prepareAntigravityProfile ,
@@ -388,6 +390,43 @@ describe("Antigravity stdout compatibility", () => {
388390 ) ;
389391} ) ;
390392
393+ describe ( "Antigravity stderr compatibility" , ( ) => {
394+ it . effect ( "forwards a fragmented browser-helper URL without exposing other stderr" , ( ) =>
395+ Effect . gen ( function * ( ) {
396+ const urls : string [ ] = [ ] ;
397+ const markerLine = `${ ANTIGRAVITY_AUTH_BROWSER_MARKER } ${ encodeUnknownJson ( authorizationUrl ) } \n` ;
398+ const handleStderr = makeAntigravityStderrHandler ( {
399+ onAuthorizationUrl : ( url ) => Effect . sync ( ( ) => void urls . push ( url ) ) ,
400+ } ) ;
401+
402+ yield * handleStderr ( `native log\n${ markerLine . slice ( 0 , 12 ) } ` ) ;
403+ yield * handleStderr ( markerLine . slice ( 12 , 70 ) ) ;
404+ yield * handleStderr ( `${ markerLine . slice ( 70 ) } another native log\n` ) ;
405+
406+ expect ( urls ) . toEqual ( [ authorizationUrl ] ) ;
407+ } ) ,
408+ ) ;
409+
410+ it . effect ( "ignores malformed and similar browser-helper messages" , ( ) =>
411+ Effect . gen ( function * ( ) {
412+ const urls : string [ ] = [ ] ;
413+ const handleStderr = makeAntigravityStderrHandler ( {
414+ onAuthorizationUrl : ( url ) => Effect . sync ( ( ) => void urls . push ( url ) ) ,
415+ } ) ;
416+
417+ yield * handleStderr (
418+ ` ${ ANTIGRAVITY_AUTH_BROWSER_MARKER } ${ encodeUnknownJson ( authorizationUrl ) } \n` ,
419+ ) ;
420+ yield * handleStderr ( `${ ANTIGRAVITY_AUTH_BROWSER_MARKER } ${ authorizationUrl } \n` ) ;
421+ yield * handleStderr (
422+ `${ ANTIGRAVITY_AUTH_BROWSER_MARKER } ${ encodeUnknownJson ( "https://example.com" ) } \n` ,
423+ ) ;
424+
425+ expect ( urls ) . toEqual ( [ ] ) ;
426+ } ) ,
427+ ) ;
428+ } ) ;
429+
391430it . layer ( NodeServices . layer ) ( "Antigravity profile preparation" , ( it ) => {
392431 it . effect ( "preflights the no-browser helper and creates private directories only" , ( ) =>
393432 Effect . gen ( function * ( ) {
0 commit comments