normalizeToolInputForAPI function

Map<String, dynamic> normalizeToolInputForAPI({
  1. required String toolName,
  2. required Map<String, dynamic> input,
})

Strip injected fields before sending to API.

Removes plan/planFilePath from ExitPlanModeV2, and legacy synthetic old_string/new_string from FileEdit when edits array is present.

Implementation

Map<String, dynamic> normalizeToolInputForAPI({
  required String toolName,
  required Map<String, dynamic> input,
}) {
  switch (toolName) {
    case 'ExitPlanModeV2':
      final result = Map<String, dynamic>.from(input);
      result.remove('plan');
      result.remove('planFilePath');
      return result;

    case 'FileEdit':
      if (input.containsKey('edits')) {
        final result = Map<String, dynamic>.from(input);
        result.remove('old_string');
        result.remove('new_string');
        result.remove('replace_all');
        return result;
      }
      return input;

    default:
      return input;
  }
}