Skip to content

feat(web): serve custom/command voice provider options in config schema (salvage #40338) - #67436

Merged
teknium1 merged 2 commits into
mainfrom
lane/c8-voice-schema
Jul 19, 2026
Merged

feat(web): serve custom/command voice provider options in config schema (salvage #40338)#67436
teknium1 merged 2 commits into
mainfrom
lane/c8-voice-schema

Conversation

@teknium1

Copy link
Copy Markdown
Contributor

Summary

Salvage of the non-superseded half of #40338 by @lost9999: /api/config/schema now serves merged custom/command voice provider options for tts.provider / stt.provider, so the web dashboard (and any schema consumer) lists user-configured providers instead of the static builtin shortlist.

The desktop got equivalent dropdown merging client-side in #67209 — this PR brings the backend schema in line, which is what the dashboard reads. @lost9999 submitted this idea a month before the desktop-side PR; their commit lands with authorship preserved (rebase merge).

Changes

  • Contributor (lost9999): _custom_provider_options() — merges tts.providers.* / stt.providers.* + current provider value into schema options
  • Ours on top:
    • per-request overlay (_schema_with_voice_provider_options()) instead of import-time mutation — no stale options, module CONFIG_SCHEMA never mutated, ?profile= scoped
    • dropped the plugin.yaml provides: [tts] scan (convention doesn't exist — manifests carry provides_tools/provides_hooks); replaced with best-effort tts_registry/transcription_registry enumeration that degrades gracefully when plugins aren't loaded
    • builtin display order preserved (no alphabetical re-sort); guard parity with desktop helpers.ts: command-type blocks only, case-insensitive builtin collision against runtime BUILTIN_TTS_PROVIDERS/BUILTIN_STT_PROVIDERS, dual canonical+legacy resolution matching _get_named_provider_config
    • contributors/emails/ mapping for lost9999

Validation

  • 8 new schema tests pass; full test_web_server.py 442 passed / 2 pre-existing failures (TestPtyWebSocket, confirmed failing with changes stashed); ruff clean

Closes #40338 (salvaged with authorship preserved).

Infographic

voice-options-online

lost9999 and others added 2 commits July 19, 2026 03:33
…ards with desktop (#40338 follow-up)

Refactor the cherry-picked #40338 backend half:

- Move option merging from import-time _SCHEMA_OVERRIDES mutation to a
  per-request overlay in GET /api/config/schema — options now reflect the
  current config.yaml (no restart needed) and the module-level
  CONFIG_SCHEMA is never mutated. The endpoint gains an optional
  ?profile= param scoped via _config_profile_scope.
- Keep builtin display order first, customs appended (drop the
  sorted(set(...)) re-sort) — matches desktop enumOptionsFor.
- Only command-type provider blocks count (type absent or 'command' plus
  non-empty command string), enumerated from the canonical
  <kind>.providers.* location AND the legacy top-level <kind>.<name>
  fallback — the same dual resolution as _get_named_provider_config /
  _get_named_stt_provider_config. Builtin-name collisions are excluded
  case-insensitively against the RUNTIME builtin sets (not the display
  shortlist), mirroring apps/desktop/src/app/settings/helpers.ts
  commandProviderNames (#67209).
- Drop the plugin.yaml 'provides: [tts]' manifest scan — that convention
  does not exist (manifests carry provides_tools/provides_hooks only);
  plugin TTS/STT providers register at runtime via
  ctx.register_tts_provider(). Instead, opportunistically include names
  from agent.tts_registry / agent.transcription_registry when plugins
  happen to be loaded in this process.
- Current tts.provider/stt.provider value preserved in options.
- Tests: custom command provider merge (tts+stt), builtin-order
  preservation, EDGE collision exclusion, non-command block exclusion,
  current-value preservation, per-request freshness, legacy top-level
  block support.
@alt-glitch alt-glitch added type/feature New feature or request P3 Low — cosmetic, nice to have comp/cli CLI entry point, hermes_cli/, setup wizard comp/dashboard Web dashboard / control panel UI (dashboard/, landing) tool/tts Text-to-speech and transcription area/config Config system, migrations, profiles needs-decision Awaiting maintainer decision before any implementation labels Jul 19, 2026
@alt-glitch

Copy link
Copy Markdown
Collaborator

This was generated by AI during triage.

Related to #40338 and #62459. This is a backend-schema salvage for dashboard consumers, while #62459 covered the desktop picker and is now merged via #67209; maintainers should choose the consolidation path.

@teknium1
teknium1 merged commit 3fc006e into main Jul 19, 2026
33 checks passed
@teknium1
teknium1 deleted the lane/c8-voice-schema branch July 19, 2026 12:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/config Config system, migrations, profiles comp/cli CLI entry point, hermes_cli/, setup wizard comp/dashboard Web dashboard / control panel UI (dashboard/, landing) needs-decision Awaiting maintainer decision before any implementation P3 Low — cosmetic, nice to have tool/tts Text-to-speech and transcription type/feature New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants