@@ -13,6 +13,7 @@ export interface RunOpts {
1313 chatState ?: string
1414 confirm ?: boolean
1515 prompt ?: boolean
16+ env ?: string [ ]
1617}
1718
1819export enum RunEventType {
@@ -242,25 +243,25 @@ export class Run {
242243 }
243244
244245 nextChat ( input : string = "" ) : Run {
245- if ( this . state === RunState . Finished || this . state = == RunState . Error ) {
246- throw ( new Error ( " Run already finished" ) )
246+ if ( this . state !== RunState . Continue && this . state !== RunState . Creating && this . state ! == RunState . Error ) {
247+ throw ( new Error ( ` Run must in creating, continue or error state, not ${ this . state } ` ) )
247248 }
248249
249250 let run = this
250251 if ( run . state !== RunState . Creating ) {
251252 run = new ( this . constructor as any ) ( this . requestPath , this . filePath , this . content , this . opts , this . gptscriptURL )
252253 }
253254
254- if ( this . chatState ) {
255- run . chatState = this . chatState
256- } else if ( this . opts . chatState ) {
257- run . chatState = this . opts . chatState
255+ if ( this . chatState && this . state === RunState . Continue ) {
256+ // Only update the chat state if the previous run didn't error.
257+ // The chat state on opts will be the chat state for the last successful run.
258+ this . opts . chatState = this . chatState
258259 }
259260 run . opts . input = input
260261 if ( run . content !== "" ) {
261- run . request ( { content : this . content , chatState : run . chatState } )
262+ run . request ( { content : this . content , ... this . opts } )
262263 } else {
263- run . request ( { file : this . filePath , chatState : run . chatState } )
264+ run . request ( { file : this . filePath , ... this . opts } )
264265 }
265266
266267 return run
0 commit comments