Move error extraction logic from standalone extractExecutionError function
into TaskItemImpl.errorMessage and TaskItemImpl.executionError getters.
This encapsulates the error extraction pattern within the class, preparing
for the Jobs API migration where the underlying data format will change
but the getter interface will remain stable.
Also add ExecutionErrorDialogInput interface to dialogService that accepts
both ExecutionErrorWsMessage (WebSocket) and ExecutionError (Jobs API)
formats, enabling the error dialog to work with either source.