import { MorphClient } from '@morphllm/morphsdk';
const morph = new MorphClient({ apiKey: process.env.MORPH_API_KEY });
const grepTool = morph.anthropic.createWarpGrepTool({
repoRoot: '/home/user/repo',
remoteCommands: {
grep: async (pattern, path, glob) => {
// Equivalent command:
// rg --no-config --no-heading --with-filename --line-number \
// --color=never --trim --max-columns=400 -C 1 \
// --glob '<glob>' '<pattern>' '<path>'
const r = await sandbox.exec(`rg --no-config --no-heading --with-filename --line-number --color=never --trim --max-columns=400 -C 1 ${glob ? `--glob '${glob}'` : ''} '${pattern}' '${path}'`);
return r.stdout;
},
read: async (path, start, end) => {
// Equivalent command:
// sed -n '<start>,<end>p' '<path>'
const r = await sandbox.exec(`sed -n '${start},${end}p' '${path}'`);
return r.stdout;
},
listDir: async (path, maxDepth) => {
// Equivalent command:
// find '<path>' -maxdepth <maxDepth>
const r = await sandbox.exec(`find '${path}' -maxdepth ${maxDepth}`);
return r.stdout;
},
glob: async (pattern, path) => {
// Equivalent command:
// rg --no-config --files --color=never -g '<pattern>' '<path>'
const r = await sandbox.exec(`rg --no-config --files --color=never -g '${pattern}' '${path}'`);
return r.stdout;
},
},
});