diff --git a/.env.example b/.env.example index aee4c12a0d..e73f3203f1 100644 --- a/.env.example +++ b/.env.example @@ -737,6 +737,12 @@ NEXT_PUBLIC_CLOUD_URL= ENABLE_SOCKS5_PROXY=true NEXT_PUBLIC_ENABLE_SOCKS5_PROXY=true +# Opt-in feature flag (default off; a dashboard DB override wins over this value): proxy pools +# and per-account rotation stop re-serving a member that just failed (TCP probe refused, or a +# 429 received through it) for a period that doubles on each repeat, up to a cap. No proxy +# status is written. "true" (or 1, yes) enables it; unset keeps plain selection. +# PROXY_SKIP_RECENTLY_FAILED=false + # Standard proxy variables (lowercase variants also supported). # HTTP_PROXY=http://127.0.0.1:7890 # HTTPS_PROXY=http://127.0.0.1:7890 @@ -1686,6 +1692,8 @@ CURSOR_USER_AGENT="Cursor/3.4" # ── TLS client (wreq-js fingerprint proxy) ── # TLS_CLIENT_TIMEOUT_MS=600000 # Inherits from FETCH_TIMEOUT_MS by default # TLS_FIRST_BYTE_WATCHDOG_MS=10000 # #12656: bounds time-to-first-byte on the wreq body (0 disables) +# OPENCODE_RESPONSES_STALL_ROTATION=false # #13484 feature flag (Settings → Feature Flags wins): rotate once when a streamed Responses reply stalls before its first byte +# RESPONSES_FIRST_BYTE_TIMEOUT_MS=15000 # #13484: OpenCode Responses first-byte window, only used when the OPENCODE_RESPONSES_STALL_ROTATION flag is on (0 disables) # ── API Bridge (/v1 proxy server) ── # API_BRIDGE_PROXY_TIMEOUT_MS=600000 # Proxy hop timeout (default: 10min) @@ -2231,6 +2239,11 @@ APP_LOG_TO_FILE=true # proxy — only the operator sets active/inactive (a flaky probe must not strand an # assigned proxy; #6246). Set "true" to restore the legacy test-and-set behaviour. # PROXY_HEALTH_AUTO_DEACTIVATE=false +# Opt-in feature flag (default off; a dashboard DB override wins over this value): show, +# under a proxy pool in the dashboard, how many observed egress IPs served its members over +# the last 24 h and how many connections used them (read-only, computed from the proxy log, +# never used for routing). "true" (or 1, yes) enables it. +# PROXY_POOL_EGRESS_OBSERVATION=false # Allow OAuth and provider validation flows to bypass a pinned proxy and connect # directly when proxy reachability pre-checks fail. Default: false. diff --git a/.gitleaks.toml b/.gitleaks.toml index 86e5f49649..3768394fbe 100644 --- a/.gitleaks.toml +++ b/.gitleaks.toml @@ -97,4 +97,11 @@ # credential; the generic-api-key rule flags the long hyphenated string. '''omniroute-cheaperinference-sponsor-banner-dismissed-v\d+''', '''SunbreakWebUI1''', + # Uzbek dashboard catalog (#13727, src/i18n/messages/uz.json `outputTokenDesc`): + # "Yakunlash/javob tokenlari" = "completion/response tokens". The rule reads the + # `...TokenDesc` key as a token assignment and the translated words as its value. + '''Yakunlash/javob''', + # Feature-flag id from #13439 (src/shared/constants/featureFlagDefinitions.ts): + # `key: "PROTECTED_PRIORITY_INFRA_502_ENABLED"` is a flag name, not a credential. + '''PROTECTED_PRIORITY_INFRA_502_ENABLED''', ] diff --git a/AGENTS.md b/AGENTS.md index 947377b8d1..69e81b7ab3 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -56,7 +56,7 @@ Repository map and Reference Documentation sections below. | Translators | `open-sse/translator/` | Format conversion (OpenAI↔Claude↔Gemini) | | Transformer | `open-sse/transformer/` | Responses API ↔ Chat Completions | | Services | `open-sse/services/` | Combo routing, rate limits, caching, etc | -| Database | `src/lib/db/` | SQLite domain modules (175 migrations) | +| Database | `src/lib/db/` | SQLite domain modules (176 migrations) | | Domain/Policy | `src/domain/` | Policy engine, cost rules, fallback logic | | MCP Server | `open-sse/mcp-server/` | 110 tools (45 canonical + memory/skill/GitHub/pool/gamification/plugin/Notion/Obsidian/local-corpus/RTK modules), 3 transports (stdio / SSE / Streamable HTTP), 33 scopes | | A2A Server | `src/lib/a2a/` | JSON-RPC 2.0 agent protocol | diff --git a/README.md b/README.md index 3208e32b04..edca9ae592 100644 --- a/README.md +++ b/README.md @@ -1268,7 +1268,7 @@ Métricas canônicas em 2026-08-24: **1.029 vídeos únicos** · **11.132.922 vi
>=22.22.2 <23 || >=24.0.0 <27src/ and open-sse/ (zero any in core since v2.0)+ {text} +
+ ); +} diff --git a/src/app/(dashboard)/dashboard/settings/components/ProxyRegistryManager.tsx b/src/app/(dashboard)/dashboard/settings/components/ProxyRegistryManager.tsx index 3af5b91361..2978266e08 100644 --- a/src/app/(dashboard)/dashboard/settings/components/ProxyRegistryManager.tsx +++ b/src/app/(dashboard)/dashboard/settings/components/ProxyRegistryManager.tsx @@ -8,6 +8,7 @@ import { ProxyStatusBadge } from "./ProxyStatusBadge"; import { ProxyHealthCell } from "./ProxyHealthCell"; import { ProxyBatchActions } from "./ProxyBatchActions"; import { ProxyCheckboxCell } from "./ProxyCheckboxCell"; +import { PoolEgressObservation } from "./PoolEgressObservation"; import { parseBulkImportText, type ParsedProxyEntry, @@ -1238,6 +1239,7 @@ import { +