I noticed that $aq(pm25)$ is not the daily average PM2.5 value as it should, but is equal to $aq(index)$

Is this a bug?

Thank you!

Ok, I think I got it.

I guess KWGT is using free API from the World Air Quality Index project.

Here's how they calculate AQI
and that's the reason why US EPA AQI converted PM2.5 value is equal to the AQI.

I also found that free APIs are much more reliable and their data are more often updated. free API doesn't support PM2.5 PM10 what is the alternative ? please recommend.

Hi. You can use

they've got both free widget API and JSON API service

With JSON API you can code your own KWGT widget. I coded my own using Automate (Llamalab) to download updated JSON based on GPS position and KWGT to show results on smartphone home page.