Conversation
…over The seat picker clips every mode description to one ellipsised line and nothing recovers the tail: the row renders only a `<span class="itemDesc">`, with no `title`, while the picker is the one surface that prints a mode's own summary. Rather than spend a second line on every row, the description span now carries a `title`, so the full text is on hover and the roster keeps the height it was laid out for. The 360px menu cap and the single-line clamp stay exactly as they were. While checking that in the running app, the row's trailing check turned out to sit well away from the text. Upstream's `Menu.module.css` makes `.itemLabel` the flex child that absorbs the row's spare width, and the check follows whatever width that child ends up with — so a full-width label strands the check in the leftover space. The label is now told to hug the row it labels, which puts the check back at the row's own 8px gap. The row also gains `max-width:100%`: at a fixed 336px it could exceed a menu already capped by `max-width: calc(100vw - 24px)`. Tests: the description case pins the single line, the tooltip, the hugging label and the capped row width; the roster case keeps its retargeted item-name assertion at 360px.
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.
What
Two things in the agent-preset picker.
1. The ellipsised description had no way to be read. Every mode description is clipped
to a single line, and the row renders only
<span class="itemDesc">— notitle, nothingto hover. This picker is the one surface that prints a mode's own summary
(
Two-tool coding agent with persistent bash and str_replace_editor,Built for creating custom agent presets, with all Standard …), so the clipped tail wassimply lost. Rows keep their single line; the description span now carries a
title, sothe full text is one hover away and the roster keeps the height it was laid out for.
2. The selected row's check sat away from its own text. Upstream's
Menu.module.cssmakes
.itemLabelthe flex child that absorbs the row's spare width:The trailing check follows whichever width that child ends up with, so a full-width label
strands the check in the leftover space instead of beside the text. The label is now told
to hug the row it labels (
flex:0 1 auto), which puts the check back at the row's own 8pxgap; vertical centring is already upstream's
align-items:center.Why the label, and not the row
The row already had a fixed
width:336px, which is exactly the label slot at the nominal376px menu width — but the menu is capped by
max-width: calc(100vw - 24px), so in anarrow window the fixed row and the label slot stop agreeing and the check drifts. Both
sides of that relationship are ours to settle: the label is targeted structurally
(
[role=menu]:has(.cubgiG_searchShell)>[role=presentation]:first-child [role=menuitem]>span,the same shape the existing rules in this patch use, so no upstream CSS hash is hardcoded),
and the row keeps its 336px with a
max-width:100%guard against narrow windows.How
title: text.description ?? t("noDescription");[role=menu]:has(…)…>[role=menuitem]>span{flex:0 1 auto;min-width:0}— the label hugs the row;.cubgiG_itemkeepswidth:336pxand gainsmax-width:100%.The single-line clamp, the 360px menu cap, the item name's truncation and the class map are
untouched.
Verification
npx patch-package: all 23 patches apply cleanly, including@deepseek-ai/dsh-client-ui-agent-preset@0.1.5-rc.2.npm run typecheck: clean.npm run build: succeeded (out/main/index.js,out/preload/index.cjs).node_modules/@deepseek-ai/dsh-client-ui-agent-preset/lib/client.jsthe row CSS and thetitleare present.npx vitest run test/preset-transfer-patch.test.ts— 14 tests, 14 passed. The new casepins the tooltip, the hugging label and the capped row width.
npm test: 101 of 105 test files pass, 915 of 926 tests pass. The 3 failing files (9 tests)fail for reasons unrelated to this change and reproduce without it: 8 shell out to a
python3that this Windows machine does not have on PATH (only the Microsoft Store aliasstub), and one needs symlink privileges (
test/generation-installer.test.ts,EPERMonsymlink). None of those three files references the agent-preset patch.npm run dev), Windows: screenshot below shows the check sittingbeside the row and the tooltip carrying the full description.
Notes
(
seatDesktopCss, line 72). The CSS strings do not overlap, but whichever lands first willmove the other's hunk.
docs/harness-0.1.5-patch-refactor.md§L2 this whole package should eventually move intodsh-desktop-preset-transferwith the patch going to zero. This is the minimal fix for theinterim; it does not change that plan.
docs/harness-0.1.5-rc.1-verification-checklist.md§2.1.