mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-04-21 02:24:09 -07:00
65 lines
2.0 KiB
TypeScript
65 lines
2.0 KiB
TypeScript
|
|
/**
|
||
|
|
* @license
|
||
|
|
* Copyright 2026 Google LLC
|
||
|
|
* SPDX-License-Identifier: Apache-2.0
|
||
|
|
*/
|
||
|
|
|
||
|
|
import { describe, expect } from 'vitest';
|
||
|
|
import { evalTest } from './test-helper.js';
|
||
|
|
|
||
|
|
describe('Smart Log Navigation', () => {
|
||
|
|
/**
|
||
|
|
* Verifies that the agent uses tail or ranged read at the end of a massive log file.
|
||
|
|
*/
|
||
|
|
evalTest('USUALLY_PASSES', {
|
||
|
|
name: 'should use smart log navigation for large log files',
|
||
|
|
files: {
|
||
|
|
'build.log': (() => {
|
||
|
|
const lines = [];
|
||
|
|
for (let i = 0; i < 2000; i++) {
|
||
|
|
lines.push(`Log line ${i}: All good so far...`);
|
||
|
|
}
|
||
|
|
lines.push(
|
||
|
|
'ERROR: The build failed at the very end because of a syntax error in main.ts',
|
||
|
|
);
|
||
|
|
return lines.join('\n');
|
||
|
|
})(),
|
||
|
|
'package.json': JSON.stringify({
|
||
|
|
name: 'test-project',
|
||
|
|
type: 'module',
|
||
|
|
}),
|
||
|
|
},
|
||
|
|
prompt:
|
||
|
|
'The build failed and logs are in build.log. Find the error at the end of the file and report it.',
|
||
|
|
assert: async (rig) => {
|
||
|
|
const toolLogs = rig.readToolLogs();
|
||
|
|
|
||
|
|
// Check if it used tail or read_file with an offset/limit targeting the end
|
||
|
|
const readCalls = toolLogs.filter(
|
||
|
|
(log) =>
|
||
|
|
(log.toolRequest.name === 'run_shell_command' &&
|
||
|
|
(log.toolRequest.args.includes('tail') ||
|
||
|
|
log.toolRequest.args.includes('grep'))) ||
|
||
|
|
log.toolRequest.name === 'read_file',
|
||
|
|
);
|
||
|
|
|
||
|
|
const usedSmartNavigation = readCalls.some((log) => {
|
||
|
|
if (log.toolRequest.name === 'run_shell_command') {
|
||
|
|
const cmd = log.toolRequest.args.toLowerCase();
|
||
|
|
return cmd.includes('tail') || cmd.includes('grep error');
|
||
|
|
}
|
||
|
|
if (log.toolRequest.name === 'read_file') {
|
||
|
|
const args = JSON.parse(log.toolRequest.args);
|
||
|
|
return args.offset !== undefined && args.offset >= 1000;
|
||
|
|
}
|
||
|
|
return false;
|
||
|
|
});
|
||
|
|
|
||
|
|
expect(
|
||
|
|
usedSmartNavigation,
|
||
|
|
'Agent should have used tail, grep, or a ranged read at the end of the large log file',
|
||
|
|
).toBe(true);
|
||
|
|
},
|
||
|
|
});
|
||
|
|
});
|