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

@@ -1,7 +1,7 @@
/**
* A2A Skill: List Capabilities
*
* Returns the full catalog of OmniRoute agent skills (22 API + 20 CLI + config)
* Returns the full catalog of OmniRoute agent skills (23 API + 21 CLI + 1 config)
* as a markdown table with raw SKILL.md URLs for orchestrating agents.
*/
@@ -14,7 +14,8 @@ export interface ListCapabilitiesResult {
metadata: {
coverage: {
api: { have: number; total: 23 };
cli: { have: number; total: 20 };
cli: { have: number; total: 21 };
config: { have: number; total: 1 };
};
totalSkills: number;
generatedAt: string;
@@ -47,7 +48,7 @@ export async function executeListCapabilities(_task: A2ATask): Promise<ListCapab
const content = [
`# OmniRoute Agent Skills Catalog`,
``,
`Total: ${catalog.length} skills (${coverage.api.total} API + ${coverage.cli.total} CLI)`,
`Total: ${catalog.length} skills (${coverage.api.total} API + ${coverage.cli.total} CLI + ${coverage.config.total} config)`,
``,
table,
].join("\n");
@@ -62,7 +63,8 @@ export async function executeListCapabilities(_task: A2ATask): Promise<ListCapab
metadata: {
coverage: {
api: { have: coverage.api.have, total: 23 },
cli: { have: coverage.cli.have, total: 20 },
cli: { have: coverage.cli.have, total: 21 },
config: { have: coverage.config.have, total: 1 },
},
totalSkills: catalog.length,
generatedAt: coverage.generatedAt,

View File

@@ -1,5 +1,5 @@
/**
* catalog.ts — single source of truth for the 43-entry Agent Skills catalog.
* catalog.ts — single source of truth for the 45-entry Agent Skills catalog.
*
* Consumers: REST routes (/api/agent-skills/*), MCP tools, A2A skill, Generator.
* Do NOT import this from UI components directly — use the REST API instead.
@@ -16,7 +16,7 @@ import {
// ── Canonical ID lists (D28) ────────────────────────────────────────────────
/** 22 canonical API skill IDs, in spec order. */
/** 23 canonical API skill IDs, in spec order. */
export const API_SKILL_IDS: readonly string[] = [
"omni-auth",
"omni-providers",
@@ -46,7 +46,7 @@ export const API_SKILL_IDS: readonly string[] = [
/** Config skill IDs. */
export const CONFIG_SKILL_IDS: readonly string[] = ["config-codex-cli"] as const;
/** 20 canonical CLI skill IDs, in spec order. */
/** 21 canonical CLI skill IDs, in spec order. */
export const CLI_SKILL_IDS: readonly string[] = [
"cli-serve",
"cli-health",
@@ -94,7 +94,7 @@ function deriveCatalog(): AgentSkill[] {
// ── Public API ───────────────────────────────────────────────────────────────
/**
* Returns the full catalog (43 entries). Cached in module scope after first call.
* Returns the full catalog (45 entries). Cached in module scope after first call.
* Safe to call multiple times — re-derives only after `refreshCatalog()`.
*/
export function getCatalog(): AgentSkill[] {
@@ -110,7 +110,10 @@ export function getSkillById(id: string): AgentSkill | null {
}
/** Filters catalog by category and/or area. */
export function filterCatalog(opts: { category?: "api" | "cli"; area?: string }): AgentSkill[] {
export function filterCatalog(opts: {
category?: "api" | "cli" | "config";
area?: string;
}): AgentSkill[] {
let skills = getCatalog();
if (opts.category) {
skills = skills.filter((s) => s.category === opts.category);
@@ -122,7 +125,7 @@ export function filterCatalog(opts: { category?: "api" | "cli"; area?: string })
}
/**
* Computes coverage stats: filesystem has SKILL.md vs catalog declares 42.
* Computes coverage stats: filesystem has SKILL.md vs the 45-entry catalog.
* Reads `skills/` relative to the project root (CWD).
*/
export function computeCoverage(): SkillCoverage {
@@ -149,8 +152,8 @@ export function computeCoverage(): SkillCoverage {
const configHave = catalog.filter((s) => s.category === "config" && presentIds.has(s.id)).length;
return {
// Totals derive from the id lists — hardcoded 23/20 went stale the first
// time the catalog grew (cli-skill-collector registration, 2026-07-15).
// Totals derive from the canonical id lists so catalog additions cannot
// leave the coverage contract behind.
api: { have: apiHave, total: API_SKILL_IDS.length },
cli: { have: cliHave, total: CLI_SKILL_IDS.length },
config: { have: configHave, total: configTotal },

View File

@@ -1,5 +1,5 @@
/**
* generator.ts — idempotent SKILL.md generator for all 42 agent skills.
* generator.ts — idempotent SKILL.md generator for all 45 agent skills.
*
* Usage (library):
* import { generateAgentSkills, buildSkillMarkdown } from "@/lib/agentSkills/generator";

View File

@@ -1,6 +1,6 @@
import { z } from "zod";
export const SkillCategorySchema = z.enum(["api", "cli"]);
export const SkillCategorySchema = z.enum(["api", "cli", "config"]);
export const AgentSkillSchema = z.object({
id: z.string().regex(/^[a-z][a-z0-9-]*$/),
@@ -19,7 +19,8 @@ export const AgentSkillSchema = z.object({
export const SkillCoverageSchema = z.object({
api: z.object({ have: z.number().int().nonnegative(), total: z.literal(23) }),
cli: z.object({ have: z.number().int().nonnegative(), total: z.literal(20) }),
cli: z.object({ have: z.number().int().nonnegative(), total: z.literal(21) }),
config: z.object({ have: z.number().int().nonnegative(), total: z.literal(1) }),
totalSkills: z.number().int().nonnegative(),
generatedAt: z.string().datetime(),
});

View File

@@ -1,7 +1,7 @@
export type SkillCategory = "api" | "cli" | "config" | "external";
export type SkillArea =
// API areas (22)
// API areas (23)
| "auth"
| "providers"
| "models"
@@ -28,7 +28,7 @@ export type SkillArea =
| "github-skills"
// Config skills
| "config-codex-cli"
// CLI families (20)
// CLI families (21)
| "cli-serve"
| "cli-health"
| "cli-providers"