@@ -34,6 +34,7 @@ interface ValueOptionSpec {
3434 | "outDir"
3535 | "projectDir"
3636 | "lines"
37+ | "agentAutoMode"
3738}
3839
3940const valueOptionSpecs : ReadonlyArray < ValueOptionSpec > = [
@@ -67,7 +68,8 @@ const valueOptionSpecs: ReadonlyArray<ValueOptionSpec> = [
6768 { flag : "-m" , key : "message" } ,
6869 { flag : "--out-dir" , key : "outDir" } ,
6970 { flag : "--project-dir" , key : "projectDir" } ,
70- { flag : "--lines" , key : "lines" }
71+ { flag : "--lines" , key : "lines" } ,
72+ { flag : "--auto" , key : "agentAutoMode" }
7173]
7274
7375const valueOptionSpecByFlag : ReadonlyMap < string , ValueOptionSpec > = new Map (
@@ -89,9 +91,7 @@ const booleanFlagUpdaters: Readonly<Record<string, (raw: RawOptions) => RawOptio
8991 "--no-wipe" : ( raw ) => ( { ...raw , wipe : false } ) ,
9092 "--web" : ( raw ) => ( { ...raw , authWeb : true } ) ,
9193 "--include-default" : ( raw ) => ( { ...raw , includeDefault : true } ) ,
92- "--claude" : ( raw ) => ( { ...raw , agentClaude : true } ) ,
93- "--codex" : ( raw ) => ( { ...raw , agentCodex : true } ) ,
94- "--auto" : ( raw ) => ( { ...raw , agentAuto : true } )
94+ "--auto" : ( raw ) => ( { ...raw , agentAutoMode : "auto" } )
9595}
9696
9797const valueFlagUpdaters : { readonly [ K in ValueKey ] : ( raw : RawOptions , value : string ) => RawOptions } = {
@@ -122,7 +122,8 @@ const valueFlagUpdaters: { readonly [K in ValueKey]: (raw: RawOptions, value: st
122122 message : ( raw , value ) => ( { ...raw , message : value } ) ,
123123 outDir : ( raw , value ) => ( { ...raw , outDir : value } ) ,
124124 projectDir : ( raw , value ) => ( { ...raw , projectDir : value } ) ,
125- lines : ( raw , value ) => ( { ...raw , lines : value } )
125+ lines : ( raw , value ) => ( { ...raw , lines : value } ) ,
126+ agentAutoMode : ( raw , value ) => ( { ...raw , agentAutoMode : value . trim ( ) . toLowerCase ( ) } )
126127}
127128
128129export const applyCommandBooleanFlag = ( raw : RawOptions , token : string ) : RawOptions | null => {
@@ -162,37 +163,83 @@ const parseInlineValueToken = (
162163 return applyCommandValueFlag ( raw , flag , inlineValue )
163164}
164165
165- const parseRawOptionsStep = (
166- args : ReadonlyArray < string > ,
167- index : number ,
168- raw : RawOptions
166+ const legacyAgentFlagError = ( token : string ) : ParseError | null => {
167+ if ( token === "--claude" ) {
168+ return {
169+ _tag : "InvalidOption" ,
170+ option : token ,
171+ reason : "use --auto=claude"
172+ }
173+ }
174+ if ( token === "--codex" ) {
175+ return {
176+ _tag : "InvalidOption" ,
177+ option : token ,
178+ reason : "use --auto=codex"
179+ }
180+ }
181+ return null
182+ }
183+
184+ const toParseStep = (
185+ parsed : Either . Either < RawOptions , ParseError > ,
186+ nextIndex : number
187+ ) : ParseRawOptionsStep =>
188+ Either . isLeft ( parsed )
189+ ? { _tag : "error" , error : parsed . left }
190+ : { _tag : "ok" , raw : parsed . right , nextIndex }
191+
192+ const parseValueOptionStep = (
193+ raw : RawOptions ,
194+ token : string ,
195+ value : string | undefined ,
196+ index : number
169197) : ParseRawOptionsStep => {
170- const token = args [ index ] ?? ""
198+ if ( value === undefined ) {
199+ return { _tag : "error" , error : { _tag : "MissingOptionValue" , option : token } }
200+ }
201+ return toParseStep ( applyCommandValueFlag ( raw , token , value ) , index + 2 )
202+ }
203+
204+ const parseSpecialFlagStep = (
205+ raw : RawOptions ,
206+ token : string ,
207+ index : number
208+ ) : ParseRawOptionsStep | null => {
171209 const inlineApplied = parseInlineValueToken ( raw , token )
172210 if ( inlineApplied !== null ) {
173- return Either . isLeft ( inlineApplied )
174- ? { _tag : "error" , error : inlineApplied . left }
175- : { _tag : "ok" , raw : inlineApplied . right , nextIndex : index + 1 }
211+ return toParseStep ( inlineApplied , index + 1 )
176212 }
177213
178214 const booleanApplied = applyCommandBooleanFlag ( raw , token )
179215 if ( booleanApplied !== null ) {
180216 return { _tag : "ok" , raw : booleanApplied , nextIndex : index + 1 }
181217 }
182218
183- if ( ! token . startsWith ( "-" ) ) {
184- return { _tag : "error" , error : { _tag : "UnexpectedArgument" , value : token } }
219+ const deprecatedAgentFlag = legacyAgentFlagError ( token )
220+ if ( deprecatedAgentFlag !== null ) {
221+ return { _tag : "error" , error : deprecatedAgentFlag }
185222 }
186223
187- const value = args [ index + 1 ]
188- if ( value === undefined ) {
189- return { _tag : "error" , error : { _tag : "MissingOptionValue" , option : token } }
224+ return null
225+ }
226+
227+ const parseRawOptionsStep = (
228+ args : ReadonlyArray < string > ,
229+ index : number ,
230+ raw : RawOptions
231+ ) : ParseRawOptionsStep => {
232+ const token = args [ index ] ?? ""
233+ const specialStep = parseSpecialFlagStep ( raw , token , index )
234+ if ( specialStep !== null ) {
235+ return specialStep
236+ }
237+
238+ if ( ! token . startsWith ( "-" ) ) {
239+ return { _tag : "error" , error : { _tag : "UnexpectedArgument" , value : token } }
190240 }
191241
192- const nextRaw = applyCommandValueFlag ( raw , token , value )
193- return Either . isLeft ( nextRaw )
194- ? { _tag : "error" , error : nextRaw . left }
195- : { _tag : "ok" , raw : nextRaw . right , nextIndex : index + 2 }
242+ return parseValueOptionStep ( raw , token , args [ index + 1 ] , index )
196243}
197244
198245export const parseRawOptions = ( args : ReadonlyArray < string > ) : Either . Either < RawOptions , ParseError > => {
0 commit comments