Running interactive shell is more than piping stdio from docker exec through a web socket. For enabling terminal based program to run, there are certain functions that work outside of stdio streams to the destination program. A couple known functions to improve terminal usability:
- Resize terminal columns and rows
- Set title of the window
- Upload files via zmodem protocol
- Set terminal type
- Heartbeat (poll server side for more data)
- Send keystroke payload to server side
If we want to be on parity with commonly supported ssh terminal functions, we need to develop a set of protocols between websocket client and server. Client and server intercept the messages to enable functions that are normally outside of the stdio streams.