* Generates the platform-specific description for the shell tool.
*/
exportfunctiongetShellToolDescription(
enableInteractiveShell: boolean,
enableEfficiency: boolean,
):string{
constefficiencyGuidelines=enableEfficiency
?`
Efficiency Guidelines:
- Quiet Flags: Always prefer silent or quiet flags (e.g., \`npm install --silent\`, \`git --no-pager\`) to reduce output volume while still capturing necessary information.
- Pagination: Always disable terminal pagination to ensure commands terminate (e.g., use \`git --no-pager\`, \`systemctl --no-pager\`, or set \`PAGER=cat\`).`
:'';
constreturnedInfo=`
The following information is returned:
Output: Combined stdout/stderr. Can be \`(empty)\` or partial on error and for any unwaited background processes.
Exit Code: Only included if non-zero (command failed).
Error: Only included if a process-level error occurred (e.g., spawn failure).
Signal: Only included if process was terminated by a signal.
Background PIDs: Only included if background processes were started.
?'To run a command in the background, set the `is_background` parameter to true. Do NOT use PowerShell background constructs.'
:'Command can start background processes using PowerShell constructs such as `Start-Process -NoNewWindow` or `Start-Job`.';
return`This tool executes a given shell command as \`powershell.exe -NoProfile -Command <command>\`. ${backgroundInstructions}${efficiencyGuidelines}${returnedInfo}`;
?'To run a command in the background, set the `is_background` parameter to true. Do NOT use `&` to background commands.'
:'Command can start background processes using `&`.';
return`This tool executes a given shell command as \`bash -c <command>\`. ${backgroundInstructions} Command is executed as a subprocess that leads its own process group. Command process group can be terminated as \`kill -- -PGID\` or signaled as \`kill -s SIGNAL -- -PGID\`.${efficiencyGuidelines}${returnedInfo}`;
}
}
/**
* Returns the platform-specific description for the 'command' parameter.
*/
exportfunctiongetCommandDescription():string{
if(os.platform()==='win32'){
return'Exact command to execute as `powershell.exe -NoProfile -Command <command>`';
}
return'Exact bash command to execute as `bash -c <command>`';
}
/**
* Returns the FunctionDeclaration for the shell tool.
*/
exportfunctiongetShellDeclaration(
enableInteractiveShell: boolean,
enableEfficiency: boolean,
):FunctionDeclaration{
return{
name: SHELL_TOOL_NAME,
description: getShellToolDescription(
enableInteractiveShell,
enableEfficiency,
),
parametersJsonSchema:{
type:'object',
properties:{
command:{
type:'string',
description: getCommandDescription(),
},
description:{
type:'string',
description:
'Brief description of the command for the user. Be specific and concise. Ideally a single sentence. Can be up to 3 sentences for clarity. No line breaks.',
},
dir_path:{
type:'string',
description:
'(OPTIONAL) The path of the directory to run the command in. If not provided, the project root directory is used. Must be a directory within the workspace and must already exist.',
},
is_background:{
type:'boolean',
description:
'Set to true if this command should be run in the background (e.g. for long-running servers or watchers). The command will be started, allowed to run for a brief moment to check for immediate errors, and then moved to the background.',
},
},
required:['command'],
},
};
}
/**
* Returns the FunctionDeclaration for exiting plan mode.
'Finalizes the planning phase and transitions to implementation by presenting the plan for user approval. This tool MUST be used to exit Plan Mode before any source code edits can be performed. Call this whenever a plan is ready or the user requests implementation.',
description:`The file path to the finalized plan (e.g., "${plansDir}/feature-x.md"). This path MUST be within the designated plans directory: ${plansDir}/`,
},
},
},
};
}
/**
* Returns the FunctionDeclaration for activating a skill.
description:`Activates a specialized agent skill by name${availableSkillsHint}. Returns the skill's instructions wrapped in \`<activated_skill>\` tags. These provide specialized guidance for the current task. Use this when you identify a task that matches a skill's description. ONLY use names exactly as they appear in the \`<available_skills>\` section.`,