mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-15 03:32:21 +03:00
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:
committed by
GitHub
parent
f6ccd3cf9f
commit
ecc89eef14
@@ -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,
|
||||
|
||||
@@ -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 },
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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(),
|
||||
});
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user