Skip to content

EdwinCloud101/WpfOnTopOfTerminal

Repository files navigation

WpfOnTopOfTerminal

A Windows WPF application that puts a graphical UI on top of a terminal. It runs a real shell — locally (PowerShell, cmd, WSL) or over SSH to a Linux host — and turns common commands into buttons. Instead of typing docker ps and reading raw text, you click Show Containers and get a sortable grid; the command actually executes in the live terminal session, so it runs wherever your shell currently is (including inside an interactive SSH session).

The interactive terminal and the GUI share one shell session. Open a terminal, ssh into a remote box, then use the GUI buttons — they run on that remote box.

How it works

┌──────────────────────────────────────────────────────┐
│  UI tab                              Terminal tab     │
│  ┌───────────────────────────┐       ┌──────────────┐ │
│  │ Docker | nginx | ...      │       │ live shell   │ │
│  │ [Show Containers] [Logs]  │       │ (ConPTY)     │ │
│  │ ┌───────── Results ─────┐ │       │ user@host:~$ │ │
│  │ │ Grid │ Text           │ │       └──────────────┘ │
│  │ └───────────────────────┘ │              ▲          │
│  └─────────────┬─────────────┘              │          │
│                │  command  ─────────────────┘          │
│                └─ result ◄── captured output           │
└──────────────────────────────────────────────────────┘
  • A single ConPTY pseudo-console hosts the shell and powers the Terminal tab (rendered with VtNetCore).
  • Feature tabs send a command into that same session and capture just that command's output (using unique marker lines), then render it.
  • Every feature embeds the same reusable Results control: a Grid tab (auto-columns) and an editable Text tab. A command can fill the grid, the text, or both. There are no pop-up dialogs — errors and text output go to the Text area.

Features

Tab Actions
Terminal A real interactive terminal (any shell: PowerShell, bash, ssh, wsl, …).
Docker Show Containers / All Containers / Images, Stats, Networks (→ grid); Logs, Top, Inspect, Disk Usage (→ text); Start / Stop the selected container.
nginx Test Config (nginx -t), Show Full Config (nginx -T), Status, Tail Error Log (→ text).
Basic Linux / Basic Windows / Claude Code Placeholders for upcoming command shortcuts.

Architecture

  • MVVM throughout — Views are thin; all logic lives in testable ViewModels.
  • Dependency injection via Ninject; the composition root is App.OnStartup.
  • Feature folders under Features/<Name>/ — each feature owns its ViewModel, View, and models. New modules are added as new folders.
  • The terminal backend sits behind interfaces (IPtyConnection, ITerminalSession, ICommandExecutor) so ViewModels can be unit-tested against fakes — no real console required.
WpfOnTopOfTerminal/
  Infrastructure/   ConPTY backend, shared session, command executor
  ViewModels/       MVVM base, terminal + results view models
  Views/            terminal surface (custom-drawn)
  Controls/         reusable Results control (grid + text)
  Features/         Docker, Nginx, BasicLinux, BasicWindows, ClaudeCode
Tests/              MSTest unit tests for the ViewModels

Requirements

  • Windows 10 1809+ / Windows 11 (ConPTY).
  • .NET 10 SDK.
  • For SSH, the built-in Windows OpenSSH client (ssh.exe) — no extra SSH library needed.

Build & run

dotnet build WpfOnTopOfTerminal.csproj
dotnet run --project WpfOnTopOfTerminal.csproj

Tests

dotnet test

The ViewModels (terminal capture, Docker/nginx actions, result rendering) are covered by MSTest unit tests using fake terminal/command backends.

Tech stack

.NET 10 · WPF · MVVM · Ninject · ConPTY · VtNetCore · MSTest

License

MIT — see LICENSE.txt.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages