gatherAutoContext function

Future<String> gatherAutoContext({
  1. required String query,
  2. required String workingDirectory,
  3. int tokenBudget = 50000,
  4. List<String> mentionedFiles = const [],
})

Automatically gather relevant context for a user query.

Implementation

Future<String> gatherAutoContext({
  required String query,
  required String workingDirectory,
  int tokenBudget = 50000,
  List<String> mentionedFiles = const [],
}) async {
  final builder = ContextBuilder(tokenBudget: tokenBudget);

  // 1. Add explicitly mentioned files (highest priority)
  for (final file in mentionedFiles) {
    final resolved = p.isAbsolute(file) ? file : p.join(workingDirectory, file);
    await builder.addFile(resolved, maxLines: 500);
  }

  // 2. Add project info
  final projectInfo = await _detectProjectInfo(workingDirectory);
  if (projectInfo.isNotEmpty) {
    builder.add(ProjectInfoContext(projectInfo));
  }

  // 3. Add git status/diff if relevant
  if (_queryRelatesTo(query, ['diff', 'change', 'commit', 'git', 'modified'])) {
    await builder.addGitDiff();
    await builder.addGitDiff(staged: true);
  }

  // 4. Add directory listing if relevant
  if (_queryRelatesTo(query, [
    'file',
    'directory',
    'structure',
    'project',
    'where',
  ])) {
    await builder.addDirectoryListing(workingDirectory);
  }

  return builder.build();
}