     get: -> @_workspace
     set: (v) -> @_workspace = v
   )
+
+  ###*
+  @static
+  @property {number} STEP_START
+    Constant number for step starting
+  @readonly
+  ###
+  @classProperty("STEP_START", value: STEP_START = 0)
+
+  ###*
+  @static
+  @property {number} STEP_PROGRESS
+    Constant number for step in progress
+  @readonly
+  ###
+  @classProperty("STEP_PROGRESS", value: STEP_PROGRESS = 1)
+
+  ###*
+  @static
+  @property {number} STEP_FINISHED
+    Constant number for step finished
+  @readonly
+  ###
+  @classProperty("STEP_FINISHED", value: STEP_FINISHED = 2)
+
+  ###*
+  @static
+  @property {number} STEP_SKIPPED
+    Constant number for step skipped
+  @readonly
+  ###
+  @classProperty("STEP_SKIPPED", value: STEP_SKIPPED = 3)
+
+  ###*
+  @static
+  @property {number} STEP_ABORTED
+    Constant number for step aborted
+  @readonly
+  ###
+  @classProperty("STEP_ABORTED", value: STEP_ABORTED = 4)
 
   #--------------------------------------------------------------------------------
   # Events

    Transfer sketch (Rubic->Board)
  @param {boolean} [force=false]
    Force download all files
  @param {function(string,number,Error)} [progress=null]
    Hook function for show progress
  @return {Promise}
    Promise object

    done = 0
    return transferItems.reduce(
      (promise, item) =>
        written = false
        return promise.then(=>
          progress?(item.path, (100 * done / transferItems.length), STEP_START)
          return @_dirFs.readFile(item.path).catch((error) =>
            progress?(item.path, null, error)
            return Promise.reject(error)
