Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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))

---

Expand Down
2 changes: 1 addition & 1 deletion docs/frameworks/AGENTBRIDGE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 |
Expand Down
20 changes: 0 additions & 20 deletions docs/reference/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down
11 changes: 0 additions & 11 deletions open-sse/config/providerRegistry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2486,17 +2486,6 @@ const _REGISTRY_EAGER: Record<string, RegistryEntry> = {
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",
Expand Down
3 changes: 0 additions & 3 deletions scripts/check/check-docs-symbols.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
2 changes: 0 additions & 2 deletions scripts/check/check-openapi-routes.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -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. */
Expand Down
5 changes: 1 addition & 4 deletions scripts/check/check-provider-consistency.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<string, string> = {
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<string, string> = {};

/** Ids do REGISTRY que não são providers canônicos e não estão na allowlist. */
export function findOrphanRegistryIds(
Expand Down
1 change: 0 additions & 1 deletion src/shared/components/ProviderIcon.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,6 @@ const KNOWN_SVGS = new Set([
"sparkdesk",
"arcee-ai",
"inclusionai",
"krutrim",
"liquid",
"monsterapi",
"nomic",
Expand Down