feat(providers): proveedor agregador CPAMC (CLI Proxy API)
Los mantenedores suelen responder en 1 día
@Rafaeldelinares ya está trabajando en esto.
Desde el 21/10/2026.
Evaluación
Este issue todavía no se ha evaluado.
Descripción
Pre-flight checks
- I searched the existing issues and the roadmap: no duplicates or overlap.
- I understand that this proposal requires product review before implementation.
Problem to solve
Quorb supports aggregators such as 9Router and OpenRouter, but it has no integration with CLIProxyAPI (router-for-me/CLIProxyAPI), the local gateway used to unify, balance and manage access to Gemini, Claude, OpenAI and Vertex AI models without the noise of individual OAuth accounts in every client.
Note on naming: CPAMC is the management Web UI of CLIProxyAPI, not the service itself. This issue originally named the provider cpamc, which was wrong — the provider is named cliproxy below.
Proposed solution
A native cliproxy provider (Kind::Api, like the 9Router aggregator), against the versioned Management API v8 of CLIProxyAPI:
- Endpoints (
Authorization: Bearer <management_key>orX-Management-Key):GET /v8/management/credentials→ per-credential health:status,disabled,unavailable. This is the real health/cooldown signal.GET /v8/management/credentials/models?name=<file-or-id>andGET /v8/management/routing/model-definitions/:channel→ model catalogs per credential and per channel.GET /v8/management/plugins/:id/quota?auth_index=…→ quota figures, only when a quota plugin is installed (a base installation exposes no quota numbers).
- Health is per credential, aggregated per channel: cooldown and degradation live on the credential (
auth_index), while models are grouped by channel. The provider therefore watches credentials and rolls their health up into the channels shown in the widget. - The ring needs numbers, so the provider reports two layers:
- Always: credential health as
UsageReport.status+message(Ok/Warning/Error) — state without figures. - When available: the quota numbers from the plugin endpoint, as
percent/used/limit.
Without a quota plugin the widget must be able to render a state-only meter (status + message, no percentage). That is a small change to the meter rendering and is part of this scope.
- Always: credential health as
- Configuration and UI:
- Parameters:
base_url(defaulthttp://127.0.0.1:8317), the management key in the secure store (secrets::CLIPROXY_MANAGEMENT_KEY), and the credentials/channels to watch. - Section in
Settings.tsxwith a live connection test against a read-only endpoint (GET /v8/management/credentials). - HTTPS is required outside loopback: the management key grants full control of the proxy, so a remote
base_urlover plain HTTP is refused, or explicitly warned about in Settings.
- Parameters:
- Assets and tests:
- Vector SVG logo
cliproxy.svgin the asset catalog. - Rust unit tests over fixtures: healthy credential, credential in cooldown, credential disabled, and the state-only case (no quota plugin).
- Vector SVG logo
Affected area
Application behavior
Scope and non-goals
- Scope: Monitoring the health of the credentials —and, when a quota plugin is present, the quota— of a local or remote CLIProxyAPI instance.
- Non-goals: Mutating the proxy. No
PATCH /credentials/status, noPOST /routing/cooldown/reset, no credential management from Quorb.
Open question
The v8 Management API does not exist in CLIProxyAPI v7: on my own instances /v8/management/credentials returns 404, and only v8 serves it. Should the provider detect the version and degrade to an "unsupported" state, or is v8 a hard requirement?
Alternatives considered
- Adapting the 9Router provider: its auth schemes and endpoints differ significantly.
- Scoping the provider to plugin quota only: it would make the integration useless on a base installation, where no quota figures exist.
- Lenguaje dominante
- TypeScript
- Estrellas
- 10
- Forks
- 2
- Merge medio
- 3 h 54 min
- PR fusionados (30 d)
- 94
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de egdev6/quorb
-
Dificultad 4/5 3-5 días Aptitud para principiantes 38/100
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 57/100
Los mantenedores suelen responder en 1 día
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 30/100
egdev6/quorb#170 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de egdev6/quorb
Issues similares
-
a10y a10y-audit ai-driven-qa claude
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
linagora/twake-directory-manager#219 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día
-
type: bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 79/100
Los mantenedores suelen responder en 1 día
-
0️⃣ phase/new
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 1 día
-
Pulse v7: buildPreferencesFromTelos() bypasses telosSectionOrFile(), renders empty on unified-TELOS installsPosiblemente ocupada @zephyr91 la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
danielmiessler/LifeOS#2393 ·
Los mantenedores suelen responder en 4 días