Draft
Conversation
Contributor
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 14402Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 14402" |
b2c8a8c to
7fcb953
Compare
added 28 commits
February 12, 2026 13:04
- Add MonitorCommand behind MonitorCommandEnabled feature flag - Create AspireMonitorTui with Hex1b-based TUI layout: - Drawer panel for AppHost selection - TabPanel with Resources and Parameters tabs - InfoBar with keyboard shortcuts - Create AspireMonitorSplash with braille Aspire logo - Wire into existing backchannel infrastructure for AppHost discovery and resource streaming - Update Hex1b packages to 0.75.0 - Add MonitorCommandStrings resource strings
Replace List widget with Table widget for structured column display with headers (Name, Type, State, Health, Endpoints) and proper sizing.
Define AspireTheme with colors derived from the Aspire logo SVG: - #512BD4 deep purple (primary) - #7455DD / #9780E5 / #B9AAEE / #DCD5F6 purple gradient - Dark surface palette for backgrounds Theme covers Global, Table, Border, TabPanel, TabBar, InfoBar, Button, List, Separator, and NotificationCard elements. Entire TUI is wrapped in a ThemePanel for consistent styling.
Adds horizontal separators between rows for better readability.
Rename Endpoints column to URLs. Add Actions column with inline ▶ (start), ■ (stop), ↻ (restart) buttons that execute resource commands via the backchannel.
The left pane is now a fixed-width splitter panel (30 cols) instead of a collapsible drawer, allowing mouse-drag resizing.
- Re-processed logo pixels: replaced white background with black at full resolution before downsampling, so edge anti-aliasing blends toward dark purple instead of white - Extended dissolve wave from 600ms to 900ms - Extended total exit phase from 2200ms to 3200ms (total splash: 6.0s)
- Background polling every 3s rescans for new/offline AppHosts - New AppHosts trigger a notification with a Connect action button - Offline AppHosts show a centered panel with Remove/Reconnect options - Watch stream errors and disconnects auto-mark AppHost as offline - AppHost list shows ⚠ indicator for offline entries - Previously offline AppHosts coming back online trigger a notification
Animation sequence: 1. Whirlwind (0-2.2s): Braille particles spiral from random positions, circling their target before settling into place 2. Braille hold (2.2-2.6s): Static braille logo 3. Crossfade (2.6-3.2s): Braille dims through black, half-blocks brighten 4. Half-block hold (3.2-4.0s): Solid half-block logo 5. Dissolve/melt (4.0-7.0s): Rows dissolve to braille, fall with gravity Original half-block fly-in code preserved (RenderFlyIn) for future use.
Splash is now fully braille-based: 1. Whirlwind (0-2.2s): Braille dots spiral into position 2. Hold (2.2-3.0s): Static braille logo 3. Dissolve/fall (3.0-6.0s): Row-by-row braille dissolve with gravity Removed PixelState, RenderFlyIn, RenderStatic, RenderStaticWithBrightness, RenderStaticRows, RenderHalfBlocks, and crossfade phase.
- Create AspireResourceConsoleLogWorkload implementing IHex1bTerminalWorkloadAdapter that streams resource logs via the backchannel into an embedded Hex1b terminal - Add DragBarPanel layout in resources tab: table on top, log terminal on bottom - Wire resource row selection to switch log streams automatically - Update Hex1b to 1.0.0-local.20260209100759 for DragBarPanel/TerminalWidget support - Log workload handles stream switching, cancellation, and ANSI color for errors
- Creates a starter project, starts AppHost with --detach - Enables monitorCommandEnabled feature flag via aspire config - Launches aspire monitor TUI and waits for 'Healthy' text - Ctrl+C exits the TUI, then stops the AppHost
- Replace full UI with centered message explaining monitor will auto-detect AppHosts when they start - Auto-connect to first AppHost when discovered via polling - Only show notification for subsequent AppHosts
- After the braille splash completes, the main UI is rendered as a WidgetLayer inside a Surface with a HackRevealEffect overlay - Borders and structural characters fade in bottom-up from black - Alphanumeric text appears as scrambled hacker-style characters before settling into the actual content over 4 seconds - Once the reveal completes, the Surface is replaced with the normal interactive widget tree
NotificationPanel requires a ZStack parent which isn't available when rendering inside a WidgetLayer. Pass interactive flag to BuildMainScreen to conditionally omit NotificationPanel during the hack reveal transition.
The Update(1,1) call before the Surface callback was resizing the cell array to 1x1 on every frame, destroying the captured content from the WidgetLayer. The real Update with correct dimensions happens inside the Surface callback.
added 6 commits
February 12, 2026 13:04
Instead of capturing a static snapshot on the first frame, the effect now continuously checks for new content appearing in cells. When new content streams in (e.g., resources loading), it gets assigned reveal times relative to the current progress so it smoothly joins the animation. Content changes in already-revealed cells update in place.
Phase 1 (first frame): full-screen capture of WidgetLayer content, all cells return black. Random timing values are locked in once. Phase 2 (subsequent frames): reveal from cached data using the locked-in timing. Empty cells are still promoted to content cells when new data streams in, with reveal times relative to current progress so they smoothly join the animation.
…rktree support, vscode:// link, clean up log formatting
faafa7d to
fe51656
Compare
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
Proof-of-concept
aspire monitorcommand that launches a full-screen TUI for monitoring running Aspire AppHosts. This is behind themonitorCommandEnabledfeature flag and serves as a platform to iterate on what a futureaspire runTUI experience might look like.Features
Key files
src/Aspire.Cli/UI/AspireMonitorTui.cssrc/Aspire.Cli/UI/AspireMonitorSplash.cssrc/Aspire.Cli/UI/AspireTheme.cssrc/Aspire.Cli/UI/AspireResourceConsoleLogWorkload.cssrc/Aspire.Cli/Commands/MonitorCommand.cstests/Aspire.Cli.EndToEnd.Tests/MonitorCommandTests.csHow to try it
Dependencies