GitHub CopilotをMITMプロキシで覗いてわかったこと
What I learned by putting GitHub Copilot behind a MitM proxy

VS CodeとGitHub Copilotの内部動作を、MITMプロキシを使ってネットワークトラフィックを傍受しながら探る。Electronアプリの構造、認証フロー、モデル選択の仕組み、そしてプロンプトがどのように送信されるかを解説。さらに、.envファイルの編集ではリクエストが発生しない一方、無関係なファイルの編集でリクエストが送信されることや、ローカルSQLiteデータベースに保存されるセッション履歴を利用するChronicleツールの存在を明らかにする。
ソースコードはアプリが何ができるかを教えてくれるが、実行時に実際に何をしているかを発見するのはもっと難しい。特に、自分が何を探しているのかまだ分からない場合はなおさらだ。
HNでの議論
30- j0selit0
Copilotがどのようにハーネスを実装しているのか、そしてなぜこんなに早くクォータを使い切ってしまうのかを知りたくて、mitmproxyでネットワークトラフィックを傍受するという調査の旅に出ました。その過程で見つけたいくつか興味深い点:
- モデル/機能のディスカバリとルーティングがリアルタイムで行われるのを観察した
- ゴースト補完でコンテキストに何が注入され、送信されるのかを調べた
- 最近の編集が、現在編集中のファイル以外のファイル(悪名高い .env を含む)からコンテキストを引き込むことがあるのを発見した
- Chronicle の背後にある SQLite セッションストアを発見し、過去のプロンプト/レスポンスも確認できた
- ツール呼び出しを通じてモデルがその履歴をどのようにクエリするのかを観察した
その後、VS Code のソースコードを調べて、ワイヤー上で見たものと実際の実装を照合しました。
全体として、彼らのハーネスがどのように実装されているかについて、いくつかの興味深い教訓が得られました。
- p1llus
私が見つけた面白い追加点の一つは、eBPFを使うとこれがさらに簡単になるということです。証明書ピンニングやmTLSなどと戦う必要はなく、暗号化直前・復号直後の生の平文データをそのまま取得でき、ほとんどのエージェントやIDEでうまく機能します。
これにより、テレメトリからプロンプトまで実質すべてが手に入り、自分の質問とはまったく関係のないものをどれだけ収集・実行しているかを見るのは面白いものです。
特定のアプリケーションでMiTMプロキシの適用が難しい場合に便利な代替手段であり、独自のスクリプトやプログラムに直接ダンプして、フィルタリングしたり、さらに分析するために任意の形式で保存したりできます。
- ameliaquining
小さな事実の訂正:Codex クライアントはオープンソースです。https://github.com/openai/codex
- tolugenius
素晴らしい深掘りですね。Copilotが類似ツールと比べてどう動くのか、いつも気になっていました。envファイルに対するルールがないことに衝撃を受けました。少なくともGitHubとより統合されたツールなら、それがデフォルトになっていると思っていましたが、残念です。
- bartek_gdn
いいですね!これにより、envアクセスのないサンドボックスでこれらを実行すべき理由がよくわかります。プロキシ交換アプローチが気に入りました。