Skip to content

feat(gui): unify console controls and refine chat and plugin management - #255

Merged
Lucas1479 merged 8 commits into
mainfrom
claude/gui-simple-v2
Oct 22, 2026
Merged

Lucas1479 merged 8 commits into
mainfrom
claude/gui-simple-v2

Conversation

@Lucas1479

@Lucas1479 Lucas1479 commented Oct 22, 2026 •

Copy link
Copy Markdown
Member

The desktop console now uses consistent controls and clearer navigation across Chat, Settings and Plugins. Chat gains a quieter composer and a compact history/artifact edge; plugin cards put identity, current state and common actions first, while retaining diagnostics in expandable details.

Linked design issue: Amadeus-Extensions #3. Companion protocol PR: Amadeus-Extensions #4.

User-visible changes

  • Fix inline chat rename in Electron, Markdown list markers and block spacing, character-initial avatar fallback, and remaining English labels in the Chinese console.
  • Share console type, weight, radius and icon scales; reuse Switch, icon/text buttons and status chips. Keep Work and wallpaper surfaces on their existing visual styles.
  • Simplify sidebar navigation, move backend information to Settings > Diagnostics, pin pending approvals above the composer, and show only configured model profiles plus the current selection.
  • Restore the scene-capability legend and item markers to their original distinct green (ready), orange (needs attention), gray (off) and purple (unverified) palette, with subtle outlines.
  • Keep Settings sections responsive to the available settings width, remember the selected section, and show restart notes only for pending changes.
  • Remove the extra background rectangle inside the chat composer while retaining its outer focus indication and text caret.
  • Collapse the history/artifact rail to an 8 px edge with a subtle handle. Hover or keyboard focus opens the existing overlay; coarse pointers retain a wider target.
  • Reorganize Plugins using the shared Settings groups and card controls:
    • installation action beside the group title and expandable installation guidance;
    • icon, name, author/version, one current-state indicator and enable switch;
    • concise contribution summaries and common configuration/settings actions;
    • package ID, saved/loaded revisions, permissions, runtime diagnostics and removal inside Plugin details.
  • Keep restart-pending state, compatibility warnings and package/contribution failures visible without expanding details. Preserve draft configuration, selected-voice disable/removal confirmation and existing save behavior.

Versioned plugin icons

The Host accepts amadeus.extension/v0 and amadeus.extension/v1. The frozen v0 format has no icon field; existing v0 packages need no migration. Authors opting into icons select v1 and may declare a package-relative icon.

The Host accepts local PNG/JPEG files up to 1 MiB and 1024 x 1024 pixels, resolves them only through the installed-package registry, and returns them through read-only trusted-renderer IPC. The renderer uses the first name grapheme, uppercased where applicable, when no usable icon exists. Image checks are shared with the theme-image owner; the theme limits remain unchanged.

Protocol dependency: Amadeus-Extensions #4, pinned to b444dd8b452a914f68cdba439cc3e79a9a1e53cf. Both versioned schemas and the validator match the canonical source. Review and merge that PR first; after merge, verify the pin is an ancestor of canonical origin/main and rerun the source comparison. Update the pin if the accepted commit changes. Offline hash agreement alone does not establish merge ancestry.

A v0-only Host rejects v1, even without an icon. Existing Hosts check schema before engines and may report invalid manifest; raising the Host API requirement cannot change that older behavior. Authors must identify a v1-capable minimum app version in distribution notes. Runtime contracts and the SDK/Host API version remain unchanged.

Catalog admission remains separate: its checker is still pinned at 1840c8e; v1/icon packages must not enter the catalog until that checker is requalified.

Scope and compatibility

This PR includes renderer presentation changes and the bounded plugin-icon protocol/main/preload support above; it is no longer presentation-only. No new dependency or public setting key is introduced.

A remembered Settings > Extensions section opens General, and the former ?page=backend route opens Chat. Narrow Settings tabs wrap to keep every section reachable. The empty chat keeps the character greeting without a second hint line.

Validation

Current host head: 530e77ec07ead97830916611e8289fbe64380df2. The capability-color update passed 17 existing style/scene tests and npm run build; independent rendering checks confirmed all four original colors and 25 matching scene markers in both light and dark themes.

Windows validation for the versioned manifest update at a3b05dfb:

  • python -m pytest tests/test_extension_icons.py tests/test_extensions.py tests/test_extension_resources.py tests/test_catalog_packaging.py tests/test_extension_protocol_provenance.py -q: 69 passed, 2 skipped. Two runner stderr-thread cleanup warnings occurred; no test failed. Runtime runner code was not changed.
  • node --experimental-strip-types --test tests/extensionIcons.test.mjs tests/extensionTheme.test.mjs tests/extensions.test.mjs tests/extensionSettings.test.mjs: 94 passed.
  • npm run build: passed, including config/SDK/Pi checks and TypeScript.
  • Independent extensionSettings.smoke.mjs and extensionThemeNative.smoke.mjs: passed. UI fixtures combine a v1 custom icon with legacy v0 fallback packages. Tests use separate profiles and random ports; the running user instance was not closed or restarted.
  • Canonical protocol python -m pytest -q: 126 passed, 2 skipped; Ruff passed.
  • python tools/check_extension_protocol.py --source <canonical-checkout>: passed at the new pin. Both schema files also load from a built application wheel.

Earlier verification: all 15 real model-less smoke checks passed at 0e761b9d after correcting the install-button locator and removing the obsolete translation. That full application smoke was not rerun for the versioned-schema update while the user instance remains active. The earlier Electron run had 555/559 passes with a preview-port collision; all 16 development-server tests subsequently passed after the port was released. Original UI checks through c637293d included 287 Python tests and the broader UI/model-less smoke coverage.

Fresh full Python and cross-platform results remain for CI.

Screenshots

All screenshots use synthetic example packages. The before image is a cropped view of the previous cards; the after images show the full page at different widths.

Before After — light, English
Previous plugin cards Updated plugin manager
After — dark theme, Chinese, narrow window

Updated plugin manager in a narrow Chinese dark-theme window

Remaining before merge

  • Review the linked design issue and companion protocol PR, merge the protocol first, and verify the final canonical pin is reachable from canonical main.
  • Run full Python and cross-platform CI; those were not rerun locally for these additions.

Rename chats inline in the history rail. Electron does not implement
window.prompt, so double-click rename threw; the test stub hid it.

Restore Markdown list markers removed by Tailwind preflight and stop
preserving source newlines in assistant Markdown, which added blank lines
between blocks. The assistant avatar falls back to the active role's
initial instead of a fixed K. System messages and errors use theme tokens.

Translate the remaining console text in Chat, Work activity, artifacts and
the capability overview. Capability details become i18n templates with
detailVars, and implementation labels are translated part by part, which
retires five whole-string keys. Remove the unused ModelBar and SessionList.

Tests cover conditional t() keys, every capability projection in a
configuration grid, and visible text on host elements.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…esheet

The Work window shell, CRT work surface, workboard and wallpaper projection
keep their own art direction. Moving them unchanged into workSurface.css
makes the console scope whole files instead of line ranges, so the type
and radius scale and its ratchet can name the files they govern.

No rule changes. No moved selector overlaps the console rules that now
precede it, so the cascade is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
tokens.css defines the console roles: type 11/12/13/14/17/20, weights
400/500/600, radii 4/6/10/999 and icons 14/16/20/24. Chat, history rail,
work activity, artifacts, sidebar, Settings, Backend, VN, extension, MCP,
ACP and character settings render from CSS classes on those roles
instead of inline styles and arbitrary Tailwind values; hover and focus
move from mouse handlers to CSS.

One control per job replaces the per-surface variants: Switch (with a
mixed state while a value is unknown) replaces SwitchCard,
.settings-form-switch, .vn-input-switch and boolean selects; one icon
button, one text button (SettingsButton, with a small size) and one
status chip; settings inputs and selects share one look. FluentIcon
honors its size (icon files no longer override it), and text glyphs
(x, ×, +, ›, ✓) and the CSS chevron become icons. Status colors use the
theme's success, warning, danger and neutral tokens; unverified is
neutral instead of purple. Configuration cards take their icon from the
group.

<small> renders as caption text and <strong>/<b> use the strong weight,
replacing preflight's 80% and bolder. The log viewer and the character
preview stage keep fixed palettes as local custom properties.

Small fixes on the way: sidebar items no longer shift 3px when active,
the rail's delete control shows on keyboard focus, and the mic and
vision buttons share one disabled state.

Without an I18nProvider (component fixtures), t() now fills variables in
the source text instead of returning the raw template, so labels such
as "View {title}" stay correct outside the app shell.

consoleStyle.test.mjs keeps console stylesheets on the role tokens and
theme palette, and console components free of inline visual styles,
arbitrary Tailwind values, color literals and scripted hover.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Navigation: the sidebar lists Chat, Wallpaper (a running mode, toggled
in place), VN Player and Plugins, with Settings at the bottom. Render
moves to a pressed-state button in the chat header; the Backend page
becomes Settings > Diagnostics, with backend connection as its first
status chip. Settings opens on General unless a section is remembered.

Chat: a pending approval is pinned above the composer and counts any
further waiting requests. An empty chat greets with the active
character's name. The model menu keeps raw profile IDs, follows the
config catalog and offers only profiles whose model connections are all
configured, plus the current one; before connection facts arrive every
profile stays listed. Profile-to-connection mapping has one owner
(chatProfileConnections) for chat, Settings and capability projection.

Settings: section tabs follow the width of the settings area rather than
the window. Below 970px they sit above the content as tabs that wrap
when needed, kept in view while scrolling; with the sidebar collapsed at
the default window the side list returns. Field rows show their source
only for .env or locked values, and a restart note only while a saved
value waits for the next start. Links to other pages (Manage plugins,
Open Characters, Open character knowledge, Manage community voices) sit
beside their group title as buttons.

Plugins: each package card has an enable switch that saves at once;
disabling the package that holds the saved voice asks first. The
configuration form opens inside its card and no longer edits enabled,
so a form save never reverts the switch.

The model-less Electron smoke (tools/smoke_electron_model_less.py, run by
the Python CI on every platform) follows the new navigation: backend
status under Settings > Diagnostics, Plugins in the sidebar whether it
is expanded or collapsed, and General's Manage plugins link.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Lucas1479 Lucas1479 changed the title feat(gui): console fixes, one style scale and small UX changes feat(gui): unify console controls and refine chat and plugin management Oct 22, 2026
@Lucas1479
Lucas1479 marked this pull request as ready for review October 22, 2026 16:04
@Lucas1479
Lucas1479 merged commit 49c67f5 into main Oct 22, 2026
15 checks passed
@Lucas1479
Lucas1479 deleted the claude/gui-simple-v2 branch October 22, 2026 16:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant