Open6

OSSになったvscode-copilot-chatを読む

ちゅうこちゅうこ

昨日VS Code Meetup x GitHub dockyardのコラボイベントの懇親会で、copilot-releaseのIssueはあまり見てくれなそうで、かつIssueが溜まっていてだいぶ見られることなさそうみたいな話を懇親会で行なった。(実際にVS CodeのIssueからrefしないと、開発者に見られなかったという経験がある)

そんな状況でCopilotをOSSにするとしたらどこになるんだろうと思っていたら、なんと数日前にpublicリポジトリで公開されていることに気づいた。

https://github.com/microsoft/vscode-copilot-chat

これは以前Microsoft Build 2025にて宣言した、GitHub Copilot ChatをOSSにするという宣言のものだろう。
https://x.com/code/status/1924497694648603021

ちゅうこちゅうこ

リポジトリのコードリーディングをしてみようと思う。
流石にドッグフーディングしているだろうと、.github以下を見てみると、バッチリコードの全体図がわかるcopilot-instructions.mdが配置されている。
https://github.com/microsoft/vscode-copilot-chat/blob/main/.github/copilot-instructions.md

読み進めるのはこのあたりのヒントを元に見るとよいだろう。

ちなみに .github/copilot-instructions.md はGitHub Copilot Chatにおいて常に追加される指示が記されるファイルで、リポジトリのコードの読み方だったり構造、守ってほしいルールなどを書いておくと良いファイルのことを指す。
https://docs.github.com/en/copilot/how-tos/custom-instructions/adding-repository-custom-instructions-for-github-copilot?tool=vscode

ちゅうこちゅうこ

上記のinstructions.mdを見て興味深いのは

Tech Stack

  • TSX: Prompts are built using the @vscode/prompt-tsx library

やはりここではないだろうか。
約1年ほど前からリリースされていた、TSXファイルでLLMのプロンプトを記述できる @vscode/prompt-tsx。

これがこの拡張機能では多用されている。
例えばリポジトリに含まれる.tsxファイルを探すと利用例が出てくる。

Agentを構成しているプロンプトは以下のファイルで定義されているようだ。
https://github.com/microsoft/vscode-copilot-chat/blob/main/src/extension/prompts/node/agent/agentPrompt.tsx

ちゅうこちゅうこ

実際にビルドして動かしてみると、無事動いていることが確認できる。
動かし方もcopilot-instructions.mdに書いてあるので便利だった。

$ npm install
$ npm run compile

を実行した後、VS CodeのDebugタスクから「Launch Copilot Extension - Watch Mode」を実行すると動作する(その前に自分はGitHub Copilot Chatの拡張をdisabledした)。

ちゅうこちゅうこ

自前でビルドすると、例えばこんなことが出来そうだなという妄想が捗る。

例えばBYOKは利用できるプランが決まっているが、その設定を有効にしたり、変更できないbaseURLを変更するみたいのが出来るのではないか、とか。
https://github.com/microsoft/vscode-copilot-chat/tree/main/src/extension/byok

自作のCopilot Chat Extensionに双方向通信の機構を組み込んで、例えばCopilot CLI(Agent)みたいのもVS Code Serverと組合せて出来そうだなみたいな妄想が捗る。
https://code.visualstudio.com/docs/remote/vscode-server