autoagent-cli
Version:
Run autonomous AI agents using Claude or Gemini for task execution
70 lines (69 loc) • 2.35 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.GeminiProvider = void 0;
const Provider_1 = require("./Provider");
const child_process_1 = require("child_process");
class GeminiProvider extends Provider_1.Provider {
get name() {
return 'gemini';
}
async checkAvailability() {
try {
const { stdout, code } = await this.spawnProcess('gemini', ['--version']);
return code === 0 && stdout.toLowerCase().includes('gemini');
}
catch (error) {
return false;
}
}
async execute(prompt, workspace, _additionalDirectories, signal) {
const args = [prompt];
args.push('--sandbox');
return new Promise((resolve, reject) => {
const child = (0, child_process_1.spawn)('gemini', args, {
cwd: workspace,
env: { ...process.env }
});
let output = '';
let error = '';
child.stdout.on('data', (data) => {
const text = data.toString();
output += text;
});
child.stderr.on('data', (data) => {
error += data.toString();
});
child.on('close', (code) => {
if (code === 0) {
resolve(output);
}
else {
reject(new Error(`Gemini exited with code ${code}: ${error}`));
}
});
child.on('error', (err) => {
reject(err);
});
if (signal) {
signal.addEventListener('abort', () => {
child.kill('SIGTERM');
reject(new Error('Process aborted'));
});
}
});
}
async chat(prompt, options) {
const args = [prompt];
if (options?.systemPrompt !== undefined) {
args[0] = `${options.systemPrompt}\n\n${prompt}`;
}
try {
const { stdout } = await this.spawnProcess('gemini', args, options?.signal);
return stdout.trim();
}
catch (error) {
throw new Error(`Gemini chat failed: ${error instanceof Error ? error.message : String(error)}`);
}
}
}
exports.GeminiProvider = GeminiProvider;