import { isEnvDefinedFalsy, isEnvTruthy } from '../../utils/envUtils.js' import { AGENT_TOOL_NAME } from '../AgentTool/constants.js' import { BASH_TOOL_NAME } from '../BashTool/toolName.js' import { FILE_EDIT_TOOL_NAME } from '../FileEditTool/constants.js' import { FILE_READ_TOOL_NAME } from '../FileReadTool/prompt.js' import { FILE_WRITE_TOOL_NAME } from '../FileWriteTool/prompt.js' import { GLOB_TOOL_NAME } from '../GlobTool/prompt.js' import { GREP_TOOL_NAME } from '../GrepTool/prompt.js' import { NOTEBOOK_EDIT_TOOL_NAME } from '../NotebookEditTool/constants.js' export const REPL_TOOL_NAME = 'REPL' /** * REPL mode is default-on for ants in the interactive CLI (opt out with * CLAUDE_CODE_REPL=0). The legacy CLAUDE_REPL_MODE=1 also forces it on. * * SDK entrypoints (sdk-ts, sdk-py, sdk-cli) are NOT defaulted on — SDK * consumers script direct tool calls (Bash, Read, etc.) and REPL mode * hides those tools. USER_TYPE is a build-time --define, so the ant-native * binary would otherwise force REPL mode on every SDK subprocess regardless * of the env the caller passes. */ export function isReplModeEnabled(): boolean { if (isEnvDefinedFalsy(process.env.CLAUDE_CODE_REPL)) return false if (isEnvTruthy(process.env.CLAUDE_REPL_MODE)) return true return ( process.env.USER_TYPE === 'ant' && process.env.CLAUDE_CODE_ENTRYPOINT === 'cli' ) } /** * Tools that are only accessible via REPL when REPL mode is enabled. * When REPL mode is on, these tools are hidden from Claude's direct use, * forcing Claude to use REPL for batch operations. */ export const REPL_ONLY_TOOLS = new Set([ FILE_READ_TOOL_NAME, FILE_WRITE_TOOL_NAME, FILE_EDIT_TOOL_NAME, GLOB_TOOL_NAME, GREP_TOOL_NAME, BASH_TOOL_NAME, NOTEBOOK_EDIT_TOOL_NAME, AGENT_TOOL_NAME, ])