Spm client

#919 

先 review 下，不要合
publish 已经处理了，upload 还没迁过来，所以暂时留着