feat(desktop): unify management pages and model setup / 统一整页管理中心与模型配置 - #9821
Merged
SivanCola merged 5 commits intoSep 5, 2026
Merged
Conversation
Replace separate settings, trash, and automation surfaces with shared management navigation while preserving the mounted workspace and its reading state. Keep automation drafts in memory across navigation, reconcile concurrent configuration edits, and report trash mutation outcomes explicitly. Add provider model editing, discovery, and bounded connection probes without persisting draft credentials. Preserve existing provider overrides and document desktop navigation and platform verification boundaries in English and Chinese. Verification: frontend production build, test typecheck, all 262 frontend suites, transcript regression suite, and focused config tests passed. Native Windows interaction and DPI acceptance remain pending; latest main-v2 integration requires review before merge.
Problem: the management page redesign conflicted with the merged automation isolation and model image capability changes. Its renamed shared titlebar also missed the native double-click handler. Root cause: parallel page projections and provider editor implementations owned the same behavior. Fix: retain one management navigation/shell, preserve warm terminal state while pausing fitting, reuse image policy controls and discovery identity guards, isolate unsaved credential catalogs from persistent caches, and dispatch titlebar double-click through the shared chrome class. Verification: 264 frontend suites passed across the full run and resumed tail; transcript, terminal, remote tree, typecheck, production build, repolint, Desktop Go, config/boot/provider tests, and focused race tests passed. Isolated macOS double-click maximization and restore passed. Same-toolchain initial gzip is 465.3 KiB versus 464.6 KiB on main-v2; raw initial size falls from 2481.1 to 2480.3 KiB. Narrow size ratchets cover additive API fields and shared navigation; probe code is extracted from existing oversized files.
Read the effective endpoint from the URL input's associated help element and compare its full value. This tightens legacy endpoint regressions and removes the two CodeQL substring URL findings.
SivanCola
marked this pull request as ready for review
September 5, 2026 13:41
Problem: the newly merged updater and stable-relaunch work conflicts with the management-page initial bundle budget. Root cause: both branches calibrated the same initial bundle against different feature sets. Fix: preserve the upstream updater, instance identity, and tray changes, then measure both builds with the same toolchain. Set the integrated gzip ceiling to 465.5 KiB for 465.435 KiB measured; retain the upstream 2481.7 KiB raw ceiling for 2480.9 KiB measured. Update both management-page guides. Verification: production compilation and all bundle gates, updater frontend assertions, root agent/control/install-layout regressions, and repolint pass. The shared management titlebar selector remains intact.
Problem: the coverage job intermittently failed while removing the queued-paste test's temporary session directory. Root cause: TurnDone reached the test before the controller's completion tail attempted another durable-inbox dispatch, allowing disk access to overlap fixture cleanup. Fix: close the single-turn controller inside the TurnDone sink before publishing completion. Keep the real persistent inbox and every queue/input assertion, remove the redundant runner polling, and extract the case from the oversized TUI test file. Verification: the regression passes 100 repetitions with race detection and coverage; the complete CLI package coverage test and repolint pass. No production lifecycle or persistence semantics change.
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
Settings, Trash, and Automation now use full-window management pages with shared navigation, titlebar geometry, focus isolation, and return behavior. The workspace stays mounted so conversations, composer drafts, and reading state survive page changes.
Integration status
Integrated current
main-v2(8448ad96a), including #9809 updater/relaunch changes, and resolved the original seven conflicts plus the subsequent bundle-budget conflict. The shared management shell now owns the isolation behavior from #9811, including warm-terminal retention with fitting paused while hidden. Model editors reuse the image policy controls, hard endpoint restrictions, and discovery identity checks from #9812. Unsaved credential discovery uses a transient capability resolver so its results cannot enter the saved capability cache.Fixed shared-titlebar double-click dispatch and added a DOM regression using the actual App selector and shell markup. An isolated macOS native build confirmed double-click maximization and restoration. Windows native DPI acceptance remains pending.
Related open work was reviewed for overlap: #9751 changes provider account identity and #9748 changes model-card layout. Neither is incorporated by this PR; coordinate ordering before merging those branches.
Compatibility and cache
Documentation-impact: updated - added English and Chinese model-settings and management-page guides, including platform verification boundaries.
Cache-impact: none - ordinary system prompts, tool schemas, and conversation serialization are unchanged; the explicit model probe is isolated from conversation history.
Cache-guard: TestProviderDraftProbesDoNotPersistCredentialsOrConfiguration asserts one user message, no tools, draft-key isolation, and no persisted provider configuration; focused probe tests are included in Desktop Go verification.
System-prompt-review: reviewed the configuration and probe diff; it adds an isolated credential-copy helper and a single user-message probe, with no system-prompt or memory-prefix changes.
No configuration-format migration is introduced. Existing Wails methods and provider overrides remain supported; draft probes use additive methods. Ordinary conversation system prompts, tool schemas, and serialization are unchanged. The explicit model test sends one small request without conversation history or tools and can incur provider usage.
Verification
28b4bdfd7replaces two URL substring assertions with exact comparisons against the input-associated endpoint display. All 52 provider editor assertions, test typecheck, and repolint pass. CodeQL marks both reported alerts as fixed.go test ./..., Desktopgo vet ./..., and focused provider-probe/image/catalog tests with-racepassed. Repolint passed.The integrated initial payload measures 465.435 KiB gzip JS and 2480.9 KiB raw JS/CSS, versus 464.7/2481.7 KiB on the same-toolchain base. The gzip ceiling is 465.5 KiB; the upstream raw ceiling stays 2481.7 KiB. The Traditional Chinese chunk ceiling is 61.7 KiB (measured 61.631 KiB). Feature bodies remain lazy and independent chunk/CSS gates remain enforced.
Narrow source-size ratchets account for additive model metadata/API fields and shared page wiring: app +2, Composer +4, HistoryPanel +7, bridge +6, and types +2 lines. Provider probe/discovery code was extracted into its own file, and the credential-copy helper was moved out of the oversized config file.