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:
sebseb7
2025-08-11 22:34:43 +02:00
parent 8d23ec53e1
commit 2de276761a
3 changed files with 104 additions and 16 deletions

View File

@@ -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}`;
}
}