ワンクリックで
wt-multi-pane-it
Build or maintain LocalOnly Windows Terminal multi-pane integration tests for Copilot Booster.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Build or maintain LocalOnly Windows Terminal multi-pane integration tests for Copilot Booster.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
{what this skill teaches agents}
Build real git source, bare remote, and local clone fixtures for CopilotBooster integration tests.
{what this skill teaches agents}
Reusable WinForms pattern for textboxes that accept either a bare GitHub PR/Issue number or a full github.com URL.
Core conventions and patterns for this codebase
Isolate tests for services that write under %LOCALAPPDATA% without touching the real user profile.
| name | wt-multi-pane-it |
| description | Build or maintain LocalOnly Windows Terminal multi-pane integration tests for Copilot Booster. |
Use this when a test must prove Copilot Booster can detect and focus Copilot CLI sessions hosted inside Windows Terminal tabs or split panes.
[LocalOnlyFact]
[Trait("Category", "LocalOnly")]
Application.DoEvents().WindowEventHookCollection if it manipulates real windows or foreground focus.Skip with Assert.Skip when any of these is missing:
Environment.UserInteractive, non-session-0, foreground HWND exists);wt.exe on PATH (where.exe wt.exe is enough);copilot --help succeeds and advertises --deny-url;Create one PowerShell wrapper script per pane. Launch WT directly; do not invoke through PowerShell unless necessary.
var args = "-w \"cb-it-<guid>\" "
+ "new-tab --title \"PaneA-Probe\" --suppressApplicationTitle powershell.exe -NoLogo -NoProfile -ExecutionPolicy Bypass -File \"pane-a.ps1\""
+ " ; "
+ "split-pane --title \"PaneB-Probe\" --suppressApplicationTitle powershell.exe -NoLogo -NoProfile -ExecutionPolicy Bypass -File \"pane-b.ps1\"";
Process.Start(new ProcessStartInfo
{
FileName = "wt.exe",
Arguments = args,
UseShellExecute = true
});
Semicolons are WT command separators when passed directly in ProcessStartInfo.Arguments; do not escape them as \; unless a shell is interpreting the command first.
--deny-url=<guid> is a beacon for process discovery, not the session ID.
Wrapper script pattern:
Start-Process copilot -ArgumentList @('--deny-url=<guid>') -PassThru.Get-CimInstance Win32_Process for CommandLine -like '*--deny-url=<guid>*'.Wait-Process on that PID so the pane remains tied to the live process.C# mapping pattern:
~/.copilot/logs/process-*-<pid>.log.CopilotLogWatcherService.TryParseLogContent to get session_id.To force deterministic display names:
CopilotLogWatcherService discover the external session and set the unresolved placeholder.<session>/events.jsonl:{"type":"user.message","data":{"content":"PaneA-Probe"}}
SessionNameOverrideService.Get(...).ResolvedFromUserMessage == true.tracker.RemoveCopilotHost(sessionId);
tracker.HandleExternalSessionDiscovered(sessionId, copilotPid);
Assert all of these when running live:
SessionGridVisuals displays the resolved label, not the GUID.Copilot CLI.tracker.GetCopilotHost(sessionId).HostKindLabel == "Windows Terminal".WindowsTerminalPaneGateway.EnumeratePanes(wtHwnd) reports the expected pane/tab selected.Never pre-clean Copilot session state for this test. On teardown:
WM_CLOSE to captured WT HWNDs.%TEMP%\copilot-booster-it-<timestamp>\; do not delete them.