镜像站点 · 本页由第三方 GitHub 只读镜像提供,非 GitHub 官方站点,不接受任何登录或凭据输入。前往 github.com
Skip to content

Keep Create agent's Model row readable and give Goose a Thinking row - #2673

Merged
tulsi-builder merged 6 commits into
mainfrom
basil/fix-model-label-wrap
Nov 9, 2026
Merged

tulsi-builder merged 6 commits into
mainfrom
basil/fix-model-label-wrap

Conversation

@tulsi-builder

@tulsi-builder tulsi-builder commented Nov 5, 2026 •

Copy link
Copy Markdown
Contributor

TL;DR

In Create agent, a long Goose model name no longer squeezes the Model label to one letter per line. Goose also gets its own Thinking row there, as Claude Code and Codex already have (#2409). The model name and its thinking level now share space by content instead of splitting it 50/50.

What

  • Model title stays whole. The design system caps a compact choice at 60% of its PreferenceRow, but only when the choice is the trailing's direct child. Create agent nests Goose's picker in ModelDiscoveryRecovery, so the cap never applied and the picker took the whole row. The cap now also applies when a lone wrapper holds the compact choice (components.css).
  • Name gets what the level leaves. In ModelFamilyMenu.module.css, .model and .effort were both flex: 1 at a zero basis, so they always split the trigger evenly. That cut long names early and left short levels like "Low" sitting in empty space. Now the effort is flex: none and the name is flex: 0 1 auto, and the name truncates first. Visual direction came from Xela. There's no extra · before the level, because · Default already uses the dot.
  • Goose Thinking row in Create agent. Goose now supplies CreateThinking, which reuses its existing Settings ThinkingField in the compact row treatment. When a type supplies a Thinking row, the dialog passes showEffort: false to its model field. Changing the model still resets effort to that model's default.
  • Failed level reads are visible. Compact Select doesn't render descriptions, so the compact field wraps itself in ModelDiscoveryRecovery. It shows the error and Try again, the same pattern the model field uses. Failed reads are already evicted from GooseSetup's cache, so a retry really reads again.

Non-goals: Goose agent cards still pick the level from the model menu. Shortening data_workflow_tools. model prefixes is a possible follow-up.

Screenshots

Create agent with Goose on a long model (data_workflow_tools.goose.goose-deepseek-v4-flash-0731), rendered from the real dialog in Chromium at 640px with a fake goose.

Before
before-dark
before-light

After
after-dark
after-light

Tests

  • Browser, goose-model-row.spec.mjs, two cases added. Both are layout geometry, which jsdom can't measure.
    • Create agent's Model title whole: renders CreateModel in a PreferenceRow at 520px. Before the CSS fix it failed with titleLines: 4, and it passes after.
    • Name gets what the level leaves: covers a short inherited name, which stays whole with the level right after it and no gap before the caret, and a long inherited name, where · Default stays attached and the name truncates. On the prior commit it failed with truncated: true for the short name, and it passes after.
    • Both pass in Chromium and WebKit, and the existing Settings case still passes.
  • Vitest, three tests added.
    • Goose CreateThinking reads per-model levels and saves a choice.
    • A failed level read shows the alert and Try again, then retry recovers. This failed before the recovery fix.
    • The dialog passes showEffort: false to the model field when a Thinking row exists.
  • vitest run src/bundled/goose src/bundled/agents src/features/agents → 1,804 passed at e66e471a3.
  • Before the rebase, the full pnpm test:browser run showed 7 failures (conversation, layout Alt+ArrowUp, typing composer ×2, page-placement). Those same specs also fail on base 9c82d1f0a without this change.

Review

Crack Catcher reviewed the change and found one medium issue: a failed Thinking read was silent. That's fixed in the last commit. tulsi tried the dev app before that fix.

Deferred: native-app check in both themes and with enlarged text. The new error state hasn't been seen in the native app because it needs Goose to fail.

🤖 Generated with Claude Code

tulsi-builder and others added 4 commits November 5, 2026 15:59
The compact-choice width cap only matched a select that was the trailing's
direct child. Create agent nests Goose's picker inside its recovery wrapper,
so the picker took the full row and squeezed the Model title to one letter
per line. Also cap a compact choice inside a lone trailing wrapper.

Co-authored-by: BasilBot <399581b6165ab01343e3a1324774b1024d76942aea563468f93c975e5ee5193c@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: tulsi <tulsi@block.xyz>
Both spans had flex: 1 at a zero basis, so they split the trigger evenly:
a long name truncated early while a short level sat in empty space. The
level now takes its own width and the name the rest, truncating first.

Co-authored-by: BasilBot <399581b6165ab01343e3a1324774b1024d76942aea563468f93c975e5ee5193c@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: tulsi <tulsi@block.xyz>
Claude Code and Codex already offer Thinking beside Model when creating an
agent; Goose kept its level inside the model menu. Goose now supplies
CreateThinking, reusing its Settings Thinking field in the compact row
treatment, and the dialog tells a model field with a Thinking row beside
it not to show effort itself.

Co-authored-by: BasilBot <399581b6165ab01343e3a1324774b1024d76942aea563468f93c975e5ee5193c@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: tulsi <tulsi@block.xyz>
The compact Select shows no description, so a failed read looked like
goose's default. The compact field now shows the error beside the choice
with Try again, as the model field does.

Co-authored-by: BasilBot <399581b6165ab01343e3a1324774b1024d76942aea563468f93c975e5ee5193c@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: tulsi <tulsi@block.xyz>
@tulsi-builder
tulsi-builder marked this pull request as ready for review November 5, 2026 21:10
@tulsi-builder
tulsi-builder requested a review from a team as a code owner November 5, 2026 21:10

@kalvinnchau kalvinnchau left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 One recovery-state issue found.

}: AgentCreateProps<Config>) {
const current = readConfig(config);
return (
<ThinkingField

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 [P3] Refresh Thinking after Model recovery

If Model and Thinking discovery both fail when Create agent opens, restoring the upstream and clicking Model’s Try again recovers Model and returns setup readiness to ready, but Thinking retains its old error. CreateThinking's provider/model/revision read key remains unchanged across setup.check(), so the user must click a second retry despite successful setup recovery. Reproduced with a targeted unit test and in the actual app on Chromium and WebKit with modeled upstreams. Make Thinking follow setup re-check generations or coordinate invalidation through the recovery owner, while preserving Thinking-only retry.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Fixed in c382500. CreateThinking now subscribes to setup's readiness and bumps ThinkingField's revision each time a check settles. A Model Try again (setup.check() clears the levels cache) therefore re-reads Thinking without a second retry. Thinking-only retry is unchanged.

Regression test: reads Create agent's Thinking levels again when a setup check recovers in src/bundled/goose/tabs.test.tsx. Both reads fail, then setup.check() recovers, and Thinking must show its levels with no alert. It fails on e66e471 and passes on c382500. The existing Thinking-only retry test still passes.

tulsi-builder and others added 2 commits November 5, 2026 16:36
A setup check, such as the model field's Try again, clears goose's cached
levels, but Thinking's read key did not change, so a recovered setup still
showed Thinking's old error until its own Try again. Thinking now reads
again each time a check settles; its own retry still works alone.

Co-authored-by: BasilBot <399581b6165ab01343e3a1324774b1024d76942aea563468f93c975e5ee5193c@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: tulsi <tulsi@block.xyz>
…-wrap

Signed-off-by: tulsi <tulsi@block.xyz>

# Conflicts:
#	src/bundled/goose/index.ts
@tulsi-builder
tulsi-builder merged commit 7444eb1 into main Nov 9, 2026
62 checks passed
@tulsi-builder
tulsi-builder deleted the basil/fix-model-label-wrap branch November 9, 2026 05:59
aharvard added a commit to aharvard/buzz-app that referenced this pull request Nov 9, 2026
Picks up c202642 (block#2837), which fixes the ThreadPanel catch-up test
that fails on every run of a merge with the older main.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* origin/main: (155 commits)
  deps: accept RUSTSEC-2026-0459 for libsqlite3-sys 0.38, move rmcp to 3.9.0 (block#3077)
  fix(communities): accept invite links and bare hosts in Join a community (block#2412)
  fix(builderlab): open a remote agent's Activity on the conversation it was opened from (block#3051)
  refactor(builderlab): keep capabilities fresh in the session (block#3003)
  feat(moderation): show invite links as a QR code (block#3029)
  Keep Create agent's Model row readable and give Goose a Thinking row (block#2673)
  Join a community right after creating it in Settings (block#2991)
  Let new Solo chats start temporary by default (block#2874)
  fix(messages): fill a screen that a head of folded agent activity leaves empty (block#3037)
  fix(search): search saved conversations while the community is offline or connecting (block#2724)
  test(agents): make version-history date assertion time-zone independent (block#3010)
  feat(relay): gate artifact writers on NIP-AR support (block#2735)
  fix(channels): open the dock's community switcher from Personal space (block#2806)
  fix(members): keep the list's place after a member change (block#2818)
  fix(channels): keep a launcher's side panel open on Close all tabs (block#2803)
  fix(activity): show a remote agent's Buzz send as its reply (block#3025)
  refactor(settings): move external identity authorization to security (block#3032)
  test(typeahead): serve the fixture pages as a build so cold loads fit (block#2793)
  feat(channels): list unread top-level mentions in sidebar Activity, and count only unread mentions on the Inbox card (block#2722)
  fix(solo): delete a removed workspace's settings after the groups write (block#2819)
  ...

Signed-off-by: Andrew Harvard <aharvard@squareup.com>
baxen added a commit that referenced this pull request Nov 9, 2026
* origin/main:
  deps: accept RUSTSEC-2026-0459 for libsqlite3-sys 0.38, move rmcp to 3.9.0 (#3077)
  fix(communities): accept invite links and bare hosts in Join a community (#2412)
  fix(builderlab): open a remote agent's Activity on the conversation it was opened from (#3051)
  refactor(builderlab): keep capabilities fresh in the session (#3003)
  feat(moderation): show invite links as a QR code (#3029)
  Keep Create agent's Model row readable and give Goose a Thinking row (#2673)

Signed-off-by: Bradley Axen <baxen@squareup.com>
gilgtm added a commit that referenced this pull request Nov 9, 2026
…pover-card-layout-7eeda1e0

* origin/main: (128 commits)
  deps: accept RUSTSEC-2026-0459 for libsqlite3-sys 0.38, move rmcp to 3.9.0 (#3077)
  fix(communities): accept invite links and bare hosts in Join a community (#2412)
  fix(builderlab): open a remote agent's Activity on the conversation it was opened from (#3051)
  refactor(builderlab): keep capabilities fresh in the session (#3003)
  feat(moderation): show invite links as a QR code (#3029)
  Keep Create agent's Model row readable and give Goose a Thinking row (#2673)
  Join a community right after creating it in Settings (#2991)
  Let new Solo chats start temporary by default (#2874)
  fix(messages): fill a screen that a head of folded agent activity leaves empty (#3037)
  fix(search): search saved conversations while the community is offline or connecting (#2724)
  test(agents): make version-history date assertion time-zone independent (#3010)
  feat(relay): gate artifact writers on NIP-AR support (#2735)
  fix(channels): open the dock's community switcher from Personal space (#2806)
  fix(members): keep the list's place after a member change (#2818)
  fix(channels): keep a launcher's side panel open on Close all tabs (#2803)
  fix(activity): show a remote agent's Buzz send as its reply (#3025)
  refactor(settings): move external identity authorization to security (#3032)
  test(typeahead): serve the fixture pages as a build so cold loads fit (#2793)
  feat(channels): list unread top-level mentions in sidebar Activity, and count only unread mentions on the Inbox card (#2722)
  fix(solo): delete a removed workspace's settings after the groups write (#2819)
  ...
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.

3 participants