fix: batch backport tracyjohnsonux UI fixes for Agents and Coder admin area to release/2.37 - #28673
Merged
Merged
Conversation
Contributor
Docs previewCheck off each page once it's been reviewed. If a page changes in a later push, its checkbox clears automatically so it gets a fresh look. Pages not yet wired into the docs navigation aren't listed here. |
Contributor
|
π Hey @tracyjohnsonux! This PR is targeting the Only bug fixes should be cherry-picked to release branches. If this is a bug fix, please update the PR title to match the conventional commit format: If this is not a bug fix, it likely should not target a release branch. |
β¦r's time range type (#28427) Completes the deduplication agreed in #28392 (review): now that `DateTimeRangePicker` has replaced the text-expression `DateTimeRangeFilter` on the AI Gateway sessions page, the old component and its `TimeRange` type are deleted, leaving a single time-range value shape. - Deletes `site/src/components/DateTimeRangeFilter/` (component, stories, `timeRange.ts` helpers, tests); nothing imported it except the sessions page type alias. - The sessions page helpers in `ListSessionsPage/timeRange.ts` now use neutral `{start, end}` naming derived from the picker's `DateTimeRangeValue` (`type TimeRange = Pick<DateTimeRangeValue, "start" | "end">`), removing the `startedAfter`/`startedBefore` field mapping the page previously did by hand. No behavior changes: the query-string serialization (`started_after`/`started_before` RFC 3339 params) is untouched, and all existing unit tests pass with only field renames. --- Generated by Coder Agents on behalf of @tracyjohnsonux. (cherry picked from commit 607a1d0)
β¦ine into subtitle (#28481) Replaces the "Read the docs" header button on the AI Sessions page with an inline "View docs" link at the end of the subtitle sentence, matching the pattern used on the Providers and Provisioner Jobs pages. --- _Created by a Coder Agent on behalf of the PR author._ (cherry picked from commit 0452ff7)
β¦ badge sizing (#28477) The in/out token pills on the AI Gateway sessions pages looked out of place next to the provider/client/model badges: they used `Badge size="sm"` while their neighbors use the default `md`, and their arrow icons were `size-icon-lg` (24px) β taller than the badge itself, inflating the pill height. > [!NOTE] > The underlying font-size problem (`Badge sm` = 10px `text-2xs`) is fixed globally in #28517. This PR handles what that one doesn't: the token pills' size variant, icon sizing, and API cleanup. ## Changes - Token pills use Badge's default `md` size, matching the provider/client/model badges next to them. - Arrow icons drop from `size-icon-lg` (24px) to `size-icon-xs` (14px), the same icon size the neighboring badges use, with `gap-0.5` between icon and count. - Removed the unused `size` prop from `TokenBadges` β no call site ever passed one β and dropped the now-meaningless `SizeXs`/`SizeMd` stories. Affects every `TokenBadges` consumer: the sessions list, the session summary card, and the timeline prompt/tool-call tables. > π€ Generated by Coder Agents on behalf of @tracyjohnsonux (cherry picked from commit e98e2b9)
β¦#28561) Replaces the rotated `GitForkIcon` on the "Show/Hide subagents" item in the chat kebab menu with lucide's `BotIcon`, matching the robot icon already used for subagents in the chat stream (`SubagentTool`, `ToolIcon`). --- *This PR was generated by Coder Agents on behalf of @tracyjohnsonux.* (cherry picked from commit 94f312d)
β¦ page (#28557) On `/agents/settings/api-keys`, bumps the provider key status badge and the enabled model badges from `sm`/`xs` to the medium (`md`) size, and shortens the status label "Using shared key" to "Shared key". Updates the matching Storybook assertion and the status indicator name in `docs/ai-coder/agents/models.md`. Verified with `tsc` and the page's Storybook tests (15 passing). --- *Created by Coder Agents on behalf of @tracyjohnsonux.* (cherry picked from commit c07bde8)
β¦nu for personal skills (#28560) Polishes the `/agents/settings/personal-skills` page to match the table patterns used elsewhere (e.g. the AI Gateway keys page): - The table now renders in every state, so the content area always keeps its outline: `TableLoader` while loading, a `TableEmpty` with a Retry CTA on error (with the `ErrorAlert` above), and a `TableEmpty` with an Add skill CTA when there are no skills. - The per-row Download / Edit / Delete buttons are replaced with a kebab (`EllipsisVertical`) dropdown menu, following the pattern in `CustomRolesPageView`. The trigger shows a spinner and disables while a download is in flight, and the Actions column header is now screen-reader only. Storybook interaction coverage: `RowMenuActions` opens the kebab and exercises Download, Edit, and Delete; `DownloadingSkill` asserts the disabled trigger. <details> <summary>Review notes</summary> Self-audited the diff against the FE1-FE10 rules in `.claude/docs/FRONTEND_PATTERNS.md`: all rules pass. All 22 stories pass locally, along with Biome and `tsc`. </details> --- Generated by Coder Agents on behalf of @tracyjohnsonux. (cherry picked from commit 74e5a68)
tracyjohnsonux
force-pushed
the
backport/2.37/tracyjohnsonux-batch
branch
from
August 26, 2026 21:23
2dd0e21 to
c45ca12
Compare
This was referenced Aug 26, 2026
Closed
Closed
tracyjohnsonux
marked this pull request as ready for review
August 26, 2026 21:44
β¦n settings (#28559) Adds an organization picker above the compaction thresholds table on `/agents/settings/compaction`, matching the organization dropdowns in the agents admin area (`OrganizationAutocomplete`, as used by the Models and MCP Servers pages). The picker only appears when enabled models span more than one organization, defaults to the default organization, and the table shows the selected organization's models. Save tracking still covers all models so an edited row hidden by the picker is not dropped. Also removes the organization name text under each model badge (the organization remains in the accessible labels to disambiguate duplicate model names) and changes the model badge size from `sm` to `md`. _This PR was generated by Coder Agents on behalf of @tracyjohnsonux._ (cherry picked from commit 2eee703)
β¦lls (#28527) Several badges render at `text-2xs` (10px) via `Badge size="sm"` and read as broken next to their surroundings, especially since the MUI/Emotion removal (#27821) dropped the 14px `CssBaseline` body typography that used to soften the contrast. Most visible on the provisioner jobs page (Type and Tags columns) and the AI Gateway sessions list (network call pills). Rather than changing what `Badge sm` means globally (explored in #28517, closed in favor of this), this switches the affected call sites to the default `md` size (`text-xs`, 12px), matching the other badges around them. ## Changes - `ProvisionerTags.tsx`: `ProvisionerTag` and the `+N` overflow badge β default `md`. Covers the provisioner jobs Tags column, job detail expansion, and other provisioner tag consumers. - `JobRow.tsx`: the job Type badge β default `md`. - `NetworkCallBadges.tsx`: the total/blocked pills on the sessions list β default `md`, consistent with the token pills in #28477. The `Badge` component itself is untouched; `sm` remains available for intentionally dense contexts. Related: #28477 (AI session token badges). > π€ Generated by Coder Agents on behalf of @tracyjohnsonux (cherry picked from commit f31b759)
Combobox dropdowns were forcing the migrated menu styling in a few places: secondary menu surfaces, surface-quaternary borders, square item highlights, tertiary selected-row highlights, and a tertiary footer hover in the workspace template dropdown. Use the shared combobox defaults instead: primary menu surfaces, `border-border-default`, padded lists so highlights do not run to the edge, rounded item highlights, and the standard secondary selected-row highlight. Remove callsite overrides that were preventing the shared defaults from applying to workspace, filter, and version dropdowns. > This PR was generated by Coder Agents on behalf of @tracyjohnsonux. (cherry picked from commit 2eb9e4f)
β¦28478) Makes the date/time range picker trigger on the AI Gateway sessions page visually consistent with the adjacent search field and filter dropdowns. Button size is unchanged (`lg`, h-10). - **Calendar icon size:** now `size-icon-sm` (18px), identical to the search icon. Previously the Button's `[&>svg]:size-icon-lg` + `[&>svg]:p-0.5` child selectors (specificity 0-1-1) overrode the icon's authored `size-4` class (0-1-0), inflating it to a 24px box at `size="lg"`. The calendar's classes are marked important (`!size-icon-sm !p-0`) to win that fight. - **Calendar line weight:** at equal geometry the calendar reads heavier than the magnifier because its glyph is denser, so its stroke is `strokeWidth={1.75}` for optical parity with the search icon. - **Chevron:** now `size-icon-sm` with no color class, inheriting the button's `text-content-primary` β exactly matching `ComboboxButton`, which backs the other filter dropdowns (previously it was `text-content-secondary`). - **Spacing:** trigger uses `gap-2 pr-1.5` like `ComboboxButton`, giving 8px icon-to-text (matching the search field's `pr-2` addon spacing) and the same label-to-chevron gap and right padding as the other dropdowns. **Scope:** `DateTimeRangePicker`'s only production consumer is the AI Gateway sessions filter, so the change affects only this page (plus Storybook). --- *This PR was generated by Coder Agents on behalf of @tracyjohnsonux.* (cherry picked from commit 769decb)
β¦links (#28612) Moves documentation CTAs that were previously rendered as header buttons into inline `View docs` external text links under the relevant header or section copy. Deployment settings: - `/deployment/overview` - `/deployment/appearance` - `/deployment/external-auth` - `/deployment/oauth2-provider/apps` - `/deployment/network` - `/deployment/workspace-proxies` - `/deployment/idp-org-sync` - `/deployment/notifications` - `/deployment/userauth` - `/deployment/security` - `/deployment/observability` - `/deployment/premium` - `/deployment/ai-governance` Organization and user settings: - `/organizations/:organization/groups` - `/organizations/:organization/roles` - `/organizations/:organization/idp-sync` - `/organizations/new` - `/organizations/:organization/provisioners` - `/organizations/:organization/provisioner-keys` - workspace sharing settings Other admin/tool pages: - `/ai/settings/gateway-keys` - `/audit` - `/connectionlog` - template permissions settings - `SettingsHeaderDocsLink` now renders the shared inline `Link` component with the default label `View docs`, external icon, and screen-reader text for new-tab behavior. - Right-side header actions now remain reserved for real actions such as `Add application`, `Create key`, or export buttons. - `/deployment/security`: removed the duplicate Browser-Only Connections badge and vertically aligned the remaining badge with the section heading. - `/deployment/observability`: kept docs links scoped to Audit Logging and Monitoring, and removed the top-level observability docs link. - Notification misconfiguration alerts now use the same `View docs` text-link treatment. - Storybook stories updated to assert the new link labels and hrefs where covered. - `pnpm check` - `pnpm lint:types` - Targeted Storybook interaction tests for the updated pages. _This PR was generated by Coder Agents on behalf of @tracyjohnsonux._ (cherry picked from commit 046a532)
) Repositions the organization picker on the AI settings models and MCP servers pages so it lives with the content it scopes instead of floating above the page header. **Models** (`/ai/settings/models`) - The picker moved out of `OrganizationModelsLayout` into a shared `ModelOrganizationSelect` component that preserves the current path and auxiliary query params when switching orgs. - List page: rendered in the filter row to the right of search. - Add/edit model form: rendered as row 3 of the form grid at 50% width, labeled "Organization". On the edit page it is informational only (a static value, not a picker), since switching org there would 404 the model. Also rendered in the no-provider fallback and "Provider not found" states so the switcher never disappears on those pages. **MCP servers** (`/ai/settings/mcp-servers`) - List page: new client-side search input (matches display name, slug, and URL) with the org picker beside it, label hidden. - Add/edit server form: the picker moved into the form as the third cell of the first row (slug, display name, organization), making it a 3-up. - `OrganizationPicker` now renders a static read-only value instead of a disabled button when the org cannot be changed (no handler or single org). This fixes the muted `content-disabled` text on the update page. The read-only rendering is shared with the models edit page via a new `OrganizationValue` component beside `OrganizationAutocomplete`. **Status columns** (both list tables) - The visible "Status" header and the Enabled/Disabled badges are removed; both list tables drop the status column entirely. Models whose provider is deleted or disabled show a warning "Unavailable" badge (with an explanatory tooltip) beside the name. - Disabled models and MCP servers show a "Disabled" badge beside the name, matching the existing "Default" badge placement, and the row dims like disabled providers: avatar/icon at half opacity, text in `content-disabled`. <details> <summary>Decision log</summary> - `ModelOrganizationSelect` reuses `OrganizationAutocomplete` and reads accessible organizations from the models context (`accessibleOrganizations` added to `OrganizationModelsContext`), rather than duplicating the layout's navigation logic per page. - Navigation semantics are unchanged: switching orgs rewrites the `org` search param and preserves the path and remaining params, exactly as the old layout-level picker did. - The MCP `OrganizationPicker` read-only state uses an `<output>` element (labelable, keeps the `Label` association) rather than a disabled button, so non-interactive values do not render with disabled styling or sit in the tab order. - The add MCP server page keeps a standalone picker above the "cannot add servers" alert since the form (and its picker slot) is not rendered in that state. - Story review: one interaction story per new behavior. A `ModelsPageView` story duplicating the shared picker's select-and-navigate flow was deliberately dropped; list-page placement is covered by the `OrganizationModelsLayout` stories that mount the real `ModelsPage`. The `ModelForm` fallback-branch picker has no dedicated story since its sibling branch and the shared flow are covered. </details> Verification: `pnpm lint:types`, `pnpm check`, and all affected Storybook tests pass (ModelsPage and MCPServersPage: 140), plus the `organizationModels` and `mcpServerFormLogic` unit tests. --- π€ This PR was generated by Coder Agents on behalf of @tracyjohnsonux. --------- Co-authored-by: Michael Suchacz <203725896+ibetitsmike@users.noreply.github.com> (cherry picked from commit 78c65ea)
tracyjohnsonux
force-pushed
the
backport/2.37/tracyjohnsonux-batch
branch
from
August 27, 2026 00:00
9948cc6 to
634ebfd
Compare
mtojek
approved these changes
Aug 27, 2026
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
Batch backport of @tracyjohnsonux's PRs that merged into
mainafter therelease/2.37branch point (c275327f, #28369) and were not yet on the release branch.Commits are
git cherry-pick -xof the original squash commits inmainmerge order. Ten are verbatim; the last two carry manual conflict resolutions, documented below.pnpm run lint:typesand the affected Storybook suites (311 tests) pass on the branch.Included (12)
607a1d060452ff7ee98e2b9b94f312dfc07bde8074e5a6802eee703ef31b75972eb9e4fb769decbe046a532a78c65ea5Conflict resolutions
SecuritySettingsPageView.{tsx,stories.tsx}because the backports landed in reversemainorder. Resolved by takingmain's content; since only fix(site/src): move deployment docs links inline as View docs text linksΒ #28612 and fix(site/src/pages/DeploymentSettingsPage): gate browser-only paywall on entitlementΒ #28660 touched those files on either side, the resolved files are byte-identical tomain.organizationPickerprop threading and the edit-requires-dirty submit gate without thecanShareServercontext, the form header rebuilt asmain's version minus the share button, and story assertions ported (the feat: allow sharing MCP servers with users and groupsΒ #28593 share stories do not exist on this branch).ModelFormProviderConfig.stories.tsxtakesmain's version, deliberately folding in the stories-only decorator fix from fix(site/src): repair failing Storybook storiesΒ #28462 becauserelease/2.37already has feat: use organization-scoped chat modelsΒ #27960 and those stories were broken without the provider wrap. Validated with the full MCPServersPage + ModelsPage Storybook suites (140/140, matching the original PR) and themcpServerFormLogicunit tests.Excluded
mainby revert(site): remove built-in emoji avatar insetΒ #28533, so it is not backported.Decision log
release/2.37frommain:c275327fb724dea6c4428263d948e13815041b3e(2026-08-24, feat: audit operational agent settingsΒ #28369), computed viagit merge-base.mainafter that point; none had been backported yet (verified by ancestry, patch-id equivalence, and(#NNNN)references inrelease/2.37history since the branch point).maintopological order; conflicting picks were initially skipped, then fix(site/src): move deployment docs links inline as View docs text linksΒ #28612 and fix(site/src): reposition org pickers in AI settings models and MCP pages to be consistentΒ #28564 were resolved on the same base and appended (no file overlap with the verbatim picks exceptdocs/ai-coder/agents/models.md, which merges cleanly).mainby revert(site): remove built-in emoji avatar insetΒ #28533 (bef6b4c30b).pnpm install,pnpm run lint:types(tsc), Biome on changed files,mcpServerFormLogicunit tests, and the AISettingsPage + SecuritySettingsPage Storybook suites (311 tests) pass after each change.