以下の内容はhttps://j3iiifn.hatenablog.com/entry/2025/08/15/173000より取得しました。


VS Code 1.103.0でファイル名に数字を含むprompt filesを認識しなくなった不具合を修正した

まとめ

VS Code 1.103.0 および 1.103.1 には、001-sample.prompt.md のようにファイル名に数字を含むprompt filesをGitHub Copilot Chat拡張機能が正しく認識しないという不具合がある。

暫定的な回避策としては、sample.prompt.md のようにファイル名に数字を含めないようにすればよい。

この不具合をVS CodeGitHub issueに報告し、Pull Requestも作成しておいた。

github.com

github.com

(2025/08/19 追記)上記のPull Requestがマージされた。9月上旬にリリースされるバージョンに含まれる予定のようだ。

(2025/09/13 追記)2025/09/11にリリースされたversion 1.104にこの不具合修正が入った。

発生条件が発覚した経緯

前々回にこのような記事を書いた。

j3iiifn.hatenablog.com

私はこの件で結構困っていたのだが、VS CodeGitHub issueを見ていても一向に報告が上がらないし、Xで話題に上げている人もいないしで不思議に思っていた。

それならば自分で解決するしかないと思い、VS Code本体をデバッグ実行しようと奮闘していたのだが、OSS版のVS CodeではCopilot拡張のGitHub認証ができず、挫折しかけていた。

そんなとき、GitHub Copilotの勉強会アーカイブ動画で発表者の方が do.prompt.md というprompt fileに一時的なプロンプトを書いているというのを聞いて、もしやと思いその名前に変更してみたら、なんとVS Code 1.103.0でもCopilot Chat上で正常に認識されたのだった。

私はprompt filesのファイル名に番号を振って管理していた(例: 001-sample.prompt.md)のだが、その数字が原因だったのだ。 そうか、世間一般ではprompt filesに番号を振っていないのか……

ということで、prompt filesのファイル名に数字が含まれない場合はCopilot Chat上で正常に認識されるが、数字が含まれる場合は認識されなくなるというデグレードが発生しているということがわかった。

不具合の原因の特定

私はNode.jsもTypeScriptも一切わからないのだが、便利な世の中になったもので、VS CodeソースコードをクローンしてGitHub Copilot Chatで上記の不具合について相談したら、原因のコードを見つけてくれた。

const slashReg = /^\/([\p{L}_\-\.:]+)(?=(\s|$|\b))/iu; // A / command

vscode/src/vs/workbench/contrib/chat/common/chatRequestParser.ts at e3550cfac4b63ca4eafca7b601f0d2885817fd1f · microsoft/vscode · GitHub

GitHub上でBlameを見ると、このコードは2025/07/12に次のPull Requestで変更されていた。

github.com

prompt filesのファイル名に漢字などのUnicode文字列が含まれるとCopilot Chatがprompt filesとして認識してくれない不具合に対する修正のPull Requestだった。

このPull RequestのコミットがVS Codeのどのバージョンに入っているかを調べるために、Pull Requestのマージコミットを開くと 1.103.0 のタグが付いていた。

Issue: Prompt file name cannot contain Unicode letters (#255402) · microsoft/vscode@dd3b5a1 · GitHub

1.103.0 でデグレードしたので、このPull Requestが原因で間違いなさそうだということがわかった。

不具合の修正方針

上記の不具合発生元Pull Requestでは、2つのファイルの正規表現が変更されている。

src/vs/workbench/contrib/chat/common/chatRequestParser.ts

- const slashReg = /^\/([\w_\-\.:]+)(?=(\s|$|\b))/i; // A / command
+ const slashReg = /^\/([\p{L}_\-\.:]+)(?=(\s|$|\b))/iu; // A / command

src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.ts

- if (command.match(/^[\w_\-\.]+$/)) {
+ if (command.match(/^[\p{L}\d_\-\.]+$/u)) {

前者は \w\p{L} に変更しているのに対して、後者は \w\p{L}\d に変更に変更している。

そう、つまり前者は単に \d を書き忘れただけだと思われる。

そして、あのMIcrosoftでもユニットテストを追加せずにPull Requestをマージしてしまうのが意外で驚いた。

ユニットテストさえ書いてくれていれば私のお盆休みが溶けることもなかったのでは……

初めてのコントリビュート

OSSにコントリビュートするのは初めてだったのでドキドキしながらIssueとPull Requestを作成した。

その際、VS CodeリポジトリにあるドキュメントやWikiページ、過去にVS Codeへコントリビュートしたことがある人の記事・スライドを見ながら進めた。

github.com

github.com

github.com

github.com

www.taneyats.com

speakerdeck.com

Issue本文の作成、ブランチ名の検討、ソースコードの修正とユニットテストの作成はGitHub Copilot Agent Modeにやってもらった。

不具合の発生手順や事象、原因といったコンテキストについてはあらかじめ日本語でMarkdownファイルを作成し、それをCopilotに渡した。

また、上記の公式ドキュメントをコンテキストに追加し、必要な情報がissueに含まれるようにした。

初めてだし良し悪しも全くわからないので、Rejectされてもいいやくらいの感覚でPull Requestに対する反応を待とうと思う。

とはいえ情熱と執念でVS Codeの不具合修正をやり切ったので、マージされたら嬉しいな。

なお、不具合修正後の動作確認については結構な力技で解決したのだが、それは別の記事で紹介しようと思う。




以上の内容はhttps://j3iiifn.hatenablog.com/entry/2025/08/15/173000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14