1+ import { buildArray } from '@codebuff/common/util/array'
2+
13import { initialSessionState , type RunState } from './run-state'
24import { changeFile } from './tools/change-file'
35import { getFiles } from './tools/read-files'
@@ -94,6 +96,7 @@ export class CodebuffClient {
9496 onSubagentResponseChunk : async ( ) => { } ,
9597
9698 onPromptResponse : this . handlePromptResponse . bind ( this ) ,
99+ onPromptError : this . handlePromptResponse . bind ( this ) ,
97100 } )
98101 }
99102
@@ -216,9 +219,12 @@ export class CodebuffClient {
216219 } )
217220 }
218221
219- private async handlePromptResponse ( action : ServerAction < 'prompt-response' > ) {
220- const promiseActions =
221- this . promptIdToResolveResponse [ action ?. promptId ?? '' ]
222+ private async handlePromptResponse (
223+ action : ServerAction < 'prompt-response' > | ServerAction < 'prompt-error' > ,
224+ ) {
225+ const promptId =
226+ action . type === 'prompt-response' ? action . promptId : action . userInputId
227+ const promiseActions = this . promptIdToResolveResponse [ promptId ]
222228
223229 const parsedAction = PromptResponseSchema . safeParse ( action )
224230 if ( ! parsedAction . success ) {
@@ -232,19 +238,25 @@ export class CodebuffClient {
232238 }
233239 return
234240 }
235-
236- if ( promiseActions ) {
237- const { sessionState, toolResults } = parsedAction . data
238- const state : RunState = {
239- sessionState,
240- toolResults,
241+ if ( action . type === 'prompt-error' ) {
242+ promiseActions . reject ( new Error ( action . error ) )
243+ const message = buildArray ( [ action . message , action . error ] ) . join ( '\n\n' )
244+ if ( promiseActions ) {
245+ promiseActions . reject ( new Error ( message ) )
246+ }
247+ } else {
248+ if ( promiseActions ) {
249+ const { sessionState, toolResults } = parsedAction . data
250+ const state : RunState = {
251+ sessionState,
252+ toolResults,
253+ }
254+ promiseActions . resolve ( state )
241255 }
242- promiseActions . resolve ( state )
243-
244- delete this . promptIdToResolveResponse [ action . promptId ]
245- delete this . promptIdToHandleEvent [ action . promptId ]
246- delete this . promptIdToCustomToolHandler [ action . promptId ]
247256 }
257+ delete this . promptIdToResolveResponse [ promptId ]
258+ delete this . promptIdToHandleEvent [ promptId ]
259+ delete this . promptIdToCustomToolHandler [ promptId ]
248260 }
249261
250262 private async readFiles ( filePath : string [ ] ) {
0 commit comments