Watch
1
0
Fork
You've already forked souveraine
0

feat(tui): tuie widget-toolkit engine behind --engine tuie

Introduce a parallel TUI built on the tuie widget toolkit, selectable at
runtime with `--engine tuie`. ratatui remains the default and its
crossterm/ratatui deps are retained, so default users see no behavior
change; this lands the full screen/widget tree for the new engine
side-by-side with the existing one.

Engine wiring:
- Cargo: add `tuie` (harmonious, images features)
- main.rs: `--engine` flag + run_tuie_tui() entry path
- src/ui: new `screens`, `widgets`, `theme`, `tuie_app` modules
- app::recent_commits made pub(crate) for dashboard reuse

Screens: splash (procedural bloom), welcome dashboard, chat (live
streaming), agents picker, settings, plus cron/presence stubs.

Widgets: brand_title, portrait, menu_list, message_list, chat_bubble,
chat_input, cockpit, phase_bar, tool_card, and a reusable `responsive`
container.

Responsive welcome: the welcome screen now offers two viewable modes the
way the old ratatui dashboard did — a side-by-side portrait/stats layout
at >=100 cols and a stacked single column below it — switched by the new
`Responsive` widget. It holds both subtrees and lays out / paints only the
one that fits, while exposing both to id lookups so the menu selection
survives a resize across the breakpoint. Flourishes: a breathing title
colour pulse and a portrait border that surfaces subconscious state.
Covered by a layout test driving a TestTerminal across the breakpoint.
This commit is contained in:
Fimeg 2026-05-30 13:50:31 -04:00
commit 61bf34177e
27 changed files with 3896 additions and 9 deletions

80
Cargo.lock generated
View file

@ -679,6 +679,16 @@ dependencies = [
"fs_extra",
]
[[package]]
name = "axis2d"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf6c17bb125d62090a520cbb06dfe8c371252c8fb22c4588f515d0da4e51c15e"
dependencies = [
"num",
"sign",
]
[[package]]
name = "axum"
version = "0.7.9"
@ -1298,6 +1308,17 @@ dependencies = [
"zeroize",
]
[[package]]
name = "chord_macro"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ccfd700169d3a1973ee55dca8a659b2bde915231ecfbb1296dea2a72666bcdba"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.117",
]
[[package]]
name = "chrono"
version = "0.4.44"
@ -1794,7 +1815,7 @@ dependencies = [
"mio",
"parking_lot",
"rustix 0.38.44",
"signal-hook",
"signal-hook 0.3.18",
"signal-hook-mio",
"winapi",
]
@ -1812,7 +1833,7 @@ dependencies = [
"mio",
"parking_lot",
"rustix 1.1.4",
"signal-hook",
"signal-hook 0.3.18",
"signal-hook-mio",
"winapi",
]
@ -5372,6 +5393,12 @@ dependencies = [
"memchr",
]
[[package]]
name = "nonmax"
version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "610a5acd306ec67f907abe5567859a3c693fb9886eb1f012ab8f2a47bef3db51"
[[package]]
name = "noop_proc_macro"
version = "0.3.0"
@ -8194,9 +8221,15 @@ checksum = "47106eded3c154e70176fc83df9737335c94ce22f821c32d17ed1db1f83badb1"
dependencies = [
"libc",
"os_pipe",
"signal-hook",
"signal-hook 0.3.18",
]
[[package]]
name = "sign"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "48c0463041449de02f00a4be609a7bf85b7b4d7cb67a8e905aeaac876312b9ab"
[[package]]
name = "signal-hook"
version = "0.3.18"
@ -8207,6 +8240,16 @@ dependencies = [
"signal-hook-registry",
]
[[package]]
name = "signal-hook"
version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b2a0c28ca5908dbdbcd52e6fdaa00358ab88637f8ab33e1f188dd510eb44b53d"
dependencies = [
"libc",
"signal-hook-registry",
]
[[package]]
name = "signal-hook-mio"
version = "0.2.5"
@ -8215,7 +8258,7 @@ checksum = "b75a19a7a740b25bc7944bdee6172368f988763b744e3d4dfe753f6b4ece40cc"
dependencies = [
"libc",
"mio",
"signal-hook",
"signal-hook 0.3.18",
]
[[package]]
@ -8434,6 +8477,7 @@ dependencies = [
"tracing-subscriber",
"tui-big-text",
"tui-widgets",
"tuie",
"unicode-width 0.1.14",
"uuid",
"walkdir",
@ -9510,7 +9554,7 @@ dependencies = [
"pest_derive",
"phf 0.11.3",
"sha2",
"signal-hook",
"signal-hook 0.3.18",
"siphasher",
"terminfo",
"termios",
@ -10203,6 +10247,23 @@ dependencies = [
"tui-scrollview",
]
[[package]]
name = "tuie"
version = "0.1.5"
dependencies = [
"axis2d",
"base64-simd",
"chord_macro",
"image",
"libc",
"nonmax",
"paste",
"sign",
"signal-hook 0.4.4",
"unicode-display-width",
"unicode-segmentation",
]
[[package]]
name = "tungstenite"
version = "0.24.0"
@ -10537,6 +10598,15 @@ version = "0.3.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5"
[[package]]
name = "unicode-display-width"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a43273b656140aa2bb8e65351fe87c255f0eca706b2538a9bd4a590a3490bf3"
dependencies = [
"unicode-segmentation",
]
[[package]]
name = "unicode-ident"
version = "1.0.24"