With good compression and your service history, the suspect is a sensor. It is a safe bet that whatever codes are getting stored, they do not point directly to the problem. If the code pointed directly to the problem, the shop would have fixed it already. The codes will hopefully provide a clue and point in the general direction of the problem.
The computer will set a code if it gets a reading that is out of bounds or if it gets a reading that does not agree with other readings. For example, if the throttle position sensor, RPM, and mass air flow reading do not “fit” with each other, the computer will generally set a code for mass airflow sensor, when the real problem might be a hole in the air inlet tube or obstructed exhaust.
You can get an OBD reader fairly inexpensively. It will help if we know the codes being set and the order in which they are set.