Repository navigation
Widen V2 Admin Settings and rebuild the Model Catalog natively - #1655
Merged
Paul Lizer (paullizer) merged 8 commits intoOct 6, 2026
Merged
Paul Lizer (paullizer) merged 8 commits into
Paul Lizer (paullizer) merged 8 commits into
Conversation
V2 Admin Settings now fills the width beside an "On this page" index that lists each visible section with its status. Every section uses the card the Agents settings introduced, with its icon taken from the navigation, and the nesting of settings under the switch they depend on is derived from the field schema. Wide cards place each label beside its control, and runs of independent switches pair up in two columns. The Model Catalog is a native React workbench in V2: one-line profile rows with vendor and connected-model count, a tabbed detail pane, and links that open the exact AI Connection with the model outlined. The admin catalog API adds connection and model ids to linked models. Classic keeps its catalog. In-page jumps scroll to their target again; they looked up an id the cards stopped rendering. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…lizer-admin-settings-redesign
The V2 base moved to 0.261.253 after this branch took that number. Admin Settings also stops the connection list from repeating its section's "AI Connections" region: every section card is a labelled region now, so the nested one only duplicated the landmark. Group workspaces keep it. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…o local variable' Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
14 of 24 tasks
Paul Lizer (paullizer)
merged commit Oct 6, 2026
c269964
into
paullizer-react-v2-ui
10 checks passed
Paul Lizer (paullizer)
added a commit
to paullizer/simplechat
that referenced
this pull request
Oct 6, 2026
… fix to 0.261.259
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
V2 Admin Settings rendered every category in a 768px column. On a desktop, most of the window sat empty while the cards ran long. Only the four Agents cards had the header band and nested switches that make a section easy to scan. The Model Catalog was the worst case: the classic catalog module, mounted inside that column, wrapped its list and detail into one long strip.
iconnames already declared inadmin_settings_nav.py; all 92 map to bundled Lucide icons. A section's lead switch is highlighted, with its dependent settings indented beneath it. The nesting is read from each field'sdepends_on. It reproduces the hand-built Agent Runtime card and applies wherever a section's switches have dependent settings (37 of the 77 schema sections). On wide cards, each label and its help sit left of the control, and runs of independent switches pair up in two columns. Narrow cards and 200% text keep the stacked layout.GET /api/admin/model-catalogaddsconnection_idandmodel_idto each linked model. The user catalog/api/models/catalogis unchanged, and so is the classic catalog.admin-section-<id>, an id the cards had stopped rendering. They cleared the filters but never scrolled. They now scroll to the card and focus its heading. They clear a search or switch category only when that hides the target, and they respect reduced motion.Worth a careful look:
deriveFieldHierarchy(lib/adminSections.ts) is a heuristic overdepends_on. A field it misreads can opt out withemphasis: 'none'inagentSectionAppearance.ts. This is a first pass at the layout and is meant to be tuned as it gets used.FieldShellrenders every schema field. It now splits a field into heading, help, and control regions, laid out by container queries intheme.css. Bespoke components keep their own layouts at full card width.static/js/admin/model_catalog_ui.jsormodel-catalog.css. The Dockerfile's V2 build stage stops copying them, and the unusedmodel_catalog_ui.d.tsis deleted. Classic still loads both.landmark={false}, so the AI Connections section card is the only region with that name. Group workspaces keep the list's own region.CatalogProfilePickerin the connection editor is now a React select. Every model row shares one profile request instead of making its own.Screenshots from the built SPA with fixture data, at 1920px:
Linked issue
None.
Release Notes & Latest Features
Is this visible to end users?
Is this admin-facing (Admin Settings, governance, deployment, config)?
Should this become a Latest Feature card?
Screenshot needed for the card?
Version bump
application/single_app/config.pyVERSIONthird segment bumped: 0.261.258. The base is at 0.261.257 after Fix deleted chat messages reappearing as masked #1653, and open PR Shared map server core: persistent, phase-tagged maps for agents (Phase 1, 0.261.254) #1638 holds 0.261.254. Renumber on merge if the order changes.deployers/version.txtnot needed;deployers/was not changedTesting / validation
Run on the final head, after merging #1653, using local Chromium and a venv built from
application/single_app/requirements.txtandui_tests/requirements.txt:npm ci,npx tsc -b --noEmit, andnpm run buildinapplication/v2_ui: passedpython -m pytest functional_tests/test_model_catalog_api.py functional_tests/test_v2_admin_settings_layout.py functional_tests/test_v2_model_catalog_workbench.py functional_tests/test_v2_admin_section_shell.py: 18 passed. This includes the bundled TypeScript checks intest_v2_admin_section_logic.ts(30) andtest_v2_model_catalog_logic.ts(11).python -m pytest ui_tests/test_v2_admin_settings_wide_layout.py ui_tests/test_v2_admin_model_catalog_workbench.py ui_tests/test_v2_admin_agents_visual_hierarchy.py ui_tests/test_model_catalog_management.py ui_tests/test_admin_shared_ai_connections.py ui_tests/test_admin_custom_connections.py: 96 passed. These cover light and dark themes, widths of 390, 1280, 1440, and 1920px, and normal and 200% text.python functional_tests/test_docs_app_surface_coverage.py: 7/7.python functional_tests/test_docs_site_quality.py: 6/6.python scripts/build_docs_inventory.pyleavesdocs/_data/app_surface.ymlunchanged.python scripts/check_xss_sinks.py --base-sha a69513271 --head-sha HEADon the 17 changed application files: passed.python scripts/check_broken_access_control.pyon the 2 changed Python files: passed.ui_tests/test_v2_admin_settings_wide_layout.py,test_v2_admin_agents_visual_hierarchy.py,test_model_catalog_management.py,test_v2_admin_version_status.py,test_v2_m365_transport_settings.py,test_admin_settings_save_consistency.py, andtest_v2_group_endpoints.py: 91 passed, 1 skipped.ui_tests/test_admin_shared_ai_connections_classic.pyalso fail on the base.functional_tests/test_backend_models_automatic_generation.pyneeds Azure credentials at import.ui_tests/test_v2_prompt_composer_experience.pyhits Playwright's "Sync API inside the asyncio loop" only when batched with other files. It passes on its own (56/56).Documentation
docs/explanation/release_notes.mdV2_ADMIN_SETTINGS_LAYOUT_AND_HIERARCHY.mdandV2_MODEL_CATALOG_WORKBENCH.md, plusdocs/admin/index.md,docs/admin/model-catalog.md, anddocs/admin/agents-actions.mddocs/explanation/fixes/V2_ADMIN_SECTION_JUMP_FIX.mdSecurity checklist
@swagger_route(security=get_auth_security())(no new routes; the admin-only catalog response gains two fields)sanitize_settings_for_user()(no settings flow changed)lucide-react)ui_tests/artifacts/)