tools.ts
1 import { Tool } from './Tool.js' 2 import { AgentTool } from './tools/AgentTool/AgentTool.js' 3 import { ArchitectTool } from './tools/ArchitectTool/ArchitectTool.js' 4 import { BashTool } from './tools/BashTool/BashTool.js' 5 import { FileEditTool } from './tools/FileEditTool/FileEditTool.js' 6 import { FileReadTool } from './tools/FileReadTool/FileReadTool.js' 7 import { FileWriteTool } from './tools/FileWriteTool/FileWriteTool.js' 8 import { GlobTool } from './tools/GlobTool/GlobTool.js' 9 import { GrepTool } from './tools/GrepTool/GrepTool.js' 10 import { LSTool } from './tools/lsTool/lsTool.js' 11 import { MemoryReadTool } from './tools/MemoryReadTool/MemoryReadTool.js' 12 import { MemoryWriteTool } from './tools/MemoryWriteTool/MemoryWriteTool.js' 13 import { NotebookEditTool } from './tools/NotebookEditTool/NotebookEditTool.js' 14 import { NotebookReadTool } from './tools/NotebookReadTool/NotebookReadTool.js' 15 import { StickerRequestTool } from './tools/StickerRequestTool/StickerRequestTool.js' 16 import { ThinkTool } from './tools/ThinkTool/ThinkTool.js' 17 import { getMCPTools } from './services/mcpClient.js' 18 import { memoize } from 'lodash-es' 19 20 const ANT_ONLY_TOOLS = [MemoryReadTool, MemoryWriteTool] 21 22 // Function to avoid circular dependencies that break bun 23 export const getAllTools = (): Tool[] => { 24 return [ 25 AgentTool, 26 BashTool, 27 GlobTool, 28 GrepTool, 29 LSTool, 30 FileReadTool, 31 FileEditTool, 32 FileWriteTool, 33 NotebookReadTool, 34 NotebookEditTool, 35 StickerRequestTool, 36 ThinkTool, 37 ...(process.env.USER_TYPE === 'ant' ? ANT_ONLY_TOOLS : []), 38 ] 39 } 40 41 export const getTools = memoize( 42 async (enableArchitect?: boolean): Promise<Tool[]> => { 43 const tools = [...getAllTools(), ...(await getMCPTools())] 44 45 // Only include Architect tool if enabled via config or CLI flag 46 if (enableArchitect) { 47 tools.push(ArchitectTool) 48 } 49 50 const isEnabled = await Promise.all(tools.map(tool => tool.isEnabled())) 51 return tools.filter((_, i) => isEnabled[i]) 52 }, 53 ) 54 55 export const getReadOnlyTools = memoize(async (): Promise<Tool[]> => { 56 const tools = getAllTools().filter(tool => tool.isReadOnly()) 57 const isEnabled = await Promise.all(tools.map(tool => tool.isEnabled())) 58 return tools.filter((_, index) => isEnabled[index]) 59 })