Implement wtcli, an application to query details about an existing Terminal instance - #20461
Implement wtcli, an application to query details about an existing Terminal instance#20461PankajBhojwani wants to merge 13 commits into
wtcli, an application to query details about an existing Terminal instance#20461Conversation
There was a problem hiding this comment.
check-spelling found more than 20 potential problems in the proposed changes. Check the Files changed tab for more details.
This comment has been minimized.
This comment has been minimized.
check-spelling-bot Report
|
| Dictionary | Entries | Covers | Uniquely |
|---|---|---|---|
| cspell:csharp/csharp.txt | 32 | 2 | 2 |
| cspell:aws/aws.txt | 232 | 2 | 2 |
| cspell:fonts/fonts.txt | 536 | 1 | 1 |
Consider adding to the extra_dictionaries array (in the .github/actions/spelling/config.json file):
"cspell:csharp/csharp.txt",
"cspell:aws/aws.txt",
"cspell:fonts/fonts.txt",
To stop checking additional dictionaries, put (in the .github/actions/spelling/config.json file):
"check_extra_dictionaries": []Errors and Warnings ❌ (2)
See the 📂 files view, the 📜action log, 👼 SARIF report, or 📝 job summary for details.
| ❌ Errors and Warnings | Count |
|---|---|
| 54 | |
| ❌ check-file-path | 6 |
See ❌ Event descriptions for more information.
✏️ Contributor please read this
By default the command suggestion will generate a file named based on your commit. That's generally ok as long as you add the file to your commit. Someone can reorganize it later.
If the listed items are:
- ... misspelled, then please correct them instead of using the command.
- ... names, please add them to
.github/actions/spelling/allow/names.txt. - ... APIs, you can add them to a file in
.github/actions/spelling/allow/. - ... just things you're using, please add them to an appropriate file in
.github/actions/spelling/expect/. - ... tokens you only need in one place and shouldn't generally be used, you can add an item in an appropriate file in
.github/actions/spelling/patterns/.
See the README.md in each directory for more information.
🔬 You can test your commits without appending to a PR by creating a new branch with that extra change and pushing it to your fork. The check-spelling action will run in response to your push -- it doesn't require an open pull request. By using such a branch, you can limit the number of typos your peers see you make. 😉
If the flagged items are 🤯 false positives
If items relate to a ...
-
binary file (or some other file you wouldn't want to check at all).
Please add a file path to the
excludes.txtfile matching the containing file.File paths are Perl 5 Regular Expressions - you can test yours before committing to verify it will match your files.
^refers to the file's path from the root of the repository, so^README\.md$would exclude README.md (on whichever branch you're using). -
well-formed pattern.
If you can write a pattern that would match it,
try adding it to thepatterns.txtfile.Patterns are Perl 5 Regular Expressions - you can test yours before committing to verify it will match your lines.
Note that patterns can't match multiline strings.
Summary of the Pull Request
Implements
wtcli, a new command-line client for Windows Terminal Protocol: a local COM control surface that lets external processes inspect and drive a running Windows Terminal instance. It provides a tmux-style command vocabulary for the terminal.wtclicurrently exposes 10 commands:list-windows(lsw),list-tabs(lst),list-panes(
lsp),active-pane,pane-statuscapture-pane(capturep) — including--last-prompttograb the most recent completed shell command via OSC 133 shell integration
new-tab(neww),split-pane(splitw),kill-pane(
killp),focus-pane(focusp)Every command supports
--jsonfor machine-readable output, otherwise results are rendered as human-readable tables.References and Relevant Issues
Detailed Description of the Pull Request / Additional comments
A client activates the server directly with
CoCreateInstanceusing a per-brand CLSID (Release/Preview/Canary/Dev, selected at compile time), and issues typed commands.Components:
1.
wtcli.exe: the CLI client (src/tools/wtcli/)The user-facing tool. Parses subcommands, activates the protocol server via
WT_COM_CLSID, and calls the interface methods.2.
ITerminalProtocol: the classic-COM interface (src/host/proxy/ITerminalProtocol.idl)The contract between client and Terminal. A classic-COM interface marshaled by the MIDL proxy/stub in
OpenConsoleProxy.dll(registered per-brand in the app manifests). Scalar arguments stay typed; every complex result crosses the boundary as a JSONBSTR.3.
TerminalProtocolComServer: the in-proc server (src/cascadia/WindowsTerminal/)Implements
ITerminalProtocolinsideWindowsTerminal.exe.4.
TerminalPageprotocol bridge (src/cascadia/TerminalApp/TerminalPage.Protocol.cpp)The UI-thread methods that actually query and mutate live terminal state (windows, tabs, panes, process status, pane output) and return typed results.
5.
TerminalProtocolshared library (src/cascadia/TerminalProtocol/)Hosts the shared WinRT struct types (
WindowInfo,TabInfo,PaneInfo, etc) consumed in-process by both the page bridge and the server. Also providesProtocolParsing.h, a header of parsing helpers (ParseSplitDirection,ClassifyPaneOutputSource) shared by the server and the fuzzer.6. Protocol fuzzer (
src/cascadia/TerminalProtocol/ft_fuzzer/)A LibFuzzer harness targeting the parsing functions (
ParseSplitDirection,ClassifyPaneOutputSource).Validation Steps Performed
In a dev build of terminal, all 10 of the commands work
PR Checklist