/ constants / tools.ts
tools.ts
  1  // biome-ignore-all assist/source/organizeImports: ANT-ONLY import markers must not be reordered
  2  import { feature } from 'bun:bundle'
  3  import { TASK_OUTPUT_TOOL_NAME } from '../tools/TaskOutputTool/constants.js'
  4  import { EXIT_PLAN_MODE_V2_TOOL_NAME } from '../tools/ExitPlanModeTool/constants.js'
  5  import { ENTER_PLAN_MODE_TOOL_NAME } from '../tools/EnterPlanModeTool/constants.js'
  6  import { AGENT_TOOL_NAME } from '../tools/AgentTool/constants.js'
  7  import { ASK_USER_QUESTION_TOOL_NAME } from '../tools/AskUserQuestionTool/prompt.js'
  8  import { TASK_STOP_TOOL_NAME } from '../tools/TaskStopTool/prompt.js'
  9  import { FILE_READ_TOOL_NAME } from '../tools/FileReadTool/prompt.js'
 10  import { WEB_SEARCH_TOOL_NAME } from '../tools/WebSearchTool/prompt.js'
 11  import { TODO_WRITE_TOOL_NAME } from '../tools/TodoWriteTool/constants.js'
 12  import { GREP_TOOL_NAME } from '../tools/GrepTool/prompt.js'
 13  import { WEB_FETCH_TOOL_NAME } from '../tools/WebFetchTool/prompt.js'
 14  import { GLOB_TOOL_NAME } from '../tools/GlobTool/prompt.js'
 15  import { SHELL_TOOL_NAMES } from '../utils/shell/shellToolUtils.js'
 16  import { FILE_EDIT_TOOL_NAME } from '../tools/FileEditTool/constants.js'
 17  import { FILE_WRITE_TOOL_NAME } from '../tools/FileWriteTool/prompt.js'
 18  import { NOTEBOOK_EDIT_TOOL_NAME } from '../tools/NotebookEditTool/constants.js'
 19  import { SKILL_TOOL_NAME } from '../tools/SkillTool/constants.js'
 20  import { SEND_MESSAGE_TOOL_NAME } from '../tools/SendMessageTool/constants.js'
 21  import { TASK_CREATE_TOOL_NAME } from '../tools/TaskCreateTool/constants.js'
 22  import { TASK_GET_TOOL_NAME } from '../tools/TaskGetTool/constants.js'
 23  import { TASK_LIST_TOOL_NAME } from '../tools/TaskListTool/constants.js'
 24  import { TASK_UPDATE_TOOL_NAME } from '../tools/TaskUpdateTool/constants.js'
 25  import { TOOL_SEARCH_TOOL_NAME } from '../tools/ToolSearchTool/prompt.js'
 26  import { SYNTHETIC_OUTPUT_TOOL_NAME } from '../tools/SyntheticOutputTool/SyntheticOutputTool.js'
 27  import { ENTER_WORKTREE_TOOL_NAME } from '../tools/EnterWorktreeTool/constants.js'
 28  import { EXIT_WORKTREE_TOOL_NAME } from '../tools/ExitWorktreeTool/constants.js'
 29  import { WORKFLOW_TOOL_NAME } from '../tools/WorkflowTool/constants.js'
 30  import {
 31    CRON_CREATE_TOOL_NAME,
 32    CRON_DELETE_TOOL_NAME,
 33    CRON_LIST_TOOL_NAME,
 34  } from '../tools/ScheduleCronTool/prompt.js'
 35  
 36  export const ALL_AGENT_DISALLOWED_TOOLS = new Set([
 37    TASK_OUTPUT_TOOL_NAME,
 38    EXIT_PLAN_MODE_V2_TOOL_NAME,
 39    ENTER_PLAN_MODE_TOOL_NAME,
 40    // Allow Agent tool for agents when user is ant (enables nested agents)
 41    ...(process.env.USER_TYPE === 'ant' ? [] : [AGENT_TOOL_NAME]),
 42    ASK_USER_QUESTION_TOOL_NAME,
 43    TASK_STOP_TOOL_NAME,
 44    // Prevent recursive workflow execution inside subagents.
 45    ...(feature('WORKFLOW_SCRIPTS') ? [WORKFLOW_TOOL_NAME] : []),
 46  ])
 47  
 48  export const CUSTOM_AGENT_DISALLOWED_TOOLS = new Set([
 49    ...ALL_AGENT_DISALLOWED_TOOLS,
 50  ])
 51  
 52  /*
 53   * Async Agent Tool Availability Status (Source of Truth)
 54   */
 55  export const ASYNC_AGENT_ALLOWED_TOOLS = new Set([
 56    FILE_READ_TOOL_NAME,
 57    WEB_SEARCH_TOOL_NAME,
 58    TODO_WRITE_TOOL_NAME,
 59    GREP_TOOL_NAME,
 60    WEB_FETCH_TOOL_NAME,
 61    GLOB_TOOL_NAME,
 62    ...SHELL_TOOL_NAMES,
 63    FILE_EDIT_TOOL_NAME,
 64    FILE_WRITE_TOOL_NAME,
 65    NOTEBOOK_EDIT_TOOL_NAME,
 66    SKILL_TOOL_NAME,
 67    SYNTHETIC_OUTPUT_TOOL_NAME,
 68    TOOL_SEARCH_TOOL_NAME,
 69    ENTER_WORKTREE_TOOL_NAME,
 70    EXIT_WORKTREE_TOOL_NAME,
 71  ])
 72  /**
 73   * Tools allowed only for in-process teammates (not general async agents).
 74   * These are injected by inProcessRunner.ts and allowed through filterToolsForAgent
 75   * via isInProcessTeammate() check.
 76   */
 77  export const IN_PROCESS_TEAMMATE_ALLOWED_TOOLS = new Set([
 78    TASK_CREATE_TOOL_NAME,
 79    TASK_GET_TOOL_NAME,
 80    TASK_LIST_TOOL_NAME,
 81    TASK_UPDATE_TOOL_NAME,
 82    SEND_MESSAGE_TOOL_NAME,
 83    // Teammate-created crons are tagged with the creating agentId and routed to
 84    // that teammate's pendingUserMessages queue (see useScheduledTasks.ts).
 85    ...(feature('AGENT_TRIGGERS')
 86      ? [CRON_CREATE_TOOL_NAME, CRON_DELETE_TOOL_NAME, CRON_LIST_TOOL_NAME]
 87      : []),
 88  ])
 89  
 90  /*
 91   * BLOCKED FOR ASYNC AGENTS:
 92   * - AgentTool: Blocked to prevent recursion
 93   * - TaskOutputTool: Blocked to prevent recursion
 94   * - ExitPlanModeTool: Plan mode is a main thread abstraction.
 95   * - TaskStopTool: Requires access to main thread task state.
 96   * - TungstenTool: Uses singleton virtual terminal abstraction that conflicts between agents.
 97   *
 98   * ENABLE LATER (NEED WORK):
 99   * - MCPTool: TBD
100   * - ListMcpResourcesTool: TBD
101   * - ReadMcpResourceTool: TBD
102   */
103  
104  /**
105   * Tools allowed in coordinator mode - only output and agent management tools for the coordinator
106   */
107  export const COORDINATOR_MODE_ALLOWED_TOOLS = new Set([
108    AGENT_TOOL_NAME,
109    TASK_STOP_TOOL_NAME,
110    SEND_MESSAGE_TOOL_NAME,
111    SYNTHETIC_OUTPUT_TOOL_NAME,
112  ])