Repository navigation
fix(providers): retire the suno music provider (#14224) - #14468
Merged
Merged
Conversation
studio-api.suno.ai returns 503 Service Suspended for every request. The live host (studio-api-prod.suno.com) requires a Clerk JWT exchange plus a paid hCaptcha-solving dependency that OmniRoute is not adding for one music provider — per owner decision, retire suno instead of rewriting its auth. - Remove the suno entry from musicRegistry.ts and the duplicate registry copy (open-sse/config/providers/registry/suno/), plus its handleSunoMusicGeneration dispatch/branch in musicGeneration.ts. - Drop suno from the API-key catalog (specialty-media.ts) and its icon wiring (ProviderIcon.tsx, lobeProviderIcons.ts). - Register the takedown in docs/reference/REMOVED_PROVIDERS.md and guard it via tests/unit/removed-providers-blocklist.test.ts (music-registry + source-sweep assertions), matching the doc's provider-removal contract. - kie/suno-v4.0 and kie/suno-v3.5 (kie.ai-hosted) are unaffected and remain supported; API_REFERENCE.md's example now points at one of them. - Regenerate PROVIDER_REFERENCE.md (359 -> 358 providers) and correct the provider-count literal everywhere it is asserted against live code: package.json description and the README hero/promise/comparison/ cli-terminal/tier-flow SVGs. - Drop the now-orphaned onboardingProviderDescriptions.suno key from all 66 i18n locale catalogs (mirrors puter/theoldllm precedent).
Resolve count conflicts against the tip: regenerate PROVIDER_REFERENCE (360 -> 359 after suno removal) and align the provider counts in the SVG diagrams, package.json description, README, AGENTS.md and llm.txt (+66 i18n mirrors via sync-llm-mirrors). Numbers only.
diegosouzapw
added a commit
that referenced
this pull request
Sep 24, 2026
) (#14415) Merge-batch 2026-09-23 (PRs do mantenedor, Trilha B, retrabalhada). Um worker corrigiu o defeito apontado na revisão direto no branch da PR; o detalhe está na seção "Rework (merge-batch 2026-09-23)" do corpo, com a prova de red→green. Revalidado numa árvore combinada das PRs da 2ª leva da Trilha B (#14415 #14472 #14468 #14493 #14403) sobre o tip atual de `release/v3.8.51`: - 104/104 testes node focados + 46/46 vitest (as 6 suítes de UI que saíram da quarentena); `check:provider-consistency` OK (359) - `typecheck:core`: só o herdado `cliproxyAccountHealth.ts:157`; `check:open-sse-typecheck`: só o herdado `auggie.ts` (base-red #14547, corrigido pela #14511) - eslint nos arquivos alterados limpo; file-size OK
diegosouzapw
added a commit
that referenced
this pull request
Sep 24, 2026
…h a one-shot bootstrap token (#14296) (#14472) Merge-batch 2026-09-23 (PRs do mantenedor, Trilha B, retrabalhada). Um worker corrigiu o defeito apontado na revisão direto no branch da PR; o detalhe está na seção "Rework (merge-batch 2026-09-23)" do corpo, com a prova de red→green. Revalidado numa árvore combinada das PRs da 2ª leva da Trilha B (#14415 #14472 #14468 #14493 #14403) sobre o tip atual de `release/v3.8.51`: - 104/104 testes node focados + 46/46 vitest (as 6 suítes de UI que saíram da quarentena); `check:provider-consistency` OK (359) - `typecheck:core`: só o herdado `cliproxyAccountHealth.ts:157`; `check:open-sse-typecheck`: só o herdado `auggie.ts` (base-red #14547, corrigido pela #14511) - eslint nos arquivos alterados limpo; file-size OK
diegosouzapw
added a commit
that referenced
this pull request
Sep 24, 2026
Merge-batch 2026-09-23 (PRs do mantenedor, Trilha B, retrabalhada). Um worker corrigiu o defeito apontado na revisão direto no branch da PR; o detalhe está na seção "Rework (merge-batch 2026-09-23)" do corpo, com a prova de red→green. Revalidado numa árvore combinada das PRs da 2ª leva da Trilha B (#14415 #14472 #14468 #14493 #14403) sobre o tip atual de `release/v3.8.51`: - 104/104 testes node focados + 46/46 vitest (as 6 suítes de UI que saíram da quarentena); `check:provider-consistency` OK (359) - `typecheck:core`: só o herdado `cliproxyAccountHealth.ts:157`; `check:open-sse-typecheck`: só o herdado `auggie.ts` (base-red #14547, corrigido pela #14511) - eslint nos arquivos alterados limpo; file-size OK
diegosouzapw
added a commit
that referenced
this pull request
Sep 24, 2026
Merge-batch 2026-09-23 (PRs do mantenedor, Trilha B, retrabalhada). Um worker corrigiu o defeito apontado na revisão direto no branch da PR; o detalhe está na seção "Rework (merge-batch 2026-09-23)" do corpo, com a prova de red→green. Revalidado numa árvore combinada das PRs da 2ª leva da Trilha B (#14415 #14472 #14468 #14493 #14403) sobre o tip atual de `release/v3.8.51`: - 104/104 testes node focados + 46/46 vitest (as 6 suítes de UI que saíram da quarentena); `check:provider-consistency` OK (359) - `typecheck:core`: só o herdado `cliproxyAccountHealth.ts:157`; `check:open-sse-typecheck`: só o herdado `auggie.ts` (base-red #14547, corrigido pela #14511) - eslint nos arquivos alterados limpo; file-size OK
diegosouzapw
added a commit
that referenced
this pull request
Sep 24, 2026
… key compared without timing-safe check (#14485) (#14571) Merge-batch 2026-09-23 (PRs do mantenedor, Trilha B). A reconciliação com o tip atual de `release/v3.8.51` foi feita no branch da PR; o detalhe está na seção "Rework (merge-batch 2026-09-23)" do corpo, quando existe. - #14571: a política de API key passa a rodar só quando o divert self-hosted está configurado (antes rodava 2x em toda request cloud). Prova red→green: o teste "cloud request runs the key policy ONCE" dava 429 na versão anterior e agora 5/5 passam; 29/29 no total. - #14465: re-medido depois do merge do tip. chat.ts 2560→2561 e chatHelpers.ts 1257→1258 (+1 cada, plumbing de `forcedConnectionId`), com anotação datada dentro de `frozen`. 11/11 testes focados (inclui o guard #5849). - #14467: reconciliada depois da #14468 (suno). Contagem de providers regerada = 358 (`gen:provider-reference` + `check:provider-consistency`); REMOVED_PROVIDERS/blocklist com as duas entradas; tripwire de prefixos reservados re-medido em 412; AGENTS.md/llm.txt mudam só o número (aprovado pelo dono). 57/57 testes focados. - Em todas: `typecheck:core` mostra só o herdado `cliproxyAccountHealth.ts:157`, e o único vermelho de `check:open-sse-typecheck` é o herdado `auggie.ts` (#14547).
diegosouzapw
added a commit
that referenced
this pull request
Sep 24, 2026
…ders (#14116) (#14465) Merge-batch 2026-09-23 (PRs do mantenedor, Trilha B). A reconciliação com o tip atual de `release/v3.8.51` foi feita no branch da PR; o detalhe está na seção "Rework (merge-batch 2026-09-23)" do corpo, quando existe. - #14571: a política de API key passa a rodar só quando o divert self-hosted está configurado (antes rodava 2x em toda request cloud). Prova red→green: o teste "cloud request runs the key policy ONCE" dava 429 na versão anterior e agora 5/5 passam; 29/29 no total. - #14465: re-medido depois do merge do tip. chat.ts 2560→2561 e chatHelpers.ts 1257→1258 (+1 cada, plumbing de `forcedConnectionId`), com anotação datada dentro de `frozen`. 11/11 testes focados (inclui o guard #5849). - #14467: reconciliada depois da #14468 (suno). Contagem de providers regerada = 358 (`gen:provider-reference` + `check:provider-consistency`); REMOVED_PROVIDERS/blocklist com as duas entradas; tripwire de prefixos reservados re-medido em 412; AGENTS.md/llm.txt mudam só o número (aprovado pelo dono). 57/57 testes focados. - Em todas: `typecheck:core` mostra só o herdado `cliproxyAccountHealth.ts:157`, e o único vermelho de `check:open-sse-typecheck` é o herdado `auggie.ts` (#14547).
diegosouzapw
added a commit
that referenced
this pull request
Sep 24, 2026
…nt to validate rewrite (#14217) (#14467) Merge-batch 2026-09-23 (PRs do mantenedor, Trilha B). A reconciliação com o tip atual de `release/v3.8.51` foi feita no branch da PR; o detalhe está na seção "Rework (merge-batch 2026-09-23)" do corpo, quando existe. - #14571: a política de API key passa a rodar só quando o divert self-hosted está configurado (antes rodava 2x em toda request cloud). Prova red→green: o teste "cloud request runs the key policy ONCE" dava 429 na versão anterior e agora 5/5 passam; 29/29 no total. - #14465: re-medido depois do merge do tip. chat.ts 2560→2561 e chatHelpers.ts 1257→1258 (+1 cada, plumbing de `forcedConnectionId`), com anotação datada dentro de `frozen`. 11/11 testes focados (inclui o guard #5849). - #14467: reconciliada depois da #14468 (suno). Contagem de providers regerada = 358 (`gen:provider-reference` + `check:provider-consistency`); REMOVED_PROVIDERS/blocklist com as duas entradas; tripwire de prefixos reservados re-medido em 412; AGENTS.md/llm.txt mudam só o número (aprovado pelo dono). 57/57 testes focados. - Em todas: `typecheck:core` mostra só o herdado `cliproxyAccountHealth.ts:157`, e o único vermelho de `check:open-sse-typecheck` é o herdado `auggie.ts` (#14547).
diegosouzapw
added a commit
that referenced
this pull request
Sep 24, 2026
…irement, extracted failure projection - docs: migration count 182 -> 183 in README, AGENTS.md and llm.txt (+ the 66 llm.txt mirrors), same shape as #14559; migration 185 landed with #14544. - #14468 retired suno: APIKEY_PROVIDERS 242 -> 241 and the translate-path golden loses the suno entry (regenerated; that is the only diff). - #14527 moved the retained provider-failure projection into chatCore/providerFailureRetention.ts; the public-error guard now follows the call and still requires sanitizeErrorMessage() at the projection. Refs #14496
diegosouzapw
added a commit
to gonisulaimann/OmniRoute
that referenced
this pull request
Sep 24, 2026
…golden cheaper-inference#14468 retired suno from the registry but left its block in the committed translate-path golden, so the golden test stayed red on the release tip even after the deepseek realignment. Regenerated with UPDATE_GOLDEN=1 against the current registry; the only change is the suno block removal.
diegosouzapw
added a commit
to chirag127/OmniRoute
that referenced
this pull request
Sep 29, 2026
…y the earlier release merge release/v3.8.52 retired the suno provider (cheaper-inference#14468) and removed providers.onboardingProviderDescriptions.suno from every catalog; the branch's earlier merge of release/v3.8.51 had brought the key back in 42 locales, so i18n:check-keys failed with 25 locales missing a key that en.json carried. Aligns the catalogs with the tip. Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
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.
Root cause
studio-api.suno.ai(bothopen-sse/config/musicRegistry.tsand the duplicateopen-sse/config/providers/registry/suno/index.ts) returns503 Service Suspended(Cloudflare) for every request — the host is permanently down. The live client host,
studio-api-prod.suno.com, requires a Clerk JWT exchanged from a__clientcookie viaauth.suno.com,device-id/browser-tokenheaders, and an hCaptcha challenge solvedthrough a headless browser plus a paid captcha-solving service (per the community
reference implementation, gcui-art/suno-api) — none of which OmniRoute's current
cookie-only fetch flow implements.
Fix
Per owner decision (binding, recorded in the plan-file frontmatter): retire the
suno provider rather than rewrite its auth (the Clerk JWT + hCaptcha path is out of
scope — new paid external dependency for one provider).
sunoentry frommusicRegistry.tsand the duplicate registry copy(
open-sse/config/providers/registry/suno/), and itshandleSunoMusicGenerationdispatch/branch in
musicGeneration.ts.sunofrom the API-key catalog (specialty-media.ts) and its icon wiring(
ProviderIcon.tsx,lobeProviderIcons.ts).docs/reference/REMOVED_PROVIDERS.mdand guarded it viatests/unit/removed-providers-blocklist.test.ts(new music-registry-entry assertion +source-sweep, matching the
puter/theoldllmprecedent).kie/suno-v4.0andkie/suno-v3.5(kie.ai-hosted, unrelated cookie flow) areunaffected and remain supported —
API_REFERENCE.md's example now points at one ofthem instead of the retired native provider.
PROVIDER_REFERENCE.md(359 → 358 providers) and corrected theprovider-count literal everywhere
check:docs-allasserts it against live code:package.jsondescription and the README hero/promise-pillars/comparison-table/cli-terminal/tier-flow SVGs.
onboardingProviderDescriptions.sunoi18n key from all 66locale catalogs (same treatment as the
puter/theoldllmremovals).Regression test
tests/unit/removed-providers-blocklist.test.ts— addedsunotoREMOVED_PROVIDERSplus a new
MUSIC_PROVIDERS[removed.id]assertion (the plan-file's repro, folded intothe blocklist contract instead of a standalone throwaway file).
RED (pre-fix, proven by reverting the implementation diff with
git apply -Randre-running against the unmodified test — not by switching branches):
GREEN (post-fix):
tests 19 / pass 19 / fail 0(all threeREMOVED_PROVIDERSentries ×6 assertions + the doc-sync check).
Gates run
node --import tsx/esm --test tests/unit/removed-providers-blocklist.test.ts— 19/19 passnpm run typecheck:core— exit 0, 0 errorsnode scripts/check/check-open-sse-typecheck.mjs—openSseTypecheckErrors=0npx eslint --suppressions-location config/quality/eslint-suppressions.json <every changed source/test file>— 0 errors (3 pre-existing "file ignored" warnings on thedocs/markdown paths, expected)node scripts/check/check-file-size.mjs— OK, no files over baselinenode scripts/check/check-complexity-ratchets.mjs --base-ref origin/release/v3.8.51— OK, 0 changed files in the gate's source scopenpm run check:provider-consistency— OK, 358 canonical providers, 0 registry-only exceptionsnpm run check:docs-all— 2 STRICT drifts remain (see Remaining below); all others resolvednode scripts/check/check-changelog-integrity.mjs— pre-existing failure, see Remaining belowExisting tests
Ran every test file referencing "suno":
tests/unit/minimax-media-servicekinds.test.ts,tests/unit/new-content-providers.test.ts,tests/unit/provider-service-kind-filter-4240.test.ts— aligned to the new contract (suno removed from the expected-cases/entries lists; two assertions flipped to explicitly provesunois retired rather than registered). 48/48 pass across the four touched suites.tests/unit/registry-utils.test.ts,tests/unit/specialty-model-catalog-routes.test.ts,tests/unit/model-test-modality-guard-13376.test.ts,tests/unit/music-generation-handler.test.ts,tests/unit/provider-assets-third-party-notices.test.ts— reference "suno" only as akie/suno-v4.0model id, a synthetic test-only model string, a KIE response field name (sunoData), or a static third-party-notices/icon-scope list independent of the provider registry — none depend on the retired provider; left unchanged, ran green.tests/unit/specialty-model-catalog-routes.test.ts("image catalog GET uses the unified active-credential model list", 503 instead of 200) — reproduces standalone on this file alone; the file and the route it exercises (src/app/api/v1/images/generations/route.ts) have zero diff againstorigin/release/v3.8.51, so this is a pre-existing environment/base issue, not caused by this change.Remaining (accepted, not fixed here)
check:docs-all:AGENTS.mdandllm.txtstill say "359 providers" — both are agent-instruction surfaces this session must not edit (repo convention: provider counts there are only refreshed centrally during the merge-train, per prior sessions' practice). Everything elsecheck:docs-allflagged (package.json, the 6 README/hero SVGs,PROVIDER_REFERENCE.md) was fixed to 358.node scripts/check/check-changelog-integrity.mjs: fails with 474 missing bullets —⚠️ base-red inherited. This branch was cut fromorigin/release/v3.8.51at06f1df9d;CHANGELOG.mdat that point predates several since-landed reconciliation commits on the base (base has since advanced to282db2a3). This diff never touchesCHANGELOG.md; the changelog fragment for this fix lives atchangelog.d/fixes/14224-retire-suno.mdper convention.Closes #14224
Plan-file:
_tasks/pipeline/bugs/2-implementing/14224-fix-providers-suno-studio-api-suno-ai-returns-503-service-susp.plan.mdRework (merge-batch 2026-09-23)
release/v3.8.51(tip) into the branch (real merge, no rebase/force-push). Conflicts were only in generated counts:docs/diagrams/*.svg,public/images/tier-flow-*.svg,package.jsondescription,docs/reference/PROVIDER_REFERENCE.md.PROVIDER_REFERENCE.mdwithnpm run gen:provider-reference(measured total: 359 after removingsunofrom a tip at 360), then aligned the provider count to 359 in the SVGs,package.json,README.md,AGENTS.mdandllm.txt(+66docs/i18n/*/llm.txtmirrors regenerated byscripts/i18n/sync-llm-mirrors.mjs).AGENTS.md/llm.txtchanges are the provider count only.check:docs-counts0 STRICT drift;check:docs-syncPASS (66 llm mirrors);check:provider-consistencyOK (359 canonical); focused tests (removed-providers-blocklist, minimax-media-servicekinds, new-content-providers, provider-service-kind-filter-4240) 48/48 pass;typecheck:coreonly the inheritedcliproxyAccountHealth.ts(157,5); eslint clean on changed files; file-size OK.check:open-sse-typecheckflagsopen-sse/executors/auggie.tsTS2769/TS18047 — file identical to the tip (from fix(auggie): resolve spawn EINVAL when running the CLI shim on Windowsfix(auggie): resolve spawn EINVAL when running the CLI shim on Windows #14215).