2026-03-26 12:13:51 +08:00
|
|
|
import {
|
|
|
|
|
BookOpen,
|
2026-04-13 18:06:25 +08:00
|
|
|
Bot,
|
2026-03-26 12:13:51 +08:00
|
|
|
Calculator,
|
|
|
|
|
CheckSquare,
|
|
|
|
|
Database,
|
|
|
|
|
FileEdit,
|
|
|
|
|
FilePen,
|
|
|
|
|
FileText,
|
|
|
|
|
Folder,
|
2026-03-29 10:55:00 +08:00
|
|
|
FolderOutput,
|
2026-03-26 12:13:51 +08:00
|
|
|
FolderSearch,
|
|
|
|
|
Globe,
|
|
|
|
|
HelpCircle,
|
|
|
|
|
Image,
|
|
|
|
|
Network,
|
2026-05-21 22:09:12 +08:00
|
|
|
SquareTerminal
|
2026-03-26 12:13:51 +08:00
|
|
|
} from 'lucide-vue-next'
|
|
|
|
|
|
|
|
|
|
export const TOOL_ICON_MAP = {
|
|
|
|
|
ask_user_question: HelpCircle,
|
2026-05-21 22:09:12 +08:00
|
|
|
bash: SquareTerminal,
|
2026-03-26 12:13:51 +08:00
|
|
|
calculator: Calculator,
|
2026-05-21 22:09:12 +08:00
|
|
|
cmd: SquareTerminal,
|
2026-03-26 12:13:51 +08:00
|
|
|
edit_file: FilePen,
|
2026-05-21 22:09:12 +08:00
|
|
|
execute: SquareTerminal,
|
2026-05-18 17:52:05 +08:00
|
|
|
find_kb_document: FolderSearch,
|
2026-03-26 12:13:51 +08:00
|
|
|
get_mindmap: Network,
|
|
|
|
|
glob: FolderSearch,
|
|
|
|
|
grep: FolderSearch,
|
|
|
|
|
list_directory: Folder,
|
|
|
|
|
list_kbs: BookOpen,
|
|
|
|
|
ls: Folder,
|
|
|
|
|
mysql_describe_table: Database,
|
|
|
|
|
mysql_list_tables: Database,
|
|
|
|
|
mysql_query: Database,
|
2026-05-18 17:52:05 +08:00
|
|
|
open_kb_document: FileText,
|
2026-03-29 10:55:00 +08:00
|
|
|
present_artifacts: FolderOutput,
|
2026-03-26 12:13:51 +08:00
|
|
|
query_kb: BookOpen,
|
|
|
|
|
read_file: FileText,
|
|
|
|
|
replace: FilePen,
|
2026-05-21 22:09:12 +08:00
|
|
|
run_shell_command: SquareTerminal,
|
2026-03-26 12:13:51 +08:00
|
|
|
search_file_content: FolderSearch,
|
2026-04-13 18:06:25 +08:00
|
|
|
task: Bot,
|
2026-03-26 12:13:51 +08:00
|
|
|
tavily_search: Globe,
|
|
|
|
|
text_to_img_qwen_image: Image,
|
|
|
|
|
write_file: FileEdit,
|
|
|
|
|
write_todos: CheckSquare
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-13 18:06:25 +08:00
|
|
|
// Keep intentionally hidden tool calls centralized so group summaries and renderers stay consistent.
|
|
|
|
|
export const HIDDEN_TOOL_CALL_IDS = ['present_artifacts']
|
|
|
|
|
|
2026-03-26 12:13:51 +08:00
|
|
|
export const getToolCallId = (toolCall) => toolCall?.name || toolCall?.function?.name || ''
|
|
|
|
|
|
2026-06-02 00:08:38 +08:00
|
|
|
export const isHiddenToolCall = (toolCall) => HIDDEN_TOOL_CALL_IDS.includes(getToolCallId(toolCall))
|
|
|
|
|
|
|
|
|
|
export const isValidToolCall = (toolCall) => {
|
|
|
|
|
return Boolean(
|
|
|
|
|
toolCall &&
|
|
|
|
|
(toolCall.id || toolCall.name || toolCall.function?.name) &&
|
|
|
|
|
(toolCall.args !== undefined ||
|
|
|
|
|
toolCall.function?.arguments !== undefined ||
|
|
|
|
|
toolCall.tool_call_result !== undefined)
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const normalizeToolCalls = (toolCalls, { includeHidden = false, mapToolCall } = {}) => {
|
|
|
|
|
if (!Array.isArray(toolCalls)) return []
|
|
|
|
|
|
|
|
|
|
return toolCalls
|
|
|
|
|
.filter((toolCall) => {
|
|
|
|
|
if (!isValidToolCall(toolCall)) return false
|
|
|
|
|
return includeHidden || !isHiddenToolCall(toolCall)
|
|
|
|
|
})
|
|
|
|
|
.map((toolCall) => (mapToolCall ? mapToolCall(toolCall) : toolCall))
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-26 12:13:51 +08:00
|
|
|
export const getToolIcon = (toolId) => TOOL_ICON_MAP[toolId] || null
|