Skip to content

Widen V2 Admin Settings and rebuild the Model Catalog natively - #1655

Merged
Paul Lizer (paullizer) merged 8 commits into
paullizer-react-v2-uifrom
paullizer-admin-settings-redesign
Oct 6, 2026
Merged

Paul Lizer (paullizer) merged 8 commits into
paullizer-react-v2-uifrom
paullizer-admin-settings-redesign

Conversation

@paullizer

@paullizer Paul Lizer (paullizer) commented Oct 6, 2026 •

Copy link
Copy Markdown
Collaborator

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.

  • Full width, with an On this page index. Settings fill the window, up to 112rem. On wide screens, a sticky index beside the cards lists the visible sections with their status (Configured, Needs configuration, Off, Prerequisite missing). It counts the sections that need attention, marks the one in view, and jumps to a section on click.
  • The Agents card styling on every section. Each section gets the header band, icon, and larger title. Icons come from the icon names already declared in admin_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's depends_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.
  • Model Catalog workbench (V2 only). A native React component replaces the mounted classic module:
    • Each row is one line: name, publisher, and connected-model count.
    • The list and the detail scroll separately.
    • The detail has Overview, Capabilities, Connections, and Evidence tabs, with Favorite and Priority in its header.
    • The connected count opens the Connections tab. Open in AI Connections opens that model's connection editor with the model outlined.
    • GET /api/admin/model-catalog adds connection_id and model_id to each linked model. The user catalog /api/models/catalog is unchanged, and so is the classic catalog.
  • Links between settings scroll again. Go to setting in App Role Requirements and Configure Enhanced Citations looked up 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 over depends_on. A field it misreads can opt out with emphasis: 'none' in agentSectionAppearance.ts. This is a first pass at the layout and is meant to be tuned as it gets used.
  • FieldShell renders every schema field. It now splits a field into heading, help, and control regions, laid out by container queries in theme.css. Bespoke components keep their own layouts at full card width.
  • V2 no longer imports static/js/admin/model_catalog_ui.js or model-catalog.css. The Dockerfile's V2 build stage stops copying them, and the unused model_catalog_ui.d.ts is deleted. Classic still loads both.
  • In Admin Settings the connection list passes landmark={false}, so the AI Connections section card is the only region with that name. Group workspaces keep the list's own region.
  • CatalogProfilePicker in 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:

Model Catalog workbench: one-line profile rows with connected counts, the selected profile's Connections tab, and the On this page index

Knowledge in dark mode: the index with each section's status, and Azure AI Search connection settings nested under the API Management switch with labels left of their controls

Appearance: Enable Classification Banner highlighted, with its banner settings nested beneath it

Linked issue

None.

Release Notes & Latest Features

  • New Feature
  • Bug Fix
  • UI Enhancement
  • Breaking Change
  • Internal only

Is this visible to end users?

  • Yes
  • No

Is this admin-facing (Admin Settings, governance, deployment, config)?

  • Yes
  • No

Should this become a Latest Feature card?

  • Yes
  • No
  • Already added

Screenshot needed for the card?

  • Yes
  • No
  • Attached

Version bump

Testing / validation

Run on the final head, after merging #1653, using local Chromium and a venv built from application/single_app/requirements.txt and ui_tests/requirements.txt:

  • npm ci, npx tsc -b --noEmit, and npm run build in application/v2_ui: passed
  • python -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 in test_v2_admin_section_logic.ts (30) and test_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.
  • Route policy tests: 12/12, 7/7, and 2/2.
  • 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.py leaves docs/_data/app_surface.yml unchanged.
  • python scripts/check_xss_sinks.py --base-sha a69513271 --head-sha HEAD on the 17 changed application files: passed.
  • python scripts/check_broken_access_control.py on the 2 changed Python files: passed.
  • Earlier, before merging V2 shared conversations: mention pills, agent activity lines, generated documents and media (0.261.255) #1652, Show one progress indicator per V2 orchestration phase #1654, and Fix deleted chat messages reappearing as masked #1653, on 0.261.254:
    • 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, and test_v2_group_endpoints.py: 91 passed, 1 skipped.
    • The 39 other functional test files that read the changed modules: 337 passed, 13 failed.
  • Pre-existing failures, not caused by this PR:
    • Those 13 functional tests fail the same way on the base (16f42e4).
    • 8 tests in ui_tests/test_admin_shared_ai_connections_classic.py also fail on the base.
    • functional_tests/test_backend_models_automatic_generation.py needs Azure credentials at import.
    • ui_tests/test_v2_prompt_composer_experience.py hits Playwright's "Sync API inside the asyncio loop" only when batched with other files. It passes on its own (56/56).
  • Manual: reviewed light and dark themes at 390, 1280, and 1920px with fixture data; screenshots above.

Documentation

  • Release notes updated, or not needed: 0.261.258 in docs/explanation/release_notes.md
  • Feature documentation updated, or not needed: V2_ADMIN_SETTINGS_LAYOUT_AND_HIERARCHY.md and V2_MODEL_CATALOG_WORKBENCH.md, plus docs/admin/index.md, docs/admin/model-catalog.md, and docs/admin/agents-actions.md
  • Fix documentation updated, or not needed: docs/explanation/fixes/V2_ADMIN_SECTION_JUMP_FIX.md

Security checklist

  • New Flask routes include @swagger_route(security=get_auth_security()) (no new routes; the admin-only catalog response gains two fields)
  • Settings sent to non-admin frontends use sanitize_settings_for_user() (no settings flow changed)
  • Browser JavaScript is served from local SimpleChat static assets only; no CDN-hosted JS (icons come from the bundled lucide-react)
  • No secrets, keys, connection strings, or local-only artifacts are included (screenshots use fixture data; test screenshots stay in the git-ignored ui_tests/artifacts/)

Paul Lizer (paullizer) and others added 6 commits October 6, 2026 10:28
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>
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>
…0.261.256

The base moved to 0.261.255, and open PRs #1654 and #1638 both hold
0.261.254, so this branch takes the next free number.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…0.261.257

#1654 merged as 0.261.256, the number this branch had taken. Both release
note sections are kept, with this branch's on top.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Comment thread application/v2_ui/src/components/admin/ModelCatalogDetail.tsx Outdated
Paul Lizer (paullizer) and others added 2 commits October 6, 2026 11:38
…o local variable'

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
…0.261.258

#1653 merged as 0.261.257, the number this branch had taken. Both release
note sections are kept, with this branch's on top.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@paullizer
Paul Lizer (paullizer) merged commit c269964 into paullizer-react-v2-ui Oct 6, 2026
10 checks passed
Paul Lizer (paullizer) added a commit to paullizer/simplechat that referenced this pull request Oct 6, 2026
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.

2 participants