背景
VS Code 上の GitHub Copilot Chat を使っていると、過去の会話を振り返りたい場面がよくある
最近の Update (107など) でセッションを一覧で見られるようになったが、それでも Workspace 単位であって、「あれ?○○の調査どこでしたっけ?」ってよくなる・・ ![]()
ということで、検索・Workspace 横断での一覧確認がしたかったので、VS Code の実装を調査し、「過去セッションの復元」が技術的に可能かどうかを検証した記録
TL;DR(結論)
- 短答: 既存のローカルファイルから過去の Copilot Chat セッションを復元することは、現状では実用的に不可能に近い。
- 理由: Copilot Chat の UI は Webview を使用し、会話データはランタイムで blob/object URL 経由で供給されるため、平文のチャット本文がディスクに保持されていない。
- 次善策: 既存 Issue に賛同して「Save As / Export Chat / Make Searchable」機能を要望するか、拡張側でセッションを定期的に
globalStorageに保存する改修(PR)を行うかの二択。
ということで、以下に賛同するのが早いかもって結論
調査したこと(概要)
-
globalStorageフォルダ(例:%APPDATA%\Code\User\globalStorage\github.copilot-chat)にあるapi.jsonを解析。長い文字列は存在したが、平文の会話本文は見つからなかった。 - VS Code のランタイム(
workbench.desktop.main.js等)と拡張のdist/*.jsを横断検索し、webview/createObjectURL/asWebviewUriに関連する箇所を抽出。 -
microsoft/vscodeを clone してsrc/vs/platform/webview/electron-main/webviewProtocolProvider.tsとsrc/vs/workbench/contrib/webview/common/webview.tsを確認。
技術的なポイント
-
Webview の提供方式:
-
asWebviewUriはリソース URI を特殊なhttps形式に変換する(例:${scheme}+${encodedAuthority}.vscode-resource.vscode-cdn.net)。 -
webviewProtocolProviderはランタイムでのリクエストをハンドリングし、/index.htmlや/service-worker.jsのような限られた組み込みリソースを返す。 - 多くの UI コンテンツはブラウザ側で
createObjectURL(Blob)経由で生成・配信されるため、チャット本文は実行時メモリやブラウザ内ストレージ(必要に応じて service worker 経由)に留まり、恒久的に平文でディスクに残らない。
-
-
api.jsonの中身:- 長い文字列や埋め込みが含まれているが、これらはコードやバイナリに近い形式で保存されており、直接的な会話テキストの復元には使えない。
なぜ復元できないのか
- UI レイヤー(Webview)で生成される会話データは、ランタイムの Blob/メモリに依存しており、既存のローカルストレージ(
globalStorage等)に平文で保持されていないため。 - 拡張・ランタイム双方のコードを追った結果、チャット履歴を後から抽出できる「まとまった平文ファイル」は確認できなかった。
選択肢
- Issue に賛同
- ただし、結構古めのものだけど、1.107 のアップデートで session が強化されたので、もうすぐ?
- PR を作る
- 頑張れば行けるはず・・・ただ、今は名古屋に変えるための活動が優先なんだよね・・誰か転職先紹介して 😁
あとがき
結構頑張って調べたけど、Local にあるファイルからは無理
VS Code 拡張を作るのも、現状のを抜くのは出来るけど、過去解析は無理ってのがわかった。
セキュリティ的には、ちゃんとしてそうってことで安心できた ![]()