(error: unknown)
| 411 | } |
| 412 | |
| 413 | function classifyToolError(error: unknown): ToolErrorAction { |
| 414 | if (!(error instanceof Error)) { |
| 415 | return 'none'; |
| 416 | } |
| 417 | |
| 418 | const message = error.message.toLowerCase(); |
| 419 | if ( |
| 420 | message.includes('invalid session') || |
| 421 | message.includes('expired session') || |
| 422 | message.includes('unknown session') || |
| 423 | message.includes('missing session') || |
| 424 | message.includes('mcp-session-id') || |
| 425 | message.includes('401') || |
| 426 | message.includes('403') || |
| 427 | message.includes('unauthorized') || |
| 428 | message.includes('forbidden') |
| 429 | ) { |
| 430 | return 'reset-session'; |
| 431 | } |
| 432 | |
| 433 | if ( |
| 434 | message.includes('tool') || |
| 435 | message.includes('schema') || |
| 436 | message.includes('404') || |
| 437 | message.includes('400') || |
| 438 | message.includes('not found') || |
| 439 | message.includes('invalid params') |
| 440 | ) { |
| 441 | return 'refresh-tools'; |
| 442 | } |
| 443 | |
| 444 | return 'none'; |
| 445 | } |
| 446 | |
| 447 | async function closeTransportQuietly(transport: TransportLike): Promise<void> { |
| 448 | try { |
no outgoing calls
no test coverage detected