Understanding Syft's Software Detection Mechanism and Architecture

Hi, I am new to the Syft tool and am interested in understanding its software detection mechanism. Is there any available documentation on its architecture or workflow? I have not been able to find one online.