feat(providers): integrate audited free-tier gateways (#9210)

* feat(providers): add Zylo UnoRouter and Poolside registries

* feat(providers): integrate audited free-tier gateways

* feat: add wave2 free-tier provider registries

* feat(providers): add Mixlayer Speka and TokenReply registries

* feat: add wave 2 free-tier provider registries

* fix: align meganova provider slug

* feat(providers): integrate wave2 free-tier gateways

* feat(providers): add Wave 3-A free-tier registries

* feat(providers): add HelyxAI Auriko and Poixe registries

* feat(providers): add Naga AI and Chat Oripe registries

* feat(providers): integrate wave3 free-tier gateways

* feat(providers): add FreeInference registry

* feat(providers): add Free.ai registry

* feat(providers): integrate wave4 free-tier gateways

* docs: synchronize provider and free-tier inventories

* refactor(providers): split audited gateway catalog

* feat(providers): add audited Void AI and HelixMind gateways

* feat(providers): finalize audited free-tier integration

* test(providers): update APIKEY split count to 229 after rebase onto release/v3.8.50

The rebase merged the release catalog (201 APIKEY providers) with the PR's
28 free-tier additions, yielding 229 total. Correct the characterization
count so the partition assertion reflects the true merged state.

---------

Co-authored-by: diegosouzapw <diegosouzapw@users.noreply.github.com>
Co-authored-by: backryun <bakryun0718@proton.me>
This commit is contained in:
Diego Rodrigues de Sa e Souza
2026-08-12 16:19:25 -03:00
committed by GitHub
parent f6ccd3cf9f
commit ecc89eef14
345 changed files with 9108 additions and 9012 deletions

View File

@@ -38,6 +38,10 @@ function CoverageBarSkeleton(): JSX.Element {
<div className="h-2 w-16 rounded bg-bg-subtle" />
<div className="flex-1 h-2 rounded bg-bg-subtle" />
</div>
<div className="flex gap-2">
<div className="h-2 w-16 rounded bg-bg-subtle" />
<div className="flex-1 h-2 rounded bg-bg-subtle" />
</div>
</div>
);
}
@@ -189,8 +193,12 @@ export function AgentSkillsPageClient(): JSX.Element {
});
const selectedMarkdown = selectedId ? (markdownCache.get(selectedId) ?? null) : null;
const coverageTotal = coverage !== null ? coverage.api.have + coverage.cli.have : null;
const showGenerateButton = coverageTotal !== null && coverageTotal < 42;
const coverageTotal =
coverage !== null ? coverage.api.have + coverage.cli.have + coverage.config.have : null;
const catalogTotal =
coverage !== null ? coverage.api.total + coverage.cli.total + coverage.config.total : null;
const showGenerateButton =
coverageTotal !== null && catalogTotal !== null && coverageTotal < catalogTotal;
return (
<div className="flex flex-col gap-4">

View File

@@ -23,7 +23,7 @@ function trackColor(have: number, total: number): string {
export function CoverageBar({ coverage }: CoverageBarProps): JSX.Element {
const t = useTranslations("agentSkills");
const { api, cli } = coverage;
const { api, cli, config } = coverage;
return (
<div className="flex flex-col gap-2 text-xs" data-testid="coverage-bar">
@@ -49,6 +49,28 @@ export function CoverageBar({ coverage }: CoverageBarProps): JSX.Element {
</span>
</div>
<div className="flex items-center justify-between gap-2">
<span className="font-medium text-text-muted shrink-0">
{t("categoryConfig")} {config.have}/{config.total}
</span>
<div
className={`flex-1 h-2 rounded-full overflow-hidden ${trackColor(config.have, config.total)}`}
>
<div
role="progressbar"
aria-valuenow={config.have}
aria-valuemin={0}
aria-valuemax={config.total}
aria-label={`${t("categoryConfig")} ${config.have}/${config.total}`}
className={`h-full rounded-full transition-all duration-500 ${barColor(config.have, config.total)}`}
style={{ width: `${config.total > 0 ? (config.have / config.total) * 100 : 0}%` }}
/>
</div>
<span className="shrink-0 text-text-muted w-12 text-right">
{config.total > 0 ? Math.round((config.have / config.total) * 100) : 0}%
</span>
</div>
<div className="flex items-center justify-between gap-2">
<span className="font-medium text-text-muted shrink-0">
{t("categoryCli")} {cli.have}/{cli.total}