@@ -50,6 +50,11 @@ export const RunCommand = cmd({
5050 describe : "session id to continue" ,
5151 type : "string" ,
5252 } )
53+ . option ( "fork-session" , {
54+ alias : [ "fork" ] ,
55+ describe : "fork the session before continuing (requires --continue or --session)" ,
56+ type : "boolean" ,
57+ } )
5358 . option ( "share" , {
5459 type : "boolean" ,
5560 describe : "share the session" ,
@@ -133,6 +138,11 @@ export const RunCommand = cmd({
133138 process . exit ( 1 )
134139 }
135140
141+ if ( args . forkSession && ! args . continue && ! args . session ) {
142+ UI . error ( "--fork-session requires --continue or --session" )
143+ process . exit ( 1 )
144+ }
145+
136146 const execute = async ( sdk : OpencodeClient , sessionID : string ) => {
137147 const printEvent = ( color : string , type : string , title : string ) => {
138148 UI . println (
@@ -279,11 +289,16 @@ export const RunCommand = cmd({
279289 const sdk = createOpencodeClient ( { baseUrl : args . attach } )
280290
281291 const sessionID = await ( async ( ) => {
282- if ( args . continue ) {
283- const result = await sdk . session . list ( )
284- return result . data ?. find ( ( s ) => ! s . parentID ) ?. id
292+ const baseID = args . continue
293+ ? ( await sdk . session . list ( ) ) . data ?. find ( ( s ) => ! s . parentID ) ?. id
294+ : args . session
295+
296+ if ( baseID && args . forkSession ) {
297+ const forked = await sdk . session . fork ( { sessionID : baseID } )
298+ return forked . data ?. id
285299 }
286- if ( args . session ) return args . session
300+
301+ if ( baseID ) return baseID
287302
288303 const title =
289304 args . title !== undefined
@@ -354,11 +369,16 @@ export const RunCommand = cmd({
354369 }
355370
356371 const sessionID = await ( async ( ) => {
357- if ( args . continue ) {
358- const result = await sdk . session . list ( )
359- return result . data ?. find ( ( s ) => ! s . parentID ) ?. id
372+ const baseID = args . continue
373+ ? ( await sdk . session . list ( ) ) . data ?. find ( ( s ) => ! s . parentID ) ?. id
374+ : args . session
375+
376+ if ( baseID && args . forkSession ) {
377+ const forked = await sdk . session . fork ( { sessionID : baseID } )
378+ return forked . data ?. id
360379 }
361- if ( args . session ) return args . session
380+
381+ if ( baseID ) return baseID
362382
363383 const title =
364384 args . title !== undefined
0 commit comments