also introduce very early work on lager
this can be sent by the client to resize the tty attached to the process. there is no response sent back; the message is of low importance and may be sent many times (when a user is literally resizing their terminal), so it's probably not worth the roundtrip.
this actually ended up being inconvenient in many places. a very common use case is emitting logs over a persistent connection; having that connection close after the process exits is pretty inconvenient. it also assumes you have an io.Closer in the first place. this also brings it yet closer to *exec.Cmd
* stdin/stdout/stderr are done via io.Readers/io.WriteClosers, rather than everything going over one channel * Env is now a simple string, just to be a bit more like exec.Cmd, which also tries to be a OS-agnostic interface, despite K=V being 'Unixy' * the attach/run API calls are now hijacked HTTP connections, so that stdin may be sent across the wire later * rather than consuming the full stream until a payload with an ExitStatus is detected, the caller can call process.Wait() to block until it exits, which will return you its exit status. * an 'error' field has been added to ProcessPayload to signify .Wait() failing server-side. this will bubble up to the client, which will return an error on its respective .Wait().