2026-03-30

[C#] GitHub Copilot SDK + Shell 實測:讓 AI 直接掃描並修改整個專案

最近 ChatGPT Codex 跟 OpenCode + Github Copilot 玩得很兇,這時候我在想是不是要寫一個

外掛然後可以隨時用任何 IM 叫他繼續寫程式跟外掛,後來其實發現,可以直接透過 Github Copilot SDK + shell 

就可以以自動改專案的程式..


本來腦中想的都是一些夢幻場景,我人在外面,然後一直不停地接收到 open code or codex 決策

不過想到要寫 open code or codex 外掛就有點麻煩,後來想想不如直接控制 Github Copilot SDK

是不是可以完成,於是我就測試一個瘋狂的想法直接讓她指定到一個專案的檔案夾下面..

然後讓她進行掃描,直接改我的專案,當然這很瘋狂也不建議,不過至少驗證了他可以只接掃描跟改整個專案的能力..

不過至少這次先驗證到一件事:它不是只能聊天,是真的有機會往 "掃專案 -> 找問題 -> 改程式" 這條路走略過跟 IM: LINE , Telegram 互動的地方,至少讓他去掃整個專案,這案例比較狠一點,我直接請他改我的程式碼..

千萬不要對自己手上準備 Production 的專案這樣千萬不要,這只是測試...


            



            Console.InputEncoding = Encoding.UTF8;
            Console.OutputEncoding = new UTF8Encoding(false);

            static Task PromptPermission(
                PermissionRequest request,
                PermissionInvocation invocation)
            {
                return Task.FromResult(new PermissionRequestResult
                {
                    Kind = PermissionRequestResultKind.Approved
                });
            }

            await using CopilotClient copilotClient = new();
            await copilotClient.StartAsync();

            SessionConfig sessionConfig = new()
            {
                Model = "gpt5-mini",
                Streaming = true,
                OnPermissionRequest = PromptPermission
             
            };

            var session = await copilotClient.CreateSessionAsync(sessionConfig);

            TaskCompletionSource? currentResponseTcs = null;

            session.On(ev =>
            {
                switch (ev)
                {
                    case AssistantMessageDeltaEvent deltaEvent:
                        Console.Write(deltaEvent.Data.DeltaContent);
                        break;

                    case AssistantMessageEvent msg:
                        Console.WriteLine();
                        Console.WriteLine("=== Final Message ===");
                        Console.WriteLine(msg.Data.Content);
                        break;

                    case SessionIdleEvent:
                        Console.WriteLine();
                        currentResponseTcs?.TrySetResult(true);
                        break;

                    case SessionErrorEvent err:
                        Console.WriteLine();
                        Console.WriteLine("SessionError: " + err.Data.Message);
                        currentResponseTcs?.TrySetResult(true);
                        break;
                }
            });


            string prompt = """
請使用繁體中文回答。
            請查看 C:\Users\user\source\repos\Lab2526\CopilotLab 下面的專案。

            請依序完成:
            1. 描述專案結構
            2. 找出值得優先改進的地方
            3. 每一點都要說明原因
            4. 如果有看到明顯的架構、命名、重複程式碼、例外處理或設定問題,請直接指出
            5. 不要空談,盡量具體
            6. 直接修改並且將修改前跟修改後的程式碼貼出來,讓我可以直接對照,如果你有修改的部分,請在修改的地方加上這樣的註解 //Copilot-Modified-Line {時間戳}
            """;

            Console.WriteLine($"User: {prompt}\n");

            currentResponseTcs = new TaskCompletionSource();

            await session.SendAsync(new MessageOptions
            {
                Prompt = prompt
            });

            await currentResponseTcs.Task;

            Console.WriteLine("--End--");
   
   
   
  

Result:



這裡面其實不複雜

我直接讓他去掃描一個我的 side project ,目前看起來良好,至少確定了

他有這能力,不在只是跟他問答,而是他整個去改專案,之後有時間可以來設計,他思考一段落

然後傳到 IM ,之後再由你從 IM 發指令給他讓他決定放棄還是繼續更改,看來就是可行的事情,而且可以比較全盤的思考

畢竟  "讓 AI 直接改整包專案 " 這件事,拿來驗證能力很有趣,拿來直接碰正式環境就有點太刺激了,目前我還不行...

果然阿,工程師就是天生牛馬,隨時隨地就都想寫 code :P


--

The bug existed in all possible states. Until I ran the code.

如果這篇文章有幫助到您幫我分享一下,讓我有寫下去的動力...