Repository navigation
Conversation
When the selected harness publishes its own LLM provider inventory (goose, via the `_goose/unstable/providers/list` ACP extension), the provider field in Create agent / Edit agent is populated from the harness and rendered as a searchable combobox instead of Buzz's built-in seven-row menu plus a raw-id free-text box. - buzz-acp: new `providers [--json]` subcommand (spawn -> initialize -> providers/list) and an AcpClient helper for the extension; an adapter without it reports no inventory rather than failing. - desktop backend: `provider_inventory` on the ACP runtime catalog (goose only) plus a `discover_agent_providers` command, sharing one spawn/env-layering helper with model discovery. - desktop UI: discovered rows de-duplicate against the built-in list, keep the harness's order and the raw provider id, and mark providers goose is already configured for. A failed probe degrades to the previous static list, and a harness without an inventory keeps the compact menu and spawns no probe. Signed-off-by: deep-flash <bb8ecbe90ceb6a9569587bbe36250f224b37826517a32998f35634d0b431ecc2@meshllm.communities.buzz.xyz>
🔐 Codex Security Review
|
This branch has not been deployed
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.
Problem
In Create agent and Edit agent, choosing the Goose harness offered a built-in
seven-row provider list (Anthropic, OpenAI, OpenAI-compatible, OpenRouter, Buzz shared
compute, Databricks, Databricks v2) plus a Custom provider… free-text box.
Goose itself knows ~85 providers (Amazon Bedrock, Ollama, Together AI, LiteLLM, Groq,
xAI, …). Everything outside Buzz's hardcoded shortlist could only be reached by typing a
raw provider id into the free-text box, where a typo fails silently at launch. It also
means each new provider has to be hand-added per release (see #3055, #4133).
Goose already publishes its own inventory over the ACP custom request
_goose/unstable/providers/list, so the list does not need to be hardcoded at all.Change
When the selected harness advertises that it publishes a provider inventory, the
LLM-provider control is populated from the harness and becomes a searchable combobox
instead of a menu:
harness's own order, and keep the raw id as the value (that id is what lands on
GOOSE_PROVIDER— a prettified value would select a provider goose cannot resolve).Wiring, from the harness up:
crates/buzz-acpbuzz-acp providers [--json]subcommand: spawn →initialize→_goose/unstable/providers/list→ normalized JSON. Adapters without the extension answer-32601, which is treated as "no inventory", not an error. No session is created, so the probe never resolves the provider it is reporting on.crates/buzz-acp/src/acp.rsAcpClient::goose_list_providers+ the method constant.desktop/src-tauriKnownAcpRuntime/AcpRuntimeCatalogEntrygainprovider_inventory(goose:true). Newdiscover_agent_providersTauri command; the spawn/env/PATH/redaction layering is factored out of model discovery intorun_agent_helper_commandso both probes see exactly the environment a launched agent would (definition env below user env, baked floor applied).desktop/src/features/agents/uiuseAgentProviderDiscovery(only asks harnesses whose catalog entry setsprovider_inventory, so nothing else pays a subprocess spawn),withDiscoveredProviderOptions, andProviderSelectField, which renders the searchablePersonaModelComboboxfor inventory harnesses and the existing compact menu otherwise.Failure behaviour is deliberately boring: a failed probe or an adapter without the
extension degrades to exactly the previous static list, and
searchableis only true whenthe harness advertises an inventory — so
buzz-agent, Claude and Codex are unchanged anddo not spawn a probe to learn that.
What it looks like (mock bridge, Playwright)
Goose selected in Add agent → Customize for this agent, captured by
goose-provider-picker.spec.ts:Search providers…) rather than a menu;Configured, Ollama, Together AI (none of these are in the built-in catalog) —
and then Custom provider…;
ollfilters 40-odd rows down to Ollama.The spec writes those three PNGs to
desktop/test-results/screenshots-goose-provider/on every run.Tests
desktop/src-tauri/src/commands/agent_llm_providers_tests.rs— entry normalization:field mapping,
configured/acpflags, blank-id rows dropped, and a harness with noinventory still returning a valid empty response.
desktop/src/features/agents/ui/providerInventoryOptions.test.mjs— append/dedupe/order,raw id preserved,
Configureddescription, blank ids dropped, base list not mutated.desktop/tests/e2e/goose-provider-picker.spec.ts— goose lists harness providers thebuilt-in catalog does not have, the control filters, and a harness without an
inventory keeps the plain menu (no combobox, no search field). Runs in the
smokeproject and produces the screenshots above.
desktop/tests/e2e/edit-agent.spec.ts— updated to pick goose providers through thecombobox.
Locally:
cargo test -p buzz-acp1055 passed / 0 failed;cargo test -p buzz-desktop --lib3439 passed / 0 failed;
pnpm test6833 passed (plus the 7jsdomfailures onsrc/features/communities/*that reproduce unchanged on this machine's pristinemain— Node 26localStoragesemantics, unrelated to this diff);pnpm checkclean;pnpm typecheckclean.The full
smokePlaywright project on this machine finished 1440 passed / 1 skipped /36 failed in 56 min. Re-running those 36 by title against pristine
mainand against thisbranch gives the same result on both — 8 failed / 28 passed (composer caret formatting ×5,
attachment upload progress, own-avatar, project conversation load failure) — so those 8 are
pre-existing on this machine and the rest are load flakiness in a long single-worker run.
Nothing in the provider/model path fails on either tree.
Manually
built-in set; providers goose is configured for say Configured.
GOOSE_PROVIDER.Follow-ups (not in this PR)
provider_inventoryis a per-harnesscatalog flag, so another adapter can adopt it without touching the UI.
(each open is one short-lived
buzz-acp providersprobe).