Skip to content

fix(agents): align Builderlab controls and explain hosting limits - #1890

Merged
tellaho merged 22 commits into
mainfrom
tho/builderlab-identity-config
Oct 29, 2026
Merged

tellaho merged 22 commits into
mainfrom
tho/builderlab-identity-config

Conversation

@tellaho

@tellaho tellaho commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Category: improvement
User Impact: Builderlab agents now use the same Identity controls and bottom Save action as other agents.

Problem: Builderlab split model settings and instructions across tabs and used separate inline saves. Its model aliases also fell back to generic icons, and unsupported moves between local and hosted harnesses were unexplained.

Solution: Bring Harness, Model, Thinking and Instructions into Identity with one shared footer Save. Reuse the shared family menu and brand marks, explain both directions of the identity handoff limitation in shared hover cards, and put runtime information in Settings with consistent descriptions.

File changes

src/bundled/agents/AgentSettingsHost.tsx
Show registered hosted harnesses as disabled choices for local agents, including when only one local harness exists. Explain signing-key custody without staging a migration; preserve local migration and nested keyboard/pointer dismissal.

src/bundled/agents/AgentSettingsHost.test.tsx
Cover disabled hosted choices, hover and keyboard help, no provisioning or migration, local migration staging and agents that run elsewhere.

src/bundled/builderlab/adapter-type/Create.tsx
Use Thinking and friendly option labels consistently with Identity, while preserving model-specific options, provider IDs and validation. Remove the redundant group heading.

src/bundled/builderlab/adapter-type/Create.test.tsx
Cover Thinking choices and confirm that Extra high retains the provider value xhigh.

src/bundled/builderlab/adapter-type/index.ts
Use the same thinking-level wording in creation validation.

src/bundled/builderlab/adapter-type/Instructions.tsx
Keep provider loading and account ownership with the plugin, render the Identity editor in its first pane, and group Runtime, Workspace and Sessions in Settings. Runtime uses a short linked description beneath its label. Loading and Active-only messages describe settings rather than instructions alone.

src/bundled/builderlab/adapter-type/Instructions.test.tsx
Cover tab composition, unsaved-change cancellation/discard, runtime link placement, and nested-Escape behavior through PanelCard and AgentTabs.

src/bundled/builderlab/adapter-type/ModelSettings.tsx
Own one Identity draft and footer Save. Use a combined provider update when model settings and instructions both change; preserve narrow updates, validation, account checks, failure recovery and model readback. Render the shared model-family menu, shared thinking-option labels, and a disabled Harness trigger with an accessible hover card. Trigger clicks retain help opened from the keyboard; Escape and outside dismissal remain available.

src/bundled/builderlab/adapter-type/ModelSettings.test.tsx
Cover combined and individual saves, catalog outages, invalid selections, readback/failure recovery, and the disabled Harness explanation on hover and keyboard focus.

src/bundled/builderlab/adapter-type/models.ts
Share thinking-option display labels between creation and Identity. Keep Builderlab's alias-to-family mapping with its catalog owner; unmapped aliases use shared ID/name inference before falling back to Other.

src/bundled/builderlab/adapter-type/models.test.ts
Cover catalog aliases, inference for newly named models with opaque IDs, and the unknown-model fallback.

src/bundled/builderlab/index.test.tsx
Update integration expectations for the Identity configuration controls.

src/bundled/builderlab/README.md
Document the unified Identity draft, shared Save action and catalog mapping ownership while retaining main’s unified Builderlab account, community setup and sign-in guidance.

src/features/agents/ModelFamilyMenu.tsx
Accept catalog-owned family metadata and optional menu alignment while retaining defaults for existing callers. Resolve selected icons from the same family as the submenu.

src/features/agents/ModelPicker.tsx
Accept optional family metadata and recognize DeepSeek, Grok, GLM/Z.ai and Kimi in the shared icon matcher.

src/features/agents/ModelPicker.test.tsx
Cover family metadata, model-ID/name inference, icons and nested-menu selection, including opaque catalog IDs.

src/shared/design-system/icons/HarnessLogos.tsx
Add shared vector artwork for DeepSeek, Grok and Z.ai/GLM, plus the Kimi image wrapper.

src/shared/design-system/icons/index.ts
Export the added brand marks through the shared icon owner.

src/shared/design-system/icons/kimi.png
Store Kimi's official favicon converted losslessly to PNG.

src/shared/design-system/styles/forms.css
Apply the existing unavailable text color to focusable Base UI disabled compact buttons as well as native-disabled buttons, while preserving the available color for loading spinners.

NOTICE.md
Record artwork sources and license/trademark notes.

Product-approved design exception: disabled Harness controls and hosted menu choices explain migration limits using the shared Popover with preview hover timing, rather than the design guide’s helpful Tooltip. The explanations also open from keyboard focus and Enter; this does not change shared hover timing or tooltip policy.

Try it

  1. Open Settings → Plugins → Builderlab and sign in. Open a hosted agent's settings.
  2. In Identity, check the Harness / Model / Thinking group, model-family menus and right-edge menu alignment. Hover or focus Harness to read the explanation; Escape dismisses it.
  3. Change a supported model/Thinking pair and Instructions. Use the bottom Save, reopen the agent, and confirm the saved values. Cancel a tab switch with an unsaved draft, then confirm Discard resets it.
  4. Open Settings. Runtime reads “Hosted and managed by Builderlab.” beneath its label, alongside Workspace and Sessions.
  5. For a local agent, open Harness. Builderlab is visible but disabled while its plugin is enabled. Hover or focus it for the explanation; Enter opens the card and Escape dismisses only the card. Local-to-local harness changes still use the existing preview and Save flow.

Validation

  • At reviewed checkpoint 11e58c1ec, 117 focused tests cover the shared harness host, agent tabs/page and Builderlab editing/creation. At repair head 952c5de0f, all 53 tests in the four affected files pass: model picker, Builderlab catalog mapping, Identity integration and RemindDialog. Six new family/icon cases fail before the repair and pass after it.
  • A headless browser diagnostic of the real shared settings component verifies pointer entry into the card, keyboard focus, Enter/Escape and arrow navigation, and a disabled click retaining the local selection without a migration request. This used a temporary test fixture, not a product screenshot or native acceptance claim; the fixture was removed.
  • Actual desktop inspection covers the hosted Identity controls, hover-card appearance and updated Runtime row. Shared disabled-color checks cover both themes.
  • Mandatory pre-push TypeScript/related unit tests and design types/guards pass at merge head 712eb4370 with the supported four-worker cap. Prior failed attempts are retained in the review record.
  • Main ec443a255 is merged without rewriting feature history. The only manual conflict resolution is the README: retain main’s unified account/community/sign-in documentation and add Identity editing. The auto-merged integration test preserves both parents’ assertions, and the icon index preserves both export sets. All 43 tests in the three affected integration/picker test files pass. No production code was manually changed by the resolution.
  • Optional-review follow-ups at df6470afc: preserve compact loading-spinner colors, retain keyboard-opened Harness help on trigger click, and align creation/status Thinking labels. All 476 tests in the complete Builderlab test set, 189 design-system tests, the design-system build, and mandatory push hooks pass. Regression checks reproduce the old label/dismissal failures before the repair. Headless component diagnostics cover loading versus disabled colors in both themes, Enter/Space → pointer click → Escape, and Extra high retaining xhigh without provider writes. These diagnostics are not native or live-provider acceptance; no new human walkthrough is claimed.
  • Human acceptance: tho tested 952c5de0f and confirmed it on 2026-10-29. No browser journeys were added or removed.

buzz-review-completed

Requested adversarial review

Princess Donut reviewed 11e58c1ec342c5da91431aa899c4a03df2a4161d against 11dd17bb7775a2932ca2466235354105edf2041b: no blockers, 8.5/10, source-only. She ran no tests and did not inspect CI, captures or live behavior.

Follow-ups fix family inference/selected icons, add nested-Escape coverage, and correct settings copy. The previously blocked RemindDialog test now retains main’s existing focus-readiness assertion from 9a3910341; it matches clean main exactly. Clean main 3515e9f26 passed all six tests. The fresh unchanged feature run also passed all six, so the previous failure was intermittent; a date-validation defect was not established. No assertions/timeouts were weakened and no hooks were bypassed.

The review record contains dispositions and earlier failed-hook evidence. Repair head 952c5de0f is self-reviewed; no independent re-review is claimed. Human acceptance is recorded above. The subsequent main sync resolves documentation only. The optional-review follow-ups and their separate automated evidence are recorded above; the human-test record remains tied to 952c5de0f.

Screenshots

Actual desktop rendering, cropped to the changed controls.

Identity Runtime in Settings
Builderlab Identity controls Builderlab runtime in Settings
Thinking menu Hosted harness explanation
Thinking options without a redundant group heading Builderlab harness hover card

tellaho and others added 14 commits October 28, 2026 19:06
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
(cherry picked from commit 713fd7b)
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Use the same family menu as Goose, with Builderlab-owned alias metadata and right-aligned Model and Thinking menus. Preserve explicit supported selections and independent saves.

Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Add DeepSeek, Grok, Z.ai/GLM and Kimi artwork through the existing icon gateway, with source notices. Use the marks in shared model pickers and recognize GLM model families across plugins.

Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz>

Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Use one agent-pane Save action for model, thinking and instructions. Submit combined edits in one existing update request, retain instructions-only saves without a model catalog, and preserve failed drafts and section guards.

Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz>

Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz>

Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Revert cherry-pick aa2419b while the standalone fix is pending. Use the explicit BUZZ_BUILDERLAB_URL build input for local testing.

Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz>

Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Match the shared compact harness trigger and show the migration limitation on hover or keyboard focus.

Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz>

Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Use the existing disabled color for Base UI data-disabled buttons as well as native disabled buttons.

Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Use the shared hover-card popover to explain signing-key custody and the missing local identity handoff. Put the runtime link alongside Workspace and Sessions in Settings.

Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
…ty-config

* origin/main:
  fix(desktop): bump tao to 0.37.2 to stop AppKit exceptions aborting Buzz (#1885)
  fix(builderlab): recognize app URLs across tenants (#1710)
  test(browser): open the message-link context menu by keyboard (#1884)
  fix(desktop): let the page see Cmd shortcuts so undo reverts pastes (#1788)
  feat(navigation): distinguish passive traversal from explicit close (#1767)
  NEXUS-3788: Render composable Solo regions with recovery (#1689)
  build: stage pinned upstream goose-acp releases (#1864)
  feat(solo): sync the main agent choice to the account (#1665)
  fix(channels): count own thread replies before the relay summary lands (#1709)

Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz>
Keep registered hosted harnesses visible but disabled for local agents, with signing-key context in the shared hover card. Preserve keyboard navigation, nested dismissal, and the local migration path.

Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Place a short runtime sentence beneath its label and remove the redundant reasoning-effort menu heading from editing and creation.

Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
@tellaho tellaho changed the title align Builderlab identity settings with agent controls fix(agents): align Builderlab controls and explain hosting limits Oct 29, 2026
tellaho and others added 3 commits October 29, 2026 09:14
Let unmapped Builderlab aliases use shared ID/name inference, and derive the selected icon from the same resolved family as its submenu. Cover opaque IDs and unfamiliar catalog names.

Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Exercise the actual PanelCard and AgentTabs composition: the first Escape closes only Harness help and keeps focus; the next Escape reaches the pane close handler.

Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Use settings in Identity loading and Active-only messages now that the editor includes model preferences as well as instructions.

Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
@tellaho

tellaho commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor Author

🤖 Carl, AI coding agent, recording Princess Donut’s requested adversarial review and follow-up repairs.

Donut reviewed 11e58c1ec342c5da91431aa899c4a03df2a4161d against 11dd17bb7775a2932ca2466235354105edf2041b: no blockers, 8.5/10, source-only. She ran no tests and did not inspect CI, captures or live behavior.

Disposition:

  • 9a8f4de54: unmapped catalog names use shared inference; selected icons match submenus.
  • Recorded the product-approved hover-card exception; deferred a shared unavailable-choice abstraction because button/menu interaction contracts differ.
  • 94195a721: actual PanelCard + AgentTabs coverage confirms first Escape closes help only; the next reaches pane close. No production dismissal change was needed.
  • Deferred optional instructions-component reuse to retain length/error handling without expanding its API. Creation-label alignment was initially deferred and is addressed in the follow-up below.
  • e0498ea20: corrected loading/Active-only settings copy.
  • 952c5de0f: retained main’s existing focus barrier before custom-date keyboard selection, matching main’s test exactly.

At 952c5de0f43f2d2d1e6cd48ac04d63c1b05360a7, all 53 affected-file tests and mandatory push checks pass (supported four-worker cap). Six new mapping/icon cases failed before repair. Earlier complete hooks failed first with five timeouts plus a Solo assertion, then with RemindDialog; all 186 tests in the initial failing files passed serially. RemindDialog previously failed alone, but clean main 3515e9f26 and the fresh unchanged feature run each passed 6/6. Main already included the focus assertion from 9a3910341; no date-validation defect was established. No assertions/timeouts were weakened or hooks bypassed, and no browser journeys changed.

Carl self-reviewed the repairs; Donut has not re-reviewed them. Tho subsequently confirmed testing 952c5de0f on 2026-10-29; the PR description records that acceptance.

Main-sync update: 712eb4370 merges ec443a255 with only a README conflict resolution, preserving the unified account/community/sign-in guidance and Identity configuration. Both parents’ integration assertions and icon exports survive. The 43 affected integration/picker tests and required push hooks pass at the merge head. Production code was not manually changed by the resolution; buzz-review-completed is retained.

Optional-review follow-up at df6470afc088145924a11419b057537ba4363507, addressing Wes’s three notes:

  • be68c0d52: exclude loading compact buttons from unavailable text styling; loading spinners keep the available color in both themes.
  • 435a7767c: preserve keyboard-opened Harness help on trigger clicks, with Enter/Space, Escape and outside-dismissal regression coverage.
  • df6470afc: share Thinking display labels across creation and Identity/status copy; Extra high still stores xhigh.

All 476 Builderlab tests, 189 design-system tests, design-system build and mandatory push checks pass. Headless diagnostics use real components with fixture data, cover both-theme spinner/disabled colors and keyboard/pointer help, and confirm no provider mutation while selecting xhigh. No native/provider walkthrough or new human acceptance is claimed for these follow-ups; the earlier human confirmation remains pinned to 952c5de0f. No browser journeys were added or removed, and the separately declined popover-padding change is untouched. The three directly addressed inline threads are resolved after publication.

Carry forward the focus-readiness assertion from main commit 9a39103 before sending End/Enter to the custom-date picker. Preserve every existing assertion and timeout.

Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
@tellaho
tellaho marked this pull request as ready for review October 29, 2026 17:00
@tellaho
tellaho requested review from a team as code owners October 29, 2026 17:00

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

🤖 Star Lord’s automated source review via Wes’s account, integrating independent Rocket, Mantis and Groot reviews.

No required changes found in the unified Identity save flow, model-family controls or hosted-harness explanations. Reviewed head 952c5de0f43f2d2d1e6cd48ac04d63c1b05360a7 against base 11dd17bb7775a2932ca2466235354105edf2041b; source and attached screenshots only, with no tests or app execution. The CI snapshot shows successful executed checks, with Windows native and browser flake checks skipped; live provider save/reopen/next-task behavior and native acceptance remain unverified.

Preserve mainline Builderlab account, communities and sign-in documentation alongside the Identity controls and shared Save behavior. Resolve only the README conflict; retain both parents of the integration test and icon exports.

Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

🤖 Carl, an automated reviewer, commenting via Wes’s GitHub account.

No blocking findings at head 712eb4370e1673008e0c44a1c108da14969b9e7d against base ec443a255b28efe0f13d91924a4082f929d3152a. This covers the merge from main, including #1863. Reviewed in independent lanes: the save state machine, UI/a11y/assets, the harness host and model-family callers, and the merge with cross-module contracts. The three inline notes are optional.

Checked: combined configure vs narrow updateModel/updateInstructions payloads; readback preserving the instructions draft; and the dirty/saving tab guard (AgentTabs already remounts per section). Hosted harness choices exit before migration preview or staging. Existing Claude/Codex/Goose family-menu callers still work. Brand-mark geometry and license notes match their sources. Focused jsdom probes confirmed two behaviors: an account switch or unmount during a combined write keeps the draft and skips readback. They also reproduced the Harness click-close issue below. CI is green at this head.

Not verified: live Builderlab save, reopen and next-turn behavior; backend handling of omitted fields; VoiceOver; and whether arrowing onto the hosted menu item opens its help in a real browser (:focus-visible differs from jsdom).

Comment thread src/shared/design-system/styles/forms.css Outdated
Comment thread src/bundled/builderlab/adapter-type/ModelSettings.tsx
Comment thread src/bundled/builderlab/adapter-type/ModelSettings.tsx Outdated
@tellaho
tellaho requested a review from a team October 29, 2026 19:02
tellaho and others added 2 commits October 29, 2026 12:24
Keep the unavailable text treatment on disabled compact choices while excluding loading buttons, matching the shared Button state contract.

Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Ignore trigger presses that would close the disabled Harness explanation after keyboard opening. Preserve Escape and outside dismissal and cover both Enter and Space.

Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Share effort display labels between creation and Identity, align status and validation wording, and keep provider values unchanged.

Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
@tellaho
tellaho merged commit 608818c into main Oct 29, 2026
37 checks passed
@tellaho
tellaho deleted the tho/builderlab-identity-config branch October 29, 2026 19:47
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