Skip to content

Commit ba071c9

Browse files
committed
sdk: hook up prompt-error server action
1 parent 5589da7 commit ba071c9

File tree

2 files changed

+31
-14
lines changed

2 files changed

+31
-14
lines changed

sdk/src/client.ts

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { buildArray } from '@codebuff/common/util/array'
2+
13
import { initialSessionState, type RunState } from './run-state'
24
import { changeFile } from './tools/change-file'
35
import { 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[]) {

sdk/src/websocket-client.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export type WebSocketHandlerOptions = {
2525
) => Promise<void>
2626

2727
onPromptResponse?: (action: ServerAction<'prompt-response'>) => Promise<void>
28+
onPromptError?: (action: ServerAction<'prompt-error'>) => Promise<void>
2829

2930
apiKey: string
3031
}
@@ -42,6 +43,7 @@ export class WebSocketHandler {
4243
private onResponseChunk: WebSocketHandlerOptionsWithDefaults['onResponseChunk']
4344
private onSubagentResponseChunk: WebSocketHandlerOptionsWithDefaults['onSubagentResponseChunk']
4445
private onPromptResponse: WebSocketHandlerOptionsWithDefaults['onPromptResponse']
46+
private onPromptError: WebSocketHandlerOptionsWithDefaults['onPromptError']
4547
private apiKey: string
4648
private isConnected = false
4749

@@ -58,6 +60,7 @@ export class WebSocketHandler {
5860
onSubagentResponseChunk = async () => {},
5961

6062
onPromptResponse = async () => {},
63+
onPromptError = async () => {},
6164

6265
apiKey,
6366
}: WebSocketHandlerOptions) {
@@ -77,6 +80,7 @@ export class WebSocketHandler {
7780
this.onSubagentResponseChunk = onSubagentResponseChunk
7881

7982
this.onPromptResponse = onPromptResponse
83+
this.onPromptError = onPromptError
8084

8185
this.apiKey = apiKey
8286
}
@@ -136,6 +140,7 @@ export class WebSocketHandler {
136140

137141
// Handle full response from prompt
138142
this.cbWebSocket.subscribe('prompt-response', this.onPromptResponse)
143+
this.cbWebSocket.subscribe('prompt-error', this.onPromptError)
139144
}
140145

141146
private getInputDefaultOptions() {

0 commit comments

Comments
 (0)