* Return a new Message[] where each tool_result block whose id appears in * replacementMap has its content replaced. Messages and blocks with no * replacements are passed through by reference.
( messages: Message[], replacementMap: Map<string, string>, )
| 697 | * replacements are passed through by reference. |
| 698 | */ |
| 699 | function replaceToolResultContents( |
| 700 | messages: Message[], |
| 701 | replacementMap: Map<string, string>, |
| 702 | ): Message[] { |
| 703 | return messages.map(message => { |
| 704 | if (message.type !== 'user' || !Array.isArray(message.message.content)) { |
| 705 | return message |
| 706 | } |
| 707 | const content = message.message.content |
| 708 | const needsReplace = content.some( |
| 709 | b => b.type === 'tool_result' && replacementMap.has(b.tool_use_id), |
| 710 | ) |
| 711 | if (!needsReplace) return message |
| 712 | return { |
| 713 | ...message, |
| 714 | message: { |
| 715 | ...message.message, |
| 716 | content: content.map(block => { |
| 717 | if (block.type !== 'tool_result') return block |
| 718 | const replacement = replacementMap.get(block.tool_use_id) |
| 719 | return replacement === undefined |
| 720 | ? block |
| 721 | : { ...block, content: replacement } |
| 722 | }), |
| 723 | }, |
| 724 | } |
| 725 | }) |
| 726 | } |
| 727 | |
| 728 | async function buildReplacement( |
| 729 | candidate: ToolResultCandidate, |
no test coverage detected