mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-04-11 13:51:10 -07:00
52 lines
1.6 KiB
TypeScript
52 lines
1.6 KiB
TypeScript
/**
|
|
* Offload Log Tailer (Local)
|
|
*
|
|
* Tails the latest remote logs for a specific job.
|
|
*/
|
|
import { spawnSync } from 'child_process';
|
|
import path from 'path';
|
|
import fs from 'fs';
|
|
import { fileURLToPath } from 'url';
|
|
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
const REPO_ROOT = path.resolve(__dirname, '../../../..');
|
|
|
|
export async function runLogs(args: string[]) {
|
|
const prNumber = args[0];
|
|
const action = args[1] || 'review';
|
|
|
|
if (!prNumber) {
|
|
console.error('Usage: npm run offload:logs <PR_NUMBER> [action]');
|
|
return 1;
|
|
}
|
|
|
|
const settingsPath = path.join(REPO_ROOT, '.gemini/settings.json');
|
|
const settings = JSON.parse(fs.readFileSync(settingsPath, 'utf8'));
|
|
const config = settings.maintainer?.deepReview;
|
|
const { remoteHost, remoteHome } = config;
|
|
const sshConfigPath = path.join(REPO_ROOT, '.gemini/offload_ssh_config');
|
|
|
|
const jobDir = `${remoteHome}/dev/worktrees/offload-${prNumber}-${action}`;
|
|
const logDir = `${jobDir}/.gemini/logs`;
|
|
|
|
console.log(`📋 Tailing latest logs for job ${prNumber}-${action}...`);
|
|
|
|
// Remote command to find the latest log file and tail it
|
|
const tailCmd = `
|
|
latest_log=$(ls -t ${logDir}/*.log 2>/dev/null | head -n 1)
|
|
if [ -z "$latest_log" ]; then
|
|
echo "❌ No logs found for this job yet."
|
|
exit 1
|
|
fi
|
|
echo "📄 Tailing: $latest_log"
|
|
tail -f "$latest_log"
|
|
`;
|
|
|
|
spawnSync(`ssh -F ${sshConfigPath} ${remoteHost} ${JSON.stringify(tailCmd)}`, { stdio: 'inherit', shell: true });
|
|
return 0;
|
|
}
|
|
|
|
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
runLogs(process.argv.slice(2)).catch(console.error);
|
|
}
|