(msg: AbortMessage)
| 481 | } |
| 482 | |
| 483 | private onAbort(msg: AbortMessage): void { |
| 484 | const { session_id, prompt_id } = msg.payload; |
| 485 | if (this.abortHandler === undefined) { |
| 486 | this.send( |
| 487 | buildAck(msg.id, ErrorCode.INTERNAL_ERROR, 'abort handler not wired', {}), |
| 488 | ); |
| 489 | return; |
| 490 | } |
| 491 | void this.abortHandler |
| 492 | .abort(session_id, prompt_id) |
| 493 | .then((result) => { |
| 494 | this.send( |
| 495 | buildAck(msg.id, 0, 'success', { |
| 496 | aborted: result.aborted, |
| 497 | ...(result.at_seq !== undefined ? { at_seq: result.at_seq } : {}), |
| 498 | }), |
| 499 | ); |
| 500 | }) |
| 501 | .catch((err: unknown) => { |
| 502 | if ( |
| 503 | typeof err === 'object' && |
| 504 | err !== null && |
| 505 | 'name' in err && |
| 506 | (err as { name: string }).name === 'PromptAlreadyCompletedError' |
| 507 | ) { |
| 508 | const at_seq = this.abortHandler!.currentSeq(session_id); |
| 509 | this.send( |
| 510 | buildAck(msg.id, 0, 'success', { aborted: false, at_seq }), |
| 511 | ); |
| 512 | return; |
| 513 | } |
| 514 | if ( |
| 515 | typeof err === 'object' && |
| 516 | err !== null && |
| 517 | 'name' in err && |
| 518 | (err as { name: string }).name === 'PromptNotFoundError' |
| 519 | ) { |
| 520 | this.send( |
| 521 | buildAck(msg.id, ErrorCode.PROMPT_NOT_FOUND, 'prompt not found', {}), |
| 522 | ); |
| 523 | return; |
| 524 | } |
| 525 | if ( |
| 526 | typeof err === 'object' && |
| 527 | err !== null && |
| 528 | 'name' in err && |
| 529 | (err as { name: string }).name === 'SessionNotFoundError' |
| 530 | ) { |
| 531 | this.send( |
| 532 | buildAck(msg.id, ErrorCode.SESSION_NOT_FOUND, 'session not found', {}), |
| 533 | ); |
| 534 | return; |
| 535 | } |
| 536 | this.logger.warn({ err: String(err) }, 'ws abort handler error'); |
| 537 | this.send( |
| 538 | buildAck(msg.id, ErrorCode.INTERNAL_ERROR, 'abort failed', {}), |
| 539 | ); |
| 540 | }); |
no test coverage detected