code-server icon indicating copy to clipboard operation
code-server copied to clipboard

Implement VS Code remote extensions

Open nhooyr opened this issue 5 years ago • 56 comments

  • [ ] Container
  • [ ] SSH
  • [ ] Tunnels

Related https://github.com/cdr/code-server/issues/1032

nhooyr avatar Jan 29 '20 00:01 nhooyr

In case this issue is about fixing the remote extensions to work with code-server, this related issue can be closed: #892. I would really like to see the SSH extension to work within code-server and would be happy to test it once there is any fix.

lukasmasuch avatar Jan 29 '20 11:01 lukasmasuch

@nhyoor if this interests you, there's a remote subfolder in the main vscode folder, wanna ~~abuse~~ reuse that?

sr229 avatar Jan 29 '20 13:01 sr229

The remote extension does some checks as far as i know i decompiled it some times.

There is a validation shema i think we should first automate the decompile process and check that.

frank-dspeed avatar Feb 01 '20 12:02 frank-dspeed

We cannot and will not decompile the extension, that is not valid per the license terms.

nhooyr avatar Feb 02 '20 20:02 nhooyr

Is there any further plan to implement these extensions?

Just-Insane avatar Feb 23 '20 23:02 Just-Insane

Is there any further plan to implement these extensions?

Would also like to know, if you have still have plans to implement this. Thanks!

kirscheGIT avatar May 29 '20 09:05 kirscheGIT

Nothing concrete at the moment.

code-asher avatar May 29 '20 16:05 code-asher

I currently have a need for Remote - SSH extension and unfortunately the official one doesn't work for me (which is unlikely to be solved upstream in the near future). So I am considering implementing it myself.

At least initially I would like to have it as simple as possible. Without any fancy terminal forwarding or something like that. Just make it so that the work with the filesystem and all the language servers are running on the vm and UI is running in the vscode. Similar two what we now have with code-server in the browser, but without browser version problems (such as cmd+w for example).

Would you have some pointers as to where to start investigating from inside vscode source?

gyzerok avatar Jun 05 '20 01:06 gyzerok

At the moment I don't have a good idea of the full scope of what'll be required to make this work but it'll probably have to do with using and/or implementing the remote authority stuff.

There's a workspace.registerRemoteAuthorityResolver in the proposed API which might be a good starting point.

code-asher avatar Jun 08 '20 19:06 code-asher

building from vscode-1.48.0 branch + adding https://github.com/cdr/code-server/pull/1779/commits/9fb33dce3d8f4854163c978ef02bdd06f1983722 , as well as adding ms-vscode-remote.remote-containers to extensionAllowedProposedApi.

This gets the remote extensions installed however it is still complaining with the error:

[ms-vscode-remote.remote-containers]: View container 'remote' requires 'enableProposedApi' turned on to be added to 'Remote'.

Tried executing via below.

code-server --enable-proposed-api ms-vscode-remote.remote-containers
code-server --enable-proposed-api=ms-vscode-remote.remote-containers

Is there any more direct way to add arguments to the vscode to execute ? I'm not sure if the enable-proposed-api switch simply does nothing or there is something else to be enabled.

JayDoubleu avatar Aug 17 '20 23:08 JayDoubleu

@JayDoubleu could you open a separate issue for the enable proposed API flag? It's possible we have a bug there.

I'm not confident the remote extensions will work in code-server even if we resolve that though. Unfortunately I won't be able to test since it's against the terms of service to use them in anything other than VS Code. :cry:

code-asher avatar Aug 18 '20 16:08 code-asher

See https://github.com/cdr/code-server/pull/1779

nhooyr avatar Aug 20 '20 19:08 nhooyr

Just tested this with ms-vscode-remote.remote-containers-0.132.0.vsix When clicking open in container it just disconnects and reloads. [server] disconnected from client {"proxies":3}

I'm assuming there is no way to get ANY remote or codespaces working with code-server ? I can see that it's already connecting to localhost as a remote

JayDoubleu avatar Aug 26 '20 16:08 JayDoubleu

I haven't investigated (I don't think I can since legally we can't run the extension with code-server) so I can't be sure but yeah, I think it's possible that code-server technically being a remote already might be what's causing the incompatibility.

code-asher avatar Aug 27 '20 16:08 code-asher

I'd be curious to know whether the remote extensions work in VS Code's own online offering, if anyone has given that a try. If they don't work then maybe they'll do some work to make it possible. If they do work then I think it's unlikely we'll be able to do anything about it.

code-asher avatar Aug 27 '20 17:08 code-asher

The VSCode online AKA codespaces returns Cannot install 'Remote - Containers' because this extension has defined that it cannot run on the remote server when trying to install extension.

The codespace when opened already acts as a remote, and Microsoft allows for multiple of those.

The VS Code Remote - Containers extension allows you to clone a repository or open any folder mounted into (or already inside) a dev container and take advantage of VS Code's full development feature set. Visual Studio Codespaces and Codespaces in GitHub both use this same concept to quickly create customized, cloud-based development environments accessible from VS Code or the web.

It looks like it detects the devcontainer.json and automatically bootstraps into the environment as one would through remote container extension.

JayDoubleu avatar Aug 27 '20 17:08 JayDoubleu

Ah, we disable the remote extension check and just let every extension attempt to run which explains why code-server doesn't display that error (otherwise extensions like vscode-icons won't run even though they work).

I suppose that means the extension is not meant to work by design, at least as it currently stands, and that probably won't change if they've already coded the functionality separately in codespaces. So in the end we're basically stuck just having to re-implement these extensions.

code-asher avatar Aug 27 '20 17:08 code-asher

I see, The ability to spin up multiple code-server codespaces* while using devcontainer.json as provisioner would be a very appreciated feature. In theory one could create some sort of wrapper with just docker build + bind mounts however its all about the experience.

JayDoubleu avatar Sep 02 '20 16:09 JayDoubleu

Investigating the remote/ folder, looks like remote implements vscode-release-reh which compiles into a whole server target. I think we can repurpose this.

sr229 avatar Dec 14 '20 06:12 sr229

Don't give me hope ... :)

JayDoubleu avatar Dec 14 '20 08:12 JayDoubleu

Digging more on the code I think I have a gripe on how RPC works with vscode right now

Observing this: https://github.com/microsoft/vscode/blob/master/src/vs/platform/remote/common/remoteAgentConnection.ts, I was able to deduce that:

  • vscode creates a handshake
  • Connects to the remote server via a socket (presumably UDP)
  • The same connection will be used to connect to the remote extension service
  • Then parses the environment based from here: https://github.com/microsoft/vscode/blob/master/src/vs/platform/remote/common/remoteAgentEnvironment.ts

It's not so well documented but we already have a gist on what we're dealing with.

sr229 avatar Dec 14 '20 10:12 sr229

Additional notes: Everything in VS Code relies on a single tunnel connection. Presumably to simplify things, if I am right and all of this are done in UDP, then what we can do is basically connect and expose the same ports and implement the same functions we can expect from the remote server. That way, we have something close to Codespaces' experience.

Additional Anecdote: If that is the case, coder can also implement a official extension for VS Code itself that does the same trick at VS Remote, but using code-server.

sr229 avatar Dec 14 '20 10:12 sr229

Again since we want the same experience as I outlined in GH-2105, there's more than just the remote server itself as well. If we are to approach this as a extension, then the extension must also replicate VS Remote's behavior which is the following:

  • Being able to arbitrarily perform a curl request at the target remote to download server.
  • Check for updates, and update the remote accordingly to the client version.

sr229 avatar Dec 14 '20 10:12 sr229

Any news about the possibility / feasibility to have a replica of the Remote Development extension for code-server ?

I'm using code-server on my Chromebook, as vscode itself is too laggy on it. But I need to remote develop in a Docker container. As this image is shared with my team, I don't want to alter it to add code-server inside just for my needs.

Lestt avatar Apr 09 '21 03:04 Lestt

Any news about the possibility / feasibility to have a replica of the Remote Development extension for code-server ?

I'm using code-server on my Chromebook, as vscode itself is too laggy on it. But I need to remote develop in a Docker container. As this image is shared with my team, I don't want to alter it to add code-server inside just for my needs.

Haven't been able to do this again, but refer to my findings above. I'm sure you can help out with the search :D

sr229 avatar Apr 09 '21 11:04 sr229

Yes, echoing @sr229 - no updates either.

Though @bpmct may be able to suggest some workarounds since he has more experience in those kind of situations.

jsjoeio avatar Apr 12 '21 18:04 jsjoeio

Sadly I don't. This is something I would love to see as well :(

bpmct avatar Apr 13 '21 02:04 bpmct

@jsjoeio I'm keen to help on my spare time, but don't know where to start. Is there any plan to follow or something ?

Lestt avatar Apr 13 '21 02:04 Lestt

@Lestt that's awesome to hear!

I'm not sure exactly where to start either :( I would take a look through the comments here and see what you can learn from code-asher and sr229's comments.

If you'd like, you could do that and then share comments here as you go? We can do our best to guide/answer questions too!

jsjoeio avatar Apr 13 '21 17:04 jsjoeio

After months of analysis and some bit of RE, I'm already starting work on this. Can't assure when it'll be available since it's not something I don't see that will take off immediately + my workspace time is very limited right now due to my hardware being incapable of developing at the moment.

CC @Lestt if you're interested, let's talk on the Coder Slack, would love an additional pair of hands to help me code this :D

sr229 avatar Apr 16 '21 13:04 sr229