Skip to content

fix(ui): populate realtime talk provider and transport options from talk.catalog#93746

Merged
vincentkoc merged 8 commits into
openclaw:mainfrom
shushushv:fix/realtime-talk-dynamic-provider-catalog
Jun 16, 2026
Merged

fix(ui): populate realtime talk provider and transport options from talk.catalog#93746
vincentkoc merged 8 commits into
openclaw:mainfrom
shushushv:fix/realtime-talk-dynamic-provider-catalog

Conversation

@shushushv

@shushushv shushushv commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Summary

The Provider dropdown in the realtime talk Advanced panel was hardcoded to [Auto, OpenAI, Google]. Plugins that register realtimeVoiceProviders (e.g. installed via ClawHub) were invisible in the UI — users had no way to select them without manually editing config files.

The Transport dropdown also showed all transport options regardless of what the selected provider actually supports.

This fix:

  • Calls the existing talk.catalog gateway method when the Advanced panel is opened and populates the Provider dropdown dynamically from the result.
  • Filters the Transport dropdown to the transports declared in the selected provider's capabilities.transports; shows all options when Provider is Auto.
  • No gateway changes. Plugin transport capabilities already flow through talk.catalog; this PR wires that data into the UI.

Out of scope: stale provider/transport option values are not cleared when the saved ID disappears from the catalog — this is pre-existing behavior shared with other talk option fields.

Success criteria: after installing a realtime voice plugin, its provider appears in the Provider dropdown and its supported transports are the only Transport choices shown.

Real behavior proof

Behavior addressed: Provider dropdown hardcoded to Auto/OpenAI/Google; external plugin providers not selectable from the UI
Real environment tested: macOS, local dev gateway (port 19001), a locally loaded realtime voice plugin registered via the plugin SDK
Exact steps or command run after this patch: pnpm ui:build → OPENCLAW_STATE_DIR=~/.openclaw-dev pnpm gateway:watch --port 19001 → open http://127.0.0.1:19001/ → click talk button → open Advanced → observe Provider dropdown
Evidence after fix: before/after screenshots attached — Provider dropdown shows the installed plugin's provider;
before
after
Transport narrows to the provider's declared transports when selected
Observed result after fix: Provider dropdown lists the plugin's provider label; selecting it filters Transport to only the transports declared in capabilities.transports
What was not tested: iOS/Android/Desktop app UI (changes are web control UI only); ClawHub remote plugin install flow; providers with no capabilities.transports declared (expected to show all transports per fallback logic)

Tests and validation

UI-only change; no server-side logic added. Validated locally:

  • pnpm ui:build — clean build, no errors
  • tsgo (UI lane) — no type errors
  • Real behavior verified in browser (see Real behavior proof)

No automated tests added — the behavior requires a live gateway with plugins registered and is fully covered by real behavior proof above. pnpm check:changed delegates to Crabbox/Testbox for UI lanes; CI will gate the full suite.

Risk checklist

  • User-visible behavior changes: Yes — Provider dropdown now shows installed plugin providers; Transport options may be narrowed per provider
  • Config schema changes: No
  • Security / auth / secrets / network changes: No (reads existing talk.catalog method, no new network surface)
  • Tool execution changes: No
  • Highest risk: brief "Auto only" flash in Provider dropdown while catalog fetch is in-flight; graceful degradation (Auto only) on fetch failure

Current review state

Ready for review. AI-assisted implementation with human real behavior proof.

@openclaw-barnacle openclaw-barnacle Bot added app: web-ui App: web-ui triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. size: S proof: supplied External PR includes structured after-fix real behavior proof. and removed triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. proof: supplied External PR includes structured after-fix real behavior proof. labels Jun 16, 2026
@vincentkoc vincentkoc self-assigned this Jun 16, 2026
@vincentkoc
vincentkoc force-pushed the fix/realtime-talk-dynamic-provider-catalog branch from f665a18 to 4612dca Compare June 16, 2026 19:42
@vincentkoc
vincentkoc force-pushed the fix/realtime-talk-dynamic-provider-catalog branch from 4612dca to b163d5c Compare June 16, 2026 20:21
@vincentkoc

Copy link
Copy Markdown
Member

Maintainer repair is complete and this is land-ready.

What changed beyond the contributor head:

  • reconciles provider and transport selections when the live catalog changes
  • filters unconfigured and browser-incompatible providers without hiding bridge-only providers that use the default gateway relay
  • preserves valid plugin selections across transient catalog RPC failures
  • clears stale catalog display state and refreshes an open Talk panel after reconnect
  • keeps fallback OpenAI/Google choices available when catalog discovery is unavailable

Verification:

  • node scripts/run-vitest.mjs ui/src/ui/app-gateway.node.test.ts ui/src/ui/app.talk.test.ts ui/src/ui/views/chat.test.ts — 182 passed
  • git diff --check origin/main...HEAD — clean
  • OPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --provider blacksmith-testbox -- env OPENCLAW_CHECK_CHANGED_REMOTE_CHILD=1 OPENCLAW_CHANGED_LANES_RAW_SYNC=1 corepack pnpm check:changed — passed on Testbox tbx_01kv90zh12rnv5ywpbv5f13mfa (run)
  • fresh branch autoreview against current origin/main — clean, no accepted/actionable findings
  • GitHub CI on b163d5c5a814ed6957401b16deb8b58002ddc00e — 126 passed, 0 pending, 0 failed

The contributor supplied live browser proof for plugin discovery. I did not rerun that live-browser scenario after the maintainer state-transition repairs; the focused UI tests, changed gate, and full PR CI cover those repairs.

@vincentkoc
vincentkoc merged commit d211d49 into openclaw:main Jun 16, 2026
147 of 151 checks passed
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jun 17, 2026
…alk.catalog (openclaw#93746)

* fix(ui): populate realtime talk provider and transport options from talk.catalog

* test(ui): cover realtime talk catalog options

* fix(ui): keep realtime talk catalog selections valid

* fix(ui): honor realtime browser session support

* fix(ui): preserve realtime provider fallback options

* fix(ui): clear stale realtime talk catalogs

* fix(ui): refresh realtime talk catalog on reconnect

* fix(ui): reconcile realtime talk catalog selections

---------

Co-authored-by: Vincent Koc <[email protected]>
crh-code pushed a commit to crh-code/openclaw that referenced this pull request Jun 18, 2026
…alk.catalog (openclaw#93746)

* fix(ui): populate realtime talk provider and transport options from talk.catalog

* test(ui): cover realtime talk catalog options

* fix(ui): keep realtime talk catalog selections valid

* fix(ui): honor realtime browser session support

* fix(ui): preserve realtime provider fallback options

* fix(ui): clear stale realtime talk catalogs

* fix(ui): refresh realtime talk catalog on reconnect

* fix(ui): reconcile realtime talk catalog selections

---------

Co-authored-by: Vincent Koc <[email protected]>
@shushushv
shushushv deleted the fix/realtime-talk-dynamic-provider-catalog branch June 22, 2026 03:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app: web-ui App: web-ui proof: supplied External PR includes structured after-fix real behavior proof. size: M

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants