GitHub Copilot NESの内部実装が公開、そして続・AIエディタ戦争
Copilot NESとは
Copilot NES(Next Edit Suggestions)は2025年2月にリリースされたGitHub Copilotの内部機能です。コードの変更に連動して必要となる次の編集を予測し、タブキーを押しているだけで複数箇所にわたる修正を提案してくれます。通常のコード補完がカーソル位置の続きのコードを予測するのに対して、Copilot NESは「エディタ上の編集操作」の単位で続きを予測して補完します。

この仕組みはCopilot NESの元ネタであるCursor Tab(Copilot++)によって実用化されましたが、Cursorはプロプライエタリなソフトウェアなので内部の詳細が分かりませんでした。
しかし最近マイクロソフトはCopilot Chat拡張のソースコードをMITライセンスで公開しました。これによってCopilot NESの内部実装が明らかになりました。公開されたのはCopilot拡張本体ではなくCopilot Chat拡張の方です。

このリポジトリは、Copilot NESやCursor Tabのような機能を開発したい人の参考になるはずです。
どのような仕組みか
Copilot NESはユーザーのエディタ上の「操作履歴」を記録します。操作履歴のデータを専用モデルに送信して「続きの操作」を推論します。これはカーソルをどこに移動して、コードをどう変更するのかというマルチステップのコマンドを返します。
Copilot NESはその結果を受け取り、ユーザーに補完結果としてリアルタイムで表示します。ユーザーは次の補完をタブキーで受け入れることで連続した編集操作を行えます。
内部アーキテクチャ
Copilot NESは内部的には「InlineEdit」というモジュール名で呼ばれます。これはCmd-kで対話実行してファイル編集をするCopilot Chatの機能 InlineChatとは別物です。
InlineEditから呼び出され、モデルによる推論を行うのが「Xtab」というモジュールです。Xtabは現在のファイル内容、カーソル位置、編集履歴などを組み合わせてプロンプトを作成し、AIモデルに送信してコード編集の提案を取得します。
このモデルの名前は「xtab-4o-mini-finetuned」です。gpt-4o-miniをNES用にファインチューニングしたモデルだと思います。
この記録された編集履歴の例がリポジトリのテストコードにあります。編集の時系列の変更をオブジェクトにしたものです。

これが以下のようなテキスト形式のdiffに変換され送信されます。
" 147 147 commandsWithArgs.set(commandId, argumentsSchema);
148 148 }
+ 149
+ 150
149 151
150 152 const searchableCommands: Searchables<Command>[] = [];
151 153
---
148 148 }
149 149
- 150
+ 150 function findVscodeDiff(schema: any, path: string[] = []): void {
151 151
152 152 const searchableCommands: Searchables<Command>[] = [];
153 153
---
モデルのレスポンスに<EDIT>...</EDIT>
や<INSERT>...</INSERT>
などで囲まれたソースコードが含まれます。Xtabはこれをパースしてファイルに適用します。
<INSERT>
console.log('新しいコード');
</INSERT>
<EDIT>
function updatedFunction() {
return 'updated code';
}
</EDIT>
おわりに:続・AIエディタ戦争
先日マイクロソフトがフォークエディタ向けに拡張機能のライセンス制限を強めた話を書きました。筆者はマイクロソフトがCopilot ChatをOSS化した動機もこの「AIエディタの開発競争」の大きな流れの中にあると思っています。

今回のGitHub Copilotのソースコード公開がそれほど大きな変化かというとそうでもありません。推論の主体はサーバーサイド側にありますし、もともとVSCode拡張はユーザーにはパッケージングされたJavaScriptコードを配布する形態なので中身を解析することは自由にできました。またVSCode本体もOSSですが、マイクロソフトが提供するビルドの中身すべてが公開されているわけではありません。
CursorやWindsurfがVSCodeをフォークした理由は、既存の拡張機能の枠組みでは実現できない体験を開発するためとしています。もちろん、さらなるフォーク製品でビジネスを簡単にコピーされるのを避けるという都合もあるのでしょうが、VSCodeのアーキテクチャ上フォークをせざるを得なかったというのはある程度理解できます。GitHub Copilot Chatも同じ段階にあるのではないでしょうか。つまりはAIエディタの体験を向上するためにVSCode本体に密結合する必要があると判断されたということです。
一方、これによって割を食いそうなのはVSCode拡張のサンドボックス内で無邪気に遊んでいたClineやRoo Codeのようなサードパーティです。GitHub Copilot Chatがエディタに統合され、自由に内部APIを使えるようになると、それを拡張APIとして利用できるようにしてもらわないとこれらは同じ機能が作れなくなります。
直近では「OpenAIの買収提案合意か」の報道があったWindsurfへ、Anthropicが企業提供していたAPI利用を取り下げたという一件もありました(重要なのは買収が締結されたという事実はまだ確認されていないことです)。

そして現在の業界はClaude CodeをつかったAgentic Codingが全盛です。モデルプロバイダも巻き込んで、AIエディタ戦争の行方はますます目が離せないものへとなってゆくでしょう。