41 lines
1.1 KiB
TypeScript
41 lines
1.1 KiB
TypeScript
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
|
|
}
|