@@ -514,13 +514,66 @@ sandbox_run_script:
514514 return instruction ;
515515}
516516
517+ export type ResolvedLanguage = 'en-US' | 'zh-CN' ;
518+
519+ const LANGUAGE_ALIASES : Record < string , ResolvedLanguage > = {
520+ 'en' : 'en-US' ,
521+ 'en-us' : 'en-US' ,
522+ 'english' : 'en-US' ,
523+ 'zh' : 'zh-CN' ,
524+ 'zh-cn' : 'zh-CN' ,
525+ 'zh-hans' : 'zh-CN' ,
526+ 'chinese' : 'zh-CN' ,
527+ 'cn' : 'zh-CN' ,
528+ } ;
529+
530+ export function detectLanguageFromText ( text ?: string ) : ResolvedLanguage {
531+ if ( ! text ) return 'en-US' ;
532+ const hasCjk = / [ \u3400 - \u9FFF ] / . test ( text ) ;
533+ return hasCjk ? 'zh-CN' : 'en-US' ;
534+ }
535+
536+ export function resolveLanguage (
537+ language ?: string ,
538+ prompt ?: string
539+ ) : ResolvedLanguage {
540+ const normalized = language ?. trim ( ) . toLowerCase ( ) ;
541+ if ( normalized ) {
542+ const mapped = LANGUAGE_ALIASES [ normalized ] ;
543+ if ( mapped ) return mapped ;
544+ if ( normalized . startsWith ( 'zh' ) ) return 'zh-CN' ;
545+ if ( normalized . startsWith ( 'en' ) ) return 'en-US' ;
546+ }
547+ return detectLanguageFromText ( prompt ) ;
548+ }
549+
550+ export function buildLanguageInstruction (
551+ language ?: string ,
552+ prompt ?: string
553+ ) : string {
554+ const resolved = resolveLanguage ( language , prompt ) ;
555+ const label =
556+ resolved === 'zh-CN' ? 'Chinese (Simplified)' : 'English' ;
557+ const rule =
558+ resolved === 'zh-CN'
559+ ? '请仅使用简体中文回答,不要夹杂英文或其他语言。'
560+ : 'Respond only in English. Do not use Chinese or any other language.' ;
561+ return `
562+ ## LANGUAGE REQUIREMENT
563+ - Output language: ${ label }
564+ - ${ rule }
565+ ` ;
566+ }
567+
517568/**
518569 * Format a plan for execution phase
519570 */
520571export function formatPlanForExecution (
521572 plan : TaskPlan ,
522573 workDir ?: string ,
523- sandbox ?: SandboxOptions
574+ sandbox ?: SandboxOptions ,
575+ language ?: string ,
576+ originalPrompt ?: string
524577) : string {
525578 const stepsText = plan . steps
526579 . map ( ( step , index ) => `${ index + 1 } . ${ step . description } ` )
@@ -529,9 +582,10 @@ export function formatPlanForExecution(
529582 const workspaceNote = workDir
530583 ? getWorkspaceInstruction ( workDir , sandbox )
531584 : '' ;
585+ const languageNote = buildLanguageInstruction ( language , originalPrompt ) ;
532586
533587 return `You are executing a pre-approved plan. Follow these steps in order:
534- ${ workspaceNote }
588+ ${ workspaceNote } ${ languageNote }
535589Goal: ${ plan . goal }
536590
537591Steps:
0 commit comments