@@ -53,10 +53,6 @@ const providerConfig = {
5353} ;
5454
5555const PACKAGE_DIST_INVENTORY_RELATIVE_PATH = "dist/postinstall-inventory.json" ;
56- const PACKAGED_QA_RUNTIME_PATHS = new Set ( [
57- "dist/extensions/qa-channel/runtime-api.js" ,
58- "dist/extensions/qa-lab/runtime-api.js" ,
59- ] ) ;
6056const OMITTED_QA_EXTENSION_PREFIXES = [
6157 "dist/extensions/qa-channel/" ,
6258 "dist/extensions/qa-lab/" ,
@@ -186,11 +182,13 @@ export function resolveRunnerMatrix(params) {
186182 ] ;
187183 return {
188184 include : runners . flatMap ( ( runner ) =>
189- suites . map ( ( suite ) => ( {
190- ...runner ,
191- suite,
192- suite_label : formatSuiteLabel ( suite ) ,
193- } ) ) ,
185+ suites . map ( ( suite ) =>
186+ Object . assign ( { } , runner , {
187+ suite,
188+ suite_label : formatSuiteLabel ( suite ) ,
189+ lane : suite . includes ( `upgrade` ) || suite === `dev-update` ? `upgrade` : `fresh` ,
190+ } ) ,
191+ ) ,
194192 ) ,
195193 } ;
196194}
@@ -508,7 +506,7 @@ function isPackagedDistPath(relativePath) {
508506 return false ;
509507 }
510508 if ( OMITTED_QA_EXTENSION_PREFIXES . some ( ( prefix ) => relativePath . startsWith ( prefix ) ) ) {
511- return PACKAGED_QA_RUNTIME_PATHS . has ( relativePath ) ;
509+ return false ;
512510 }
513511 return true ;
514512}
@@ -1790,8 +1788,7 @@ async function runInstalledAgentTurn(params) {
17901788 logPath : params . logPath ,
17911789 timeoutMs : 10 * 60 * 1000 ,
17921790 } ) ;
1793- const payloadTexts = parseAgentPayloadTexts ( result . stdout ) ;
1794- if ( ! payloadTexts . some ( ( text ) => text . trim ( ) === "OK" ) ) {
1791+ if ( ! agentOutputHasExpectedOkMarker ( result . stdout , { logPath : params . logPath } ) ) {
17951792 throw new Error ( "Agent output did not contain the expected OK marker." ) ;
17961793 }
17971794 return result ;
@@ -2439,27 +2436,57 @@ async function runAgentTurn(params) {
24392436 logPath : params . logPath ,
24402437 timeoutMs : 10 * 60 * 1000 ,
24412438 } ) ;
2442- const payloadTexts = parseAgentPayloadTexts ( result . stdout ) ;
2443- if ( ! payloadTexts . some ( ( text ) => text . trim ( ) === "OK" ) ) {
2439+ if ( ! agentOutputHasExpectedOkMarker ( result . stdout , { logPath : params . logPath } ) ) {
24442440 throw new Error ( "Agent output did not contain the expected OK marker." ) ;
24452441 }
24462442 return result ;
24472443}
24482444
2445+ export function agentOutputHasExpectedOkMarker ( stdout , options = { } ) {
2446+ const payloadTexts = parseAgentPayloadTexts ( stdout ) ;
2447+ if ( payloadTexts . some ( ( text ) => text . trim ( ) === "OK" ) ) {
2448+ return true ;
2449+ }
2450+ if ( typeof options . logPath !== "string" ) {
2451+ return false ;
2452+ }
2453+ try {
2454+ const logTexts = parseAgentPayloadTexts ( readFileSync ( options . logPath , "utf8" ) ) ;
2455+ return logTexts . some ( ( text ) => text . trim ( ) === "OK" ) ;
2456+ } catch {
2457+ return false ;
2458+ }
2459+ }
2460+
24492461function parseAgentPayloadTexts ( stdout ) {
24502462 try {
24512463 const payload = JSON . parse ( stdout ) ;
2464+ const directTexts = [
2465+ payload ?. finalAssistantVisibleText ,
2466+ payload ?. finalAssistantRawText ,
2467+ payload ?. meta ?. finalAssistantVisibleText ,
2468+ payload ?. meta ?. finalAssistantRawText ,
2469+ payload ?. result ?. finalAssistantVisibleText ,
2470+ payload ?. result ?. finalAssistantRawText ,
2471+ payload ?. result ?. meta ?. finalAssistantVisibleText ,
2472+ payload ?. result ?. meta ?. finalAssistantRawText ,
2473+ ] . filter ( ( text ) : text is string => typeof text === "string" ) ;
24522474 const entries = Array . isArray ( payload ?. payloads )
24532475 ? payload . payloads
24542476 : Array . isArray ( payload ?. result ?. payloads )
24552477 ? payload . result . payloads
24562478 : [ ] ;
2457- if ( ! Array . isArray ( entries ) ) {
2458- return [ ] ;
2459- }
2460- return entries . flatMap ( ( entry ) => ( typeof entry ?. text === "string" ? [ entry . text ] : [ ] ) ) ;
2479+ const payloadTexts = Array . isArray ( entries )
2480+ ? entries . flatMap ( ( entry ) => ( typeof entry ?. text === "string" ? [ entry . text ] : [ ] ) )
2481+ : [ ] ;
2482+ return [ ... directTexts , ... payloadTexts ] ;
24612483 } catch {
2462- return stdout . trim ( ) ? [ stdout ] : [ ] ;
2484+ const finalTextMatches = [
2485+ ...stdout . matchAll (
2486+ / " (?: f i n a l A s s i s t a n t V i s i b l e T e x t | f i n a l A s s i s t a n t R a w T e x t | t e x t ) " \s * : \s * " ( [ ^ " ] * ) " / gu,
2487+ ) ,
2488+ ] . map ( ( match ) => match [ 1 ] ) ;
2489+ return finalTextMatches . length > 0 ? finalTextMatches : stdout . trim ( ) ? [ stdout ] : [ ] ;
24632490 }
24642491}
24652492
0 commit comments