Improve overall structure

- move validation to plugin itself
- introduce abstraction layer between task and extensions in the plugin