[client] implement add-on system