@@ -13,6 +13,7 @@ export interface RunOpts {
1313 chatState ?: string
1414 confirm ?: boolean
1515 prompt ?: boolean
16+ env ?: string [ ]
1617}
1718
1819export enum RunEventType {
@@ -238,25 +239,25 @@ export class Run {
238239 }
239240
240241 nextChat ( input : string = "" ) : Run {
241- if ( this . state === RunState . Finished || this . state = == RunState . Error ) {
242- throw ( new Error ( " Run already finished" ) )
242+ if ( this . state !== RunState . Continue && this . state !== RunState . Creating && this . state ! == RunState . Error ) {
243+ throw ( new Error ( ` Run must in creating, continue or error state, not ${ this . state } ` ) )
243244 }
244245
245246 let run = this
246247 if ( run . state !== RunState . Creating ) {
247248 run = new ( this . constructor as any ) ( this . requestPath , this . filePath , this . content , this . opts , this . gptscriptURL )
248249 }
249250
250- if ( this . chatState ) {
251- run . chatState = this . chatState
252- } else if ( this . opts . chatState ) {
253- run . chatState = this . opts . chatState
251+ if ( this . chatState && this . state === RunState . Continue ) {
252+ // Only update the chat state if the previous run didn't error.
253+ // The chat state on opts will be the chat state for the last successful run.
254+ this . opts . chatState = this . chatState
254255 }
255256 run . opts . input = input
256257 if ( run . content !== "" ) {
257- run . request ( { content : this . content , chatState : run . chatState } )
258+ run . request ( { content : this . content , ... this . opts } )
258259 } else {
259- run . request ( { file : this . filePath , chatState : run . chatState } )
260+ run . request ( { file : this . filePath , ... this . opts } )
260261 }
261262
262263 return run
0 commit comments