| 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, | |
| ]) | |