@@ -24,14 +24,8 @@ const {
2424 writeQaDockerHarnessFiles : vi . fn ( ) ,
2525 buildQaDockerHarnessImage : vi . fn ( ) ,
2626 runQaDockerUp : vi . fn ( ) ,
27- defaultQaRuntimeModelForMode : vi . fn < ( mode : string , options ?: { alternate ?: boolean } ) => string > (
28- ( mode , options ) =>
29- mode === "live-frontier"
30- ? "openai/gpt-5.4"
31- : options ?. alternate
32- ? "mock-openai/gpt-5.4-alt"
33- : "mock-openai/gpt-5.4" ,
34- ) ,
27+ defaultQaRuntimeModelForMode :
28+ vi . fn < ( mode : string , options ?: { alternate ?: boolean } ) => string > ( ) ,
3529} ) ) ;
3630
3731vi . mock ( "./manual-lane.runtime.js" , ( ) => ( {
@@ -83,6 +77,8 @@ import {
8377 runQaSuiteCommand ,
8478} from "./cli.runtime.js" ;
8579import { runQaTelegramCommand } from "./live-transports/telegram/cli.runtime.js" ;
80+ import { defaultQaModelForMode as defaultQaProviderModelForMode } from "./model-selection.js" ;
81+ import type { QaProviderModeInput } from "./run-config.js" ;
8682
8783describe ( "qa cli runtime" , ( ) => {
8884 let stdoutWrite : ReturnType < typeof vi . spyOn > ;
@@ -100,11 +96,7 @@ describe("qa cli runtime", () => {
10096 runQaDockerUp . mockReset ( ) ;
10197 defaultQaRuntimeModelForMode . mockImplementation (
10298 ( mode : string , options ?: { alternate ?: boolean } ) =>
103- mode === "live-frontier"
104- ? "openai/gpt-5.4"
105- : options ?. alternate
106- ? "mock-openai/gpt-5.4-alt"
107- : "mock-openai/gpt-5.4" ,
99+ defaultQaProviderModelForMode ( mode as QaProviderModeInput , options ) ,
108100 ) ;
109101 runQaSuiteFromRuntime . mockResolvedValue ( {
110102 watchUrl : "http://127.0.0.1:43124" ,
@@ -234,22 +226,6 @@ describe("qa cli runtime", () => {
234226 ) ;
235227 } ) ;
236228
237- it ( "normalizes legacy live-openai suite runs onto the frontier provider mode" , async ( ) => {
238- await runQaSuiteCommand ( {
239- repoRoot : "/tmp/openclaw-repo" ,
240- providerMode : "live-openai" ,
241- scenarioIds : [ "approval-turn-tool-followthrough" ] ,
242- } ) ;
243-
244- expect ( runQaSuiteFromRuntime ) . toHaveBeenCalledWith (
245- expect . objectContaining ( {
246- repoRoot : path . resolve ( "/tmp/openclaw-repo" ) ,
247- transportId : "qa-channel" ,
248- providerMode : "live-frontier" ,
249- } ) ,
250- ) ;
251- } ) ;
252-
253229 it ( "passes host suite concurrency through" , async ( ) => {
254230 await runQaSuiteCommand ( {
255231 repoRoot : "/tmp/openclaw-repo" ,
@@ -602,6 +578,25 @@ describe("qa cli runtime", () => {
602578 } ) ;
603579 } ) ;
604580
581+ it ( "defaults manual aimock runs onto the aimock model lane" , async ( ) => {
582+ await runQaManualLaneCommand ( {
583+ repoRoot : "/tmp/openclaw-repo" ,
584+ providerMode : "aimock" ,
585+ message : "read qa kickoff and reply short" ,
586+ } ) ;
587+
588+ expect ( runQaManualLane ) . toHaveBeenCalledWith ( {
589+ repoRoot : path . resolve ( "/tmp/openclaw-repo" ) ,
590+ transportId : "qa-channel" ,
591+ providerMode : "aimock" ,
592+ primaryModel : "aimock/gpt-5.4" ,
593+ alternateModel : "aimock/gpt-5.4-alt" ,
594+ fastMode : undefined ,
595+ message : "read qa kickoff and reply short" ,
596+ timeoutMs : undefined ,
597+ } ) ;
598+ } ) ;
599+
605600 it ( "defaults manual frontier runs onto the frontier model lane" , async ( ) => {
606601 await runQaManualLaneCommand ( {
607602 repoRoot : "/tmp/openclaw-repo" ,
@@ -640,31 +635,11 @@ describe("qa cli runtime", () => {
640635 } ) ;
641636 } ) ;
642637
643- it ( "normalizes legacy live-openai manual runs onto the frontier provider mode" , async ( ) => {
644- await runQaManualLaneCommand ( {
645- repoRoot : "/tmp/openclaw-repo" ,
646- providerMode : "live-openai" ,
647- message : "read qa kickoff and reply short" ,
648- } ) ;
649-
650- expect ( runQaManualLane ) . toHaveBeenCalledWith (
651- expect . objectContaining ( {
652- repoRoot : path . resolve ( "/tmp/openclaw-repo" ) ,
653- transportId : "qa-channel" ,
654- providerMode : "live-frontier" ,
655- primaryModel : "openai/gpt-5.4" ,
656- alternateModel : "openai/gpt-5.4" ,
657- } ) ,
658- ) ;
659- } ) ;
660-
661638 it ( "defaults manual frontier runs onto Codex OAuth when the runtime resolver prefers it" , async ( ) => {
662639 defaultQaRuntimeModelForMode . mockImplementation ( ( mode , options ) =>
663640 mode === "live-frontier"
664641 ? "openai-codex/gpt-5.4"
665- : options ?. alternate
666- ? "mock-openai/gpt-5.4-alt"
667- : "mock-openai/gpt-5.4" ,
642+ : defaultQaProviderModelForMode ( mode as QaProviderModeInput , options ) ,
668643 ) ;
669644
670645 await runQaManualLaneCommand ( {
0 commit comments