diff --git a/CHANGELOG.md b/CHANGELOG.md index 031eb1204fe..8c411a245c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,8 @@ - **fix(gemini-web):** a missing Playwright Chromium browser no longer loops and trips the provider breaker — when the browser binary is not installed, `chromium.launch()` threw an error surfaced as a retryable **500**, so accountFallback marked the account unavailable and retry-looped. It is now classified as a host/config problem and returns **503** with an actionable message (`npx playwright install chromium`) and the `X-Omni-Fallback-Hint: connection_cooldown` header, which skips the provider circuit breaker and applies a short non-exponential cooldown. ([#3516](https://github.com/diegosouzapw/OmniRoute/issues/3516)) - **fix(security):** route raw `err.message` through `sanitizeErrorMessage()` in five web executors (`adapta-web`, `deepseek-web`, `perplexity-web`, `qoder`, `veoaifree-web`) and the embeddings + search handlers (Hard Rule #12) — these built error response bodies from the raw upstream/exception message, which could leak internal detail. ([#3494](https://github.com/diegosouzapw/OmniRoute/issues/3494), [#3495](https://github.com/diegosouzapw/OmniRoute/issues/3495)) - **fix(dashboard):** correct two dashboard fetches that hit non-existent routes (404) — `CustomHostsManager` called `/api/tools/traffic-inspector/custom-hosts` (the real route is `/hosts`), and `FeatureFlagsGrid`'s post-restart liveness probe called `/api/health` (the real lightweight endpoint is `/api/health/ping`). ([#3486](https://github.com/diegosouzapw/OmniRoute/issues/3486), [#3487](https://github.com/diegosouzapw/OmniRoute/issues/3487)) +- **chore(providers):** remove the dead `krutrim` registry entry — it was half-registered (present in `providerRegistry.ts` with a baseUrl + one model, but absent from `providers.ts`, with no executor/translator/OAuth), so it was never selectable. Dropped its `ProviderIcon` entry and the `KNOWN_REGISTRY_ONLY` exception. ([#3483](https://github.com/diegosouzapw/OmniRoute/issues/3483)) +- **docs(api):** fix the agent-bridge per-agent state route in `openapi.yaml` and `AGENTBRIDGE.md` — both documented `/api/tools/agent-bridge/agents/{id}/state`, which has no route; corrected to the real per-agent `/api/tools/agent-bridge/agents/{id}` (global state remains `/api/tools/agent-bridge/state`). ([#3489](https://github.com/diegosouzapw/OmniRoute/issues/3489)) --- diff --git a/docs/frameworks/AGENTBRIDGE.md b/docs/frameworks/AGENTBRIDGE.md index 6e11f7d0510..c4656f7bd88 100644 --- a/docs/frameworks/AGENTBRIDGE.md +++ b/docs/frameworks/AGENTBRIDGE.md @@ -367,7 +367,7 @@ Base path: `/api/tools/agent-bridge/` | GET | `/api/tools/agent-bridge/agents` | List all 9 agents with current state | | GET | `/api/tools/agent-bridge/state` | Global server state (running, port, cert info) | | POST | `/api/tools/agent-bridge/server` | Start/stop/restart server (`action: "start"\|"stop"\|"restart"\|"trust-cert"\|"regenerate-cert"`) | -| GET | `/api/tools/agent-bridge/agents/{id}/state` | State of one agent (dns_enabled, cert_trusted, etc.) | +| GET | `/api/tools/agent-bridge/agents/{id}` | State of one agent (dns_enabled, cert_trusted, etc.) | | POST | `/api/tools/agent-bridge/agents/{id}/dns` | Enable/disable DNS for agent (`{enabled: boolean}`) | | GET | `/api/tools/agent-bridge/agents/{id}/mappings` | Model mappings for agent | | PUT | `/api/tools/agent-bridge/agents/{id}/mappings` | Update model mappings | diff --git a/docs/reference/openapi.yaml b/docs/reference/openapi.yaml index d8c5e75a403..ad52734f884 100644 --- a/docs/reference/openapi.yaml +++ b/docs/reference/openapi.yaml @@ -4082,26 +4082,6 @@ paths: "409": description: Port 443 conflict - /api/tools/agent-bridge/agents/{agentId}/state: - get: - tags: [AgentBridge] - summary: Get state of one agent - parameters: - - name: agentId - in: path - required: true - schema: - $ref: "#/components/schemas/AgentId" - responses: - "200": - description: Agent state - content: - application/json: - schema: - $ref: "#/components/schemas/AgentBridgeAgentState" - "404": - description: Unknown agent ID - /api/tools/agent-bridge/agents/{agentId}/dns: post: tags: [AgentBridge] diff --git a/open-sse/config/providerRegistry.ts b/open-sse/config/providerRegistry.ts index ea31fc01ded..4638eda889d 100644 --- a/open-sse/config/providerRegistry.ts +++ b/open-sse/config/providerRegistry.ts @@ -2486,17 +2486,6 @@ const _REGISTRY_EAGER: Record = { models: [{ id: "auto", name: "Auto" }], }, - krutrim: { - id: "krutrim", - alias: "krutrim", - format: "openai", - executor: "default", - baseUrl: "https://api.krutrim.com/v1/chat/completions", - authType: "apikey", - authHeader: "bearer", - models: [{ id: "krutrim-2-7b-instruct", name: "Krutrim 2 7B" }], - }, - liquid: { id: "liquid", alias: "liquid", diff --git a/scripts/check/check-docs-symbols.mjs b/scripts/check/check-docs-symbols.mjs index 3ba0a6c8417..e1ae41f3c9f 100644 --- a/scripts/check/check-docs-symbols.mjs +++ b/scripts/check/check-docs-symbols.mjs @@ -79,9 +79,6 @@ export const KNOWN_STALE_DOC_REFS = new Set([ "/api/discovery/results/:id", "/api/discovery/scan", "/api/discovery/verify/:id", - // docs/frameworks/AGENTBRIDGE.md — state POR-AGENTE; rota real é o /state GLOBAL - // (mesmo drift congelado em check-openapi-routes.mjs::KNOWN_STALE_SPEC): - "/api/tools/agent-bridge/agents/{id}/state", // docs/reference/ENVIRONMENT.md — endpoint UPSTREAM do provedor Blackbox Web, // citado na descrição de env var (não é rota do OmniRoute): "/api/chat", diff --git a/scripts/check/check-openapi-routes.mjs b/scripts/check/check-openapi-routes.mjs index 398c00785ee..d91673602b0 100644 --- a/scripts/check/check-openapi-routes.mjs +++ b/scripts/check/check-openapi-routes.mjs @@ -17,8 +17,6 @@ const OPENAPI_PATH = path.join(ROOT, "docs", "reference", "openapi.yaml"); const KNOWN_STALE_SPEC = new Set([ // openapi.yaml documenta um state por-agente, mas a rota real é o state GLOBAL // (/api/tools/agent-bridge/state); por-agente só há /{id}, /{id}/detect, /mappings, /dns. - // Triagem: corrigir a spec para /state ou criar a rota. (pré-existente) - "/api/tools/agent-bridge/agents/{agentId}/state", ]); /** Normaliza qualquer {param} para {} para casar independente do nome do parâmetro. */ diff --git a/scripts/check/check-provider-consistency.ts b/scripts/check/check-provider-consistency.ts index ab086438159..e44a2ea33c7 100644 --- a/scripts/check/check-provider-consistency.ts +++ b/scripts/check/check-provider-consistency.ts @@ -11,10 +11,7 @@ import { REGISTRY } from "@omniroute/open-sse/config/providerRegistry.ts"; // Entradas registry-only conhecidas (meia-registro pré-existente). Cada uma com // justificativa. Remover daqui ao registrar o provider em providers.ts. -export const KNOWN_REGISTRY_ONLY: Record = { - krutrim: - "Registry-only (baseUrl + krutrim-2-7b-instruct presentes) mas ausente de providers.ts — meia-registro pré-existente; triar em follow-up (registrar em APIKEY_PROVIDERS ou remover a entrada).", -}; +export const KNOWN_REGISTRY_ONLY: Record = {}; /** Ids do REGISTRY que não são providers canônicos e não estão na allowlist. */ export function findOrphanRegistryIds( diff --git a/src/shared/components/ProviderIcon.tsx b/src/shared/components/ProviderIcon.tsx index 60cb9bb5e36..65b846b7f84 100644 --- a/src/shared/components/ProviderIcon.tsx +++ b/src/shared/components/ProviderIcon.tsx @@ -84,7 +84,6 @@ const KNOWN_SVGS = new Set([ "sparkdesk", "arcee-ai", "inclusionai", - "krutrim", "liquid", "monsterapi", "nomic",