关于我花一个月把VSCode Copilot移植到HBuilderX

1,017 阅读2分钟

断断续续写了差不多一个月,流程跑通了后面只需要优化代码提示用户体验和效果,没想到今天早上发现Copilot服务被封禁了,应该无限期推迟项目了,不过折腾了这么久还是有一些经验积累,今天分享下吧。

image.png

image.png

一.背景

用了几个月Copilot,确实很香,接私活神器啊,虽然收费了,淘宝上还挺便宜。最近使用uniCloud做个人项目一直用的HBuilderx编辑器,但是却没有Copilot插件,毕竟是国内的编辑器,Github官方肯定是不会去写插件的。

二.思路

1.搞清楚VSCode Copilot插件的业务流程

2.解决Github Copilot身份和接口调用Token

3.跑通整个业务流程出个MVP版本

4.难点,优化用户体验以及提示的准确性

搞清楚Copilot插件的工作流程与具体实现。

解压了Copilot的源码,大约两万多行代码,还有部分代码是编译成了wasm。 大概流程是VSCode打开Github oauth2授权页面获取Code换取Token,然后通过Github Token换取Copilot Token,用户输入注释Copilot请求服务端获取代码片段,再经过插件优化处理,展现给用户。

获取Copilot Token

最终发现VSCode调用Github Oauth2授权没对State字段做校验,也就是说把State字段的值改为hbuilderx://xxxx就能授权通过后调起HBuilderX获取到Code,然后code2session就拿到了Token,到这里我作为第三方插件成功拿到了VSCode的Copilot Token。

这里也提醒我今后在使用Oauth2授权的时候一定要校验State字段,以前觉得麻烦一直忽略了这个字段。

注册自定义Schema image.png

插件内启动Http Server优化授权流程 image.png

用户输入注释触发代码提示

image.png

image.png

image.png

打包代码上传插件市场,测试,优化

.npmignore上传插件市场忽略源码文件

image.png

uni_modules.config.json上传插件市场前编译代码 image.png

然而还是高兴的太早,今天早上准备优化下流程,却发现Copilot服务被封禁了。 image.png

后续如果解决不了这个问题我会把插件开源,有能力的人去解决,就这样。

插件地址