anchor.diff:      with ex ->
           failwithf "Cannot convert arguments to dictionary: %A\n%s" argv ex.Message
   
  +let getFreePort () =
  +    let l = Sockets.TcpListener(System.Net.IPAddress.Loopback, 0)
  +    l.Start()
  +    let port = (l.LocalEndpoint :?> IPEndPoint).Port
  +    l.Stop()
  +    port
  +
   let getPortAndTimeout argsMap =
       let port =
           match Map.tryFind "port" argsMap with
  +        | Some "free" -> getFreePort()
           | Some port -> int port
           | None -> Constants.DEFAULT_PORT
       let timeout =
  
positive.code:   --version           Print version
    add                 Add one or several Fable npm packages
    start               Start Fable server
    --port              Port number (default 61225)
    --timeout           Stop the server if timeout (ms) is reached
    npm-run             Start a server, run an npm script and shut it down
      <script>            Name of the npm script, e.g.: `dotnet fable npm-run start`
      --port              Port number (default 61225)
      --args              Args for the npm script, e.g.: `dotnet fable npm-run build --args "-p --output-filename bundle.js"`
    webpack             Start a server and invoke webpack (must be installed in current or a parent dir)
      --port              Port number (default 61225)
      --args              Args for Webpack, e.g.: `dotnet fable webpack --args -p`
    shell-run           Start a server, run an abritrary command and shut it down
      <cmd>            Name of the command to run, e.g.: `dotnet fable shell-run make`
      --port              Port number (default 61225)
      --args              Args for the command, e.g.: `dotnet fable shell-run make --args "build"`
    webpack-dev-server  Same as `webpack` command but invokes webpack-dev-server
  """
  
negative.code:     startServer port -1 agent.Post <| fun listen ->
          Async.Start listen
          let workingDir = Directory.GetCurrentDirectory()
          let p = startProcess workingDir exec args (Some (port.ToString()))
          Console.CancelKeyPress.Add (fun _ ->
              Server.stop port |> Async.RunSynchronously
              printfn "Killing process..."
  