@@ -5,7 +5,8 @@ const { accountDisplayName, accountIdentityLabel, maskAccountEmail } =
55 window . ReroutedAccountIdentity ;
66const { compactNumber : fmtNum } = window . ReroutedNumberFormat ;
77const { createLatestRequestGate, guardSensitiveRender } = window . ReroutedRendererLockState ;
8- const { buildProviderCatalog, canonicalProviderType } = window . ReroutedProviderCatalog ;
8+ const { buildEnabledProviderGroups, buildProviderCatalog, canonicalProviderType } =
9+ window . ReroutedProviderCatalog ;
910const { buildRouteAccountOptions, modelsForRouteAccount } = window . ReroutedRoutePicker ;
1011const { oauthPrompt } = window . ReroutedOAuthPrompt ;
1112const $ = ( sel , el = document ) => el . querySelector ( sel ) ;
@@ -110,6 +111,7 @@ const PROVIDER_LABELS = {
110111 cloudflare : "Cloudflare" ,
111112 glm : "GLM Coding" ,
112113 "openai-compat" : "API key" ,
114+ custom : "Custom" ,
113115} ;
114116
115117const PROVIDER_PRESENTATION = {
@@ -956,15 +958,14 @@ function homeRecentHtml(recent) {
956958}
957959
958960function liveProviders ( ) {
959- return ( state ?. providers || [ ] ) . filter (
960- ( provider ) => provider . enabled !== false && provider . hasToken
961- ) ;
961+ return buildEnabledProviderGroups ( state ?. providers || [ ] ) . map ( ( provider ) => ( {
962+ ...provider ,
963+ name : providerLabel ( provider . id ) ,
964+ } ) ) ;
962965}
963966
964967function liveProviderKey ( providers ) {
965- return providers
966- . map ( ( provider ) => `${ provider . id } :${ provider . enabled } :${ provider . hasToken } :${ provider . name } ` )
967- . join ( "|" ) ;
968+ return providers . map ( ( provider ) => provider . id ) . join ( "|" ) ;
968969}
969970
970971function liveProviderHtml ( providers ) {
@@ -974,15 +975,13 @@ function liveProviderHtml(providers) {
974975 return providers
975976 . map ( ( provider , index ) => {
976977 const presentation = providerPresentation ( provider ) ;
977- const account = aliasLabel ( provider . accountAlias ) ;
978- const name = provider . name || providerLabel ( canonicalProviderType ( provider . type ) ) ;
978+ const name = provider . name || providerLabel ( provider . id ) ;
979979 const center = ( providers . length - 1 ) / 2 ;
980980 const archY = Math . round ( Math . abs ( index - center ) * 1.8 ) ;
981981 return `<span class="live-provider" data-live-provider-id="${ esc ( provider . id ) } " title="${ esc (
982- account ? ` ${ name } · ${ account } ` : name
982+ name
983983 ) } " style="--provider-order:${ index } ;--arch-y:${ archY } px">
984984 <img src="assets/providers/${ esc ( presentation . logo ) } " alt="" />
985- ${ account ? `<small>${ esc ( account . replace ( "Account " , "" ) ) } </small>` : "" }
986985 </span>` ;
987986 } )
988987 . join ( "" ) ;
@@ -1014,7 +1013,10 @@ function drawLiveRequestPaths({ force = false } = {}) {
10141013 const stageRect = stage . getBoundingClientRect ( ) ;
10151014 if ( ! stageRect . width || ! stageRect . height ) return ;
10161015 const pathKey = `${ Math . round ( stageRect . width ) } x${ Math . round ( stageRect . height ) } |${ requests
1017- . map ( ( request ) => `${ request . id } :${ request . providerId || "pending" } ` )
1016+ . map (
1017+ ( request ) =>
1018+ `${ request . id } :${ canonicalProviderType ( request . providerType ) || "pending" } `
1019+ )
10181020 . join ( "|" ) } `;
10191021 if ( ! force && pathKey === liveRequestPathKey ) return ;
10201022 liveRequestPathKey = pathKey ;
@@ -1039,7 +1041,7 @@ function drawLiveRequestPaths({ force = false } = {}) {
10391041 const count = requests . length ;
10401042 requests . forEach ( ( request , index ) => {
10411043 const spread = ( index - ( count - 1 ) / 2 ) * 3.2 ;
1042- const targetNode = providerNodes . get ( request . providerId ) ;
1044+ const targetNode = providerNodes . get ( canonicalProviderType ( request . providerType ) ) ;
10431045 if ( targetNode ) targetNode . classList . add ( "is-active" ) ;
10441046 const target = targetNode
10451047 ? liveRoutePoint ( targetNode , stageRect , "bottom" )
@@ -1065,7 +1067,7 @@ function drawLiveRequestPaths({ force = false } = {}) {
10651067 }
10661068 const routeText = stage . querySelector ( "[data-live-route-status]" ) ;
10671069 if ( routeText ) {
1068- const routed = requests . filter ( ( request ) => request . providerId ) . length ;
1070+ const routed = requests . filter ( ( request ) => request . providerType ) . length ;
10691071 routeText . textContent = count
10701072 ? routed === count
10711073 ? `${ count } routing live`
@@ -1117,7 +1119,7 @@ function renderHome() {
11171119 <section class="hero-surface live-router-card" data-live-router-card>
11181120 <div class="live-router-head">
11191121 <div class="gateway-state"><span class="status-node ${ online ? "" : "off" } " data-home-status-node></span><span data-home-gateway>${ online ? "Gateway live" : "Gateway stopped" } </span></div>
1120- <span class="live-provider-count">${ providers . length } connected </span>
1122+ <span class="live-provider-count">${ providers . length } provider ${ providers . length === 1 ? "" : "s" } </span>
11211123 </div>
11221124 <div class="live-router-stage" data-live-router-stage aria-label="${ esc (
11231125 activeRequests . length
0 commit comments