@@ -175,20 +175,28 @@ describe("e2e: auth", () => {
175175 expect ( stdout ) . toContain ( "Would validate and save API key." ) ;
176176 } ) ;
177177
178+ test ( "auth login --dry-run 仍校验显式 Base URL" , async ( ) => {
179+ const { stderr, exitCode } = await runCommandE2e ( AUTH_ROUTES , [
180+ "auth" ,
181+ "login" ,
182+ "--dry-run" ,
183+ "--api-key" ,
184+ "sk-e2e-dry-run-placeholder" ,
185+ "--base-url" ,
186+ "ftp://example.com/models" ,
187+ ] ) ;
188+ expect ( exitCode ) . toBe ( 2 ) ;
189+ expect ( stderr ) . toMatch ( / I n v a l i d m o d e l b a s e U R L / ) ;
190+ } ) ;
191+
178192 test ( "auth login --api-key 验证后原子保存凭证和 Base URL" , async ( ) => {
179193 const validationServer = await startValidationServer ( ) ;
180194 const configDir = makeE2eOutputDir ( "auth-api-key-login" ) ;
195+ const sdkBaseUrl = `${ validationServer . baseUrl } /compatible-mode/v1/?source=login#fragment` ;
181196 try {
182197 const login = await runCommandE2e (
183198 AUTH_ROUTES ,
184- [
185- "auth" ,
186- "login" ,
187- "--api-key" ,
188- "sk-e2e-placeholder" ,
189- "--base-url" ,
190- validationServer . baseUrl ,
191- ] ,
199+ [ "auth" , "login" , "--api-key" , "sk-e2e-placeholder" , "--base-url" , sdkBaseUrl ] ,
192200 {
193201 BAILIAN_CONFIG_DIR : configDir ,
194202 DASHSCOPE_API_KEY : "" ,
@@ -217,6 +225,47 @@ describe("e2e: auth", () => {
217225 }
218226 } ) ;
219227
228+ test ( "auth login --config token-plan 接受 Anthropic SDK Base URL" , async ( ) => {
229+ const validationServer = await startValidationServer ( ) ;
230+ const configDir = makeE2eOutputDir ( "auth-token-plan-anthropic-base-url" ) ;
231+ try {
232+ const login = await runCommandE2e (
233+ AUTH_ROUTES ,
234+ [
235+ "auth" ,
236+ "login" ,
237+ "--config" ,
238+ "token-plan" ,
239+ "--api-key" ,
240+ "sk-sp-e2e-placeholder" ,
241+ "--base-url" ,
242+ `${ validationServer . baseUrl } /apps/anthropic?source=sdk#fragment` ,
243+ ] ,
244+ {
245+ BAILIAN_CONFIG_DIR : configDir ,
246+ DASHSCOPE_API_KEY : "" ,
247+ DASHSCOPE_BASE_URL : "" ,
248+ } ,
249+ ) ;
250+ expect ( login . exitCode , login . stderr ) . toBe ( 0 ) ;
251+ expect ( validationServer . requests ) . toHaveLength ( 1 ) ;
252+ expect ( validationServer . requests [ 0 ] . path ) . toBe ( "/compatible-mode/v1/chat/completions" ) ;
253+
254+ const config = JSON . parse ( readFileSync ( join ( configDir , "config.json" ) , "utf8" ) ) as Record <
255+ string ,
256+ unknown
257+ > ;
258+ expect ( config [ "token-plan" ] ) . toMatchObject ( {
259+ api_key : "sk-sp-e2e-placeholder" ,
260+ base_url : validationServer . baseUrl ,
261+ default_text_model : "qwen3.7-max" ,
262+ default_image_model : "qwen-image-2.0" ,
263+ } ) ;
264+ } finally {
265+ await validationServer . close ( ) ;
266+ }
267+ } ) ;
268+
220269 test ( "auth login --config token-plan 物化并重置内置预设" , async ( ) => {
221270 const validationServer = await startValidationServer ( ) ;
222271 const configDir = makeE2eOutputDir ( "auth-token-plan-preset-login" ) ;
0 commit comments