Refactor read_file and ripgrep tools to implement file reading and searching functionalities. The read_file tool now validates paths within a restricted directory and handles line skipping and reading limits. The ripgrep tool is implemented to perform pattern searches with optional flags for line numbers and case sensitivity, enhancing search capabilities and error handling.
This commit is contained in:
@@ -9,8 +9,53 @@ export default {
|
||||
filePattern: { type: "string", description: "'*.js' for only js files, '!*.log' for all files except log files , '' for all files"},
|
||||
n_flag: { type: "boolean",description: "show line numbers."},
|
||||
i_flag: { type: "boolean",description: "case insensitive search."}
|
||||
},},};
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export async function run(args) {
|
||||
return `ripgrep error (not implemented)`
|
||||
const { pattern, filePattern, n_flag, i_flag } = args;
|
||||
|
||||
// Build the args array
|
||||
let rgArgs = [];
|
||||
|
||||
if (n_flag) rgArgs.push('-n');
|
||||
if (i_flag) rgArgs.push('-i');
|
||||
if (filePattern) {
|
||||
rgArgs.push('-g', filePattern);
|
||||
}
|
||||
|
||||
// Add separator and pattern
|
||||
rgArgs.push('--', pattern);
|
||||
|
||||
try {
|
||||
const { spawnSync } = require('child_process');
|
||||
const proc = spawnSync('rg', rgArgs, {
|
||||
cwd: virtual_chroot,
|
||||
encoding: 'utf8',
|
||||
maxBuffer: 1024 * 1024 * 10 // 10MB buffer
|
||||
});
|
||||
|
||||
if (proc.error) {
|
||||
return `ripgrep error: ${proc.error.message}`;
|
||||
}
|
||||
|
||||
let output = proc.stdout;
|
||||
|
||||
if (proc.status !== 0) {
|
||||
if (proc.status === 1) {
|
||||
// No matches found
|
||||
return output || '';
|
||||
}
|
||||
return `ripgrep error: exit ${proc.status}, ${proc.stderr}`;
|
||||
}
|
||||
|
||||
// Limit to 200 lines
|
||||
const lines = output.split('\n');
|
||||
const limitedOutput = lines.slice(0, 200).join('\n');
|
||||
|
||||
return limitedOutput;
|
||||
} catch (error) {
|
||||
return `ripgrep error: ${error.message}`;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user