-
Notifications
You must be signed in to change notification settings - Fork 998
Add AppHost terminals, dashboard docking, and terminal automation #19887
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Mitch Denny (mitchdenny)
merged 116 commits into
main
from
mitchdenny-terminal-interaction-input-spike
Sep 18, 2026
Merged
Changes from all commits
Commits
Show all changes
116 commits
Select commit
Hold shift + click to select a range
55bf479
Spike: AppHost-owned terminal as an interaction service input
mitchdenny ac6e6dc
Spike: dashboard terminal dock and AppHost TerminalService
mitchdenny 119d370
Render dock terminals chromeless at the dashboard font size
mitchdenny fa373e3
Add a Resource surface to TerminalSurface
mitchdenny 116aed5
Detach terminals into their own resizable windows
mitchdenny 2f1616b
Improve terminal sizing controls
mitchdenny 629effa
Add terminal browser regression tests
mitchdenny f45f70b
Fix terminal listener and sizing lifecycle
mitchdenny 53a9c75
Update dashboard test mocks for the terminal client surface
mitchdenny 21b4158
Show the terminal footer in chromeless terminals
mitchdenny cde6698
Re-fit chromeless terminals on detach and return to the dock
mitchdenny 1ec713d
Render the interaction terminal chromeless
mitchdenny f208cbe
Explain why the terminal playground needs InternalsVisibleTo
mitchdenny 9c74e9d
Make the AppHost terminal API public and experimental
mitchdenny d6e9e7b
Add automated number-guess terminal demo to Terminals playground
mitchdenny f09fb43
Add diagnostic logging to silent terminal catch handlers
mitchdenny 0ed98fd
Harden terminal validation, teardown, and diagnostics
mitchdenny 527d20f
Explain why the dashboard client and repository factory use TryAdd
mitchdenny fb073ed
Replace the dock's REPL placeholder with an informational panel
mitchdenny c484fc1
Toggle the terminal dock with Shift+` instead of Ctrl+`
mitchdenny 99e4da7
Fix unstyled terminal dock buttons in light theme
mitchdenny 6821678
Authenticate detached terminal windows via the login endpoint
mitchdenny feb18b0
Revert "Authenticate detached terminal windows via the login endpoint"
mitchdenny 363c8cf
Move interaction terminal lifetime to the caller
mitchdenny 219dba2
Let the caller start an AppHost terminal
mitchdenny 7b6fdb8
Separate terminal ownership from terminal placement
mitchdenny 59f7183
Report every terminal in one listing
mitchdenny 038e51a
Make AppHost automation of resource terminals work
mitchdenny 7ec2929
Fix CI failures in terminal listing and dashboard tests
mitchdenny af05c2c
Fix terminal lifecycle races and dashboard recovery
mitchdenny f3693ff
Reject required terminal interaction inputs
mitchdenny 17847d8
Respect disabled and loading terminal interaction inputs
mitchdenny 4ef444c
Preserve caller-owned terminals when cloning command inputs
mitchdenny 41bd676
Validate terminal interaction registration
mitchdenny 2ed8657
Reject unsupported AppHost terminal placements
mitchdenny 48f14c4
Bound terminal disposal and notify on close timeout
mitchdenny 395cbc1
Handle ended AppHost terminals without removing their tabs
mitchdenny 814825f
Rebind detached terminal watchers on route changes
mitchdenny 47b1b0a
Keep collapsed terminal dock out of keyboard navigation
mitchdenny a5594d1
Add accessible keyboard navigation to terminal dock
mitchdenny f954f16
Add keyboard resizing to the terminal dock
mitchdenny 1db8479
Bound terminal watch queues with configurable snapshot recovery
mitchdenny 521f0db
Expose sealed AspireTerminal handles with internal backends
mitchdenny f7cf6d2
Await number-guess automation after dialog cancellation
mitchdenny 288d184
Fix terminal key validation and dashboard shortcut handling
mitchdenny 9022836
Migrate dashboard terminals to Hex1b web terminal
mitchdenny 13644d2
Upgrade Hex1b terminals with WebGL2 and hyperlink replay
mitchdenny c9f8901
Upgrade Hex1b terminal replay to published build 1522
mitchdenny d087247
Restore dashboard terminal window chrome
mitchdenny 6933127
Add Notcurses shell to Terminals playground
mitchdenny 606a70e
Add BB ASCII demo container to Terminals playground
mitchdenny 3f03c7e
Remove BB from Terminals playground
mitchdenny 6f1e200
Anchor terminal copy controls to selected text
mitchdenny fcb572b
Return terminal focus after copying selected text
mitchdenny 94cc39b
Update paired Hex1b terminal packages to alpha.1547
mitchdenny a8c9a11
Merge origin/main into Hex1b dashboard terminal migration
mitchdenny 654b016
Merge origin/main into terminal interaction spike
mitchdenny a7c727c
Merge Hex1b HWT web terminal integration
mitchdenny dcd1348
Complete terminal rendering, fitting, and tape automation
mitchdenny f666df1
Update Hex1b Windows PTY package
mitchdenny 3b0cfec
Clarify Hex1b package compatibility
mitchdenny 9dfc7af
Merge origin/main for terminal PR validation
mitchdenny 8f20a04
Adopt Hex1b 0.166.0 and update terminal CI expectations
mitchdenny 1c4f18c
Fix Windows terminal payload publishing and template restores
mitchdenny e545140
Fix VS Code fixture restores and terminal component tests
mitchdenny a74bb5d
Merge origin/main to unblock terminal PR CI
mitchdenny 5ec29a2
Update Hex1b and enable terminal reflow
mitchdenny 0856913
Merge origin/main into terminal interaction branch
mitchdenny 879d9b1
Update Hex1b to 0.167.0
mitchdenny f1117a5
Address terminal review feedback and update Hex1b
mitchdenny 9fed032
Keep detached terminal window names collision-free
mitchdenny 76def42
Preserve dashboard base paths for AppHost terminal sockets
mitchdenny 49efdee
Merge origin/main into terminal interaction branch
mitchdenny 0c940c6
Configure bundled ConPTY for DCP terminals
mitchdenny 3f063cd
Flatten terminal launch options and update Hex1b alpha
mitchdenny 666536b
Add Command Prompt dock terminal
mitchdenny 06dd324
Hide terminal dock in standalone dashboards
mitchdenny eb78e05
Remove duplicate terminal title-bar dimensions
mitchdenny fd92505
Launch terminal windows directly from browser clicks
mitchdenny 6d500a7
Align terminal footer typography with dashboard message bars
mitchdenny 5d1138d
Track terminal dock usage and opening trigger
mitchdenny bbc62f1
Link the empty terminal dock to terminal documentation
mitchdenny 556f6d6
Introduce dedicated terminal interactions and dialogs
mitchdenny 5fcc4f3
Align terminal window button with footer controls
mitchdenny 87285ac
Merge main into terminal feature branch
mitchdenny 997dba0
Unify terminal experimental APIs under ASPIRETERMINAL001
mitchdenny 7ef2f8b
Suppress compatibility warning for terminal interactions
mitchdenny b1fa987
Update paired Hex1b terminal packages to 0.168.0
mitchdenny 5012192
Merge main into terminal feature branch
mitchdenny a62b5fc
Merge remote-tracking branch 'origin/main' into mitchdenny-studious-d…
mitchdenny 953a73f
Improve terminal focus and diagnostics with bundled ConPTY
mitchdenny 56da25d
Honor terminal dimensions and address review feedback
mitchdenny 3e16358
Design improvements
JamesNK 80628bc
Improve empty terminal dock guidance and resource links
mitchdenny 18de5f8
Design improvements
JamesNK eee199a
Design improvement
JamesNK e2704bc
Fix stale terminal test selectors
mitchdenny 00ab632
Refine terminal backchannel and protobuf contracts
mitchdenny ac83d01
Select Windows PTY helper for pre-bundle signing
mitchdenny fe9ec79
Add mobile terminal dock access and dedicated terminal resources
mitchdenny ecab4be
Fix AppHost terminal shutdown ownership
mitchdenny 59482a4
Defer terminal dock setup and serialize JavaScript initialization
mitchdenny 4952a9d
Remove temporary Hex1b feeds and audit suppressions
mitchdenny b64a9b4
Expand terminal keys with composable modifiers
mitchdenny b2f7bb3
Consolidate remaining dashboard terminal resources
mitchdenny 5b8461a
Clarify AppHost terminal ownership documentation
mitchdenny 21c95e6
Harden terminal startup and attachment lifecycles
mitchdenny 612c371
Restrict dashboard terminal close to AppHost ownership
mitchdenny 883a677
Preserve detached terminals across dashboard reloads
mitchdenny 7956cdd
Align terminal handshake tests with completion close status
mitchdenny d57892a
Preserve terminal input cancellation and validate bundle RIDs
mitchdenny e16d077
Make detached terminal recovery failure-safe
mitchdenny 8bf9d91
Fix terminal component test setup and async synchronization
mitchdenny 7adbc35
Polish dashboard terminal layout and selection UX
mitchdenny 37f829c
InteractionsProvider refactor
JamesNK ef7d4e6
Address terminal review feedback and focus hints
mitchdenny File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
67 changes: 67 additions & 0 deletions
67
playground/Terminals/Terminals.AppHost/Scripts/numberguess.cs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,67 @@ | ||
| // Licensed to the .NET Foundation under one or more agreements. | ||
| // The .NET Foundation licenses this file to you under the MIT license. | ||
|
|
||
| // A deliberately old-fashioned interactive console game, run as a .NET file-based app | ||
| // (`dotnet run --file numberguess.cs -- <limit>`). | ||
| // | ||
| // It exists to demonstrate driving an interactive process from AppHost code: the AppHost shows this program in an | ||
| // PromptTerminalAsync interaction, then plays it by typing guesses and reading the replies back off the terminal | ||
| // screen. Nothing here knows it is being automated - it is an ordinary Console.ReadLine app. | ||
| // | ||
| // The reply format is the contract the automation relies on, so it is deliberately unambiguous: | ||
| // | ||
| // Guess #1: 50 <- the prompt, plus the tty's echo of what was typed | ||
| // >> #1: 50 is too high <- the reply, tagged with the attempt number | ||
| // | ||
| // Tagging each reply with its attempt number means the automation can wait for ">> #3:" and be certain it is | ||
| // reading the response to its third guess rather than a stale line still on screen from an earlier one. | ||
|
|
||
| var limit = args.Length > 0 && int.TryParse(args[0], out var parsed) && parsed > 1 ? parsed : 100; | ||
| var secret = Random.Shared.Next(1, limit + 1); | ||
|
|
||
| Console.WriteLine(); | ||
| Console.WriteLine("+------------------------------------------+"); | ||
| Console.WriteLine("| N U M B E R G U E S S |"); | ||
| Console.WriteLine("+------------------------------------------+"); | ||
| Console.WriteLine(); | ||
| Console.WriteLine($"I'm thinking of a number between 1 and {limit}."); | ||
| Console.WriteLine("Type a guess and press Enter. I'll tell you if it's too high or too low."); | ||
| Console.WriteLine(); | ||
|
|
||
| for (var attempt = 1; ; attempt++) | ||
| { | ||
| Console.Write($"Guess #{attempt}: "); | ||
|
|
||
| var line = Console.ReadLine(); | ||
| if (line is null) | ||
| { | ||
| // stdin closed - the terminal went away. | ||
| return 1; | ||
| } | ||
|
|
||
| if (!int.TryParse(line.Trim(), out var guess)) | ||
| { | ||
| Console.WriteLine($" >> #{attempt}: '{line.Trim()}' is not a number"); | ||
| continue; | ||
| } | ||
|
|
||
| if (guess < secret) | ||
| { | ||
| Console.WriteLine($" >> #{attempt}: {guess} is too low"); | ||
| } | ||
| else if (guess > secret) | ||
| { | ||
| Console.WriteLine($" >> #{attempt}: {guess} is too high"); | ||
| } | ||
| else | ||
| { | ||
| Console.WriteLine($" >> #{attempt}: {guess} is correct"); | ||
| Console.WriteLine(); | ||
| Console.WriteLine($"Got it in {attempt} {(attempt == 1 ? "guess" : "guesses")}. The number was {secret}."); | ||
|
|
||
| // Block rather than exit so the final screen stays live until whoever owns the terminal tears it down. | ||
| // Exiting immediately would race the automation's "let the human read the result" pause. | ||
| Console.ReadLine(); | ||
| return 0; | ||
| } | ||
| } |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.