Skip to content

fix(mobile): show the full model name in the chat toolbar chip - #6349

Open
iscekic wants to merge 1 commit into
mainfrom
kwf/explorer-repo-picker-the-model-selector-chip-truncates-de-0ef2b-5acf
Open

iscekic wants to merge 1 commit into
mainfrom
kwf/explorer-repo-picker-the-model-selector-chip-truncates-de-0ef2b-5acf

Conversation

@iscekic

@iscekic iscekic commented Sep 19, 2026

Copy link
Copy Markdown
Collaborator

Changelog for users

  • The model selector chip shows the full selected model name; long names no longer collapse to a few characters.
  • The paste button stays at the end of the model chip's line instead of wrapping alone onto an empty row.

Changelog for maintainers

  • The chat toolbar control row now wraps (flex-wrap) instead of shrinking its children.
  • The model selector and paste button are packed into one content-sized inner row that grows to fill its line.
  • The paste button keeps its trailing edge through its existing ml-auto.
  • The mode chip stays shrink-0, so wrapping is what gives the model chip the full line width for its label.
  • Review first: apps/mobile/src/components/agents/chat-toolbar.tsx for the wrap and pack behavior.
  • A new mounted test covers the long-name render; the updated unit test covers the wrap and pack structure.
  • No data, config, or migration changes.

E2E proof

[e1] repo-picker model selector chip shows the full model name — android emulator-5554, 720x1600 portrait, DeepSeek V4.1 Flash selected: SCENE digest e1-scene.log shows 'android.widget.TextView DeepSeek V4.1 Flash tappable [347,721][660,767]' and 'android.widget.TextView Low tappable [728,725][780,762]' inside 'android.widget.Button DeepSeek V4.1 Flash, Low thinking effort tappable [319,707][871,781]' — full name plus Low badge, chip sized to content with slack at its right edge (no 'Dee...' squeeze); it fits beside the Code chip at this width so it does not take its own line (the visual wrap is the visual reviewer's call, capture e1.png).

[e1] repo-picker model selector chip shows the full model name — e2e-mobile-app/e1.png (capture not retained)

[e2] session composer model chip and paste button placement — android emulator-5554, existing CLI session opened as an existing agent session: SCENE digest e2-scene.log shows 'android.widget.Button DeepSeek: DeepSeek V4.1 Flash, Low thinking effort tappable [279,1914][996,1988]' with 'android.widget.TextView DeepSeek: DeepSeek V4.1 Flash tappable [307,1928][784,1974]' and 'android.widget.Button Paste from clipboard tappable [979,2006][1052,2079]' — full model name rendered and the toolbar is two lines with no orphaned third line (the two-line wrap is itself proof the packed flex-wrap change is live); the paste button lands on its own second line rather…

[e2] session composer model chip and paste button placement — e2e-mobile-app/e2.png (capture not retained)

[e1] repo-picker model selector chip shows the full model name

[e1] repo-picker model selector chip shows the full model name — prior/e1.png

[p1] repo-picker model chip shows the full model name — Android emulator-5554 (1080x2400 px, portrait, day), packed tree 0a3a74b: p1-scene.log line 1 'SCENE p1 OK', line 13 'android.widget.TextView DeepSeek V4.1 Flash tappable [347,721][660,767]' plus line 14 'android.widget.TextView Low tappable [728,725][780,762]' show the chip carries the full name and Low badge rather than a shortened label; the chip and Code chip share y-band 707-781 (digest line 10), so the own-line wrap is a layout claim left to the visual reviewer (p1.png).

[p1] repo-picker model chip shows the full model name — e2e-mobile-app/p1.png

[p2] session composer keeps the paste button on the model chip's line — Android emulator-5554 (1080x2400 px, portrait, day), packed tree 0a3a74b, existing session composer with DeepSeek V4.1 Flash + Low and the paste button present: p2-ok.log line 1 'SCENE p2 OK', line 16 'android.widget.Button Mode: Code tappable [28,1914][261,1988]' is line 1, and lines 18/21 'android.widget.Button DeepSeek: DeepSeek V4.1 Flash, Low thinking effort tappable [28,2006][744,2080]' and 'android.widget.Button Paste from clipboard tappable [979,2006][1052,2080]' share y-band 2006-2080 with the paste at the trailing edge (x1052), i.e. the paste ends the chip's line with no paste-only…

[p2] session composer keeps the paste button on the model chip's line — e2e-mobile-app/p2-session-composer.png

[e2] session composer model chip and paste button placement

[e2] session composer model chip and paste button placement — prior/e2.png

E2E proof — log excerpts

[p1] repo-picker model chip shows the full model name -> pass :: Android emulator-5554 (1080x2400 px, portrait, day), packed tree 0a3a74b5: p1-scene.log line 1 'SCENE p1 OK', line 13 'android.widget.TextView DeepSeek V4.1 Flash tappable [347,721][660,767]' plus line 14 'android.widget.TextView Low tappable [728,725][780,762]' show the chip carries the full name and Low badge rather than a shortened label; the chip and Code chip share y-band 707-781 (digest line 10), so the own-line wrap is a layout claim left to the visual reviewer (p1.png).
[p2] session composer keeps the paste button on the model chip's line -> pass :: Android emulator-5554 (1080x2400 px, portrait, day), packed tree 0a3a74b5, existing session composer with DeepSeek V4.1 Flash + Low and the paste button present: p2-ok.log line 1 'SCENE p2 OK', line 16 'android.widget.Button Mode: Code tappable [28,1914][261,1988]' is line 1, and lines 18/21 'android.widget.Button DeepSeek: DeepSeek V4.1 Flash, Low thinking effort tappable [28,2006][744,2080]' and 'android.widget.Button Paste from clipboard tappable [979,2006][1052,2080]' share y-band 2006-2080 with the paste at the trailing edge (x1052), i.e. the paste ends the chip's line with no paste-only row (screenshot p2-session-composer.png for the visual reviewer). No functional UX defect in the dig
/home/igor_kilocode_ai/.local/share/kwf/sections/explorer-repo-picker-the-model-selector-chip-truncates-de-0ef2b-5acf/e2e-mobile-app/p1-scene.log
android.widget.TextView Low tappable [728,725][780,762]
android.widget.TextView Run on tappable [37,857][1045,903]
android.widget.Button Run on: Cloud Agent tappable [37,921][909,1037]
android.widget.TextView Cloud Agent tappable [67,951][844,1007]
android.widget.Button Refresh tappable [928,921][1043,1036]
android.widget.TextView Run `kilo remote` on your computer, or `/remote` in a running CLI session, to control a local kilo process. tappable [36,1056][1044,1130]
android.widget.TextView Repository tappable [37,1176][1045,1222]
android.widget.Button Repository: Select repository tappable [37,1240][1043,1357]
android.widget.TextView Select repository tappable [67,1270][978,1326]
android.widget.Button Connect GitLab tappable [76,1423][1004,1469]
android.widget.TextView Connect GitLab tappable [76,1423][944,1469]
android.widget.TextView Connect GitLab in your browser, then return here to pick a repository. tappable [76,1497][1004,1589]
android.widget.Button Open GitLab tappable [76,1617][870,1732]
android.widget.TextView Open GitLab tappable [412,1651][594,1697]
android.widget.Button Refresh repositories tappable [888,1617][1004,1732]
android.widget.TextView Sandbox tappable [37,1818][1045,1864]
android.widget.Button Sandbox: Default · Cloudflare · Small tappable [37,1882][1043,1998]
android.widget.TextView Default · Cloudflare · Small tappable [67,1912][978,1968]
android.widget.TextView Changes tappable [37,2044][1045,2090]
android.view.View Changes tappable [37,2108][1043,2228]
android.widget.RadioButton Leave changes tappable [46,2117][540,2218]
android.widget.TextView Leave changes tappable [182,2144][403,2190]
android.widget.RadioButton Commit and push tappable [540,2117][1034,2218]
android.widget.TextView Commit and push tappable [656,2144][917,2190]
/home/igor_kilocode_ai/.local/share/kwf/sections/explorer-repo-picker-the-model-selector-chip-truncates-de-0ef2b-5acf/e2e-mobile-app/p2-ok.log
android.widget.LinearLayout com.kilocode.kiloapp:id/action_bar_root tappable [0,0][1080,2400]
android.widget.FrameLayout android:id/content tappable [0,0][1080,2400]
android.widget.Button Go back tappable [0,163][101,265]
android.widget.Button Rename session: New session - 2026-09-19T06:20:31.345Z tappable [111,149][627,279]
android.view.View New session - 2026-09-19T06:20:31.345Z tappable [111,149][627,279]
android.widget.Button Context 18,117 of 1,310,720 tokens, 1% used, cost 1 cent. Tap to view context details. tappable [654,156][925,272]
android.widget.TextView 1% tappable [776,195][813,232]
android.widget.TextView $0.01 tappable [822,195][894,232]
android.widget.Button Copy link tappable [943,163][1044,265]
android.widget.TextView 6:20 AM tappable [476,1583][604,1622]
android.view.ViewGroup say hello, User message tappable [0,1640][1080,1777]
android.widget.TextView say hello tappable [847,1677][1011,1740]
android.view.ViewGroup Hello, Assistant message tappable [0,1777][1080,1868]
android.widget.TextView Hello tappable [37,1791][1045,1854]
android.widget.Button Mode: Code tappable [28,1914][261,1988]
android.widget.TextView Code tappable [106,1927][183,1973]
android.widget.Button DeepSeek: DeepSeek V4.1 Flash, Low thinking effort tappable [28,2006][744,2080]
android.widget.TextView DeepSeek: DeepSeek V4.1 Flash tappable [56,2020][533,2066]
android.widget.TextView Low tappable [601,2024][653,2061]
android.widget.Button Paste from clipboard tappable [979,2006][1052,2080]
android.widget.Button Add attachment tappable [28,2152][101,2226]
android.widget.EditText Message tappable [126,2129][800,2249]
android.widget.Button Start voice input tappable [835,2143][926,2235]
android.widget.Button Send message [926,2126][1052,2252]
Owner request

Explorer finding: repo-picker: The model selector chip truncates "DeepSeek V4.1 Flash" to "Dee...", hiding which model is selected.

The user-agent explorer found this while using the app like a user.
One finding per item; the explorer never edits product code.

Flow: repo-picker
Found on revision: fd04ca1

Repro:

  1. set this state first: account e2e-mobile-cloud-android@example.com, $10 credits, 3 Code Reviewer pull requests, one top-level busy session (ses_f488ff9c9ffefhXjlZMDy7Ix8y), display 720x1600, day mode, font 1.0, portrait, event-service down.
  2. open the app on emulator-5554
  3. reach the screen the capture names (repo-picker)
  4. the capture shows the defect named below

Observed: The model selector chip truncates "DeepSeek V4.1 Flash" to "Dee...", hiding which model is selected.
Expected: the screen renders without this defect

Evidence (from the device run):

Production record (automatic, 2026-09-19):

Production record for ses_f488ff9c9ffefhXjlZMDy7Ix8y

Axiom, last 72 h

No line carries this term in: vercel, cloudflare-logpush, supabase-production.

The session row, read replica

No row in cli_sessions_v2 carries ses_f488ff9c9ffefhXjlZMDy7Ix8y.

Log archives, R2 kilocode-sessions

NOT READ: R2 keys are indexed by the agent id, not the session id; take the agent_* from the worker logs above and query that.

Sentry, last 72h

No Sentry issue carries this term.

Follow-ups (not changed here)

  • not proved live: In an existing agent session composer with a long model name selected and the paste button present: the model chip shows the full model name and the paste button sits at the end of the chip's line (no orphaned third line). (no capture cited it)
  • not proved live: On the new-session (repo-picker) screen, emulator-5554, display 720x1600, day mode, font 1.0, portrait, with DeepSeek V4.1 Flash selected: the model selector chip reads "DeepSeek V4.1 Flash" (plus the Low effort badge), wrapping to its own line under the Code mode chip; it must not read "Dee...". (no capture cited it)

Open findings (not fixed here)

  • not proved live: repo-picker.png is no longer on the host that took it, so no publish can carry it

Explorer finding: repo-picker: The model selector chip truncates "DeepSeek V4.1 Flash" to "Dee...", hiding which model is selected.

The user-agent explorer found this while using the app like a user.
One finding per item; the explorer never edits product code.

Flow: repo-picker
Found on revision: fd04ca1

Repro:
1. set this state first: account e2e-mobile-cloud-android@example.com, $10 credits, 3 Code Reviewer pull requests, one top-level busy session (ses_f488ff9c9ffefhXjlZMDy7Ix8y), display 720x1600, day mode, font 1.0, portrait, **event-service down**.
2. open the app on emulator-5554
3. reach the screen the capture names (repo-picker)
4. the capture shows the defect named below

Observed: The model selector chip truncates "DeepSeek V4.1 Flash" to "Dee...", hiding which model is selected.
Expected: the screen renders without this defect

Evidence (from the device run):
- ~/.local/share/kwf/findings/explorer-repo-picker-the-model-selector-chip-truncates-de-0ef2b241/repo-picker.png

Production record (automatic, 2026-09-19):
## Production record for `ses_f488ff9c9ffefhXjlZMDy7Ix8y`

### Axiom, last 72 h
No line carries this term in: `vercel`, `cloudflare-logpush`, `supabase-production`.

### The session row, read replica
No row in `cli_sessions_v2` carries `ses_f488ff9c9ffefhXjlZMDy7Ix8y`.

### Log archives, R2 `kilocode-sessions`
NOT READ: R2 keys are indexed by the agent id, not the session id; take the agent_* from the worker logs above and query that.

### Sentry, la
@kilo-code-bot

kilo-code-bot Bot commented Sep 19, 2026

Copy link
Copy Markdown
Contributor

Code Review Summary

Status: No Issues Found | Recommendation: Merge

Files Reviewed (3 files)
  • apps/mobile/src/components/agents/chat-toolbar.tsx
  • apps/mobile/src/components/agents/chat-toolbar.test.ts
  • apps/mobile/src/components/agents/chat-toolbar-model-name.mounted.test.tsx

Reviewed the flex-wrap control-row change and the packed modelSelectorWithPaste row against the shrink-0 mode chip, min-w-0 shrink model chip, and ml-auto shrink-0 paste button: the inner row keeps flex-basis: auto (via grow), so the outer wrapping decision uses the chip's real content width and the model name is no longer squeezed; no callers depend on the removed nowrap layout, and both tests assert the new structure consistently with the implementation.


Reviewed by deepseek-v4.1-flash · Input: 0 · Output: 0 · Cached: 0

Review guidance: REVIEW.md from base branch main

@iscekic

iscekic commented Sep 19, 2026

Copy link
Copy Markdown
Collaborator Author

This description names a scenario the proof did not capture:

  • not proved live: In an existing agent session composer with a long model name selected and the paste button present: the model chip shows the full model name and the paste button sits at the end of the chip's line (no orphaned third line). (no capture cited it)

A repeated proof run rebuilds the same evidence, so no proof run is dispatched for a named gap. Merging with this gap open is your decision.

@iscekic
iscekic requested a review from eshurakov September 19, 2026 07:47
@iscekic iscekic added the human-ready The PR is ready for human review. label Sep 19, 2026
@iscekic
iscekic requested a review from pandemicsyn September 19, 2026 07:47
@iscekic iscekic self-assigned this Sep 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

human-ready The PR is ready for human review.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant