Releases
v0.1.0
Compare
Sorry, something went wrong.
No results found
0.1.0 (2026-06-14)
Features
add app shell, IThemeService, and UI chrome components (65e28ca )
add btop theming support and ESC exit on splash page (014b1de )
add ISettingsStore interface to plugin SDK (77ac29f )
add marketplace domain models with JSON serialization and status merging (bd09ade )
add MarketplacePlugin with page, view model, and route registration (fd092ae )
add PluginCache, PluginMetadataFetcher, and PluginDownloader (abeae3a )
add PluginConfigStore for sources.json and installed.json with default seeding (8c36231 )
add PluginLoader with built-in + external plugin discovery (614e9ab )
add PluginManager orchestrating install, update, uninstall, sync (1ee4989 )
add PluginSettingsInfo record (6bc8120 )
Add public API verification tests (290de2d )
add RefreshService with interval snapping, speed up/down, and tick emission (29426f5 )
add Servus.Plugin.Sdk with plugin contracts, tick source, and models (e186835 )
add ServusPluginBuilder and PluginRegistry for plugin configuration (57fd96f )
add SettingsPlugin with placeholder page and route registration (b280ba0 )
add setup chain, tab bar, plugin routing, and Program.cs entry point (aa557ee )
add setup wizard and tab order (#5 ) (34c8512 )
add SubNavNode<TView> with inline tab rendering (b5df6b7 )
add TickRouter actor with demand-driven tick distribution (f59bb5d )
add WithSettings to plugin builder API (31d884e )
add WithSettings<TPage, TViewModel> extension method (86efa80 )
Allow custom navigation behavior for routes (84ef1fb )
branding: Add owl mascot to figlet logo (7ba6198 )
btop design system (#4 ) (cd9d468 )
collect PluginSettings in PluginRegistry (a7a194a )
expose Observable<Tick> on ITickSource for reactive tick consumption (e3d8605 )
implement ScopedSettingsStore with plugin-name prefix (579d66d )
implement SettingsStore with JSON persistence (155faef )
Introduce Akka actor for marketplace management (382bb78 )
Load plugins from subdirectories (45bdcef )
marketplace: actor handles AddSource, RemoveSource, CycleUpdatePolicy and per-plugin ops (3f30e69 )
marketplace: extend state with ActiveOperations, Sources and new messages (61ead77 )
marketplace: implement Browse, Installed, Sources views with keybindings and key hints (5150390 )
marketplace: page skeleton with tab bar, view switching, and toast integration (2a9e791 )
marketplace: use theme colors instead of hardcoded palette (141df02 )
migrate Marketplace to SubNavNode, replace D1/D2/D3 with B/I/S (433428f )
more testing and bug fixes (#6 ) (e7b8afe )
pass plugin name to builder, kebab-case conversion (2fc5308 )
plugin: add ITabOrderService + TabDescriptor to SDK (7c7904a )
plugin: btop-style SubNavNode rendering with live theme (af7a493 )
rebrand to Puhu naming and add release-please flow (b390869 )
refresh: global +/-/p keys via RegisterGlobalKeys overload (a7f13ac )
refresh: IRefreshController SDK interface with persisted interval (7bd105a )
register keyed ISettingsStore per plugin (dfdaceb )
register SettingsStore singleton in ServicesSetup (cf075a1 )
settings: add Setup sub-view to re-run the wizard (f5980e9 )
settings: add SetupWizardState first-run flag (c861222 )
settings: add Tabs reorder sub-view to the settings page (0d41223 )
settings: add Tabs view state to SettingsViewModel (ecc98ef )
settings: refresh-rate section with sub-navigation (4e772e2 )
settings: theme picker with live preview and persistence (f914cdc )
shell: app-wide redraw on ticks and theme changes (009eba3 )
shell: btop-style AppShellNode with embedded key hints, drop legacy chrome nodes (e9cf023 )
shell: show refresh interval and pause state in top bar (6a54825 )
shell: tab scroll window logic for top bar overflow (c43e0a8 )
shell: TopBarNode with embedded logo, scrolling tabs, and clock (7d4f068 )
splash: add SplashPage with ASCII logo and progress bar (2540281 )
splash: add SplashViewModel with animated progress (35e7437 )
splash: wire splash page into startup, navigate via ViewModel (64e1337 )
tabs: add TabOrder.Apply ordering helper (fc9d344 )
tabs: add TabOrderService with persistence + change notification (add1873 )
tabs: add TabRegistry.Reorder preserving active tab (f318218 )
tabs: apply persisted tab order at startup and register ITabOrderService (429b864 )
testing: Refactor test context and helpers (ff55832 )
theme: add GraphGradient to ThemeDefinition with btop parser support (65727bd )
theme: bundle four btop-format themes, restore persisted selection at startup (6c29419 )
themes: embed built-in themes, extend via themes/ folder (ac20b54 )
theme: theme switching with change notification and persistence (574a61d )
type-safe route registration and XML summaries on public API (526a5d9 )
typed IActorContext with Akka Props and fluent IActorRegistration (5a9f9da )
ui: Implement key hint and tab navigation interfaces (e02a92b )
wizard: add ColorFormat palette helper (0d07232 )
wizard: add SetupWizardPage and /setup route (4c33954 )
wizard: add SetupWizardViewModel (bfde861 )
wizard: add ThemePaletteNode full color table (057960b )
wizard: add WizardChrome breadcrumb, status bar, and rule (ebac7de )
wizard: frame the wizard in a Puhu shell with breadcrumb + status bar (2d1bceb )
wizard: redesign Welcome (what Puhu is) and Done (summary) screens (2dffb02 )
wizard: redirect to /setup on first run (9c08c13 )
wizard: show full theme color palette on the Theme step (37fbc33 )
Bug Fixes
block Tab on splash, update termina submodule with dispose fix (0ce68e3 )
bundle Termina DLL in NuGet package instead of external dependency (4f56c18 )
plugin: correct active sub-nav item cursor advance (1e97831 )
prevent Termina submodule from producing NuGet packages (dd8183f )
prevent Termina submodule from producing NuGet packages (#3 ) (c81d1dc )
remove double-dispose of ProgressBarNode in SplashPage (bc5db79 )
render border lines as strings to avoid DiffingTerminal char-width gaps (4f4def3 )
replace PanelNode+SeparatorNode with custom AppShellNode (f20f982 )
services: Register ISettingsStore with singleton (d478e8f )
settings: rebuild sub-views on data changes instead of stale KeyedDynamic cache (d098660 )
shell: correct key-only hint segment rendering in bottom border (091b61c )
shell: route tab state through TabRegistry during transition, serialize registry tests (311b37f )
Shift+Tab navigation via page keybindings + Termina backtab fix (2ca06f9 )
startup: resolve actor registry and startup order for plugin ViewModels (90467db )
stop splash animation on deactivation to prevent ObjectDisposedException (517ac89 )
test: clip RenderTestContext sub-contexts against parent bounds (a8d43e3 )
theme: align theme folder casing for case-sensitive filesystems (362fed2 )
theme: built-in themes are not persistable, English SDK docs, hide subject write side (e0162e7 )
theme: share default GraphGradient instance to preserve ThemeDefinition equality (b463e64 )
use explicit solution path in CI test step (d9f174e )
wizard: disable WizardNode's built-in progress bar (it duplicated the new status bar) (4ecb040 )
Documentation
add NuGet package README for Puhu.Plugin (178e6f2 )
move README to repo root, reference from nuspec (b9e2819 )
rewrite README with framed ASCII logo and add MIT LICENSE (706a992 )
Refactoring
branding: extract shared PuhuBranding.Logo used by splash + wizard (3df3b12 )
branding: make PuhuBranding internal with centering-safe LogoBlock (ebf49ea )
extract AkkaSetup for plugin actor registration, simplify ActorSystemSetup (8e87410 )
extract TabRegistry from TabBarNode statics (3ee7727 )
global Tab/Shift+Tab navigation, eliminate ThemeService.Instance (75fff45 )
introduce SetupContext to eliminate GetRegisteredSingleton hacks (e7b3f83 )
make ESC a global quit keybinding via GlobalKeyHandler (4ff96b7 )
make Servus.Plugin a fat SDK with Akka, R3, and Termina dependencies (ee27047 )
migrate MarketplacePlugin and SettingsPlugin to simplified builder API (4466a36 )
move UI nodes to Plugin SDK, use AppShell.Wrap in MarketplacePage (0e59e01 )
Organize project files into src directory (5ab31ab )
plugin: Rename Puhu.Plugin namespaces (4939842 )
project: Rename TUI projects to Puhu (d6bf661 )
rename Servus.Plugin.Sdk to Servus.Plugin (directories and project files) (fda2bda )
replace GlobalKeyHandler with page-level keybindings (523e58f )
settings: extract shared theme/refresh row builders (5ecd521 )
simplify plugin builder to 4 methods, remove abstraction layers (48372b9 )
simplify plugin builder to 4 methods, remove abstraction layers (1229eb3 )
update all namespaces from Servus.Plugin.Sdk to Servus.Plugin (91aaa39 )
You can’t perform that action at this time.