| import type { | |
| AssistantMessage, | |
| AttachmentMessage, | |
| SystemMessage, | |
| UserMessage, | |
| } from 'src/types/message.js' | |
| /** | |
| * Tags user messages with a sourceToolUseID so they stay transient until the tool resolves. | |
| * This prevents the "is running" message from being duplicated in the UI. | |
| */ | |
| export function tagMessagesWithToolUseID( | |
| messages: (UserMessage | AttachmentMessage | SystemMessage)[], | |
| toolUseID: string | undefined, | |
| ): (UserMessage | AttachmentMessage | SystemMessage)[] { | |
| if (!toolUseID) { | |
| return messages | |
| } | |
| return messages.map(m => { | |
| if (m.type === 'user') { | |
| return { ...m, sourceToolUseID: toolUseID } | |
| } | |
| return m | |
| }) | |
| } | |
| /** | |
| * Extracts the tool use ID from a parent message for a given tool name. | |
| */ | |
| export function getToolUseIDFromParentMessage( | |
| parentMessage: AssistantMessage, | |
| toolName: string, | |
| ): string | undefined { | |
| const toolUseBlock = parentMessage.message.content.find( | |
| block => block.type === 'tool_use' && block.name === toolName, | |
| ) | |
| return toolUseBlock && toolUseBlock.type === 'tool_use' | |
| ? toolUseBlock.id | |
| : undefined | |
| } | |