* feat(docs): mirror every docs/ page in all 65 locales Extends the documentation mirrors from the 22-page core set (#13940) to every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors (6,208 new), language bars rewritten for the full locale list, state adopted so the blocking drift gate now covers all 152 pages. run-translation.mjs: an oversized block made only of table rows or list items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is cut at item boundaries and rejoined without a blank line — the single 16-40 KB request outlived the backend socket for verbose scripts. 48 older mirrors whose tables had lost rows were retranslated with --force. * docs(i18n): refresh mirrors for the sources the base changed since the branch cut Section-level retranslation of the 29 docs (and README.md) whose source or mirrors moved on release/v3.8.51 during the run, then state adoption; the drift gate is green again on the merged tree.
597 KiB
Environment Variables Reference (한국어)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
OmniRoute에서 인식하는 모든 환경 변수에 대한 전체 참조 문서입니다. 빠른 시작 템플릿은
.env.example을 참조하세요.
Important
여기에 문서화된 모든 변수는
.env.example에도 있어야 하며,.env.example의 모든 변수도 여기에 있어야 합니다.npm run check:env-doc-sync는 커밋 및 CI에서 이를 강제합니다. 특정 변수를 의도적으로 제외하려면scripts/check/check-env-doc-sync.mjs내부의 허용 목록에 추가하세요.
목차
- 1. 필수 비밀 정보
- 2. 스토리지 및 데이터베이스
- 3. 네트워크 및 포트
- 4. 보안 및 인증
- 5. 입력 정제 및 PII 보호
- 6. 도구 및 라우팅 정책
- 7. URL 및 클라우드 동기화
- 8. 아웃바운드 프록시
- 9. CLI 도구 통합
- 10. 내부 에이전트 및 MCP 통합
- 11. OAuth 공급자 자격 증명
- 12. 공급자 User-Agent 재정의
- 13. CLI 핑거프린트 호환성
- 14. API 키 공급자
- 15. 시간 제한 설정
- 16. 로깅
- 17. 메모리 최적화
- 18. 가격 동기화
- 19. 모델 동기화(개발)
- 20. 공급자별 설정
- 21. 프록시 상태
- 22. 디버깅
- 23. GitHub 통합
- 24. Skills 샌드박스(v3.8.0+)
- 27. Radar 피드(자체 호스팅)
- 배포 시나리오
- 감사: 제거된 변수 / 사용되지 않는 변수
1. 필수 비밀 정보
이 값들은 처음 실행하기 전에 반드시 설정해야 합니다. 설정하지 않으면 애플리케이션이 시작을 거부하거나 안전하지 않은 기본값으로 작동합니다.
| 변수 | 필수 여부 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|---|
JWT_SECRET |
예 | (없음) | src/lib/auth |
모든 대시보드 세션 쿠키(JWT)를 서명/검증합니다. openssl rand -base64 48로 생성하세요. |
API_KEY_SECRET |
예 | (없음) | src/lib/db/apiKeys.ts |
SQLite에 저장된 API 키 값을 보호하기 위한 AES 암호화 키입니다. openssl rand -hex 32로 생성하세요. |
INITIAL_PASSWORD |
예 | CHANGEME |
부트스트랩 스크립트 | 초기 관리자 대시보드 비밀번호를 설정합니다(.env.example의 기본값과 동일하며, 변경을 유도하기 위해 의도적으로 안전하지 않은 값으로 유지됩니다). 처음 사용하기 전에 변경하세요. 로그인한 후 대시보드 → 설정 → 보안에서 변경할 수 있습니다. |
OMNIROUTE_WS_BRIDGE_SECRET |
예 (프로덕션) | (설정되지 않음) | src/app/api/internal/codex-responses-ws/route.ts |
내부 Codex Responses WebSocket 브리지용 공유 비밀 값입니다. Electron/브라우저 WS 릴레이와 OmniRoute 간의 브리지 요청을 인증합니다. ⚠️ 프로덕션 환경에서는 필수입니다. 설정하지 않으면 모든 WS 브리지 요청이 거부됩니다. openssl rand -base64 32로 생성하세요. |
OMNIROUTE_SW_BUILD_ID |
아니요 | (git SHA) | next.config.mjs, scripts/build/assembleStandalone.mjs |
PWA 셸(#11779)의 서비스 워커 캐시 무효화를 위한 명시적 ID이며, 확인 순서에서 가장 먼저 사용됩니다. |
SOURCE_VERSION |
아니요 | (설정되지 않음) | next.config.mjs, scripts/build/assembleStandalone.mjs |
확인 순서의 두 번째 값으로, PaaS 빌더(예: Heroku 방식)가 배포된 커밋으로 설정합니다. |
NEXT_PUBLIC_SW_BUILD_ID |
아니요 | (파생됨) | src/shared/components/PwaRegister.tsx |
클라이언트가 /sw.js?v=…를 등록하는 데 사용하는 빌드 시점의 공개 값입니다. 위의 두 값에서 파생되며, 그다음으로 git SHA를 사용합니다. |
OMNIROUTE_PEER_STAMP_TOKEN |
아니요 (자동) | (부팅마다 자동) | src/server/authz/policies/management.ts |
신뢰할 수 있는 피어 IP 스탬프가 OmniRoute 자체 HTTP 서버(scripts/dev/peer-stamp.mjs)에서 생성되었음을 증명하는 프로세스별 비밀 값입니다. authz 미들웨어는 스탬프에 이 토큰이 포함된 경우에만 요청의 로컬성(LOCAL_ONLY 경로에 대한 루프백/LAN 제한)을 신뢰합니다. 부팅할 때마다 자동으로 생성되므로 설정하지 마세요. 스탬프를 공유해야 하는 다중 프로세스 구성에서만 값을 고정하세요. |
생성 명령어
# 네 개의 비밀 값을 한 번에 생성:
echo "JWT_SECRET=$(openssl rand -base64 48)"
echo "API_KEY_SECRET=$(openssl rand -hex 32)"
echo "INITIAL_PASSWORD=$(openssl rand -base64 16)"
echo "OMNIROUTE_WS_BRIDGE_SECRET=$(openssl rand -base64 32)"
Caution
실제 비밀 값이 포함된
.env파일을 버전 관리 시스템에 절대로 커밋하지 마세요..gitignore에서 이미.env를 제외하고 있지만, 푸시하기 전에 확인하세요.
2. 스토리지 및 데이터베이스
OmniRoute는 모든 영속성 데이터에 SQLite(better-sqlite3을 통해)를 사용합니다. 다음 변수는 데이터 위치, 암호화 및 수명 주기를 제어합니다.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
DATA_DIR |
~/.omniroute/ |
src/lib/db/core.ts |
SQLite DB, 백업 및 데이터 파일의 루트 디렉터리입니다. Docker 볼륨 또는 사용자 지정 경로를 사용하려면 재정의하세요. |
OMNIROUTE_ALLOW_DEFAULT_DATA_DIR |
(설정되지 않음) | src/lib/dataPaths.ts |
테스트/평가용 DATA_DIR 보호 장치의 우회 옵션입니다(#10428). DATA_DIR이 없는 테스트 및 Node 평가/출력 프로브(-e/--eval/-p/--print, --eval=/--print= 형식 포함)는 운영자의 실제 데이터베이스를 열 수 없도록 일회용 임시 디렉터리로 리디렉션됩니다. 실제 디렉터리를 다시 사용하도록 허용하려면 1로 설정하세요. |
OMNIROUTE_BUILD_SHA |
(설정되지 않음) | src/lib/monitoring/buildSha.ts |
실행 중인 아티팩트의 Git SHA입니다. npm run build:release에 의해 기록되며, dist/BUILD_SHA 센티널 없이 배포되는 컨테이너에 주입할 수 있습니다. /api/monitoring/health에서 system.buildSha로 노출됩니다. |
OMNIROUTE_RELEASE_REF |
origin/main |
scripts/build/buildProvenance.ts |
패키징 아티팩트 출처 검증 게이트가 빌드 SHA와 대조하는 참조입니다(#10427). |
OMNIROUTE_ALLOW_CANARY_BUILD |
(설정되지 않음) | scripts/build/buildProvenance.ts |
SHA가 릴리스 라인에 없는 빌드의 패키징을 허용하려면 1로 설정합니다. 이 경우 게이트를 실패시키는 대신 의도적인 카나리로 기록합니다(#10427). |
OMNIROUTE_SMOKE_API_KEY |
(설정되지 않음) | scripts/ops/deploy-canary.mjs |
카나리 배포 스모크 프로브용 API 키로, /v1/chat/completions에 Authorization: Bearer로 전송됩니다. 배포 스크립트에서만 사용되며(#10429), 서버에서는 절대 사용되지 않습니다. 명시적으로 활성화하는 CLI 스모크 하네스의 OMNIROUTE_SMOKE_* 변수(tests/integration/upstream-cli-smoke.int.test.ts의 RUN_CLI_SMOKE=1, OMNIROUTE_SMOKE_BASE_URL/MODEL/API_KEY_ENV/TARGETS/TIMEOUT_MS)와는 관련이 없습니다. CLI 통합 → 실제 스모크 스윕을 참조하세요. |
OMNIROUTE_BUILDING |
(설정되지 않음) | src/lib/buildPhase.ts |
빌드 단계 신호입니다(#10060). scripts/build/build-next-isolated.mjs에 의해 1로 설정되고 생성된 모든 빌드 워커에 상속되므로, DB 계층은 종료 시 워커를 중단시키는 네이티브 better-sqlite3 애드온을 로드하는 대신 아무 작업도 하지 않는 스텁을 반환합니다. 실행 중인 서버에는 절대 설정되지 않습니다. |
OMNIROUTE_SKIP_NATIVE_DEP_CHECK |
0 |
scripts/check/check-native-deps.mjs |
특수한 벤더링 트리에 대한 선택적 네이티브 종속성 사전 빌드 검사를 건너뛰려면 1로 설정합니다. 이 설정으로 누락된 종속성을 빌드 가능하게 만들 수는 없습니다. 네이티브 종속성이 별도로 제공되는 경우에만 사용하세요. |
OMNIROUTE_DATA_DIR |
(설정되지 않음) | open-sse/executors/promptql/threadSticky.ts |
DATA_DIR의 대체 별칭으로, DATA_DIR이 설정되지 않은 경우에만 확인됩니다. PromptQL 실행기의 디스크 기반 스레드 고정 세션 캐시(<dir>/promptql-thread-sessions.json) 위치를 찾는 데 사용됩니다. 두 변수 모두 설정되지 않으면 캐시는 메모리에만 유지되며 재시작 후에는 보존되지 않습니다. |
OMNIROUTE_PLUGINS_DIR |
(설정되지 않음) | src/lib/plugins/scanner.ts |
런타임 플러그인 스캐너가 읽고 플러그인 관리자가 설치 대상으로 사용하는 루트 디렉터리로, 홈에서 파생되는 기본값을 재정의합니다(#11827). 스캔 경로만 재배치하기 위해 HOME을 변경하는 대신 Docker/K8s에서 바인드 마운트된 플러그인 트리를 지정하세요. HOME은 홈 기준의 다른 모든 동작에도 영향을 줍니다. 설정하지 않으면 ~/.omniroute/plugins이며, 프로세스가 홈을 전혀 내보내지 않는 경우에는 /tmp/.omniroute/plugins입니다. 이 변수는 플러그인이 발견되지 않아도 아무런 알림이 없던 문제를 방지합니다. 결정된 디렉터리는 시작 시 적용된 입력과 함께 scanner.dir_resolved로 한 번 기록됩니다. 서버 측 전용입니다. CLI 명령 플러그인은 자체 OMNIROUTE_PLUGIN_PATH(섹션 9)를 계속 사용합니다. |
STORAGE_ENCRYPTION_KEY |
(비어 있음 = 비활성화) | src/lib/db/encryption.ts |
저장된 전체 SQLite 데이터베이스를 암호화하기 위한 AES 키입니다. openssl rand -hex 32로 생성합니다. |
STORAGE_ENCRYPTION_KEY_VERSION |
v1 |
scripts/build/bootstrap-env.mjs, electron/main.js |
암호화 키의 버전 레이블입니다. 이전 백업의 복호화를 지원하려면 키 교체 시 값을 증가시키세요. |
DISABLE_SQLITE_AUTO_BACKUP |
false |
src/lib/db/backup.ts |
true이면 정기/쓰기 전 SQLite 파일 백업(models.dev 가격 저장/삭제, 설정 쓰기)을 건너뜁니다. 수동 백업과 복원 전 백업은 계속 실행됩니다. 마이그레이션 실행기의 필수 영구 안전 스냅샷이나 기존 영구 DB에 대한 대규모 마이그레이션 보호 기능은 비활성화하지 않습니다. 비수동 백업은 최대 60분에 한 번으로 제한됩니다. 대시보드의 설정 → 스토리지에서 정기 자동 백업을 별도로 비활성화할 수 있습니다. |
OMNIROUTE_CRYPT_KEY |
(설정되지 않음) | src/lib/db/encryption.ts |
STORAGE_ENCRYPTION_KEY의 레거시 별칭입니다. 기본 변수가 없을 때 대체 값으로 사용됩니다. |
OMNIROUTE_API_KEY_BASE64 |
(설정되지 않음) | src/lib/db/encryption.ts |
대체 값으로 사용할 수 있는 레거시 별칭(Base64 인코딩 형식)입니다. 사용 전에 자동으로 디코딩됩니다. |
OMNIROUTE_DB_HEALTHCHECK_INTERVAL_MS |
(설정되지 않음) | src/lib/db/core.ts |
주기적인 SQLite 상태 확인 간격(ms)을 재정의합니다. 설정하지 않으면 NODE_ENV에서 기본값을 가져옵니다. |
OMNIROUTE_WAL_TRUNCATE_INTERVAL_MS |
21600000 (6시간) |
src/lib/db/walMaintenance.ts |
주기적인 wal_checkpoint(TRUNCATE) 간격(ms)을 재정의합니다. 자동 체크포인트는 WAL 파일 자체의 크기를 줄이지 않으며, 장기 실행 서버는 DB를 닫지 않습니다. 0이면 비활성화됩니다. |
OMNIROUTE_WAL_PASSIVE_INTERVAL_MS |
300000 (5분) |
src/lib/db/walMaintenance.ts |
자주 실행되는 wal_checkpoint(PASSIVE) 간격(ms)을 재정의합니다. 보류 중인 WAL 프레임을 작게 유지하여 주기적인 TRUNCATE가 메인 스레드에서 수 GB에 달하는 백로그를 복사하지 않도록 합니다. 0이면 비활성화됩니다. |
OMNIROUTE_WAL_GUARD_MAX_MB |
256 |
src/lib/db/walMaintenance.ts |
PASSIVE 실행 시 WAL 파일이 이 크기를 초과하면 느린 주기의 실행을 기다리지 않고 즉시 wal_checkpoint(TRUNCATE)로 전환합니다. |
OMNIROUTE_PRESSURE_SELF_RESTART |
false |
open-sse/utils/resourcePressure.ts |
심각한 리소스 압박이 OMNIROUTE_PRESSURE_SELF_RESTART_AFTER_MS 동안 지속된 후 프로세스를 종료하려면 1/true/yes/on으로 설정합니다. 그러면 503 응답을 무기한 제공하는 대신 감독자(systemd Restart=always, Docker 재시작 정책)가 깨끗한 프로세스를 다시 실행할 수 있습니다. |
OMNIROUTE_PRESSURE_SELF_RESTART_AFTER_MS |
120000 (2분) |
open-sse/utils/resourcePressure.ts |
자체 재시작을 위한 종료가 실행되기 전까지 심각한 압박이 지속되어야 하는 시간입니다. |
OMNIROUTE_SQLJS_WASM_PATH |
(자동 감지) | src/lib/db/adapters/sqljsAdapter.ts |
sql.js WASM 대체 어댑터를 사용할 때 sql-wasm.wasm의 명시적 경로(cwd 기준 절대 경로 또는 상대 경로)입니다. 설정하지 않으면 패키지 종속성과 후보 레이아웃을 통해 자동으로 감지됩니다. |
OMNIROUTE_WAL_TRUNCATE_INTERVAL_MS |
21600000 (6시간) |
src/lib/db/core.ts |
주기적인 wal_checkpoint(TRUNCATE) 간격(ms)을 재정의합니다. 자동 체크포인트는 WAL 파일 자체의 크기를 줄이지 않으며, 장기 실행 서버는 DB를 닫지 않습니다. 0이면 비활성화됩니다. |
OMNIROUTE_BATCH_RETENTION_DAYS |
30 |
src/lib/db/cleanup.ts |
자동 정리 작업으로 삭제되기 전까지 종료된(완료/실패/취소/만료) Batch API 작업의 체크포인트, 참조된 입력/출력/오류 파일 및 행을 보관하는 일수입니다. BATCH_AND_FILE_AUTO_CLEANUP_ENABLED가 활성화된 후에만 적용되며, OpenAI 자체의 Batch API 출력 보존 기간과 일치합니다. 운영자가 실행하는 DELETE /api/v1/batches/delete-completed 경로에는 영향을 주지 않으며, 이 경로는 설계상 조건 없이 유지됩니다(기간 필터 없음). |
BATCH_AND_FILE_AUTO_CLEANUP_ENABLED |
false |
src/lib/db/cleanup.ts |
true이면 자동 정리 작업이 OMNIROUTE_BATCH_RETENTION_DAYS를 초과한 종료 상태의 Batch API 작업(및 해당 체크포인트)을 삭제하고, 자체 expires_at을 초과한 업로드 파일의 BLOB 콘텐츠를 지우도록 합니다. 기본값은 꺼짐입니다. 운영자가 명시적으로 활성화하기 전까지 기존의 모든 설치 환경에서는 이 데이터를 이전과 동일하게 유지합니다. 대시보드에서 편집할 수 있는 기능 플래그이기도 합니다. docs/reference/FEATURE_FLAGS.md → 런타임을 참조하세요. |
OMNIROUTE_SKIP_DB_HEALTHCHECK |
0 |
src/lib/db/core.ts, src/lib/db/healthCheck.ts |
시작 시 DB 상태 검사를 완전히 건너뛰려면 1로 설정합니다. 단기 실행 작업 및 통합 테스트에 유용합니다. |
OMNIROUTE_FORCE_DB_HEALTHCHECK |
0 |
src/lib/db/core.ts |
일반적으로 건너뛰는 경우(예: 단기 실행 작업)에도 DB 상태 검사 루프를 강제로 활성화하려면 1로 설정합니다. |
OMNIROUTE_SKIP_POSTINSTALL |
0 |
scripts/postinstall.mjs |
npm install 중 네이티브 런타임 워밍업을 건너뛰려면 1로 설정합니다. sqlite가 이미 빌드된 CI/헤드리스 설치 환경에서 유용합니다. |
OMNIROUTE_MIGRATIONS_DIR |
(자동 감지) | src/lib/db/migrationRunner.ts |
마이그레이션 실행기가 검색하는 디렉터리를 재정의합니다. 사용자 지정 빌드에 번들된 마이그레이션을 포함하여 배포할 때 유용합니다. |
OMNIROUTE_EXTRA_MIGRATIONS_DIRS |
(설정되지 않음) | src/lib/db/migrationRunner/extraDirs.ts |
플랫폼 경로 구분자로 구분된 namespace=dir 항목 형식의 추가 마이그레이션 디렉터리입니다(예: ee=/opt/app/enterprise/db/migrations). 해당 위치에서 발견된 파일은 <namespace>-<number> 형식으로 기록되므로, 자체 마이그레이션을 포함하여 배포해도 업스트림 숫자 슬롯과 충돌하지 않습니다. 형식이 잘못된 항목, 유효하지 않은 네임스페이스 또는 존재하지 않는 디렉터리가 있으면 스키마를 조용히 건너뛰는 대신 시작 시 오류가 발생합니다. |
OMNIROUTE_MAX_PENDING_MIGRATIONS |
50 |
src/lib/db/migrationRunner.ts |
대량 보류 마이그레이션 안전 임계값입니다(#3416). 기존 DB에서 이 수보다 많은 마이그레이션이 보류 중이면 시작이 중단됩니다(추적 테이블이 삭제된 경우를 방지). 이전 백업을 복원하려면 값을 높이고, 검사를 비활성화하려면 0으로 설정합니다. |
OMNIROUTE_INSTALL_UPGRADE_WORKDIR |
(<repo>/.install-upgrade) |
scripts/check/check-install-upgrade.mjs |
check:install-upgrade 릴리스 게이트의 작업 디렉터리입니다. 약 12GB(각각 약 3GB인 설치 트리 두 개와 tarball)가 필요하므로 작은 tmpfs에서 실행하면 안 됩니다. 자체 호스팅 러너에서 /tmp는 RAM 기반 12GB tmpfs이며, 게이트가 이를 소진하여 패키지가 잘렸습니다. |
OMNIROUTE_SPEND_FLUSH_INTERVAL_MS |
(코드 내 기본값) | src/lib/spend/batchWriter.ts |
일괄 처리된 지출/비용 기록기의 플러시 간격(ms)입니다. 값이 낮을수록 쓰기 병합이 줄어들고, 값이 높을수록 DB 경합이 줄어듭니다. |
OMNIROUTE_SPEND_MAX_BUFFER_SIZE |
(코드 내 기본값) | src/lib/spend/batchWriter.ts |
강제 플러시 전까지 버퍼링할 수 있는 최대 지출 항목 수입니다. QPS가 높은 배포 환경에서는 값을 높이고, 제한된 메모리가 더 중요한 경우에는 낮춥니다. |
OMNIROUTE_PROXY_FETCH_DEBUG |
(설정되지 않음) | open-sse/utils/proxyFetch.ts |
Vercel 릴레이 경로에서 [ProxyFetch] 디버그 로그를 출력하려면 "true"로 설정합니다. 라우팅 힌트 유출을 방지하기 위해 기본값은 꺼짐입니다. |
PROXY_LOG_INCLUDE_IPS |
false |
src/lib/proxyLogger.ts |
상세 [ProxyEgress] 프로세스 로그 줄에 클라이언트/송신 IP 및 계정 접두사를 포함하려면 "true" 또는 "1"로 설정합니다. 프로세스 로그에서 IP 또는 계정 접두사가 유출되지 않도록 기본값은 꺼짐으로 유지됩니다. |
OMNIROUTE_DEBUG |
(설정되지 않음) | bin/cli/commands/quota.mjs |
CLI 할당량 명령이 요청별 타이밍 진단 정보([omniroute] GET <path> completed in Nms)를 stderr에 출력하도록 하려면 1로 설정합니다. |
OMNIROUTE_HEALTHCHECK_PATH |
(자동) | scripts/dev/healthcheck.mjs |
컨테이너 상태 검사가 명시적으로 탐색할 경로입니다. 설정하지 않으면 프로브가 OMNIROUTE_BASE_PATH에서 경로를 파생하며, 설정하면 심층 모니터링 엔드포인트를 다시 사용합니다. |
OMNIROUTE_DEBUG_COMPLETION |
(설정되지 않음) | bin/cli/commands/completion.mjs |
비어 있지 않은 임의의 값으로 설정하면 CLI 셸 자동 완성 캐시 경로(읽기/새로 고침/쓰기)에서 [omniroute completion] 진단 정보를 출력합니다. 기본값은 꺼짐입니다. 캐시가 없어지거나 손상되어도 탭 자동 완성이 중단되지 않도록 해당 캐시는 오류를 표시하지 않고 실패합니다. |
BATCH_RETRY_DURATION_MS |
86400000 (24시간) |
open-sse/services/batchProcessor.ts |
개별 배치 항목의 최대 재시도 기간(ms)입니다. 이 기간을 초과한 항목은 실패로 표시됩니다. |
BATCH_BACKOFF_BASE_MS |
5000 |
open-sse/services/batchProcessor.ts |
배치 항목 재시도 시 지수 백오프의 기본 지연 시간(ms)입니다. |
BATCH_BACKOFF_MAX_MS |
3600000 (1시간) |
open-sse/services/batchProcessor.ts |
배치 항목 재시도 간 지수 백오프의 상한(ms)입니다. |
BATCH_MAX_CONCURRENT |
1 |
open-sse/services/batchProcessor.ts |
동시에 처리되는 최대 배치 수입니다. 처리량을 높이려면 값을 늘리되, 속도 제한이 연쇄적으로 발생하지 않도록 낮게 유지하세요. |
Important
기존 영구 데이터베이스를 변경하기 전에 마이그레이션 실행기가 완전한 콘텐츠 주소 지정 스냅샷을
DATA_DIR/db_backups/아래에 게시합니다. 게시하려면 동일한 파일 시스템 내에서 덮어쓰기 없는 하드 링크와 영구적인 파일 동기화를 지원하는 파일 시스템이 필요합니다. POSIX 호스트에서는 디렉터리 동기화도 필요합니다. Windows에서는 Node가 디렉터리 핸들을 거부할 수 있으므로 OmniRoute는 게시된 파일을 플러시하고 디렉터리 항목 동기화를 최선형으로 처리합니다. 마운트된DATA_DIR에서 이러한 보장을 제공할 수 없는 경우, 마이그레이션을 적용하기 전에 시작이 안전하게 실패합니다.DATA_DIR을 이러한 기본 기능을 갖춘 볼륨으로 이동하세요. 마이그레이션 안전성을 우회하기 위해DISABLE_SQLITE_AUTO_BACKUP을 사용하지 마세요.
시나리오
| 시나리오 | 구성 |
|---|---|
| 로컬 개발 | 모든 기본값을 그대로 사용합니다. DB는 ~/.omniroute/omniroute.db에 저장됩니다. |
| Docker | DATA_DIR=/data로 설정하고 /data에 볼륨을 마운트합니다. |
| 저장 데이터 암호화 | STORAGE_ENCRYPTION_KEY를 설정하고 키를 반드시 백업하세요! 키 분실 = 데이터 분실입니다. |
| CI/테스트 | DATA_DIR=/tmp/omniroute-test — 임시 저장소이므로 암호화가 필요하지 않습니다. |
3. 네트워크 및 포트
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
PORT |
20128 |
src/lib/runtime/ports.ts |
Dashboard UI와 API 엔드포인트 모두에 사용되는 기본 포트입니다(단일 포트 모드). |
OMNIROUTE_BASE_PATH |
(비어 있음 = 루트) | next.config.mjs, scripts/docker/ensure-docker-base-path.mjs |
리버스 프록시 뒤에서 OmniRoute를 제공하기 위한 URL 하위 경로입니다(Next.js basePath를 설정하며, 인증 리디렉션은 basePath를 인식합니다). 예: /omniroute. Docker에서는 docker build 중에 값이 포함됩니다(ARG OMNIROUTE_BASE_PATH). 사전 빌드된 루트 이미지는 Next.js가 시작되기 전 컨테이너 시작 시 다른 런타임 값을 한 번 적용할 수 있습니다. 동일한 하위 경로를 포함한 공개 오리진으로 NEXT_PUBLIC_BASE_URL을 설정하세요. |
NEXT_PUBLIC_OMNIROUTE_BASE_PATH |
(비어 있음 = 루트) | src/shared/hooks/useDisplayBaseUrl.ts |
OMNIROUTE_BASE_PATH의 브라우저 표시용 미러로, 빌드 시 인라인되어 대시보드 엔드포인트 표시에 https://host/v1 대신 https://host/omniroute/v1이 표시되도록 합니다. 설정되지 않은 경우 OMNIROUTE_BASE_PATH를 사용합니다. 변경 후 다시 빌드하세요(Next basePath는 빌드 시점에 결정됩니다). |
DASHBOARD_ALLOW_EMBED |
(설정되지 않음 = 프레임 불가) | next.config.mjs, scripts/build/dashboardEmbed.mjs |
HTML 페이지의 iframe 임베딩을 선택적으로 허용합니다. 설정하지 않으면 모든 경로에 frame-ancestors 'none' + X-Frame-Options: DENY가 적용됩니다. vscode로 설정하면 frame-ancestors 'self' vscode-webview:를 적용하고 X-Frame-Options 없이 페이지(대시보드, 로그인, 문서, 랜딩 페이지)를 제공하므로, VS Code Simple Browser에서 렌더링할 수 있습니다(OmniCopilot의 dashboardOpen: "editor" 모드). API 영역(/api, /v1, /v1beta, /a2a, /healthz, 루트 수준 별칭)은 설정과 관계없이 엄격한 헤더를 유지합니다. vscode만 인식되며, 1/true로는 활성화되지 않습니다. 빌드 시점 설정이므로 변경 후 다시 빌드하세요(이미지는 docker build --build-arg DASHBOARD_ALLOW_EMBED=vscode 사용. 사전 빌드된 설치에 설정해도 효과가 없습니다). |
API_PORT |
(설정되지 않음) | src/lib/runtime/ports.ts |
설정하면 /v1/* 프록시 API를 이 별도 포트에서 제공합니다. |
API_HOST |
0.0.0.0 |
src/lib/runtime/ports.ts |
API 포트의 바인딩 주소입니다. |
DASHBOARD_PORT |
(설정되지 않음) | src/lib/runtime/ports.ts |
설정하면 Dashboard UI를 이 별도 포트에서 제공합니다. |
OMNI_MAX_CONCURRENT_CONNECTIONS |
0 (비활성화됨) |
src/sse/utils/backpressure.ts |
동시에 처리 중인 채팅 연결 수를 제한합니다. 제한을 초과한 요청에는 Retry-After와 함께 503을 반환합니다. 양의 정수로 설정하면 제한이 활성화되며, 설정하지 않거나 0으로 설정하면 비활성화됩니다. |
OMNIROUTE_INSTANCE_ID |
(설정되지 않음) | src/shared/resilience/peerRouting.ts |
OmniRoute 인스턴스를 연결할 때 이 게이트웨이에 사용하는 안정적이고 고유한 ID입니다. 인바운드 피어 루프 검사를 활성화합니다. 허용되는 문자: 문자, 숫자, ., _, :, -. 최대 64자입니다. |
OMNIROUTE_PEER_URLS |
(설정되지 않음) | src/shared/resilience/peerRouting.ts, open-sse/executors/base.ts |
X-OmniRoute-Peer-Trace를 수신할 수 있는 쉼표로 구분된 OmniRoute 기본 URL입니다. 명시적으로 허용 목록에 추가된 업스트림 URL만 피어 메타데이터를 수신하며, 다른 모든 제공자는 영향을 받지 않습니다. |
OMNIROUTE_PEER_MAX_HOPS |
4 |
src/shared/resilience/peerRouting.ts |
연쇄 요청에서 허용되는 이전에 방문한 OmniRoute 인스턴스의 최대 개수입니다(1-32). 인스턴스가 반복되거나 허용 횟수를 모두 소진하면 HTTP 508 Loop Detected가 반환됩니다. |
PROD_DASHBOARD_PORT |
20130 |
docker-compose.prod.yml |
Docker 프로덕션 모드에서 대시보드용으로 게시되는 호스트 측 포트입니다. |
PROD_API_PORT |
20131 |
docker-compose.prod.yml |
Docker 프로덕션 모드에서 API용으로 게시되는 호스트 측 포트입니다. |
OMNIROUTE_PORT |
(설정되지 않음) | src/lib/runtime/ports.ts |
Electron 또는 기타 래퍼 내부에서 실행할 때 PORT보다 우선합니다. |
LIVE_WS_PORT |
20129 |
src/server/ws/liveServer.ts |
실시간 WebSocket 라이브 모니터링 서버용 포트입니다. |
LIVE_WS_HOST |
127.0.0.1 |
src/server/ws/liveServer.ts |
라이브 WebSocket 서버의 바인딩 주소입니다. LAN에 노출하려면 0.0.0.0으로 설정하세요(LIVE_WS_ALLOWED_ORIGINS도 구성해야 함). |
LIVE_WS_ALLOWED_ORIGINS |
(설정되지 않음) | src/server/ws/liveServer.ts |
라이브 WebSocket을 열 수 있도록 허용되는 쉼표로 구분된 추가 오리진입니다. 루프백 대시보드 오리진은 기본적으로 이미 허용되어 있습니다. |
LIVE_WS_ALLOWED_HOSTS |
(설정되지 않음) | src/server/ws/liveServerAllowList.ts |
라이브 WebSocket 오리진에 허용되는 쉼표로 구분된 추가 호스트 이름입니다. LIVE_WS_ALLOWED_ORIGINS(전체 오리진 URL)와 달리 호스트 부분만 일치시키므로 LAN/Tailscale 설정에 유용합니다. |
NEXT_PUBLIC_LIVE_WS_PUBLIC_URL |
(설정되지 않음) | src/hooks/useLiveDashboard.ts |
라이브 대시보드 WebSocket의 공개 URL(브라우저 측)입니다. WS 서버 앞에 리버스 프록시 또는 Cloudflare Tunnel을 배치할 때 설정하세요(예: wss://ws.my-ai.com/live-ws). 그러면 브라우저는 ws://hostname:20132 대신 해당 주소에 연결합니다. 경로명 부분은 WebSocket 업그레이드 경로로도 사용됩니다(기본값: /live-ws). |
OMNIROUTE_ENABLE_LIVE_WS |
true |
src/server/ws/liveServer.ts 및 scripts/start-ws-server.mjs |
실시간 WebSocket 서버를 비활성화하려면 0 또는 false로 설정하세요(기본적으로 활성화되며 루프백에 바인딩됨). 독립형 라이브 WebSocket 헬퍼 스크립트를 비활성화하는 CI/하네스 토글입니다. |
RELAY_IP_PER_MINUTE |
30 |
src/app/api/v1/relay/chat/completions/route.ts |
(토큰, IP)별 릴레이 속도 제한(분당 요청 수)입니다. 인스턴스별로 메모리에 저장됩니다. 0 또는 음수이면 IP 차원 제한이 비활성화됩니다(토큰별 DB 제한은 계속 적용됨). |
NODE_ENV |
production |
Next.js 코어 | 로깅 상세도, 캐싱, 오류 세부 정보 노출 및 Next.js 최적화를 제어합니다. |
OMNIROUTE_USE_TURBOPACK |
1 (Turbopack — 코드 기본값) |
package.json / Next.js 16 |
Turbopack은 npm run dev 및 npm run build의 기본 번들러입니다(벤치마크 기준 빌드 속도 2~3배 향상). Windows에서 네이티브 바인딩/번들러 호환성 문제가 발생하거나 RAM이 제한된 시스템에서 webpack으로 대체하려면 0으로 설정하세요. 이 Next.js 버전 계열(16.2.x)의 Turbopack 프로덕션 빌드는 대규모 모듈 그래프에서 webpack보다 훨씬 높은 메모리 사용량에 도달하는 업스트림 문제가 알려져 있습니다(Next 16.3의 Turbopack 메모리 제거 수정 사항은 아직 안정화되지 않음). webpack 대체 모드는 최대 메모리 사용량이 훨씬 낮습니다. #6409를 참조하세요. |
OMNIROUTE_SKIP_DB_HEALTHCHECK |
(설정되지 않음) | src/lib/db/core.ts / src/lib/db/healthCheck.ts |
시작 시 SQLite 무결성 상태 검사를 건너뛰려면 1로 설정하세요. 대규모 데이터베이스에서 부팅 시간을 단축하는 데 유용합니다. |
NOTIFY_SOCKET |
(설정되지 않음) | systemd(sd_notify 프로토콜) | 프로세스가 sd_notify 통합이 적용된 서비스 유닛에서 실행될 때 systemd가 설정합니다. OmniRoute는 이 값을 읽어(OMNIROUTE_DISABLE_SD_NOTIFY 참조) READY/WATCHDOG 알림을 전송합니다. 사용자가 직접 설정해서는 안 됩니다. |
OMNIROUTE_DISABLE_SD_NOTIFY |
(설정되지 않음) | scripts/dev/systemd-notify.mjs |
systemd 유닛에서 실행 중이더라도 systemd sd_notify(Type=notify / WatchdogSec=)를 비활성화하려면 1로 설정하세요. 어떤 경우에도 systemd 외부에서는 알림 기능이 아무 작업도 하지 않습니다. |
CREDENTIAL_HEALTH_CHECK_INTERVAL |
300000 |
open-sse/config/constants.ts / src/lib/credentialHealth/scheduler.ts |
백그라운드 자격 증명 상태 검사 스케줄러의 간격(ms)입니다. 최솟값: 10000(10초). |
CREDENTIAL_HEALTH_CACHE_TTL |
300000 |
open-sse/config/constants.ts / src/lib/credentialHealth/cache.ts |
캐시된 자격 증명 상태의 TTL(ms)입니다. |
OMNIROUTE_DISABLE_CREDENTIAL_HEALTH_CHECK |
false |
src/lib/credentialHealth/scheduler.ts |
공급자 연결의 백그라운드 주기적 테스트를 비활성화하려면 1 또는 true로 설정하세요. 검색 공급자(src/lib/providers/validation/searchProviders.ts의 SEARCH_VALIDATOR_CONFIGS, 예: tavily-search)는 항상 검사 대상에서 제외됩니다. 이들의 "검증"은 실제로 요금이 부과되는 업스트림 쿼리이므로 타이머 기반 상태 검사를 수행하지 않습니다(#9970). |
HOST |
0.0.0.0 |
scripts/dev/run-next.mjs |
Next.js 개발/시작 서버의 바인딩 주소입니다. 설정된 경우 기본값 0.0.0.0을 재정의합니다. |
HOSTNAME |
127.0.0.1 |
scripts/dev/run-next-playwright.mjs |
Playwright 실행기가 Next.js를 시작할 때 사용하는 바인딩 주소입니다. 격리된 테스트를 위해 기본값은 127.0.0.1입니다. omniroute serve에는 사용하지 마세요. 대신 OMNIROUTE_SERVER_HOST를 사용하세요(POSIX 셸은 HOSTNAME을 머신 이름으로 자동 설정하며, .env로 재정의할 수 없음). |
OMNIROUTE_SERVER_HOST |
0.0.0.0 |
bin/cli/commands/serve.mjs |
omniroute serve의 바인딩 주소입니다. POSIX 셸의 HOSTNAME 변수와의 충돌을 방지합니다(bash/zsh가 항상 머신 이름으로 설정). 설정되지 않은 경우 0.0.0.0으로 대체됩니다. (#6194) |
포트 모드
┌─────────────────────────── 단일 포트(기본값) ───────────────────────────────┐
│ PORT=20128 │
│ → 대시보드: http://localhost:20128 │
│ → API: http://localhost:20128/v1/chat/completions │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────── 분할 포트 ───────────────────────────────────────┐
│ DASHBOARD_PORT=20128 │
│ API_PORT=20129 │
│ API_HOST=0.0.0.0 │
│ → 대시보드: http://localhost:20128 │
│ → API: http://0.0.0.0:20129/v1/chat/completions │
│ 사용 사례: 대시보드는 localhost로 제한하면서 API를 LAN에 공개합니다. │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────── Docker 프로덕션 ────────────────────────────────┐
│ PROD_DASHBOARD_PORT=443 PROD_API_PORT=8443 │
│ → docker-compose.prod.yml에서 컨테이너 포트를 호스트 포트에 매핑합니다. │
└─────────────────────────────────────────────────────────────────────────────┘
4. 보안 및 인증
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
MACHINE_ID_SALT |
endpoint-proxy-salt |
src/lib/auth |
머신 지문 생성을 위해 하드웨어 식별자와 결합되는 솔트입니다. 배포별 격리를 위해 변경하세요. |
OMNIROUTE_CLI_SALT |
(설정되지 않음 = 설치별로 무작위 생성되어 <DATA_DIR>/cli-token-salt.json에 유지되는 솔트) |
src/lib/machineToken.ts |
로컬 CLI 인증 토큰을 파생하기 위한 HMAC 솔트입니다. 이 값을 설정하면 머신의 모든 CLI 토큰이 교체되며, 유지된 솔트보다 항상 우선합니다. docs/security/CLI_TOKEN.md를 참조하세요. |
AUTH_COOKIE_SECURE |
false |
src/lib/auth |
세션 쿠키에 Secure 플래그를 설정합니다. HTTPS 뒤에서 실행할 때는 반드시 true여야 합니다. |
REQUIRE_API_KEY |
false |
API 미들웨어 | true이면 모든 /v1/* 프록시 요청에 유효한 API 키가 포함되어야 합니다. |
ALLOW_API_KEY_REVEAL |
false |
src/shared/constants/featureFlagDefinitions.ts |
대시보드 UI에서 전체 API 키 값을 표시할 수 있도록 허용합니다. 대시보드의 기능 플래그에서 구성할 수 있으며, 공유 인스턴스에서는 보안 위험이 있습니다. |
NO_LOG_API_KEY_IDS |
(비어 있음) | src/lib/compliance/index.ts |
요청 로깅을 우회하는 API 키 ID의 쉼표로 구분된 목록입니다(GDPR 준수). |
DEFAULT_RATE_LIMIT_PER_DAY |
(설정되지 않음 = 무제한) | src/shared/utils/apiKeyPolicy.ts |
rate_limits 열이 null인 API 키에 적용되는 일일 요청 예산의 대체 기본값입니다. 설정되지 않았거나 비어 있으면 암시적 제한이 없습니다(#2289, #11017). 0도 동일하게 무제한입니다. 양의 정수 N은 N/일, 5N/주, 20N/월을 활성화합니다. 형식이 잘못된 비어 있지 않은 값은 기존의 1000/일, 5000/주, 20000/월 기간별 제한으로 대체됩니다. |
MAX_BODY_SIZE_BYTES |
10485760 (10 MB) |
src/shared/middleware/bodySizeGuard.ts |
허용되는 최대 요청 본문 크기입니다. 이 제한을 초과하는 페이로드는 거부됩니다. |
OMNIROUTE_CHAT_LARGE_BODY_BYTES |
262144 (256 KB) |
src/shared/middleware/chatBodyAdmission.ts |
이 임계값 이상의 실제 요청 본문은 JSON 파싱 전에 원자적 프로세스 로컬 고부하 허용 리스를 획득합니다(POST /v1/responses를 포함하는 BYTE 경로). 구조적 부하가 큰 경우와 동일한 #10437 정상 여유 용량 예외가 적용되지만, #7849가 재발하지 않도록 여전히 OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES / #10110의 제한을 받습니다. |
OMNIROUTE_CHAT_HARD_MAX_BODY_BYTES |
52428800 (50 MB) |
src/shared/middleware/chatBodyAdmission.ts |
Content-Length가 누락되었거나 유효하지 않거나 실제와 다른 요청을 포함하여, 제한된 수집 중 읽은 바이트를 기준으로 적용되는 채팅 경로의 절대 상한입니다. 이를 초과하면 413 응답을 받습니다. |
OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT |
(설정되지 않음 — 요청 수 제한 없음) | src/shared/middleware/chatBodyAdmission.ts |
#503-fanout: 이 레거시 요청 수 제한은 이제 명시적으로 설정된 경우에만 적용됩니다. 설정하지 않으면(기본값) 고부하 채팅 허용은 대신 OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES에 의해 제어됩니다. 이는 하나의 프로세스(하나의 V8 힙)에서 프로세스의 실제 메모리 한도를 기준으로 크기가 자동 산출되는 바이트 예산입니다. 약 750k 토큰의 /v1/responses 요청 두 개가 겹치면 약 12 Gi 힙이 중단됩니다(#7849). 이는 메모리 예산 경고이지, 제품의 고정된 최대 요청 수가 2개라는 의미가 아닙니다. 정상적인 프로세스(힙이 부하 차단 비율 미만)는 OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM을 통해 더 많은 장기 /v1/responses 요청을 동시에 허용할 수 있습니다. 수십 개의 장기 SSE 클라이언트(40~50개)를 처리할 수 있는지는 “최대 2개”가 아니라 힙 + OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES / #10110에 따라 결정됩니다. “호스트를 최대한 활용”하기 위해 이 값을 무작정 높이면 #7849가 다시 발생합니다. **N개의 독립적인 DATA_DIR**을 사용해 힙을 늘리십시오(#11024). 하나의 SQLite 파일에 절대로 replicas>1을 사용하지 마십시오. |
OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES |
(자동 산출) | src/shared/middleware/admissionBudget.ts |
#503-fanout: 자동 산출된 수신 바이트 예산을 재정의합니다(더 엄격한 V8/cgroup 메모리 한도의 25%를 8배의 일시적 증폭률로 나눈 값). 산출된 값과 명시적 값은 8 MiB413 body_exceeds_budget 오류로 실패하며, 개별적으로는 처리 가능한 본문 간의 경합에는 재시도 가능한 503이 유지됩니다. 40/api/monitoring/health에서 chatAdmission.maxInflightBytes / budgetSource / pressureSeverity를 확인하십시오. |
OMNIROUTE_CHAT_ADMISSION_HEAP_SHED_RATIO |
0.75 |
src/shared/middleware/chatBodyAdmission.ts |
BYTE 및 STRUCTURE 고부하 요청 허용을 위한 힙 압력 차단 비율(heapUsed / heap_size_limit)입니다(#10183, #10268, #10437). 동시 고부하 요청이 OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT를 초과하더라도 힙이 이 비율 이상일 때만 재시도 가능한 503으로 차단됩니다. 정상적인 힙에서는 정상 상태 여유 용량을 통해 허용됩니다. |
OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM |
OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT (기본값 1) |
src/shared/middleware/chatBodyAdmission.ts |
STRUCTURE와 BYTE 모두에서 정상 힙 빠른 경로(#10437)에 사용되는 제한된 추가 용량입니다(OMNIROUTE_CHAT_LARGE_BODY_BYTES 이상의 본문을 포함한 admitChatRequest). 이 제한이 없으면 힙이 정상 상태인 모든 혼잡 요청이 상한 없이 허용 제어를 우회했습니다. 정상 힙 경로를 통해 이 개수만큼의 동시 리스가 활성화되면, 이후의 혼잡 요청은 실제 힙 압력 상황에서 사용되는 것과 동일한 제한된 대기/차단 경로로 넘어갑니다. 0으로 설정하면 우회를 완전히 비활성화합니다. |
OMNIROUTE_CHAT_HEAVY_MESSAGE_COUNT |
200 |
src/shared/middleware/chatBodyAdmission.ts |
본문이 바이트 임계값 미만이어도 채팅 요청을 고부하로 분류하는 메시지 개수입니다. |
OMNIROUTE_CHAT_HEAVY_TOOL_COUNT |
64 |
src/shared/middleware/chatBodyAdmission.ts |
본문이 바이트 임계값 미만이어도 채팅 요청을 고부하로 분류하는 도구 개수입니다. |
OMNIROUTE_CHAT_HEAVY_ESTIMATED_TOKENS |
32000 |
src/shared/middleware/chatBodyAdmission.ts |
요청을 고부하로 분류하는 보수적인 문자열 크기 기반 토큰 추정값입니다. 이는 요청 허용 비용을 추정하기 위한 대리 지표이며, 제공업체의 과금용 토큰화 방식이 아닙니다. |
OMNIROUTE_CHAT_HARD_MAX_MESSAGES |
0 (비활성화됨) |
src/shared/middleware/chatBodyAdmission.ts |
선택적으로 활성화할 수 있는 채팅 기록 상한입니다. 기본적으로 비활성화되어 있습니다. 메시지 개수는 요청의 보편적 속성이 아니라 배포 정책이므로, 여기서 제한하면 압축 파이프라인을 통해 처리 가능해지기 전에 대화가 최종적인 413 오류로 거부됩니다. 힙 증가는 OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT와 힙 압력 차단을 통해 제한됩니다. 엄격한 상한이 필요한 메모리 제약 배포 환경에서는 양수로 설정하십시오. 이 경우 초과 요청에는 압축 필요성을 나타내는 구조화된 413 응답이 반환됩니다. |
OMNIROUTE_MAX_NONSTREAMING_RESPONSE_BYTES |
67108864 (64 MB) |
open-sse/handlers/chatCore/nonStreamingResponseBody.ts |
메모리에 완전히 버퍼링되는 비스트리밍 업스트림 응답의 엄격한 상한입니다. 이를 초과하면 힙이 고갈될 때까지 문자열이 무제한으로 증가하지 않도록 업스트림 리더가 취소되고 요청이 즉시 실패합니다. |
OMNIROUTE_FORWARDING_HEADER_BUDGET_BYTES |
768 |
open-sse/handlers/chatCore/responseHeaders.ts |
업스트림 응답 헤더에서 전달되는 최대 유선 바이트 수입니다. 예산을 초과하면 일반적인 역방향 프록시 헤더 제한 내에 유지되도록 우선순위가 낮은 헤더(예: 사용자 지정 x-codex-*, x-oai-request-id)가 삭제됩니다. 응답 헤더 크기가 커지는 대신 더 많은 업스트림 메타데이터를 전달하려면 더 높은 값으로 설정하십시오. |
CORS_ORIGIN |
(설정되지 않음) | src/server/cors/origins.ts |
레거시 단일 출처 CORS 허용 목록입니다. 새 배포에서는 CORS_ALLOWED_ORIGINS를 사용하는 것이 좋습니다. CORS는 교차 출처 브라우저 API 클라이언트에만 사용됩니다. 인증된 대시보드 쓰기 작업에는 대신 동일 출처 요청과 세션에 바인딩된 CSRF 보호가 사용됩니다. |
CORS_ALLOWED_ORIGINS |
(설정되지 않음) | src/server/cors/origins.ts |
쉼표로 구분된 CORS 허용 목록입니다. CORS_ALLOW_ALL=true를 명시적으로 구성하지 않는 한 와일드카드는 전송되지 않습니다. |
CORS_ALLOW_ALL |
false |
src/server/cors/origins.ts |
모든 브라우저 Origin을 그대로 반환하기 위한 개발 전용 우회 옵션입니다. 공유 또는 프로덕션 배포에서는 활성화하지 마세요. |
OUTBOUND_SSRF_GUARD_ENABLED |
true |
src/shared/network/outboundUrlGuard.ts |
사설/루프백/링크 로컬 IP 범위를 대상으로 하는 제공자 호출을 차단합니다. 격리된 테스트 환경에서만 비활성화하세요. |
OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS |
false |
src/shared/network/outboundUrlGuard.ts |
사설/로컬 네트워크(localhost, 192.168.x.x, 10.x.x.x 등)를 가리키는 제공자 URL을 허용합니다. 자체 호스팅 제공자에 필수입니다(LM Studio, Ollama, vLLM, Llamafile, Triton, SearXNG). false이면 대시보드에서 로컬 URL 검증을 거부합니다. |
OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS |
true |
src/shared/network/outboundUrlGuard.ts |
로컬/사설 주소(127.0.0.1, localhost, LAN, 사설 범위)의 제공자를 추가하거나 검증하도록 허용합니다. 이 설정은 제공자 검증 경로에만 적용됩니다. 기본값은 true(로컬 우선)이며, 공개 주소만 엄격하게 허용하려면 false로 설정하세요. 클라우드 메타데이터 엔드포인트(169.254.169.254, metadata.google.internal)는 설정과 관계없이 계속 차단됩니다. (#5066) |
AUDIO_REMOTE_PROVIDER_NODES |
false |
src/app/api/v1/_shared/audioProviderNodes.ts |
/v1/audio/* 경로(트랜스크립션, 음성, 번역)가 localhost 외부에서 호스팅되는 OpenAI 호환 제공자 노드를 사용하도록 허용합니다. 기본적으로 비활성화되어 있습니다. 오디오를 원격 호스트로 라우팅하면 이그레스 ID가 변경되므로 운영자가 명시적으로 결정해야 합니다. 루프백/사설 노드(localhost, 127.0.0.1, 172.16-31.x)는 항상 허용되며 이 설정의 영향을 받지 않습니다. (#3963) |
OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN |
false |
src/app/api/auth/login/route.ts |
OIDC가 활성화된 경우 비밀번호 로그인을 비활성화하여 사용자가 OIDC Single Sign-On을 통해서만 인증할 수 있도록 합니다. 단축 별칭 OIDC_DISABLE_PASSWORD_LOGIN도 사용할 수 있으며, 동일한 키를 사용하는 대시보드 기능 플래그가 우선합니다. (#10889) |
OIDC_DISABLE_PASSWORD_LOGIN |
false |
src/app/api/auth/login/route.ts |
OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN의 단축 별칭입니다. (#10889) |
보안 강화 체크리스트
# 프로덕션 보안 최소 요구 사항:
AUTH_COOKIE_SECURE=true # HTTPS 필요
REQUIRE_API_KEY=true # 모든 프록시 호출 인증
ALLOW_API_KEY_REVEAL=false # UI에 키를 절대 노출하지 않음
CORS_ALLOWED_ORIGINS=https://your.domain.com
MAX_BODY_SIZE_BYTES=5242880 # 5 MB 제한
5. 입력 정제 및 PII 보호
OmniRoute는 요청 측 인젝션 검사와 응답 측 PII 제거라는 2단계 방어 체계를 제공합니다.
⚠️ 제한 사항: 이러한 가드레일은 최선 노력 기반의 휴리스틱 탐지 기능이며, 완전한 프롬프트 인젝션 방화벽이나 PII DLP 시스템이 아닙니다. 오탐(무해한 페르소나/RPG 프롬프트가 탐지됨)과 미탐(리트스피크, 띄어쓰기, 영어 이외의 패턴)이 발생할 수 있습니다. 규정 준수를 위해 이것만으로는 충분하지 않습니다. 이를 신뢰하기 전에 모드를 조정하고 실제 트래픽을 대상으로 테스트하세요.
요청 측: 프롬프트 인젝션 가드
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
INPUT_SANITIZER_ENABLED |
true |
src/middleware/promptInjectionGuard.ts |
수신 메시지에서 프롬프트 인젝션 패턴 검사를 활성화합니다. |
INPUT_SANITIZER_MODE |
warn |
src/middleware/promptInjectionGuard.ts |
인젝션 정책: warn = 로그만 기록, block = 요청을 400으로 거부합니다. 레거시 redact는 인젝션 텍스트를 제거하지 않습니다. 요청 PII 재작성에는 PII_REDACTION_ENABLED를 사용하세요. |
INJECTION_GUARD_MODE |
(설정되지 않음) | src/middleware/promptInjectionGuard.ts |
INPUT_SANITIZER_MODE의 레거시 별칭이며 동작은 동일합니다. |
INPUT_SANITIZER_BLOCK_THRESHOLD |
high |
src/shared/utils/injectionSeverity.ts |
MODE=block에서 거부할 최소 심각도: high(기본값), medium 또는 low. 임곗값을 낮추지 않는 한 중간 심각도 패턴은 관찰만 수행합니다. |
INJECTION_GUARD_BLOCK_THRESHOLD |
(설정되지 않음) | src/shared/utils/injectionSeverity.ts |
INPUT_SANITIZER_BLOCK_THRESHOLD의 레거시 별칭이며 동작은 동일합니다. |
PII_REDACTION_ENABLED |
false |
src/lib/guardrails/piiMasker.ts |
true이면 수신 요청의 PII를 마스킹합니다(인젝션 모드와 독립적으로 동작). |
CREDENTIAL_REDACTION_ENABLED |
false |
src/lib/guardrails/credentialMasker.ts |
요청/응답 페이로드에서 잘 알려진 API 키/비밀 토큰 패턴을 마스킹합니다. 옵트인 방식이며 PII_REDACTION_ENABLED와 동일한 방식을 따릅니다. |
응답 측: PII 정제기
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
PII_RESPONSE_SANITIZATION |
false |
src/lib/piiSanitizer.ts |
클라이언트에 반환하기 전에 LLM 응답에서 유출된 PII를 검사합니다. |
PII_RESPONSE_SANITIZATION_MODE |
redact |
src/lib/piiSanitizer.ts |
redact = PII 마스킹, warn = 로그만 기록, block = 전체 응답 폐기. |
VS Code 토큰화된 경로 컨텍스트 정제기
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
OMNIROUTE_VSCODE_SANITIZE_CONTEXT |
1 |
src/app/api/v1/vscode/contextSanitizer.ts |
/v1/vscode/[token]/* 요청에서 암시적인 활성 편집기 컨텍스트(editorContext, activeEditor, currentFile, selection, openTabs…)를 제거하고, 명시적으로 첨부된 민감한 파일의 콘텐츠를 마스킹합니다. 기본적으로 안전하게 설정되어 있으며, 비활성화하려면 0으로 설정하세요. |
시나리오
| 시나리오 | 구성 |
|---|---|
| 엔터프라이즈 규정 준수 | INPUT_SANITIZER_ENABLED=true, INPUT_SANITIZER_MODE=block, PII_REDACTION_ENABLED=true, PII_RESPONSE_SANITIZATION=true(인젝션 차단 + 요청/응답 PII 마스킹, 각 모드는 독립적) |
| 모니터링 전용 | INPUT_SANITIZER_ENABLED=true, INPUT_SANITIZER_MODE=warn — 로그를 기록하지만 차단하지 않음 |
| 개인 사용 | 모두 비활성화된 상태로 유지 — 오버헤드 없음 |
6. 도구 및 라우팅 정책
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
TOOL_POLICY_MODE |
disabled |
src/lib/toolPolicy.ts |
LLM 도구/함수 호출 접근을 제어합니다. allowlist = 나열된 도구만 허용, denylist = 나열된 도구를 제외하고 모두 허용, disabled = 제한 없음. |
OMNIROUTE_PAYLOAD_RULES_PATH |
./config/payloadRules.json |
open-sse/services/payloadRules.ts |
페이로드 조작 규칙 JSON 파일의 경로입니다(모델/프로토콜별 업스트림 조정). |
OMNIROUTE_PAYLOAD_RULES_RELOAD_MS |
5000 |
open-sse/services/payloadRules.ts |
페이로드 규칙 파일을 핫 리로드하는 간격(ms)입니다. 최솟값은 1000입니다. |
OMNIROUTE_PREFER_CLAUDE_CODE_FOR_UNPREFIXED_CLAUDE_MODELS |
false |
open-sse/services/model.ts |
선택적 활성화: Claude Code 클라이언트의 접두사 없는 claude-* 모델 ID를 공급자 접두사를 요구하는 대신 Claude Code OAuth 계정을 통해 라우팅합니다. 명시적인 공급자 접두사가 있으면 여전히 우선 적용됩니다. Claude 공급자 페이지의 대시보드 토글로도 구성할 수 있습니다. |
COMBO_CONCURRENCY_PER_MODEL |
3 |
open-sse/services/comboConfig.ts |
라운드 로빈 콤보의 모델별 동시 실행 상한입니다(#9100). 라운드 로빈 콤보 세마포어는 재정의 옵션 없이 모델당 동시 요청 3개로 고정되어 있었으며, 이로 인해 동시성이 더 높은 트래픽이 해당 상한 뒤에서 직렬화되었습니다. >= 1인지 검증되며 <= 32로 제한됩니다. |
DISABLE_CONTEXT_WINDOW_CHECKS |
false |
open-sse/handlers/chatCore.ts |
직접 단일 모델 요청에 대한 OmniRoute의 로컬 컨텍스트 창/최대 입력 토큰 검사를 건너뛰는 위험한 선택적 활성화 옵션입니다. 업스트림 공급자는 여전히 실제 한도를 적용하며, 프롬프트 압축과 모델 자체의 출력 토큰 상한도 계속 활성화됩니다. 실제 우선순위는 기능 플래그 DB 재정의 > 환경 변수 > 기본값이며, 다시 시작할 필요가 없습니다. |
OMNIROUTE_DISABLE_CONVERSATION_TRACKING |
(설정되지 않음) | open-sse/services/conversationTracker.ts |
대화 기록 수집을 중지하려면 1로 설정합니다. resolveConversationId()는 SQLite를 읽거나 메시지 기록을 파싱하기 전에 추적되지 않는 결과를 반환하며, 클라이언트가 제공한 세션 ID도 적용 대상입니다. 라우팅 세션 처리는 변경되지 않으며 기존 레코드는 삭제되지 않습니다. 대시보드의 대화 보기를 사용하지 않고 턴 테이블이 더 이상 증가하지 않도록 하려는 배포 환경을 위한 옵션입니다. |
7. URL 및 클라우드 동기화
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
BASE_URL |
http://localhost:20128 |
src/lib/cloudSync.ts |
내부 동기화 작업이 /api/sync/cloud를 호출할 때 사용하는 서버 측 URL입니다. 앱이 공개적으로 프록시되는 경우에도 이 값은 루프백/컨테이너 URL로 유지하세요. |
CLOUD_URL |
(비어 있음) | src/lib/cloudSync.ts |
클라우드 릴레이 엔드포인트 URL입니다(프리미엄 기능). |
CLOUD_SYNC_TIMEOUT_MS |
12000 |
src/lib/cloudSync.ts |
클라우드 동기화 요청의 HTTP 시간 제한입니다. |
OMNIROUTE_BUILD_PROFILE |
full |
Webpack 빌드 구성 | 빌드 타임 프로필입니다(권한이 필요한 모듈을 번들에서 물리적으로 제외하려면 minimal로 설정). |
OMNIROUTE_STANDALONE_DIR |
.build/ 독립 실행형 출력 | scripts/build/colocate-standalone.mjs |
빌드 후 공동 배치 단계에서 사용하는 독립 실행형 출력 디렉터리를 빌드 타임에 재정의합니다. 런타임 설정이 아닙니다. |
OMNIROUTE_CLOUD_SYNC_SECRET |
(비어 있음) | src/lib/cloudSync.ts |
클라우드 동기화 응답의 HMAC-SHA256 서명을 검증하는 데 사용되는 공유 비밀 값입니다. |
OMNIROUTE_CLOUD_SYNC_SECRETS |
false |
src/lib/cloudSync.ts |
클라우드 동기화 엔드포인트가 로컬 자격 증명을 덮어쓰도록 허용하려면 true로 설정합니다. 기본값은 false입니다. |
OMNIROUTE_CLOUD_SYNC_ENFORCE_SIGNATURE |
false |
src/lib/cloudSync.ts |
로컬 비밀 값이 구성되지 않은 경우 서명되지 않은 클라우드 동기화 응답을 거부하려면 true로 설정합니다(#13679). 이 플래그와 관계없이, 서명이 있으면 항상 검증되며 OMNIROUTE_CLOUD_SYNC_SECRET이 설정되지 않은 경우 항상 거부됩니다. v3.9부터 기본값은 서명 검증 강제로 변경됩니다. |
OMNIROUTE_ZED_IMPORT_LEGACY_ONE_STEP |
false |
src/app/api/providers/zed/import/route.ts |
사용자 확인 없이 v3.8.5의 단일 단계 "모두 가져오기" 동작으로 대체하려면 true로 설정합니다. |
NEXT_PUBLIC_BASE_URL |
http://localhost:20128 |
OAuth, 대시보드, 동기화 | OAuth redirect_uri, 대시보드 링크 및 생성된 공개 URL에 사용하는 외부 공개 URL입니다. OAuth 콜백 또는 생성된 브라우저 링크에서 정규 역방향 프록시 호스트를 사용해야 하는 경우 안정적인 공개 URL로 설정하세요. |
NEXT_PUBLIC_CLOUD_URL |
(비어 있음) | 클라이언트 측 | CLOUD_URL의 클라이언트 측 미러입니다. |
NEXT_PUBLIC_APP_URL |
(설정되지 않음) | src/shared/services/cloudSyncScheduler.ts |
NEXT_PUBLIC_BASE_URL의 레거시 폴백입니다. |
OMNIROUTE_PUBLIC_BASE_URL |
(설정되지 않음) | 공개 오리진 해석기, 이미지 URL | 공개 URL 생성 및 대시보드 외 브라우저 오리진 검증에 사용되는, 브라우저 대상 OmniRoute 오리진 중 우선순위가 가장 높습니다. OpenWebUI 또는 다른 릴레이가 내부 URL을 통해 OmniRoute에 접근하지만 사용자의 브라우저는 LAN, 터널 또는 공개 오리진에서 생성된 미디어를 가져와야 할 때 설정하세요. /v1은 포함하지 마세요. |
OMNIROUTE_PROVIDER_MANIFEST_URL |
(설정되지 않음) | open-sse/config/providerPluginManifestUrl.ts |
사이드카 클라이언트에 공지되는 절대 제공자 플러그인 매니페스트 URL입니다. 설정하지 않으면 OmniRoute는 요청 오리진 또는 HOST/PORT를 기반으로 /api/v1/provider-plugin-manifest를 파생합니다. |
OMNIROUTE_PUBLIC_PROTOCOL |
http |
open-sse/config/providerPluginManifestUrl.ts |
요청 오리진 없이 HOST/PORT에서 제공자 플러그인 매니페스트 URL을 파생할 때 사용하는 프로토콜입니다. 명시적인 OMNIROUTE_PROVIDER_MANIFEST_URL이 설정되지 않은 상태에서 TLS를 종료하는 공개 프록시 뒤에 있는 경우 https로 설정하세요. |
OMNIROUTE_TRUST_PROXY |
(설정되지 않음) | src/server/origin/publicOrigin.ts |
전달된 공개 오리진 헤더에 대한 선택적 신뢰 모드입니다. 설정되지 않음 = 보안 결정에 Forwarded / X-Forwarded-*를 신뢰하지 않습니다. true / loopback은 토큰이 지정된 루프백 프록시의 전달된 호스트/프로토콜만 신뢰합니다. private / lan은 사설 LAN 프록시 피어도 신뢰합니다. 프로덕션에서는 명시적인 NEXT_PUBLIC_BASE_URL을 권장합니다. |
KIE_CALLBACK_URL |
(설정되지 않음) | open-sse/utils/kieTask.ts |
비동기 kie.ai 작업을 위한 공개 콜백 URL입니다. OMNIROUTE_KIE_CALLBACK_URL 및 OMNIROUTE_PUBLIC_URL보다 우선하는 최우선 재정의 값입니다. |
OMNIROUTE_KIE_CALLBACK_URL |
(설정되지 않음) | open-sse/utils/kieTask.ts |
KIE_CALLBACK_URL의 대체 표기입니다. 기본 변수가 설정되지 않은 경우 폴백합니다. |
OMNIROUTE_PUBLIC_URL |
(설정되지 않음) | open-sse/utils/kieTask.ts |
비동기 콜백 URL을 구성하는 데 사용되는 공개 오리진입니다. kie.ai 콜백에 대한 최저 우선순위 폴백이며, 다른 릴레이의 일반 공개 URL로도 사용됩니다. |
OMNIROUTE_CROF_USAGE_URL |
https://crof.ai/usage_api/ |
open-sse/services/usage.ts |
사용량 페이지에서 사용하는 CrofAI 할당량 조회 엔드포인트입니다. 릴레이/테스트 픽스처용으로 재정의할 수 있습니다. |
OMNIROUTE_OPENCODE_QUOTA_URL |
https://opencode.ai/zen/go/v1/usage |
open-sse/services/opencodeQuotaFetcher.ts |
사용량 페이지에서 사용하는 공식 API 키 인증 방식 OpenCode Go 사용량 엔드포인트입니다. 릴레이/테스트 픽스처용으로 재정의할 수 있습니다. |
OPENCODE_SYNTHESIZE_CLI_HEADERS |
true |
open-sse/executors/opencode.ts |
클라이언트가 보내지 않은 OpenCode CLI 식별 헤더(User-Agent, x-opencode-client/project, 요청/세션 UUID)를 opencode-go/zen 업스트림 요청에 합성하여 VPS 송신 트래픽의 Cloudflare가 이를 허용하도록 합니다(#6210/#5997). #10571부터 기본적으로 활성화되며, false/0/no/off로 비활성화할 수 있습니다. |
OPENCODE_USER_AGENT |
opencode |
open-sse/executors/opencode.ts |
OPENCODE_SYNTHESIZE_CLI_HEADERS가 활성화되어 있고 제공자별 <PROVIDER>_USER_AGENT 재정의가 설정되지 않은 경우 사용하는 기본 User-Agent입니다. opencode 실행기에만 적용됩니다. |
OPENCODE_CLIENT |
desktop |
open-sse/executors/opencode.ts |
OPENCODE_SYNTHESIZE_CLI_HEADERS가 활성화된 경우 합성된 x-opencode-client 헤더에 사용할 값입니다. |
OPENCODE_PROJECT |
global |
open-sse/executors/opencode.ts |
OPENCODE_SYNTHESIZE_CLI_HEADERS가 활성화된 경우 합성된 x-opencode-project 헤더에 사용할 값입니다. |
OMNIROUTE_OLLAMA_CLOUD_USAGE_URL |
https://ollama.com/settings |
open-sse/services/usage.ts |
할당량 스크래핑에 사용되는 Ollama Cloud 설정 URL입니다. 릴레이/테스트 픽스처용으로 재정의할 수 있습니다. |
OLLAMA_USAGE_COOKIE |
(설정되지 않음) | open-sse/services/usage.ts |
설정 페이지의 할당량 스크래핑에 사용되는 Ollama Cloud __Secure-session 쿠키입니다. 민감한 정보이므로 여러 계정이 구성된 경우 연결별 대시보드 필드를 사용하는 것이 좋습니다. |
OLLAMA_CLOUD_USAGE_COOKIE |
(설정되지 않음) | open-sse/services/usage.ts |
Ollama Cloud __Secure-session 쿠키의 대체 환경 변수입니다. 민감한 정보이므로 여러 계정이 구성된 경우 연결별 대시보드 필드를 사용하는 것이 좋습니다. |
OMNIROUTE_OLLAMA_USAGE_COOKIE |
(설정되지 않음) | open-sse/services/usage.ts |
더 짧은 별칭보다 먼저 사용되는 Ollama Cloud __Secure-session 쿠키의 대체 환경 변수입니다. 민감한 정보이므로 여러 계정이 구성된 경우 연결별 대시보드 필드를 사용하는 것이 좋습니다. |
OMNIROUTE_CODEWHISPERER_BASE_URL |
https://codewhisperer.us-east-1.amazonaws.com |
open-sse/services/usage.ts |
CodeWhisperer(AWS Kiro) 사용량 제한 엔드포인트입니다. 릴레이/테스트 픽스처용으로 재정의할 수 있습니다. |
Important
역방향 프록시(nginx, Caddy) 뒤에 배포할 때 OAuth 콜백이나 생성된 공개 링크에서 해당 호스트 이름을 사용해야 하는 경우
NEXT_PUBLIC_BASE_URL을 안정적인 공개 URL(예:https://omniroute.example.com)로 설정하세요. 이를 설정하지 않으면 redirect_uri가 일치하지 않아 OAuth 콜백이 실패할 수 있으며, 생성된 공개 링크가 내부 컨테이너 오리진을 가리킬 수 있습니다.서버 간 작업에는
BASE_URL을 내부 루프백/컨테이너 URL로 유지하세요. 자격 증명이 포함된 내부 자체 가져오기 요청에 브라우저Origin이나 공개 호스트 이름을 사용하지 마세요.인증된 대시보드 쓰기 작업에는 정적 공개 기본 URL이 필요하지 않습니다. 대시보드는 세션에 바인딩된 CSRF 토큰과 함께 동일 오리진의 안전하지 않은 요청을 전송합니다. OmniRoute는 대시보드가 아닌 브라우저 통합을 위한 공개 오리진 검증을 계속 중앙에서 관리합니다. 명시적인 공개 URL 환경 변수를 먼저 신뢰하며,
OMNIROUTE_TRUST_PROXY가 활성화되고 직속 프록시 피어가 토큰으로 신뢰 표시된 경우가 아니면 원시Forwarded/X-Forwarded-*헤더를 무시합니다. 동일 오리진 대시보드 요청을 해결하기 위해 CORS 설정을 사용하지 마세요. CORS는 교차 오리진 브라우저 클라이언트에만 적용됩니다.
8. 아웃바운드 프록시
송신 제어, 지리적 라우팅 또는 IP 마스킹을 위해 업스트림 LLM 제공업체 호출을 HTTP 또는 SOCKS5 프록시를 통해 라우팅합니다.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
ENABLE_SOCKS5_PROXY |
true |
open-sse/executors |
업스트림 호출에 SOCKS5 프록시 에이전트를 활성화합니다. 비활성화하려면 false로 설정합니다. |
NEXT_PUBLIC_ENABLE_SOCKS5_PROXY |
true |
클라이언트 측 | 클라이언트 측에서 SOCKS5 사용 가능 여부를 인식하도록 합니다. |
PROXY_SKIP_RECENTLY_FAILED |
false |
src/shared/utils/featureFlags.ts |
선택적으로 활성화하는 기능 플래그입니다(FEATURE_FLAGS.md 참조. 대시보드 DB 재정의가 우선함). 프록시 풀 및 계정별 순환에서 방금 실패한 구성원(거부된 TCP 프로브 또는 해당 구성원을 통한 요청의 429 응답)을 다시 제공하지 않으며, 제외 기간은 반복될 때마다 두 배로 늘어나 상한에 도달합니다. true(또는 1, yes)로 활성화합니다. |
HTTP_PROXY |
(설정되지 않음) | Node.js 표준 | 업스트림 호출을 위한 HTTP 프록시입니다. |
HTTPS_PROXY |
(설정되지 않음) | Node.js 표준 | 업스트림 호출을 위한 HTTPS 프록시입니다. |
ALL_PROXY |
(설정되지 않음) | Node.js 표준 | 범용 프록시입니다(socks5:// 지원). |
OMNIROUTE_PROXY_ECHO_URL |
(설정되지 않음) | src/lib/proxyEchoTarget.ts |
프록시 송신 프로브에서 사용하는 에코 IP 대상을 단일 URL로 고정합니다. 설정하지 않으면 프로브가 api64.ipify.org를 시도한 다음 api4.ipify.org를 시도하므로 IPv4 전용 터널이 작동 불능으로 보고되지 않습니다(#9694). |
NO_PROXY |
(설정되지 않음) | Node.js 표준 | 프록시를 우회할 쉼표로 구분된 호스트 이름/IP 목록입니다. |
OMNIROUTE_PROXY_DISPATCHER_CONNECTIONS |
32 |
open-sse/utils/proxyDispatcher.ts |
캐시된 HTTP/SOCKS 프록시 디스패처당 최대 동시 소켓 수입니다. 여러 요청이 동일한 계정 수준 프록시를 공유하는 경우 Codex /v1/responses와 같은 장기 실행 SSE 스트림에는 둘 이상의 연결이 필요합니다. 256을 초과하는 값은 제한됩니다. |
SOCKS_HANDSHAKE_TIMEOUT_MS |
10000 |
open-sse/utils/socksConnectorWithFamily.ts |
SOCKS5 핸드셰이크(연결) 제한 시간(밀리초)입니다. 단일 주거용 게이트웨이 호스트에 높은 동시성(예: 100개의 동시 요청)이 집중될 때 이 값을 늘리십시오. 프록시에 연결할 수 있더라도 포화된 풀에서는 실제 핸드셰이크가 10초를 초과할 수 있으며, 그렇지 않으면 잘못된 [Proxy Fast-Fail] Proxy unreachable 오류로 표시됩니다. 최대값은 120000입니다. |
PROXY_FAIL_OPEN |
false |
src/sse/handlers/chatHelpers.ts |
false(기본값)인 경우 할당된 프록시를 확인할 수 없는 요청은 직접 연결로 대체되지 않고 거부됩니다(장애 시 차단). 이를 통해 실제 IP 유출을 방지합니다. 기존 DIRECT 대체 동작을 복원하려면 true로 설정합니다. |
ENABLE_TLS_FINGERPRINT |
false |
open-sse/executors |
wreq-js를 사용하여 TLS 핑거프린트를 위장합니다(Chrome 124 모방). JA3/JA4 차단에 대응합니다. |
TLS_FINGERPRINT_PROVIDERS |
(설정되지 않음) | open-sse/utils/proxyFetch.ts |
새로운 프록시 TLS 라우팅(open-sse/utils/proxyFetch.ts)을 위한 쉼표로 구분된 공급자 허용 목록입니다. 설정되지 않은 경우 직접 TLS는 기존 동작을 유지하며, 여기에 지정된 공급자만 Chrome-124 핑거프린트 브리지를 통해 라우팅됩니다. |
OMNIROUTE_TURNSTILE_IGNORE_TLS_ERRORS |
false |
open-sse/services/claudeTurnstileSolver.ts |
Claude Turnstile Playwright 브라우저 컨텍스트가 HTTPS 인증서 오류를 무시하도록 허용합니다. |
시나리오
| 시나리오 | 구성 |
|---|---|
| SSH 터널을 통한 SOCKS5 | ALL_PROXY=socks5://127.0.0.1:7890, ENABLE_SOCKS5_PROXY=true |
| 기업용 HTTP 프록시 | HTTP_PROXY=http://proxy.corp.com:3128, HTTPS_PROXY=http://proxy.corp.com:3128, NO_PROXY=localhost,internal.corp.com |
| 핑거프린트 방지 | ENABLE_TLS_FINGERPRINT=true — wreq-js 필요(포함됨) |
| 송신 제어 환경/직접 접근 불가 | PROXY_FAIL_OPEN=false(기본값)를 유지합니다. 프록시를 사용할 수 없을 때 직접 연결로 유출되는 대신 요청이 즉시 실패합니다. |
| 레거시/개발 — 직접 연결 폴백 허용 | PROXY_FAIL_OPEN=true. 강화 이전 동작을 복원합니다. 프록시 확인에 실패하면 직접 연결을 사용합니다. |
참고(NVIDIA 검증 우회 — #3226): NVIDIA의 API 키 검증 엔드포인트는 전역 프록시/TLS 패치가 적용된 fetch를 통해 라우팅될 때 중단됩니다(undici 디스패처 → 504).
src/lib/providers/validation.ts::directHttpsRequest()는 해당 검증 호출에 한해 의도적으로safeOutboundFetch({ bypassProxyPatch: true })를 사용하여 프록시 패치를 우회합니다. 이는 문서화되고 범위가 제한된 예외이며, 채팅/사용량 송신에는 영향을 주지 않습니다. 우회 범위는tests/unit/proxy-bypass-scope-guard-3226.test.ts에 의해 고정됩니다.
9. CLI 도구 통합
OmniRoute가 CLI 사이드카(Claude Code, Codex 등)를 검색하고 실행하는 방식을 제어합니다.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
CLI_MODE |
auto |
src/shared/services/cliRuntime.ts |
auto = 시스템 PATH 검색; manual = 명시적으로 지정된 경로만 사용. |
CLI_EXTRA_PATHS |
(설정되지 않음) | src/shared/services/cliRuntime.ts |
CLI 바이너리 검색을 위한 추가 PATH 항목(콜론으로 구분). |
CLI_CONFIG_HOME |
(설정되지 않음) | src/shared/services/cliRuntime.ts |
CLI 설정(~/.claude, ~/.codex)을 읽을 홈 디렉터리를 재정의합니다. 절대 경로이면서 프로세스 홈 내부에 있어야 합니다. 또는 컨테이너에서는 바인드 마운트된 경로여야 합니다(/host-home은 이 방식으로 작동합니다). 그 외의 경로는 모두 홈 디렉터리로 대체됩니다. |
CLI_ALLOW_CONFIG_WRITES |
true |
src/shared/services/cliRuntime.ts |
OmniRoute가 CLI 설정 파일(토큰 갱신, 세션 데이터)을 쓸 수 있도록 허용합니다. 모든 CLI 설정 쓰기 작업이 명시적인 "쓰기 비활성화됨" 오류와 함께 실패하도록 하려면 false로 설정하세요. |
CLI_CLAUDE_BIN |
claude |
src/shared/services/cliRuntime.ts |
Claude CLI 바이너리의 사용자 지정 경로. |
CLI_CODEX_BIN |
codex |
src/shared/services/cliRuntime.ts |
Codex CLI 바이너리의 사용자 지정 경로. |
CLI_DROID_BIN |
droid |
src/shared/services/cliRuntime.ts |
Droid CLI 바이너리의 사용자 지정 경로. |
CLI_OPENCLAW_BIN |
openclaw |
src/shared/services/cliRuntime.ts |
OpenClaw CLI 바이너리의 사용자 지정 경로. |
CLI_CURSOR_BIN |
agent, 다음으로 cursor |
src/shared/services/cliRuntime.ts |
Cursor 에이전트 바이너리의 사용자 지정 경로. 지정하지 않으면 먼저 agent를 감지하고, 찾지 못하면 cursor를 사용합니다. |
CLI_CLINE_BIN |
cline |
src/shared/services/cliRuntime.ts |
Cline CLI 바이너리의 사용자 지정 경로. |
CLI_5DIVE_BIN |
5dive |
src/shared/services/cliRuntime.ts |
5dive CLI 바이너리의 사용자 지정 경로. |
CLI_5DIVE_STATE_DIR |
/var/lib/5dive |
src/shared/services/cliRuntime.ts |
5dive의 시스템 상태 디렉터리(root 소유 인증 프로필)이며, 5dive 자체의 STATE_DIR 기본값을 따릅니다. |
CLI_CONTINUE_BIN |
cn |
src/shared/services/cliRuntime.ts |
Continue CLI 바이너리의 사용자 지정 경로. |
CLI_QODER_BIN |
qodercli |
src/shared/services/cliRuntime.ts |
Qoder CLI 바이너리의 사용자 지정 경로. |
CLI_QWEN_BIN |
qwen |
src/shared/services/cliRuntime.ts |
Qwen Code CLI 바이너리의 사용자 지정 경로. |
CLI_AIDER_BIN |
aider |
src/shared/services/cliRuntime.ts |
Aider CLI 바이너리의 사용자 지정 경로. |
CLI_GOOSE_BIN |
goose |
src/shared/services/cliRuntime.ts |
Goose CLI 바이너리의 사용자 지정 경로. |
CLI_GEMINI_BIN |
gemini |
src/shared/services/cliRuntime.ts |
Google Gemini CLI 바이너리의 사용자 지정 경로입니다. 서버 측 감지/상태 확인에만 사용되며, omniroute run gemini는 시스템 PATH에서 gemini 바이너리를 찾습니다. |
CLI_KILO_BIN |
kilocode |
src/shared/services/cliRuntime.ts |
Kilo Code CLI 바이너리의 사용자 지정 경로. |
CLI_OPENCODE_BIN |
opencode |
src/shared/services/cliRuntime.ts |
OpenCode CLI 바이너리의 사용자 지정 경로. |
CLI_HERMES_BIN |
hermes |
src/shared/services/cliRuntime.ts |
Hermes 바이너리의 사용자 지정 경로입니다. 두 카탈로그 항목(hermes 및 hermes-agent)에서 공유됩니다. |
CLI_FORGE_BIN |
forge |
src/shared/services/cliRuntime.ts |
ForgeCode CLI 바이너리의 사용자 지정 경로입니다. |
CLI_JCODE_BIN |
jcode |
src/shared/services/cliRuntime.ts |
jcode CLI 바이너리의 사용자 지정 경로입니다. |
CLI_DEEPSEEK_TUI_BIN |
deepseek-tui |
src/shared/services/cliRuntime.ts |
DeepSeek TUI 바이너리의 사용자 지정 경로입니다. |
CLI_CODEWHALE_BIN |
codewhale |
src/shared/services/cliRuntime.ts |
CodeWhale CLI 바이너리의 사용자 지정 경로입니다. |
CLI_SMELT_BIN |
smelt |
src/shared/services/cliRuntime.ts |
Smelt CLI 바이너리의 사용자 지정 경로입니다. |
CLI_PI_BIN |
pi |
src/shared/services/cliRuntime.ts |
Pi(pi-coding-agent) 바이너리의 사용자 지정 경로입니다. |
CLI_CRUSH_BIN |
crush |
src/shared/services/cliRuntime.ts |
Crush CLI 바이너리의 사용자 지정 경로입니다. |
CLI_OMP_BIN |
omp |
src/shared/services/cliRuntime.ts |
Oh My Pi(omp) 에이전트 바이너리의 사용자 지정 경로입니다. |
CLI_LETTA_BIN |
letta |
src/shared/services/cliRuntime.ts |
Letta CLI 바이너리의 사용자 지정 경로입니다. |
CLI_PRIME_AGENT_BIN |
prime-agent |
src/shared/services/cliRuntime.ts |
Prime Agent(Prime Intellect) 바이너리의 사용자 지정 경로입니다. |
CLI_WINDSURF_BIN |
(없음) | src/shared/services/cliRuntime.ts |
Windsurf 바이너리의 사용자 지정 경로입니다. Windsurf는 기본 명령을 제공하지 않으므로, 이 값이 설정될 때까지 바이너리 감지가 비활성화된 상태로 유지됩니다. |
CLI_DEVIN_BIN |
devin |
open-sse/executors/devin-cli.ts |
Devin CLI 바이너리(v3.8.0)의 사용자 지정 경로입니다. Windsurf/Devin 실행기에서 사용됩니다. |
DEVIN_DESKTOP_VERSION |
3.6.27 |
open-sse/executors/devin-desktop.ts |
Devin Desktop ide_version입니다. 재정의 값은 x.y.z 형식을 사용해야 하며, 유효하지 않은 값은 검증된 기본값으로 대체됩니다. |
DEVIN_DESKTOP_EXTENSION_VERSION |
1.48.2 |
open-sse/executors/devin-desktop.ts |
번들로 제공되는 Codeium/language-server extension_version이며 Desktop ide_version과는 별개입니다. 재정의 값은 x.y.z 형식을 사용해야 하며, 유효하지 않은 값에는 번들 기본값이 사용됩니다. |
CLI_DEVIN_AGENTIC_BIN |
devin |
open-sse/executors/devin-cli-agentic.ts |
에이전틱 브리지 전용 Devin CLI 재정의 값입니다. 실행기는 로컬 ACP stdio 업스트림만 허용합니다. |
DEVIN_AGENTIC_HOME |
(필수) | open-sse/executors/devin-cli-agentic.ts |
에이전틱 Devin 하위 프로세스를 위한 격리된 절대 홈 경로입니다. 허용되는 브리지 경로는 /home/bridge 및 작업 로컬 .sandbox 경로입니다(Windows에서는 C:\...\.sandbox\...). |
DEVIN_AGENTIC_ACP_TIMEOUT_MS |
120000 |
open-sse/executors/devin-cli-agentic.ts |
브리지가 자식 프로세스를 종료하고 명시적 시간 초과를 반환하기 전까지 허용되는 단일 Devin ACP 턴의 최대 실행 시간입니다. |
DEVIN_BRIDGE_MODEL |
devin-cli-agentic/swe-1-7 |
docker/devin-bridge/compose.yml |
격리된 브리지의 기본 Claude Code 모델 별칭입니다. 라이브 하네스는 예시 값을 현재 Devin 계정에서 반환된 모델로 대체합니다. |
DEVIN_BRIDGE_SONNET_MODEL |
DEVIN_BRIDGE_MODEL |
docker/devin-bridge/compose.yml |
Claude Code가 기본 Sonnet 모델을 요청할 때 사용되는 격리된 브리지 별칭입니다. |
DEVIN_BRIDGE_OPUS_MODEL |
DEVIN_BRIDGE_MODEL |
docker/devin-bridge/compose.yml |
Claude Code가 기본 Opus 모델을 요청할 때 사용되는 격리된 브리지 별칭입니다. |
DEVIN_BRIDGE_HAIKU_MODEL |
DEVIN_BRIDGE_MODEL |
docker/devin-bridge/compose.yml |
Claude Code가 기본 Haiku 모델을 요청할 때 사용되는 격리된 브리지 별칭입니다. |
DEVIN_BRIDGE_SUBAGENT_MODEL |
DEVIN_BRIDGE_MODEL |
docker/devin-bridge/compose.yml |
Claude Code 하위 에이전트에 사용되는 격리된 브리지 별칭입니다. |
DEVIN_SEAT_API_URL |
https://server.codeium.com |
open-sse/services/usage/devinCli.ts |
Devin CLI 할당량(GetUserStatus)에 사용되는 Codeium 라이선스 관리 API의 선택적 재정의 값입니다. |
AUGGIE_BIN |
auggie |
open-sse/executors/auggie.ts |
로컬 auggie 공급자가 사용하는 Augment(Auggie) CLI 바이너리의 절대 경로를 재정의합니다. 설정되지 않은 경우 CLI_AUGGIE_BIN, 그다음 PATH 조회를 사용합니다. |
CLI_AUGGIE_BIN |
auggie |
open-sse/executors/auggie.ts |
Augment(Auggie) CLI 바이너리 경로의 별칭 재정의 값입니다(AUGGIE_BIN 다음에 확인됨). |
ZCODE_BIN |
zcode |
open-sse/executors/zcode.ts |
로컬 zcode 공급자의 stdio 클라이언트에 사용되는 바이너리입니다. 설정되지 않은 경우 PATH의 zcode를 사용합니다. |
ZCODE_ARGS |
— | open-sse/executors/zcode.ts |
cliTools를 통해 실행할 때 zcode 바이너리에 전달되는 추가 인수의 JSON 배열(문자열 최대 16개)입니다. |
ZCODE_CWD |
process.cwd() |
open-sse/executors/zcode.ts |
ZCode 앱 서버 하위 프로세스의 작업 디렉터리입니다. |
ZCODE_PROVIDER_ID |
builtin:zai-coding-plan |
open-sse/executors/zcode.ts |
앱 서버로 전송되는 공급자 ID의 재정의 값입니다. |
ZCODE_SERVER_RUNTIME_ROOT |
~/.zcode/server |
open-sse/executors/zcode.ts |
번들로 제공되는 node와 zcode-server.cjs가 위치하는 ZCode 앱 서버 런타임의 루트입니다. |
ZCODE_SERVER_NODE |
<runtimeRoot>/node |
open-sse/executors/zcode.ts |
ZCode 앱 서버를 호스팅하는 데 사용되는 Node 실행 파일입니다. |
ZCODE_SERVER_ENTRY |
<runtimeRoot>/zcode-server.cjs |
open-sse/executors/zcode.ts |
ZCode 서버를 호스팅하는 데 사용되는 앱 서버 진입점 스크립트입니다. |
ZCODE_STARTUP_TIMEOUT_MS |
10000 |
open-sse/executors/zcode.ts |
ZCode 앱 서버 실행이 실패한 것으로 간주되기까지의 시작 제한 시간(ms)입니다. |
ZCODE_RPC_TIMEOUT_MS |
30000 |
open-sse/executors/zcode.ts |
ZCode 앱 서버 호출의 요청별 RPC 제한 시간(ms)입니다. |
ZCODE_TURN_TIMEOUT_MS |
120000 |
open-sse/executors/zcode.ts |
감독자가 제한 시간 초과로 처리하기 전까지 허용되는 단일 ZCode 턴의 최대 지속 시간(ms)입니다. |
ZCODE_POLL_INTERVAL_MS |
250 |
open-sse/executors/zcode.ts |
ZCode 턴 완료 여부를 확인하는 폴링 간격(ms)입니다. |
HERMES_HOME |
~/.hermes |
src/lib/cli-helper/config-generator/hermesHome.ts |
OmniRoute가 Hermes CLI 구성을 읽고 쓰는 Hermes Agent 홈 디렉터리입니다. Windows에서 Hermes PowerShell 설치 프로그램이 설정하는 환경 변수 값(%LOCALAPPDATA%\hermes)과 일치합니다. |
CLI 프로필 자동 동기화
이 기능 플래그는 선택적으로 활성화하며 기본적으로 꺼져 있습니다. CLI Code 대시보드에서도 전환할 수 있습니다.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
OMNIROUTE_AUTO_SYNC_CODEX_PROFILES |
false |
src/shared/constants/featureFlagDefinitions.ts |
공급자 모델 동기화 후 라이브 카탈로그를 기반으로 ~/.codex/*.config.toml 프로필 파일을 자동으로 다시 작성합니다. CLI_ALLOW_CONFIG_WRITES가 필요하며, 활성/기본 Codex 구성, 인증, Codex-lb 설정 또는 공급자 선택은 절대 변경하지 않습니다. |
OMNIROUTE_AUTO_SYNC_CLAUDE_PROFILES |
false |
src/shared/constants/featureFlagDefinitions.ts |
공급자 모델 동기화 후 라이브 카탈로그를 기반으로 ~/.claude/profiles/<name>/settings.json Claude Code 프로필 파일을 자동으로 다시 작성합니다. CLI_ALLOW_CONFIG_WRITES가 필요하며, 활성/기본 Claude 구성, 인증 또는 공급자 선택은 절대 변경하지 않습니다. |
Docker 예시
# 호스트 바이너리를 컨테이너에 마운트하고 OmniRoute에 해당 위치를 지정합니다:
CLI_EXTRA_PATHS=/host-cli/bin
CLI_CONFIG_HOME=/host-home
CLI_ALLOW_CONFIG_WRITES=true
CLI_CLAUDE_BIN=/host-cli/bin/claude
CLI_CONFIG_HOME은 경로가 실제로 호스트에서 바인드 마운트된 경우에만 적용됩니다.
~/.codex:/host-home/.codex:rw와 같은 마운트와 함께 사용하세요(docker-compose.yml의
host 프로필 참조). 컨테이너 사용자 홈 내부에 있지도 않고 바인드 마운트도 아닌
경로는 무시됩니다. 해당 위치에 기록하더라도 컨테이너가 다시 생성될 때
내용이 삭제되기 때문입니다.
이미지는 USER node로 실행되므로 마운트되지 않은 /root는 유효한
재정의 경로가 아닙니다.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
OMNIROUTE_CONTAINER |
(자동) | src/shared/utils/containerEnv.ts |
컨테이너 감지를 강제로 활성화(1/true)하거나 비활성화(0/false)합니다. 자동 감지에서 누락되는 런타임에서만 필요합니다. |
OMNIROUTE_ALLOW_CONTAINER_CONFIG_WRITE |
false |
src/shared/services/cliRuntime.ts |
마운트되지 않은 컨테이너 경로에도 CLI 도구 설정을 기록할 수 있도록 허용합니다. CLI에서 이에 해당하는 옵션은 --allow-container-write입니다. |
CLI 바이너리(omniroute) 도우미
다음 변수는 위의 사이드카 감지가 아니라 omniroute CLI 바이너리 자체의 동작을
조정합니다.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
OMNIROUTE_LANG |
(시스템) | bin/cli/i18n.mjs |
CLI 출력 언어를 강제로 지정합니다. BCP-47 로캘(예: en, pt-BR)을 사용합니다. 시스템 로캘 환경 변수(LC_ALL, LC_MESSAGES)보다 우선합니다. |
OMNIROUTE_SHOW_LOG |
(미설정) | bin/cli/runtime/processSupervisor.mjs |
감독 모드에서 서버 stdout/stderr를 터미널로 전달하려면 1로 설정합니다. omniroute serve의 --log 플래그와 같습니다. |
OMNIROUTE_CLI_TOKEN |
(미설정) | bin/cli/api.mjs |
x-omniroute-cli-token 헤더로 삽입되는 머신 인증 토큰입니다. 작업 8.12에서 자동 생성됩니다. |
OMNIROUTE_HTTP_TIMEOUT_MS |
30000 |
bin/cli/api.mjs |
CLI → 서버 요청의 시도당 HTTP 시간 제한(ms)입니다. |
OMNIROUTE_READY_TIMEOUT_MS |
60000 |
bin/cli/utils/pid.mjs |
CLI가 시간 초과 경고를 출력하기 전에 서버 상태 엔드포인트를 기다리는 최대 시간(ms)입니다. 느린 콜드 스타트(예: Windows)에 유용합니다. --ready-timeout으로도 설정할 수 있습니다. |
OMNIROUTE_VERBOSE |
0 |
bin/cli/api.mjs |
CLI 명령 실행 중 재시도/백오프 진단 정보를 stderr에 출력하려면 1로 설정합니다. |
OMNIROUTE_PLUGIN_PATH |
(미설정) | bin/cli/plugins.mjs |
CLI 플러그인 검색(omniroute-cmd-* 패키지)을 위한 사용자 지정 디렉터리입니다. 설정하지 않으면 기본값은 ~/.omniroute/plugins/입니다. CLI 전용이며, OMNIROUTE_PLUGINS_DIR(섹션 2)이 가리키는 서버 측 플러그인 스캐너에는 절대 전달되지 않습니다. |
10. 내부 에이전트 및 MCP 통합
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
OMNIROUTE_BASE_URL |
자동 감지 | open-sse/mcp-server/server.ts |
MCP/A2A 도구가 OmniRoute에 접근할 때 사용할 명시적 URL입니다. localhost 자동 감지를 재정의합니다. |
OMNIROUTE_API_KEY |
(설정되지 않음) | MCP/A2A 모듈 | 내부 MCP 도구 및 A2A 스킬 호출을 위한 API 키입니다. |
OMNIROUTE_API_KEY_ID |
(설정되지 않음) | open-sse/mcp-server/audit.ts |
MCP 감사 로그 귀속에 사용되는 키 ID입니다. |
ROUTER_API_KEY |
(설정되지 않음) | 레거시 | OMNIROUTE_API_KEY의 레거시 별칭입니다. |
OMNIROUTE_A2A_HISTORY_RETENTION_DAYS |
30 |
src/lib/a2a/taskManager.ts |
매일 정리 작업이 행을 삭제하기 전까지 로컬 데이터베이스에 A2A 작업 기록을 보관하는 일수입니다. 설정되지 않았거나 숫자가 아니거나 <= 0이면 30으로 대체됩니다. |
OMNIROUTE_A2A_MEMORY_HITS |
1 |
src/lib/a2a/taskExecution.ts |
A2A 메모리 적중 관찰성 기능을 위한 킬 스위치입니다. 0으로 설정하면 작업에 대한 메모리 회수 조회를 완전히 건너뛰며, 그 외의 값은 설정되지 않은 경우를 포함하여 기능을 활성화 상태로 유지합니다. |
OMNIROUTE_ISSUE_AGENT_ENABLED |
false |
src/app/api/issue-agent/runs/route.ts |
오프라인/로컬 Issue Agent 기록 기반 트리아지 엔드포인트를 활성화합니다. 로컬 기록 기반 트리아지 워크플로를 명시적으로 실행하는 경우가 아니라면 비활성화 상태로 두십시오. |
OMNIROUTE_ISSUE_AGENT_TIMEOUT_MS |
(설정되지 않음) | src/lib/issueAgent/execution.ts |
단일 Issue Agent 기록 기반 트리아지 실행의 제한 시간(ms)입니다. 내부 최댓값으로 제한되며, 설정되지 않았거나 유효하지 않으면 기본 제공 값으로 대체됩니다. |
OMNIROUTE_CONTEXT |
(활성 컨텍스트) | bin/cli/program.mjs, bin/cli/api.mjs |
omniroute 명령을 위한 CLI 원격 모드 컨텍스트/프로필입니다. 로컬 컨텍스트 저장소의 활성 컨텍스트를 재정의합니다. --context <name>과 동일합니다. |
OMNIROUTE_CONTEXT_KEYCHAIN_DISABLED |
0 |
bin/cli/contexts.mjs |
CLI 컨텍스트 자격 증명을 위한 선택적 keytar OS 키체인 백엔드를 비활성화합니다. 활성화하면 자격 증명은 config.json의 0600 모드로 유지되고 CLI는 일회성 대체 동작 경고를 표시합니다. 의도적인 헤드리스/컨테이너 운영을 위한 설정입니다. |
OMNIROUTE_MCP_ENFORCE_SCOPES |
true |
open-sse/mcp-server/server.ts |
MCP 도구 호출에 범위 기반 접근 제어를 적용합니다. |
OMNIROUTE_MCP_SCOPES |
(전체) | open-sse/mcp-server/server.ts |
쉼표로 구분된 범위: admin, combos, health, models, routing, budget, metrics, pricing, memory, skills. |
OMNIROUTE_MCP_COMPRESS_DESCRIPTIONS |
false |
open-sse/mcp-server/descriptionCompressor.ts |
매니페스트를 직렬화하기 전에 MCP 도구 설명을 압축합니다. 활성화 값: 1, true, on. |
OMNIROUTE_MCP_DESCRIPTION_COMPRESSION |
rtk |
open-sse/mcp-server/descriptionCompressor.ts |
압축 알고리즘/프로필입니다. 비활성화 값: 0, false, off. |
OMNIROUTE_MCP_FETCH_TIMEOUT_MS |
10000 |
open-sse/mcp-server/fetchTimeout.ts |
MCP 서버 내부 관리 조회(상태, 복원력, 조합, 할당량, 사용량)의 중단 제한 시간(ms)입니다. |
OMNIROUTE_MCP_UPSTREAM_TIMEOUT_MS |
60000 |
open-sse/mcp-server/fetchTimeout.ts |
공급자를 기다리는 MCP 홉(route_request, web_search, web_fetch)의 중단 제한 시간(ms). |
OMNIROUTE_CORPUS_CACHE_SIZE |
5 |
src/lib/localCorpus/configured.ts |
메모리에 캐시되는 로컬 코퍼스 인덱스 인스턴스의 최대 개수(LRU, 인덱싱된 루트 디렉터리당 하나). 최솟값 1로 제한됩니다. |
MODEL_SYNC_INTERVAL_HOURS |
24 |
src/shared/services/modelSyncScheduler.ts |
모델 카탈로그 동기화 간격(시간). |
PROVIDER_LIMITS_SYNC_INTERVAL_MINUTES |
70 |
src/lib/usage/providerLimits.ts |
공급자 속도 제한 및 할당량 폴링 간격. |
PROVIDER_LIMITS_SYNC_SPACING_MS |
1500 |
src/lib/usage/providerLimits.ts |
일괄 동기화에서 연속 OAuth 할당량 가져오기 사이의 간격(ms). 업스트림에 요청이 폭주하지 않도록 OAuth 연결을 한 번에 하나씩 가져옵니다. 0으로 설정하면 이 동작을 사용하지 않고 동시에 가져옵니다. |
OMNIROUTE_QUOTA_FETCH_MIN_INTERVAL_MS |
250 |
open-sse/services/quotaFetchThrottle.ts |
요청별 사전 확인/모니터링 경로에서 연속 업스트림 할당량 가져오기 사이의 최소 간격(ms). 하나의 IP에 여러 계정이 있을 때 업스트림에 요청이 폭주하지 않도록 동시 네트워크 호출에 간격을 둡니다. Codex(/wham/usage), DeepSeek, Bailian(두 가져오기 지점 모두), OpenCode 및 Crof 할당량 가져오기 기능에 연결됩니다(#6009, #6911). 일반 usage.ts::getUsageForProvider 디스패치 경로(github/glm/minimax/nanogpt/xai/etc.)에는 아직 적용되지 않았으며 별도로 추적 중입니다. 캐시 적중에는 영향을 주지 않습니다. 0은 비활성화하며 0..5000 범위로 제한됩니다. |
PROVIDER_LIMITS_POST_USAGE_REFRESH_DELAY_MS |
5000 |
src/lib/usage/providerLimits.ts |
실제 사용 이벤트 후 공급자 제한을 새로 고치기 전의 지연 시간(ms). 업스트림 할당량 API가 사용량을 반영할 시간을 제공합니다. |
OMNIROUTE_LOGIN_BROWSER_PATH |
자동 감지 | open-sse/services/adobeFireflyBrowserLogin.ts |
대화형 Adobe Firefly 로그인 및 화면 밖 갱신에 사용되는 시스템 Chrome 또는 Edge 실행 파일의 절대 경로. |
ADOBE_FIREFLY_BROWSER_REFRESH |
활성화 | open-sse/services/adobeFireflySession.ts |
계정 범위의 Chrome CDP 세션을 사용하여 IMS 및 브라우저 위험 상태를 최신으로 유지합니다. 브라우저 갱신을 비활성화하려면 0으로 설정하세요. |
ADOBE_FIREFLY_SESSION_DISK |
활성화 | open-sse/services/adobeFireflySession.ts |
복구된 Adobe 세션을 DATA_DIR 아래에 저장하여 프로세스가 다시 시작되어도 유지합니다. 세션을 메모리에만 유지하려면 0으로 설정하세요. |
ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS |
12000 |
open-sse/services/adobeFireflySession.ts |
Adobe Firefly 생성 제출 사이의 최소 간격(밀리초). 0은 간격 적용을 비활성화합니다. |
ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS |
15000 |
open-sse/services/adobeFireflySession.ts |
Adobe 제출이 세 번 성공할 때마다 적용되는 추가 대기 시간(밀리초). |
ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS |
8000 |
open-sse/services/adobeFireflyClient.ts |
일시적인 Adobe 408 응답 후의 기본 백오프 시간(밀리초). 최대 5번의 시도에 걸쳐 제출 간격과 함께 적용됩니다. |
OMNIROUTE_DISABLE_BACKGROUND_SERVICES |
false |
src/instrumentation-node.ts |
모든 백그라운드 서비스(동기화, 가격 책정, 모델 새로 고침)를 비활성화합니다. CI/테스트에 유용합니다. |
OMNIROUTE_ENABLE_RUNTIME_BACKGROUND_TASKS |
(설정되지 않음) | src/lib/config/runtimeSettings.ts |
자동화된 테스트가 감지된 경우에도 백그라운드 작업을 강제로 활성화합니다. 테스트 휴리스틱을 재정의하려면 1로 설정하세요. |
OMNIROUTE_BUDGET_RESET_JOB_INTERVAL_MS |
600000 |
src/lib/jobs/budgetResetJob.ts |
예산 재설정 확인 주기(ms). 최솟값은 10000입니다. |
OMNIROUTE_CONNECTION_RECOVERY_INTERVAL_MS |
60000 |
src/lib/quota/connectionRecovery.ts |
선제적 연결 쿨다운 복구 주기(ms): 요청 핫 패스 외부에서 일시적인 rate_limited_until이 만료된 연결을 다시 검증합니다. 최솟값은 5000입니다. |
OMNIROUTE_DISABLE_CONNECTION_RECOVERY |
false |
src/lib/quota/connectionRecovery.ts |
선제적 연결 쿨다운 복구 스케줄러를 비활성화합니다(getProviderCredentials의 지연 복구는 계속 적용됩니다). |
OMNIROUTE_REASONING_CACHE_CLEANUP_INTERVAL_MS |
1800000 |
src/lib/jobs/reasoningCacheCleanupJob.ts |
추론 캐시 정리 주기(ms). 최솟값은 60000입니다. |
OMNIROUTE_REASONING_MIN_BUDGET |
설정되지 않음 (비활성화) | open-sse/services/reasoningTokenBuffer.ts |
사고 모델 출력 예산에 대한 선택적 최솟값: [256, 최솟값) 범위의 호출자 max_tokens를 최솟값으로 올립니다(모델 출력 한도로 제한됨). 설정하지 않으면 클라이언트 예산이 늘어나지 않습니다(#9507). |
OMNIROUTE_LOG_EXPORT_CRON |
0 * * * * |
src/lib/jobs/logExportJob.ts |
활성화된 모든 로그 내보내기 대상을 비우는 호출 로그 내보내기 작업의 Cron 표현식(UTC). |
OMNIROUTE_CONFIG_HOT_RELOAD_MS |
5000 |
src/lib/config/hotReload.ts |
구성 핫 리로드의 폴링 간격(ms). 1000 미만은 거부됩니다. |
OMNIROUTE_DISABLE_REDIS_AUTH_CACHE |
(활성화됨) | src/lib/db/apiKeys.ts |
Redis 기반 API 키 인증 캐시를 우회하려면 1로 설정합니다(DB 읽기를 강제함). |
OMNIROUTE_RTK_TRUST_PROJECT_FILTERS |
0 |
open-sse/services/compression/engines/rtk/filterLoader.ts |
엄격한 서명 검사 없이 사용자가 관리하는 RTK 프로젝트 필터 규칙을 신뢰합니다. |
OMNIROUTE_LITE_MAX_TOOL_LENGTH |
2000 |
open-sse/services/compression/lite.ts |
lite.maxToolLength가 설정되지 않은 경우 Lite 선제적 도구 결과 잘림에 적용할 문자 수 한도입니다. 범위는 256~1000000입니다. 대시보드 설정이 이 환경 변수보다 우선합니다. |
OMNI_COMPRESSION_WORKERS |
2 |
open-sse/services/compression/compressionWorkerPool.ts |
동시에 실행할 수 있는 동기식 RTK/Caveman 워커의 최대 수입니다. 초과 작업은 FIFO 순서로 대기합니다. |
OMNI_COMPRESSION_WORKER_TIMEOUT_MS |
120000 |
open-sse/services/compression/compressionWorkerPool.ts |
작업별 제한 시간(밀리초)입니다. 제한 시간을 초과한 워커는 종료되며 요청은 변경되지 않은 상태로 실패를 허용합니다. |
OMNI_COMPRESSION_WORKER_IDLE_MS |
60000 |
open-sse/services/compression/compressionWorkerPool.ts |
사용되지 않는 압축 워커가 종료되기 전까지의 유휴 수명(밀리초)입니다. |
COMPRESSION_PIPELINE_BREAKER_ENABLED |
false |
open-sse/services/compression/pipelineEngineBreaker.ts |
T02 스택형 파이프라인의 엔진별 서킷 브레이커 마스터 스위치입니다. 선택적 활성화(기본값: 꺼짐) — 켜면 여러 요청에서 반복적으로 예외를 발생시키는 엔진을 쿨다운 동안 건너뜁니다(실패 허용). 끄면 바이트 단위로 동일한 레거시 동작을 유지합니다. |
COMPRESSION_PIPELINE_BREAKER_THRESHOLD |
3 |
open-sse/services/compression/pipelineEngineBreaker.ts |
엔진의 브레이커가 열리기 전까지 허용되는 요청 간 연속 실패 횟수입니다. |
COMPRESSION_PIPELINE_BREAKER_COOLDOWN_MS |
30000 |
open-sse/services/compression/pipelineEngineBreaker.ts |
열린 엔진을 하프 오픈 프로브 전에 건너뛰는 시간(밀리초)입니다. |
COMPRESSION_CCR_RETRIEVAL_RAMP_FACTOR |
2 |
open-sse/services/compression/engines/ccr/index.ts |
T08/H8 CCR 검색 피드백 램프: 저장된 블록이 이전에 검색된 횟수마다 유효 minChars가 선형으로 증가합니다(자주 검색되는 콘텐츠는 압축률이 낮아지며, >=3회 검색되면 압축하지 않음). 1은 램프를 비활성화합니다(임계값에서만 이진 방식으로 건너뜀). |
COMPRESSION_CCR_DURABLE_STORE |
true |
open-sse/services/compression/engines/ccr/index.ts |
CCR 영구 블록 저장소(#9061). 메모리 내 저장소를 SQLite로 보완하여 LRU 축출, TTL, 재시작 또는 다른 인스턴스에 도착한 조회 요청에도 블록이 유지되도록 합니다. 블록을 메모리에만 유지하려면 false로 설정하세요. 512KB를 초과하는 블록과 클라우드 런타임은 설정과 관계없이 메모리에만 유지됩니다. |
COMPRESSION_PREFIX_FREEZE_ENABLED |
false |
open-sse/services/compression/prefixFreeze.ts |
T08/H5 사용 관찰 기반 접두사 고정 마스터 스위치입니다. 옵트인(기본값: 꺼짐) — 활성화하면 임계값 이상(>=) 관찰된 시스템 프롬프트를 안정적으로 캐시 가능한 접두사로 간주하며, 정적 캐시 휴리스틱이 감지하지 못하는 제공자에서도 압축되지 않도록 보존합니다(고정은 보존만 하며 절대로 변경하지 않습니다). |
COMPRESSION_PREFIX_FREEZE_THRESHOLD |
3 |
open-sse/services/compression/prefixFreeze.ts |
시스템 프롬프트를 고정된 안정적 접두사로 간주하기 전에 필요한 관찰 횟수입니다. |
OMNIROUTE_BOOTSTRAPPED |
false |
src/app/(dashboard)/dashboard/page.tsx |
초기 설정 후 부트스트랩 스크립트가 true로 설정합니다. 설정 마법사의 표시 여부를 제어합니다. |
OMNIROUTE_ALLOW_BODY_PROJECT_OVERRIDE |
0 |
open-sse/executors/antigravity.ts |
탈출구: 요청 본문이 Antigravity 프로젝트 필드를 재정의하도록 허용합니다. |
ANTIGRAVITY_CREDITS |
off |
open-sse/services/antigravityCredits.ts |
Google One AI 크레딧 정책: off는 크레딧을 삽입하지 않고, retry는 삽입 가능한 할당량 429 오류 후 한 번 삽입하며, always는 첫 번째 요청에 삽입합니다. |
ANTIGRAVITY_ALLOW_SIGNATURE_BYPASS |
0 |
open-sse/translator/request/openai-to-gemini.ts |
업스트림이 실제 서명을 거부할 때 Antigravity 요청 변환기가 엄격한 CLI 요청 서명 검증을 건너뛰도록 허용합니다(디버그/구형 CLI 모드). 0이 아닌 값은 우회를 활성화합니다. |
AGY_TOKEN_FILE |
~/.gemini/antigravity-cli/antigravity-oauth-token |
src/app/api/providers/agy-auth/apply-local/route.ts |
자동 감지 로컬 로그인 가져오기에 사용되는 Antigravity CLI(agy) 토큰 파일 경로를 재정의합니다. |
OAuth CLI 브리지(내부)
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
OMNIROUTE_SERVER |
자동 감지 | src/lib/oauth/config/index.ts |
CLI↔OmniRoute 인증 브리지의 서버 URL입니다. |
OMNIROUTE_TOKEN |
(설정되지 않음) | src/lib/oauth/config/index.ts |
CLI 브리지의 인증 토큰입니다. |
OMNIROUTE_USER_ID |
cli |
src/lib/oauth/config/index.ts |
CLI 브리지 세션의 사용자 ID입니다. |
SERVER_URL |
(설정되지 않음) | src/lib/oauth/config/index.ts |
OMNIROUTE_SERVER의 레거시 별칭입니다. |
CLI_TOKEN |
(설정되지 않음) | src/lib/oauth/config/index.ts |
OMNIROUTE_TOKEN의 레거시 별칭입니다. |
CLI_USER_ID |
(설정되지 않음) | src/lib/oauth/config/index.ts |
OMNIROUTE_USER_ID의 레거시 별칭입니다. |
11. OAuth 공급자 자격 증명
localhost 개발을 위한 기본 제공 자격 증명입니다. 원격 배포의 경우 각 공급자의 개발자 콘솔에서 자체 자격 증명을 등록하세요.
| 변수 | 공급자 | 참고 |
|---|---|---|
CLAUDE_OAUTH_CLIENT_ID |
Claude Code (Anthropic) | 공개 클라이언트 — 비밀 정보가 필요하지 않습니다. |
CLAUDE_CODE_REDIRECT_URI |
Claude Code | 리디렉션 URI를 재정의합니다. 기본값: https://platform.claude.com/oauth/code/callback |
CODEX_OAUTH_CLIENT_ID |
Codex / OpenAI | 공개 클라이언트입니다. |
GEMINI_OAUTH_CLIENT_ID |
Gemini (Google) | 이에 대응하는 _SECRET이 필요합니다. |
GEMINI_OAUTH_CLIENT_SECRET |
Gemini (Google) | — |
KIMI_CODING_OAUTH_CLIENT_ID |
Kimi Coding (Moonshot) | 공개 클라이언트입니다. |
ANTIGRAVITY_OAUTH_CLIENT_ID |
Antigravity (Google) | 이에 대응하는 _SECRET이 필요합니다. |
ANTIGRAVITY_OAUTH_CLIENT_SECRET |
Antigravity (Google) | — |
GITHUB_OAUTH_CLIENT_ID |
GitHub Copilot | 공개 클라이언트입니다. |
GHE_COPILOT_OAUTH_CLIENT_ID |
GHE Copilot | GitHub Enterprise Copilot의 OAuth 클라이언트 ID를 선택적으로 재정의합니다. 설정하지 않으면 GITHUB_OAUTH_CLIENT_ID의 공개 기본값을 사용합니다. |
WINDSURF_API_KEY |
Windsurf / Devin (v3.8) | 연결별 자격 증명을 사용할 수 없을 때 open-sse/executors/devin-cli.ts에서 사용하는 대체 API 키입니다. 선택 사항입니다. |
CLI_DEVIN_BIN |
Devin CLI (v3.8) | Devin CLI 바이너리(devin)의 사용자 지정 경로입니다. open-sse/executors/devin-cli.ts에서 해석됩니다. |
GITLAB_DUO_OAUTH_CLIENT_ID |
GitLab Duo (v3.8) | GitLab Duo용 OAuth 클라이언트 ID입니다. 리디렉션 URI를 <NEXT_PUBLIC_BASE_URL>/callback로, 범위를 api, read_user, openid, profile, email로 설정하여 https://gitlab.com/-/profile/applications에서 앱을 등록하세요. GITLAB_OAUTH_CLIENT_ID를 대체 값으로 사용합니다. |
GITLAB_DUO_OAUTH_CLIENT_SECRET |
GitLab Duo (v3.8) | GitLab Duo용 OAuth 클라이언트 비밀 정보입니다. 선택 사항입니다. PKCE 흐름에는 비밀 정보가 필요하지 않습니다. GITLAB_OAUTH_CLIENT_SECRET을 대체 값으로 사용합니다. |
GITLAB_DUO_BASE_URL |
GitLab Duo (v3.8) | GitLab 기본 URL(자체 호스팅 GitLab)을 재정의합니다. 기본값은 https://gitlab.com입니다. GITLAB_BASE_URL을 대체 값으로 사용합니다. |
GITLAB_BASE_URL |
GitLab Duo (v3.8) | GITLAB_DUO_BASE_URL의 레거시 대체 값입니다. _DUO_ 변형이 설정되지 않은 경우 사용됩니다. |
GITLAB_OAUTH_CLIENT_ID |
GitLab Duo (v3.8) | src/lib/oauth/constants/oauth.ts에서 사용하는 GITLAB_DUO_OAUTH_CLIENT_ID의 레거시 대체 값입니다. |
GITLAB_OAUTH_CLIENT_SECRET |
GitLab Duo (v3.8) | src/lib/oauth/constants/oauth.ts에서 사용하는 GITLAB_DUO_OAUTH_CLIENT_SECRET의 레거시 대체 값입니다. |
QODER_OAUTH_CLIENT_SECRET |
Qoder | — |
QODER_OAUTH_AUTHORIZE_URL |
Qoder | Qoder OAuth를 활성화하려면 설정합니다. |
QODER_OAUTH_TOKEN_URL |
Qoder | — |
QODER_OAUTH_USERINFO_URL |
Qoder | — |
QODER_OAUTH_CLIENT_ID |
Qoder | — |
QODER_PERSONAL_ACCESS_TOKEN |
Qoder | 직접 API 키 대체 값입니다(OAuth를 우회함). |
QODER_CLI_WORKSPACE |
Qoder | Qoder CLI의 워크스페이스 ID입니다. |
OMNIROUTE_QODER_WORKSPACE |
Qoder | QODER_CLI_WORKSPACE의 별칭입니다. |
QODER_CLI_CONFIG_DIR |
Qoder | Qoder CLI 구성 디렉터리를 재정의합니다(격리된 PAT 세션을 사용하여 브라우저 로그인을 덮어쓰지 않도록 함). |
BLACKBOX_WEB_VALIDATED_TOKEN |
Blackbox Web | /api/chat에서 validated로 전송할 프런트엔드 tk 토큰입니다. Blackbox에서 토큰 일치를 강제하는 경우 필요하며, 그렇지 않으면 OmniRoute가 임의의 UUID를 대체 값으로 사용합니다. 이슈 #2252를 참조하세요. |
VISION_BRIDGE_BASE_URL |
Vision Bridge 가드레일 | Anthropic 이외의 비전 브리지 호출을 위한 OpenAI 호환 기본 URL입니다. 기본값은 레거시 OpenAI URL 환경 변수 또는 api.openai.com입니다. OmniRoute의 /v1 자체 루프나 OpenAI 호환 엔드포인트(Gemini OpenAI 호환, OpenRouter)를 지정하세요. 이슈 #2232. URL이 OmniRoute 자체의 /v1인 경우, 설명 하위 요청은 x-omniroute-admission-bypass: internal을 전송하고 확인된 자체 루프 자격 증명(로컬 모드에서는 sk_omniroute 센티널, 또는 OMNIROUTE_API_KEY / ROUTER_API_KEY — #1350)으로 인증하므로 REQUIRE_API_KEY=true 배포에서도 작동합니다. |
VISION_BRIDGE_API_KEY |
Vision Bridge 가드레일 | 위 URL의 API 키입니다. Anthropic 이외의 비전 브리지 호출에서 공급자별 OpenAI / Google 환경 변수를 재정의합니다. Anthropic 모델은 전용 Anthropic 키 경로를 그대로 사용합니다. 이슈 #2232. |
Warning
- Google Cloud Console → Credentials로 이동합니다.
- OAuth 2.0 클라이언트 ID를 생성합니다(유형: "웹 애플리케이션").
- 서버 URL을 승인된 리디렉션 URI로 추가합니다.
.env의 자격 증명 값을 교체합니다.
12. 제공자 User-Agent 재정의
각 업스트림 제공자에 전송되는 User-Agent 헤더를 재정의합니다. 이 값은 실행기 기본 클래스가 런타임에 동적으로 확인합니다:
process.env[`${PROVIDER_ID}_USER_AGENT`]
출처:
open-sse/executors/base.ts→buildHeaders()
| 변수 | 기본값 | 업데이트 시점 | |
|---|---|---|---|
CLAUDE_USER_AGENT |
claude-cli/2.1.258 (external, cli) |
Anthropic이 새 CLI 버전을 출시할 때 | |
CLAUDE_DISABLE_TOOL_NAME_CLOAK |
false |
executors/base.ts + executors/cliproxyapi.ts |
1/true로 설정하면 Anthropic으로 연결되는 두 경로(네이티브 OAuth 및 CLIProxyAPI) 모두에서 서드파티 하네스 도구 이름을 그대로 Anthropic에 전달합니다. 기본적으로 실행기는 Claude Code가 아닌 도구 이름에 결정론적으로 별칭을 지정하고(Claude Code 표준 매핑이 있으면 해당 매핑을 사용하고, 그렇지 않으면 PascalCase 사용), 응답에서 _toolNameMap을 통해 원래 이름으로 되돌립니다. 따라서 snake_case 도구를 사용하는 하네스가 핑거프린팅된 서드파티 클라이언트로 간주되어 거부되지 않습니다. 디버깅 전용입니다. |
CODEX_USER_AGENT |
codex-cli/0.142.0 (Windows 10.0.26200; x64) |
OpenAI가 Codex CLI를 업데이트할 때 | |
CODEX_CLIENT_VERSION |
0.131.0 |
전체 UA 문자열과 별개로 Codex 클라이언트 버전을 재정의할 때 | |
CLAUDE_CODE_CLIENT_VERSION |
2.1.258 |
CLAUDE_USER_AGENT와 별개로 표시되는 Claude Code 버전을 재정의할 때. Anthropic은 이 값에 따라 일부 모델의 사용을 제한합니다(#12417). |
|
GITHUB_COPILOT_CLI_VERSION |
1.0.81-6 |
GITHUB_USER_AGENT와 별개로 표시되는 Copilot CLI 버전을 재정의할 때 |
|
GITHUB_USER_AGENT |
GitHubCopilotChat/0.54.0 |
GitHub Copilot Chat이 업데이트될 때 | |
ANTIGRAVITY_USER_AGENT |
antigravity/2.0.1 darwin/arm64 |
Antigravity IDE가 업데이트될 때 | |
KIRO_USER_AGENT |
AWS-SDK-JS/3.0.0 kiro-ide/1.0.0 |
Kiro IDE가 업데이트될 때 | |
KIRO_OAUTH_CLIENT_ID |
kiro-cli |
Kiro 소셜 디바이스 코드의 clientId(공개 ID)를 재정의할 때 |
|
KIRO_VERIFY_FULL_CRC |
false |
선택 사항: Kiro 이벤트 스트림에서 전체 프레임별 메시지 CRC 검증을 활성화할 때(손상된 스트림 디버깅) | |
QODER_USER_AGENT |
Qoder-Cli |
Qoder CLI가 업데이트될 때 | |
CURSOR_USER_AGENT |
Cursor/3.3 |
Cursor가 업데이트될 때 |
Tip
{PROVIDER_ID}_USER_AGENT패턴을 사용하여 모든 제공자에 대한 User-Agent 재정의를 추가할 수 있습니다. 실행기는 환경 변수 이름을 동적으로 구성합니다.
13. CLI 지문 호환성
활성화하면 OmniRoute는 공식 CLI 도구의 정확한 시그니처와 일치하도록 HTTP 헤더와 JSON 본문 필드의 순서를 재정렬합니다. 이를 통해 프록시 IP를 유지하면서 계정이 플래그 처리될 위험을 줄일 수 있습니다.
소스: open-sse/config/cliFingerprints.ts, open-sse/executors/base.ts
제공업체별 설정
| 변수 | 활성화 조건 | 효과 |
|---|---|---|
CLI_COMPAT_CODEX |
=1 |
Codex CLI 요청 시그니처를 모방합니다 |
CLI_COMPAT_CLAUDE |
=1 |
Claude Code 요청 시그니처를 모방합니다 |
CLI_COMPAT_GITHUB |
=1 |
GitHub Copilot 요청 시그니처를 모방합니다 |
CLI_COMPAT_ANTIGRAVITY |
=1 |
Antigravity 요청 시그니처를 모방합니다 |
CLI_COMPAT_CURSOR |
=1 |
Cursor 요청 시그니처를 모방합니다 |
CLI_COMPAT_KIMI_CODING |
=1 |
Kimi Coding 요청 시그니처를 모방합니다 |
CLI_COMPAT_KILOCODE |
=1 |
Kilo Code 요청 시그니처를 모방합니다 |
CLI_COMPAT_CLINE |
=1 |
Cline 요청 시그니처를 모방합니다 |
전역 설정
| 변수 | 활성화 조건 | 효과 |
|---|---|---|
CLI_COMPAT_ALL |
=1 |
모든 제공업체의 지문 호환성을 한 번에 활성화합니다. |
Kimi Coding CLI ID 재정의
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
KIMI_CLI_VERSION |
1.36.0 |
src/lib/oauth/providers/kimi-coding.ts |
OAuth/API 호출 중 전송되는 Kimi CLI 버전을 재정의합니다. |
KIMI_CODING_DEVICE_ID |
(캡처된 기본값) | src/lib/oauth/providers/kimi-coding.ts |
클라이언트 헤더에 사용되는 캡처된 Kimi 기기 ID를 재정의합니다. |
Note
이 기능은 User-Agent 재정의(§12)와 함께 작동합니다. 지문 시스템은 헤더 순서와 본문 필드 순서를 처리하며, User-Agent 재정의는 특정 UA 문자열을 처리합니다. 두 기능은 서로 독립적으로 활성화할 수 있습니다.
14. API 키 제공업체
직접 인증을 사용하는 제공업체의 API 키입니다. 권장 설정 방법: 대시보드 → 제공업체 → API 키 추가.
Docker 또는 헤드리스 배포에서는 환경 변수를 통한 설정을 대안으로 사용할 수 있습니다.
인식되는 패턴: {PROVIDER_ID}_API_KEY
| 변수 | 제공업체 |
|---|---|
DEEPSEEK_API_KEY |
DeepSeek |
NVIDIA_API_KEY |
NVIDIA NIM |
JINA_AI_API_KEY |
Jina AI (Foundation API + Reader 대체 경로) |
JINA_API_KEY |
Jina AI (JINA_AI_API_KEY의 별칭) |
GEMINI_API_KEY |
Gemini (Google AI Studio) 임베딩 + 채팅 대체 경로 |
GOOGLE_API_KEY |
Gemini (GEMINI_API_KEY의 별칭) |
Note
Groq, xAI, Mistral, Perplexity, Together AI, Fireworks, Cerebras, Cohere, Nebius 및 Qianfan의 정적
${PROVIDER}_API_KEY항목은 런타임에서 더 이상 읽지 않으므로 v3.8.0에서 제거되었습니다. 이러한 제공업체는 대시보드 /data/provider-credentials.json/ 암호화된 DB에만 의존합니다. 마이그레이션 경로는 이 문서 하단의 감사: 제거된 변수 / 사용되지 않는 변수 섹션을 참조하세요.
Tip
대시보드에서 설정한 키는 SQLite에 암호화되어 저장되며 환경 변수보다 우선합니다.
Jina: 대시보드에
jina-ai(또는 공유jina-reader) 연결이 있으면jina-ai/…임베딩, 재순위화, 분류, 분할 및jina-search는 클러스터 환경 키에 비용을 청구하지 않습니다.getProviderCredentials는 먼저 채우는 방식을 사용합니다.JINA_AI_API_KEY/JINA_API_KEY는 사용 가능한 대시보드 키가 없는 경우에만 사용됩니다. 호출 로그에서는 환경 변수 대체 경로를connection_id=env:JINA_AI_API_KEY로 표시합니다. Reader 카드(jina-reader,r.jina.ai)는/v1/embeddings또는/v1/rerank를 제공하지 않습니다.Gemini:
gemini/gemini-embedding-2(별칭google/gemini-embedding-2)는 대시보드의gemini연결을 우선 사용합니다.GEMINI_API_KEY/GOOGLE_API_KEY는 사용 가능한 대시보드 키가 없는 경우에만 사용됩니다. 호출 로그에서는 환경 변수 대체 경로를connection_id=env:GEMINI_API_KEY로 표시합니다. 네이티브 멀티모달 트래픽은:embedContent/:batchEmbedContents에 대해x-goog-api-key를 사용하며, N개의 OpenAIinput항목은 N개의 벡터가 됩니다.
15. 타임아웃 설정
모든 값의 단위는 밀리초입니다. src/shared/utils/runtimeTimeouts.ts에서 중앙 집중식으로 결정됩니다.
타임아웃 계층 구조
REQUEST_TIMEOUT_MS (전역 재정의)
├─→ FETCH_TIMEOUT_MS (업스트림 제공자 호출, 기본값: 600000)
│ ├─→ FETCH_HEADERS_TIMEOUT_MS (FETCH_TIMEOUT_MS에서 상속)
│ ├─→ FETCH_BODY_TIMEOUT_MS (FETCH_TIMEOUT_MS에서 상속)
│ ├─→ TLS_CLIENT_TIMEOUT_MS (FETCH_TIMEOUT_MS에서 상속)
│ │ └── TLS_FIRST_BYTE_WATCHDOG_MS (독립적, 기본값: 10000)
│ ├── RESPONSES_FIRST_BYTE_TIMEOUT_MS (독립적, 기본값: 15000)
│ ├── FETCH_CONNECT_TIMEOUT_MS (독립적, 기본값: 30000)
│ └── FETCH_KEEPALIVE_TIMEOUT_MS (독립적, 기본값: 4000)
├─→ STREAM_IDLE_TIMEOUT_MS (REQUEST_TIMEOUT_MS에서 상속, 기본값: 600000)
├─→ STREAM_ACTIVE_TIMEOUT_MS (독립적, 기본값: 1260000; 0이면 비활성화)
├─→ STREAM_READINESS_TIMEOUT_MS (REQUEST_TIMEOUT_MS에서 상속, 기본값: 80000)
├─→ STREAM_READINESS_MAX_TIMEOUT_MS (적응형 준비 시간 연장의 상한값, 기본값: 180000)
└─→ API_BRIDGE_PROXY_TIMEOUT_MS (REQUEST_TIMEOUT_MS에서 상속, 기본값: 30000)
├─→ API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS (파생값, 기본값: 300000)
├── API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS (기본값: 60000)
├── API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS (기본값: 5000)
└── API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS (기본값: 0 = 비활성화)
| 변수 | 기본값 | 설명 |
|---|---|---|
REQUEST_TIMEOUT_MS |
(설정되지 않음) | 전역 단축 설정 — FETCH_TIMEOUT_MS와 STREAM_IDLE_TIMEOUT_MS의 기본값을 모두 재정의합니다. |
FETCH_TIMEOUT_MS |
600000 |
업스트림 제공자 호출에 대한 전체 HTTP 요청 제한 시간입니다. |
STREAM_IDLE_TIMEOUT_MS |
600000 |
중단하기 전까지 허용되는 업스트림 원시 바이트 간 최대 무응답 시간입니다. 확장 사고 모델은 90초를 초과해 일시 중지하는 경우가 드뭅니다. |
STREAM_ACTIVE_TIMEOUT_MS |
1260000 |
활성 SSE 스트림의 최대 총 수명입니다. 업스트림 바이트가 수신되어도 재설정되지 않으며 REQUEST_TIMEOUT_MS와 독립적입니다. 레지스트리에서 모델별로 가장 큰 timeoutMs(1200000, Codex)에 60000의 여유 시간을 더해 산출되므로, 전체 시간 예산을 사용하도록 허용된 모델이 응답 도중 종료되지 않습니다. 비활성화하려면 0으로 설정합니다. |
OMNIROUTE_SSE_COMMENTS |
(비활성화됨) | OmniRoute가 SSE : 주석 줄(예: : keepalive 하트비트 및 x-omniroute-* 메타데이터 트레일러)을 내보낼 수 있는지 여부입니다. 엄격한 OpenAI 호환 클라이언트가 모든 SSE 줄에 JSON.parse를 수행하고 : 주석에서 충돌하므로 기본적으로 비활성화됩니다(#10524). data: 하트비트에는 영향이 없습니다. 다시 활성화하려면 on/true/1/yes로 설정합니다. open-sse/utils/sseHeartbeat.ts에서 사용됩니다. |
STREAM_READINESS_TIMEOUT_MS |
80000 |
첫 번째 비핑 SSE 이벤트를 수신할 때까지의 시간입니다. REQUEST_TIMEOUT_MS가 설정된 경우 해당 값을 상속합니다. |
STREAM_READINESS_MAX_TIMEOUT_MS |
180000 |
규모가 크거나 도구 사용이 많거나 고도의 추론이 필요한 스트리밍 요청에 대한 최대 적응형 첫 이벤트 준비 대기 시간입니다. |
OMNIROUTE_AGENT_GOAL_POLICY_ENABLED |
true |
/goal 휴리스틱의 킬 스위치입니다. 감지를 완전히 비활성화하려면 false/0/off로 설정합니다. 이 경우 요청 본문/헤더에 의해 준비 제한 시간 및 스트림 복구 수준이 상향되지 않으므로, 클라이언트가 제어하는 제한 시간 증폭을 완화할 수 있습니다. |
OMNIROUTE_AGENT_GOAL_READINESS_MAX_TIMEOUT_MS |
600000 |
감지된 /goal 에이전트 실행 또는 x-omniroute-agent-goal로 강제된 요청에 대한 최대 첫 이벤트 준비 대기 시간입니다. |
OMNIROUTE_AGENT_GOAL_STREAM_RECOVERY |
true |
감지된 /goal 에이전트 실행에 대해 조기 스트림 복구를 자동으로 활성화합니다. 목표별 옵트인을 비활성화하려면 false/0/off로 설정합니다. 이 설정은 운영자 기본값에 복구를 추가하기만 하며, 명시적인 STREAM_RECOVERY_ENABLED/DB 설정의 옵트아웃을 재정의하지 않습니다. |
OMNIROUTE_CODEX_DROP_NONSTANDARD_EVENTS |
true |
OpenAI SDK의 responses.stream()에서 502 오류를 유발하는 비표준 codex.* SSE 이벤트(예: codex.rate_limits)를 제거합니다. 기본적으로 켜져 있습니다(#11014). 해당 이벤트를 전달하려면 0/false/no/off로 설정합니다. |
OMNIROUTE_CODEX_APPSERVER_WS |
(설정되지 않음) | 옵트인 방식의 Codex app-server 전송입니다. 로컬 codex app-server 사이드카의 WebSocket 엔드포인트(ws:///wss://)입니다. 토큰과 함께 설정하면 Codex 요청이 HTTP Responses API 대신 JSON-RPC를 통해 사이드카로 라우팅됩니다. 연결별로 providerSpecificData.codexAppServerUrl을 통해 설정할 수도 있습니다. open-sse/executors/codex/appServerConfig.ts에서 사용됩니다. |
OMNIROUTE_CODEX_APPSERVER_WS_TOKEN |
(설정되지 않음) | app-server에 제공되는 인라인 기능/베어러 토큰입니다. 연결별 재정의: providerSpecificData.codexAppServerToken. |
OMNIROUTE_CODEX_APPSERVER_WS_TOKEN_FILE |
(설정되지 않음) | app-server 기능 토큰을 담은 파일의 경로입니다(codex app-server --ws-token-file에서 생성). OMNIROUTE_CODEX_APPSERVER_WS_TOKEN이 설정되지 않은 경우 사용됩니다. 연결별 재정의: providerSpecificData.codexAppServerTokenFile. |
OMNIROUTE_CODEX_APPSERVER_CWD |
/tmp |
app-server 턴이 실행되는 작업 디렉터리입니다. 연결별 재정의: providerSpecificData.codexAppServerCwd. |
OMNIROUTE_CODEX_APPSERVER_APPROVAL |
(설정되지 않음) | app-server 턴에 전달되는 승인 정책입니다(예: never, on-request). 연결별 재정의: providerSpecificData.codexAppServerApprovalPolicy. |
OMNIROUTE_CODEX_APPSERVER_SANDBOX |
(설정되지 않음) | app-server 턴에 전달되는 샌드박스 정책입니다(예: read-only, workspace-write, danger-full-access). 설정되지 않은 경우 실행기는 기본적으로 workspace-write를 사용합니다(보안 강화됨. 이전에는 danger-full-access). 연결별 재정의: providerSpecificData.codexAppServerSandbox. |
OMNIROUTE_CODEX_APPSERVER_AUTO_APPROVE |
false |
app-server 자체의 승인 프롬프트(호스트에서의 명령/파일/권한 실행)를 자동 승인합니다. 기본적으로 꺼져 있으며 프롬프트는 자동 거부됩니다. 하네스 도구 호출에는 영향이 없습니다(별도의 item/tool/call 패스스루를 통해 전달됨). true/1/yes를 허용합니다. 연결별 재정의: providerSpecificData.codexAppServerAutoApprove. |
FETCH_HEADERS_TIMEOUT_MS |
= FETCH_TIMEOUT_MS |
응답 헤더를 수신할 때까지의 시간입니다. |
OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS |
30000 (30초) |
프록시를 사용하지 않는 각 직접 연결 시도에서 응답 시작까지 기다리는 최대 시간(ms)입니다. 시간 초과 시 새 소켓에서 한 번 재시도합니다. 이 제한을 비활성화하고 이전 동작을 유지하려면 0으로 설정하세요. |
FETCH_BODY_TIMEOUT_MS |
= FETCH_TIMEOUT_MS |
전체 응답 본문을 수신하는 데 허용되는 시간입니다. |
FETCH_CONNECT_TIMEOUT_MS |
30000 |
TCP 연결 설정 제한 시간입니다. |
FETCH_KEEPALIVE_TIMEOUT_MS |
4000 |
Keep-alive 소켓 유휴 제한 시간입니다. |
TLS_CLIENT_TIMEOUT_MS |
= FETCH_TIMEOUT_MS |
TLS 지문 프록시(wreq-js)의 제한 시간입니다. |
TLS_FIRST_BYTE_WATCHDOG_MS |
10000 |
특히 wreq-js TLS 지문 전송 계층의 본문에서 첫 번째 바이트를 수신할 때까지의 시간을 제한합니다. TLS_CLIENT_TIMEOUT_MS는 헤더가 도착하는 즉시 완료되므로 본문 정지를 감지할 수 없습니다(#12656). 시간 초과 시 wreq 리더를 취소하고 직접/프록시 디스패처로 폴백합니다. 0으로 설정하면 감시 기능이 비활성화됩니다. |
RESPONSES_FIRST_BYTE_TIMEOUT_MS |
15000 |
OpenCode 실행기 전용이며 OPENCODE_RESPONSES_STALL_ROTATION 기능 플래그가 켜진 경우에만 적용됩니다(기본값은 꺼짐). 스트리밍 Responses 응답에서 헤더가 도착한 후 본문의 첫 번째 바이트를 기다리는 시간을 제한합니다(#13484). Responses 스트림은 response.created로 시작되므로 이 시간 범위를 넘어서도 데이터가 없으면 정지로 간주합니다. 해당 계정은 쿨다운 상태로 전환되고 요청은 다음 계정으로 한 번 로테이션되며, 두 번째 정지 시 즉시 실패합니다. 플래그가 켜져 있어도 0으로 설정하면 이 보호 기능이 비활성화됩니다. |
API_BRIDGE_PROXY_TIMEOUT_MS |
30000 |
/v1 브리지 요청의 프록시 홉 제한 시간입니다. |
FIRECRAWL_BASE_URL |
https://api.firecrawl.dev |
Firecrawl 웹 가져오기 실행기가 자체 호스팅 인스턴스를 사용하도록 지정합니다(클라우드 외부에서는 API 키 선택 사항). |
FIRECRAWL_TIMEOUT_MS |
30000 |
Firecrawl 웹 가져오기 실행기의 요청별 제한 시간입니다. |
API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS |
300000 |
브리지의 전체 서버 요청 제한 시간입니다. |
API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS |
60000 |
브리지를 통해 응답 헤더를 전송하는 데 허용되는 시간입니다. |
API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS |
5000 |
브리지 Keep-alive 유휴 제한 시간입니다. |
API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS |
0 |
원시 소켓 제한 시간입니다(0 = 비활성화). |
SHUTDOWN_TIMEOUT_MS |
30000 |
SIGTERM/SIGINT 수신 후 강제 종료하기 전까지의 유예 시간입니다. |
OMNIROUTE_DEFAULT_FETCH_TIMEOUT_MS |
120000 |
FETCH_TIMEOUT_MS가 설정되지 않은 경우 src/shared/utils/fetchTimeout.ts에서 사용하는 폴백 값입니다. |
OMNIROUTE_PROVIDER_PROBE_TIMEOUT_MS |
8000 |
src/shared/network/safeOutboundFetch.ts의 validationRead 및 modelsProbe 프리셋에 대한 제한 시간(ms)입니다. 느린 엔드포인트(Cerebras, Cloudflare AI, Groq)의 경우 대시보드에서 활성/오류 상태가 반복적으로 전환되는 현상을 방지하려면 값을 늘리세요. 유효하지 않거나(<1000) 숫자가 아닌 값은 8000ms로 폴백됩니다. |
OMNIROUTE_RELAY_FETCH_TIMEOUT_MS |
25000 |
open-sse/utils/proxyFetch.ts의 릴레이 전용 가져오기 제한 시간입니다(#9158). 호출자가 일반적인 업스트림 시간 초과 대신 릴레이별 실패를 확인할 수 있도록, 중단된 릴레이는 클라이언트/에이전트 제한 시간(~30초) 전에 실패해야 합니다. 항상 먼저 실행되도록 최댓값이 29000으로 제한됩니다. |
OMNIROUTE_RETRY_BACKOFF_MS |
10 |
open-sse/utils/proxyFetch.ts의 직접 연결/릴레이/프록시 1회 재시도 경로에 공통으로 적용되는 재시도 백오프입니다(#9158). 0 = 즉시 재시도합니다. |
OMNIROUTE_CLAUDE_TLS_TIMEOUT_MS |
60000 |
네이티브 wreq-js 요청 제한 시간입니다(claudeTlsClient.ts). |
OMNIROUTE_CLAUDE_TLS_GRACE_MS |
10000 |
네이티브 제한 시간에 추가되는 절대 JS 하드 데드라인 유예 시간입니다. |
OMNIROUTE_PPLX_TLS_TIMEOUT_MS |
30000 |
네이티브 wreq-js 요청 제한 시간입니다(perplexityTlsClient.ts). |
OMNIROUTE_PPLX_TLS_GRACE_MS |
10000 |
네이티브 제한 시간에 추가되는 절대 JS 하드 데드라인 유예 시간입니다. |
OMNIROUTE_PPLX_SEARCH_HINT |
0 (꺼짐) |
호출자의 시스템 메시지에 "내장 웹 검색 기능이 있습니다. 검색 결과를 사용하여 질문에 직접 답변하세요."를 추가합니다(perplexity-web/protocol.ts). 기본적으로 꺼져 있습니다. Perplexity는 이 설정 없이도 검색하며, 해당 문장이 코딩 클라이언트의 응답에 메타 설명으로 노출되기 때문입니다. 복원하려면 1/true/yes/on으로 설정하세요. |
OMNIROUTE_GROK_TLS_TIMEOUT_MS |
60000 |
네이티브 wreq-js 요청 타임아웃입니다(grokTlsClient.ts). |
OMNIROUTE_GROK_TLS_GRACE_MS |
10000 |
네이티브 타임아웃에 추가되는 절대적인 JS 하드 데드라인 유예 시간입니다. |
OMNIROUTE_NOTION_TLS_TIMEOUT_MS |
30000 |
네이티브 wreq-js 요청 타임아웃입니다(notionTlsClient.ts). 긴 생성 작업의 경우 notion-web이 요청별로 이를 180000까지 늘립니다. |
OMNIROUTE_NOTION_TLS_GRACE_MS |
10000 |
네이티브 타임아웃에 추가되는 절대적인 JS 하드 데드라인 유예 시간입니다. |
OMNIROUTE_BROWSER_POOL |
on |
브라우저 기반 웹 쿠키 채팅을 위한 공유 Playwright 브라우저 풀입니다(browserPool.ts). 비활성화하려면 off로 설정하세요. |
OBSCURA_BIN |
auto-detect |
브라우저 풀 및 Cloudflare Playground 실행기가 기본 엔진으로 사용하는 obscura 바이너리의 경로입니다(open-sse/services/obscura.ts). 설정하지 않으면 시스템 PATH에서 자동으로 감지됩니다. |
OBSCURA_CDP_ENDPOINT |
(설정되지 않음) | 새 인스턴스를 생성하는 대신 이미 실행 중인 Obscura(http://host:port)를 가리킵니다. 모듈은 해당 프로세스를 소유하지 않습니다(open-sse/services/obscura.ts). |
OBSCURA_PORT |
임의의 사용 가능한 포트 |
생성된 obscura serve의 명시적 포트입니다. 설정하지 않으면 사용 가능한 포트가 자동으로 선택됩니다(open-sse/services/obscura.ts). |
WEB_COOKIE_USE_BROWSER |
0 |
웹 쿠키 채팅 요청이 브라우저 기반 경로를 사용하도록 선택합니다(browserBackedChat.ts). 활성화하려면 1로 설정하세요. |
KIMI_WEB_BASE_URL |
https://www.kimi.ai |
Kimi Web(국제 kimi.ai Connect-RPC) 실행기의 기본 URL입니다(kimi-web.ts). 미러/프록시 엔드포인트에 대해서만 재정의하세요. |
KIMI_WEB_CHAT_URL |
<KIMI_WEB_BASE_URL>/apiv2/kimi.gateway.chat.v1.ChatService/Chat |
Kimi Web 실행기의 전체 채팅 엔드포인트입니다(kimi-web.ts). |
OMNIROUTE_LOGIN_BROWSER_PATH |
(자동 감지) | Adobe Firefly 대화형 브라우저 로그인을 위한 시스템 Chrome/Edge 실행 파일의 경로입니다(adobeFireflyBrowserLogin.ts). OS별 자동 감지를 재정의합니다. |
OMNIROUTE_STANDALONE_DIR |
.build/ 독립 실행형 출력 | 빌드 후 동일 위치 배치 단계에서 사용하는 독립 실행형 출력 디렉터리의 빌드 시점 재정의 값입니다(scripts/build/colocate-standalone.mjs). 런타임이 아닌 빌드 도구용입니다. |
콤보 대상 시도는 확인된 업스트림 요청 타임아웃(FETCH_TIMEOUT_MS, 또는
가져오기 기본값을 제공하는 경우 REQUEST_TIMEOUT_MS)을 상속합니다. 콤보,
콤보 기본값 또는 제공자 재정의에서 targetTimeoutMs를 설정하는 것은 콤보 폴백을 더 빠르게 만들려는 경우로만 제한하세요. 현재 업스트림 타임아웃을 초과하는 값은
업스트림 타임아웃으로 제한됩니다.
comboTimeoutMs는 장애 조치 대상 전체에 적용되는 별도의 전체 콤보 실시간 예산입니다.
무제한 반복을 유지하려면 설정하지 않거나 0으로 두세요(10분인
COMBO_LOOP_SAFETY_TIMEOUT_MS 중단 방지 제한은 계속 적용됩니다). 양수 값은 콤보에 대해 해당
안전장치를 대체합니다. 느린 첫 번째 대상 이후에도 장애 조치를 수행할 시간이 있도록 comboTimeoutMs를 targetTimeoutMs보다 길게 유지하세요.
서킷 브레이커 임계값
제공자 수준의 서킷 브레이커 조정입니다. 기본값은 v3.6부터 500개 이상의 연결에 사용된 확장 값을 반영합니다.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
OMNIROUTE_CIRCUIT_BREAKER_OAUTH_THRESHOLD |
8 |
open-sse/config/constants.ts |
차단기가 작동하기 전 OAuth 공급자의 연속 실패 임계값입니다. |
OMNIROUTE_CIRCUIT_BREAKER_OAUTH_RESET_MS |
60000 |
open-sse/config/constants.ts |
OAuth 공급자 차단기의 재설정 시간(ms)입니다. |
OMNIROUTE_CIRCUIT_BREAKER_API_KEY_THRESHOLD |
12 |
open-sse/config/constants.ts |
API 키 공급자의 연속 실패 임계값입니다. |
OMNIROUTE_CIRCUIT_BREAKER_API_KEY_RESET_MS |
30000 |
open-sse/config/constants.ts |
API 키 공급자 차단기의 재설정 시간(ms)입니다. |
OMNIROUTE_CIRCUIT_BREAKER_LOCAL_THRESHOLD |
2 |
open-sse/config/constants.ts |
로컬 공급자(Ollama, LM Studio 등)의 연속 실패 임계값입니다. |
OMNIROUTE_CIRCUIT_BREAKER_LOCAL_RESET_MS |
15000 |
open-sse/config/constants.ts |
로컬 공급자 차단기의 재설정 시간(ms)입니다. |
OMNIROUTE_PROVIDER_BREAKER_OAUTH_FAILURE_THRESHOLD |
10 |
open-sse/config/constants.ts |
공급자 수준 차단기: 전체 OAuth 공급자가 쿨다운 상태에 진입하기 전까지 시간 범위 내에서 허용되는 실패 횟수입니다. |
OMNIROUTE_PROVIDER_BREAKER_OAUTH_FAILURE_WINDOW_MS |
900000 |
open-sse/config/constants.ts |
공급자 수준 차단기: OAuth 공급자의 순환 실패 횟수 집계 시간 범위(ms)입니다. |
OMNIROUTE_PROVIDER_BREAKER_OAUTH_COOLDOWN_MS |
300000 |
open-sse/config/constants.ts |
공급자 수준 차단기: OAuth 공급자 임계값에 도달한 후 적용되는 쿨다운 시간(ms)입니다. |
OMNIROUTE_PROVIDER_BREAKER_OAUTH_DEGRADATION_THRESHOLD |
5 |
open-sse/config/constants.ts |
OAuth 공급자는 이 실패 횟수에 도달하면 DEGRADED 상태에 진입합니다. |
OMNIROUTE_PROVIDER_BREAKER_OAUTH_MAX_BACKOFF_MULTIPLIER |
8 |
open-sse/config/constants.ts |
OAuth 공급자의 최대 resetTimeout 증가 배수입니다. |
OMNIROUTE_PROVIDER_BREAKER_OAUTH_BACKOFF_ESCALATION_COUNT |
2 |
open-sse/config/constants.ts |
OAuth 공급자는 이 횟수만큼 개방 주기가 발생한 후 백오프를 증가시킵니다. |
OMNIROUTE_PROVIDER_BREAKER_API_KEY_FAILURE_THRESHOLD |
15 |
open-sse/config/constants.ts |
공급자 수준 차단기: 전체 API 키 공급자가 쿨다운 상태에 진입하기 전까지 시간 범위 내에서 허용되는 실패 횟수입니다. |
OMNIROUTE_PROVIDER_BREAKER_API_KEY_FAILURE_WINDOW_MS |
1800000 |
open-sse/config/constants.ts |
공급자 수준 차단기: API 키 공급자의 순환 실패 횟수 집계 시간 범위(ms)입니다. |
OMNIROUTE_PROVIDER_BREAKER_API_KEY_COOLDOWN_MS |
600000 |
open-sse/config/constants.ts |
공급자 수준 차단기: API 키 공급자 임계값에 도달한 후 적용되는 쿨다운 시간(ms)입니다. |
OMNIROUTE_PROVIDER_BREAKER_API_KEY_DEGRADATION_THRESHOLD |
7 |
open-sse/config/constants.ts |
API 키 공급자는 이 실패 횟수에 도달하면 DEGRADED 상태에 진입합니다. |
OMNIROUTE_PROVIDER_BREAKER_API_KEY_MAX_BACKOFF_MULTIPLIER |
4 |
open-sse/config/constants.ts |
API 키 공급자의 최대 resetTimeout 증가 배수입니다. |
OMNIROUTE_PROVIDER_BREAKER_API_KEY_BACKOFF_ESCALATION_COUNT |
3 |
open-sse/config/constants.ts |
API 키 공급자는 이 횟수만큼 개방 주기가 발생한 후 백오프를 증가시킵니다. |
OMNIROUTE_PROVIDER_BREAKER_LOCAL_FAILURE_THRESHOLD |
2 |
open-sse/config/constants.ts |
공급자 수준 차단기: 전체 로컬 공급자가 쿨다운 상태에 진입하기 전까지 허용되는 실패 횟수입니다. |
OMNIROUTE_PROVIDER_BREAKER_LOCAL_FAILURE_WINDOW_MS |
300000 |
open-sse/config/constants.ts |
공급자 수준 차단기: 로컬 공급자의 순환 실패 횟수 집계 시간 범위(ms)입니다. |
OMNIROUTE_PROVIDER_BREAKER_LOCAL_COOLDOWN_MS |
60000 |
open-sse/config/constants.ts |
공급자 수준 차단기: 로컬 공급자 임계값에 도달한 후 적용되는 쿨다운 시간(ms)입니다. |
PIN_DROP_BACKOFF_LEVEL |
2 |
open-sse/services/combo.ts |
컨텍스트 캐시 핀의 공급자가 지속적으로 비정상 상태인 것으로 간주되어 장애 조치를 위해 핀이 해제되는 백오프 깊이입니다. |
PIN_DROP_GRACE_MS |
20000 |
open-sse/services/combo.ts |
컨텍스트 캐시 핀을 해제하기 전에 일시적인 짧은 쿨다운을 허용하여 빈번한 상태 전환을 방지하는 시간 범위(ms)입니다. |
시나리오
| 시나리오 | 구성 |
|---|---|
| 장시간 실행되는 코드 생성 | REQUEST_TIMEOUT_MS=900000 (15분) |
| 전체 스트림 수명 제한 | STREAM_ACTIVE_TIMEOUT_MS=1260000 (21분) |
| 프로덕션 API의 빠른 실패 처리 | API_BRIDGE_PROXY_TIMEOUT_MS=10000 |
| 확장 사고 모델 | STREAM_IDLE_TIMEOUT_MS=300000 (청크 간 5분) |
16. 로깅
로깅 시스템은 stdout과 로테이션되는 로그 파일 모두에 기록합니다. 모든 구성은 src/lib/logEnv.ts에서 읽습니다.
| 변수 | 기본값 | 설명 |
|---|---|---|
APP_LOG_LEVEL |
info |
최소 로그 수준: debug, info, warn, error. |
APP_LOG_FORMAT |
text |
출력 형식: text(사람이 읽기 쉬운 형식) 또는 json(구조화된 형식). |
APP_LOG_TO_FILE |
true |
stdout과 함께 파일에도 로그를 기록합니다. |
APP_LOG_FILE_PATH |
logs/application/app.log |
로그 파일 경로(프로젝트 루트 또는 DATA_DIR 기준 상대 경로). |
APP_LOG_MAX_FILE_SIZE |
50M |
로테이션 전 최대 파일 크기. 50M, 1G, 512K 또는 바이트 단위의 숫자를 허용합니다. |
APP_LOG_RETENTION_DAYS |
7 |
로테이션된 애플리케이션 로그 파일의 보관 일수. |
APP_LOG_MAX_FILES |
20 |
로테이션된 로그 파일 백업의 최대 개수. |
CALL_LOG_RETENTION_DAYS |
7 |
데이터베이스에서 요청/호출 로그 항목을 보관하는 일수. |
CALL_LOG_MAX_ENTRIES |
10000 |
인메모리 버퍼의 최대 호출 로그 항목 수. |
CALL_LOGS_TABLE_MAX_ROWS |
100000 |
정리 전 call_logs SQLite 테이블의 최대 행 수. |
ENABLE_REQUEST_LOGS |
(설정되지 않음) | 대시보드 설정을 재정의하여 상세 요청 로깅을 강제로 켜거나 끕니다. |
MAX_PENDING_REQUEST_AGE_MS |
3600000 (1시간) |
인메모리 정리 전 고립된 활성 요청 로그 항목의 최대 수명. |
CALL_LOG_PIPELINE_CAPTURE_STREAM_CHUNKS |
false |
call_log_pipeline_enabled=true일 때 파이프라인 아티팩트에 스트림 청크를 저장합니다. 옵트인(true) 방식이며, 디스크 공간을 절약하기 위해 기본적으로 꺼져 있습니다. |
CALL_LOG_PIPELINE_MAX_SIZE_KB |
512 |
call_log_pipeline_enabled=true일 때 파이프라인 호출 로그 아티팩트의 최대 크기(KB). |
PROXY_LOGS_TABLE_MAX_ROWS |
100000 |
정리 전 proxy_logs SQLite 테이블의 최대 행 수. |
PROXY_LOG_INCLUDE_IPS |
false |
[ProxyEgress] 콘솔 로그에 클라이언트/송신 IP 및 계정 접두사를 포함합니다. 대시보드/데이터베이스의 프록시 로그 레코드에는 전체 세부 정보가 유지됩니다. |
APP_LOG_ROTATION_CHECK_INTERVAL_MS |
60000 (1분) |
src/lib/logRotation.ts가 활성 로그 파일 크기를 다시 확인하는 주기. |
CHAT_LOG_TEXT_LIMIT |
65536 |
채팅 로그 아티팩트에 유지되는 최대 문자열 길이(기본값 64KB). |
CHAT_LOG_ARRAY_TAIL_ITEMS |
128 |
채팅 로그 페이로드를 자를 때 배열 끝부분에서 유지할 항목 수. |
CHAT_LOG_MAX_DEPTH |
6 |
채팅 로그 페이로드를 자르기 전 최대 중첩 깊이. |
CHAT_LOG_MAX_OBJECT_KEYS |
80 |
채팅 로그 페이로드에 유지되는 최대 객체 키 수(0 = 무제한). |
CHAT_LOG_MAX_BODY_KB |
1024 |
전체 복제본 대신 간단한 요약으로 대체되기 전 전체 요청/응답 본문의 크기(KB). 긴 에이전트형 대화에서 실제 메시지 대신 자리표시자가 대시보드에 표시되는 경우 이 값을 높이십시오. |
CHAT_DEBUG_FILE |
false |
true이면 serializeArtifactForStorage가 크기 기반 자르기를 건너뜁니다. 디버그 전용입니다. |
17. 메모리 최적화
| 변수 | 기본값 | 설명 |
|---|---|---|
OMNIROUTE_MEMORY_MB |
자동 (베어 메탈); Docker 이미지에서는 1024 |
권장되는 Docker/독립 실행형 V8 힙 제한(MB)입니다. 설정하지 않으면 동적으로 보정됩니다(시스템 RAM의 약 35%, [512, 4096] 범위로 제한). 총 메모리를 읽을 수 없는 경우에만 512가 최솟값으로 사용됩니다. run-standalone.mjs(Docker CMD)에서는 명시적인 값이 --max-old-space-size로 추가되며, 충돌하는 NODE_OPTIONS 힙 플래그보다 우선합니다(V8의 마지막 플래그 우선 규칙). omniroute serve는 여전히 기존 NODE_OPTIONS 힙을 우선합니다(#5238). 두 값을 서로 다른 숫자로 설정하지 마세요. 프로세스가 두 값과 어느 값이 적용되는지를 명시하는 경고를 기록합니다. 공식 Docker 이미지는 항상 1024를 설정하므로 해당 이미지에서는 보정이 실행되지 않습니다. 코딩 에이전트 /v1/responses에는 8192–12288과 cgroup 여유 메모리가 필요합니다. Docker 가이드 — 런타임 RAM을 참조하세요. |
PROMPT_CACHE_MAX_SIZE |
50 |
캐시되는 시스템 프롬프트 항목의 최대 개수입니다. |
PROMPT_CACHE_MAX_BYTES |
2097152 (2 MB) |
전체 프롬프트 캐시의 최대 크기입니다. |
PROMPT_CACHE_TTL_MS |
300000 (5분) |
프롬프트 캐시 항목의 TTL입니다. |
SEMANTIC_CACHE_MAX_SIZE |
100 |
캐시되는 temperature=0 응답의 최대 개수입니다. |
SEMANTIC_CACHE_MAX_BYTES |
4194304 (4 MB) |
전체 시맨틱 캐시의 최대 크기입니다. |
SEMANTIC_CACHE_TTL_MS |
1800000 (30분) |
시맨틱 캐시 항목의 TTL입니다. |
OMNIROUTE_CORPUS_CACHE_SIZE |
5 |
라이브 인메모리 인덱스를 동시에 유지하는 로컬 코퍼스 루트 수입니다(src/lib/localCorpus/configured.ts). LRU 방식으로 제한에 도달하면 가장 오래 사용되지 않은 루트의 인덱스가 제거되며 다음 쿼리 시 재구축됩니다. 최솟값은 1로 제한되며, 숫자가 아닌 값은 기본값으로 대체됩니다. |
STREAM_HISTORY_MAX |
50 |
대시보드 실시간 보기 버퍼에 보관되는 최근 스트림 이벤트의 최대 개수입니다. |
CONTEXT_LENGTH_DEFAULT |
128000 |
명시적인 설정이 없는 모델에 적용되는 전역 기본 최대 컨텍스트 길이입니다. |
USAGE_TOKEN_BUFFER |
100 |
사용량 할당량 추적 시 예약되는 추가 토큰 여유분입니다. |
압축
| 변수 | 기본값 | 설명 |
|---|---|---|
OMNIROUTE_RTK_TRUST_PROJECT_FILTERS |
설정되지 않음 | .rtk/trust.json 해시 없이 프로젝트의 .rtk/filters.json을 신뢰합니다. 통제된 로컬 개발 환경에서만 사용하세요. |
메모리 엔진(플랜 21)
메모리, 스킬 및 토큰 갱신의 이벤트 루프 비용(#10349)
OmniRoute는 단일 Node 프로세스입니다. 메모리 추출/검색, 스킬 주입 및 공급자 토큰 갱신은 GET /healthz 및 대시보드와 동일한 이벤트 루프에서 실행됩니다. 이들은 워커 스레드가 아닙니다.
| 작업 | 코드 | 기본값 | 운영자 제어 |
|---|---|---|---|
| 메모리 추출 / 검색 | src/lib/memory/ |
대시보드 memoryEnabled(기본적으로 켜짐) | Settings → Memory에서 끕니다. 설정에서 기능을 비활성화하는 것 외에는 별도의 환경 변수 킬 스위치가 없습니다. |
| 스킬 주입 | src/lib/skills/injection.ts |
대시보드 skillsEnabled(기본적으로 켜짐) | Settings → Memory/Skills(skillsEnabled)에서 끕니다. 아래의 샌드박스 설정은 주입이 이미 활성화된 이후의 실행만 제한합니다. |
| 토큰 갱신 | src/sse/services/tokenRefresh.ts |
연결된 OAuth/웹 제공자에 대해 켜짐 | 제공자의 연결을 해제하거나 토큰을 유효한 상태로 유지하세요. 현재는 TOKEN_REFRESH=0 환경 변수가 없습니다. |
유휴 상태의 시스템에서 /healthz가 느리다면 먼저 메모리와 스킬을 비활성화한 다음 카탈로그/압축 부하를 확인하세요(#10303, #9685). 이러한 기능은 await 지점에서 실행을 양보하지만, 여전히 단일 스레드를 두고 경쟁합니다.
영구 메모리 하위 시스템(src/lib/memory/)을 위한 임베딩 계층, 벡터 저장소 및 재순위화 설정입니다.
| 변수 | 기본값 | 설명 |
|---|---|---|
MEMORY_EMBEDDING_CACHE_TTL_MS |
300000(5분) |
인메모리 임베딩 캐시의 TTL(소스/모델/차원 시그니처별)입니다. |
MEMORY_EMBEDDING_CACHE_MAX |
1000 |
임베딩 캐시에 유지되는 최대 LRU 항목 수입니다. |
MEMORY_TRANSFORMERS_MODEL |
Xenova/all-MiniLM-L6-v2 |
선택적으로 사용하는 @huggingface/transformers 로컬 MiniLM 파이프라인의 HF 저장소 ID입니다(약 23 MB int8, 약 400 MB RAM). |
MEMORY_STATIC_MODEL |
minishlab/potion-base-8M |
정적 potion/Model2Vec 조회 테이블 임베더의 HF 저장소 ID입니다. 필요할 때 캐시 디렉터리로 다운로드됩니다. |
MEMORY_STATIC_CACHE_DIR |
<DATA_DIR>/embeddings |
정적 potion 모델 파일을 캐시하는 데 사용되는 디렉터리입니다. 설정하지 않으면 기본적으로 DATA_DIR 아래에 위치합니다. |
HF_HUB_ENDPOINT |
https://huggingface.co |
staticPotion.ts에서 사용하는 Hugging Face Hub 기본 URL을 재정의합니다(예: 에어갭 환경용 미러 엔드포인트). |
MEMORY_VEC_TOP_K |
20 |
src/lib/memory/vectorStore.ts 내부의 sqlite-vec 브루트포스 벡터 검색에서 사용하는 기본 상위 K 값입니다. |
MEMORY_RRF_K |
60 |
하이브리드 FTS5 + 벡터 검색을 위한 Reciprocal Rank Fusion 상수 k입니다(sqlite-vec 방식). |
VECTOR_STORE_DISABLE_VEC |
false |
getVectorStore()(src/lib/memory/vectorStore.ts)의 테스트/진단용 연결부입니다. true이면 벡터 저장소를 강제로 null로 설정하여(sqlite-vec이 없는 클라우드/WASM 환경을 시뮬레이션), 메모리 검색을 FTS5 키워드 검색으로 성능 저하시킵니다. 프로덕션에서는 설정하지 마세요. |
NOTION_API_KEY |
(설정되지 않음) | Notion 백엔드용 API 키입니다(genericBackend.ts의 알려진 백엔드 프리셋에서 사용). |
NOTION_API_URL |
https://api.notion.com/v1 |
Notion API의 기본 URL입니다(자체 호스팅 Notion 대체 서비스용으로 재정의 가능). |
OBSIDIAN_API_KEY |
(설정되지 않음) | Obsidian Vault 백엔드용 API 키입니다(genericBackend.ts의 알려진 백엔드 프리셋에서 사용). |
OBSIDIAN_API_URL |
http://localhost:27123 |
Obsidian Vault API의 기본 URL입니다(원격 볼트용으로 재정의 가능). |
MEMORY_TYPED_DECAY_ENABLED |
false |
TV6 유형별 메모리 감쇠의 마스터 스위치입니다. 옵트인(기본적으로 꺼짐) — 스윕은 감쇠된 메모리를 삭제합니다. 이 기능이 꺼져 있으면 access_count/last_accessed_at은 순수한 텔레메트리이며 아무것도 삭제되지 않습니다. |
MEMORY_TYPED_DECAY_EPISODIC_DAYS |
30 |
사용되지 않은 episodic 메모리가 감쇠하기까지의 TTL(일)입니다. 0이면 episodic도 감쇠되지 않습니다. 지속형 유형(factual/procedural/semantic)은 항상 감쇠되지 않습니다. 감쇠 시계는 last_accessed_at을 기준으로 다시 설정됩니다. |
MEMORY_TYPED_DECAY_ACCESS_IMMUNITY |
3 |
이 횟수 이상(>=) 주입된 메모리는 유형과 관계없이 감쇠되지 않습니다. 0이면 접근 횟수에 따른 면제를 비활성화합니다. |
MEMORY_TYPED_DECAY_SWEEP_INTERVAL |
0(비활성화됨) |
src/lib/memory/typedDecay.ts의 선택적 주기적 감쇠 스윕 간격(초)입니다. 0/미설정 = 주기적 스윕 없음. 이중 옵트인 방식으로, MEMORY_TYPED_DECAY_ENABLED=true도 필요합니다. |
OMNIROUTE_STRICT_SYSTEM_PROVIDERS |
(설정되지 않음) | system 메시지를 인덱스 0에서만 허용하는 제공자 ID의 쉼표 구분 목록입니다(대소문자 구분 없음, src/lib/memory/injection.ts). 이러한 제공자에서는 다중 턴 대화 중 배열 중간에 메모리를 삽입하는 캐시 안전 방식이 안전하지 않으므로, 대신 메모리를 선두 시스템 메시지에 병합하거나 그 앞에 추가합니다. 기본값은 xiaomi-mimo/mimo뿐입니다. 채팅 템플릿에서 동일한 단일 선두 시스템 메시지 제약을 적용하는 자체 호스팅 OpenAI 호환 엔드포인트(예: Qwen3.5+/3.6)를 사용하려면 목록을 확장하세요. |
저용량 RAM Docker 예시
128은 대시보드 전용입니다. 이 힙에서 코딩 에이전트는 긴 /v1/responses 처리 중 FATAL ERROR를 일으킵니다. 이 예시를 Claude/Codex/Grok 게이트웨이에 사용하지 마세요.
OMNIROUTE_MEMORY_MB=128
PROMPT_CACHE_MAX_SIZE=20
PROMPT_CACHE_MAX_BYTES=524288 # 512 KB
SEMANTIC_CACHE_MAX_SIZE=25
SEMANTIC_CACHE_MAX_BYTES=1048576 # 1 MB
STREAM_HISTORY_MAX=10
18. 가격 동기화
외부 소스에서 모델 가격 데이터를 자동으로 동기화합니다.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
PRICING_SYNC_ENABLED |
false |
src/lib/pricingSync.ts |
주기적인 가격 동기화 사용 여부. |
PRICING_SYNC_INTERVAL |
86400 (24시간) |
src/lib/pricingSync.ts |
동기화 간격(초). |
PRICING_SYNC_SOURCES |
litellm |
src/lib/pricingSync.ts |
쉼표로 구분된 데이터 소스. |
Arena ELO 동기화
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
ARENA_ELO_SYNC_ENABLED |
true |
src/shared/constants/featureFlagDefinitions.ts |
주기적인 Arena AI 리더보드 ELO 동기화입니다. 대시보드 기능 플래그에서 구성하거나 false로 설정하여 사용하지 않을 수 있습니다. |
MODELS_CATALOG_PREFIX_MODE |
dual |
src/shared/constants/featureFlagDefinitions.ts, src/app/api/v1/models/catalog.ts |
GET /v1/models의 모델 ID에 사용되는 접두사 형식입니다. dual은 모든 모델에 대해 짧은 별칭 접두사와 정식 제공자 접두사를 모두 노출합니다(하위 호환성 — 카탈로그 크기가 약 2배로 증가). alias는 모델당 하나의 ID를 반환하고, canonical은 전체 제공자 ID 접두사만 반환합니다(별칭이 이미 정식 ID인 제공자는 단일 항목을 유지). 클라이언트는 요청별로 ?prefix=alias를 사용하여 재정의할 수 있습니다. API_REFERENCE를 참조하세요. |
ARENA_ELO_SYNC_INTERVAL |
86400 (24시간) |
src/lib/arenaEloSync.ts |
동기화 간격(초). |
PromptQL 플레이그라운드 제공자(비공식/실험적)
prompt.ql.app을 위한 리버스 엔지니어링된 GraphQL 세션 브리지입니다(src/shared/constants/providers/web-cookie.ts). 모든 설정은 선택 사항입니다. 기본값은 공개 플레이그라운드 엔드포인트를 가리키며, 자체 호스팅 또는 대체 PromptQL 배포 환경에서만 재정의하세요.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
PROMPTQL_GRAPHQL_ENDPOINT |
https://data.prompt.ql.app/promptql/playground-v2-hge/v1/graphql |
open-sse/executors/promptql.ts |
채팅/세션 작업에 사용되는 GraphQL 엔드포인트. |
PROMPTQL_CREDITS_ENDPOINT |
https://data.pro.ql.app/v1/graphql |
open-sse/executors/promptql.ts, open-sse/services/usage/promptql.ts |
크레딧 잔액/사용량 조회에 사용되는 GraphQL 엔드포인트. |
PROMPTQL_TOKEN_REFRESH_URL |
https://auth.pro.ql.app/ddn/project/token |
open-sse/executors/promptql.ts |
최선형 토큰 갱신에 사용되는 엔드포인트. |
PROMPTQL_POLL_TIMEOUT_MS |
180000 |
open-sse/executors/promptql.ts |
시간 초과 전까지 thread_events를 폴링할 최대 시간(ms). |
HyperAgent 웹 제공자(비공식/실험적)
hyperagent.com을 위한 리버스 엔지니어링된 세션 브리지입니다(src/shared/constants/providers/web-cookie.ts). 선택 사항입니다. 기본값은 공개 결제/사용량 엔드포인트를 가리키며, 자체 호스팅/대체 HyperAgent 배포 환경에서만 재정의하세요.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
HYPERAGENT_USAGE_URL |
https://hyperagent.com/api/settings/billing/usage |
open-sse/services/usage/hyperagent.ts |
결제/사용량 크레딧 블록을 가져오는 데 사용되는 엔드포인트입니다. |
Kilo Code 사용량 할당량
Kilo Code 제공자의 개인 USD 잔액 및 Kilo Pass 사용량을 조회합니다. 선택 사항입니다. 기본값은 공개 Kilo API를 가리키며, 릴레이/테스트 픽스처에서만 재정의하세요. 인증에는 연결의 기존 OAuth 액세스 토큰을 사용합니다.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
KILO_API_URL |
https://api.kilo.ai |
open-sse/services/usage/kilocode.ts |
개인 Kilo Code 잔액 및 Kilo Pass 사용량을 가져오는 데 사용되는 기본 URL입니다. |
Adobe Firefly 웹 제공자(비공식/실험적)
Adobe Firefly 웹 제공자를 위한 브라우저 기반 세션 새로 고침 기능입니다
(open-sse/services/adobeFireflyBrowserLogin.ts, open-sse/services/adobeFireflySession.ts,
open-sse/services/adobeFireflyClient.ts). 선택 사항이며, 모든 기본값은 일반적인
데스크톱 설치 환경에 맞게 조정되어 있습니다.
#9255에서 제거됨. 기존 CDP 연결 방식의 Chrome 런타임(adobeFireflyChromeRuntime.ts)은 Playwright 브라우저 로그인 서비스로 대체되었으며, 관련 설정은 더 이상 존재하지 않습니다. ADOBE_FIREFLY_CHROME_ CDP_PORT / VISIBLE / HEADED / PING / FORCE_RESTART 변수와 ADOBE_FIREFLY_LOGIN_WAIT_MS 및 ADOBE_FIREFLY_FORTER_WAIT_MS는 코드베이스 어디에서도 읽히지 않으므로 설정해도 아무런 효과가 없습니다.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
ADOBE_FIREFLY_CHROME_HEADLESS |
0 |
open-sse/services/adobeFireflyBrowserLogin.ts |
실제 헤드리스 Chrome을 사용하려면 1로 설정하세요(generate에서 작동하지 않는 것으로 알려져 있으며 디버그 전용입니다). |
ADOBE_FIREFLY_BROWSER_REFRESH |
1 |
open-sse/services/adobeFireflySession.ts |
사전 브라우저 워밍의 활성화/비활성화 여부입니다. 0으로 설정하면 사전 워밍이 비활성화됩니다(배치 도중 408 복구는 계속 적용됨). |
ADOBE_FIREFLY_SESSION_DISK |
1 |
open-sse/services/adobeFireflySession.ts |
Adobe Firefly 세션을 디스크에 유지하지 않으려면 0으로 설정하세요. |
ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS |
(설정되지 않음) | open-sse/services/adobeFireflySession.ts |
연속 제출 사이에 적용되는 최소 간격(ms)으로, 기본 내장 값을 재정의합니다. |
ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS |
(설정되지 않음) | open-sse/services/adobeFireflySession.ts |
성공적인 배치 후 추가되는 간격(ms)으로, 기본 내장 값을 재정의합니다. |
ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS |
(설정되지 않음) | open-sse/services/adobeFireflyClient.ts |
생성 요청을 제출하기 전의 기본 지연 시간(ms)으로, 기본 내장 값을 재정의합니다. |
19. 모델 동기화(개발)
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
MODELS_DEV_SYNC_ENABLED |
(설정되지 않음) | src/lib/modelsDevSync.ts |
models.dev 가격 동기화를 강제로 재정의합니다. 설정되지 않음 = 설정 > AI(modelsDevSyncEnabled)를 따릅니다. 0/false/off/no는 DB 설정보다 우선하며, 주기적 동기화와 getModelsDevPricing() SQL/JSON 스캔을 모두 건너뜁니다(대시보드가 동일한 이벤트 루프에서 멈춘 경우 복구용). 1/true/on/yes는 동기화를 강제로 활성화합니다. 가격 저장/삭제 시에도 backupDbFile("pre-write")를 호출하지만, 60분 제한이 적용 중이거나 DISABLE_SQLITE_AUTO_BACKUP이 설정된 경우 아무 작업도 수행하지 않습니다. |
MODELS_DEV_SYNC_INTERVAL |
86400 (24시간) |
src/lib/modelsDevSync.ts |
개발 중 모델 카탈로그 동기화 간격(초)입니다. |
CONTEXT_WINDOW_RECONCILE_INTERVAL |
86400 (24시간) |
src/lib/contextWindowResolver.ts |
자체 교정 컨텍스트 창 조정기(5004)의 실행 간격(초)입니다. /models 검색에서 공급자가 선언한 창이 카탈로그와 다른 경우 해당 값을 auto:discovery 재정의로 고정합니다. 비활성화하려면 0으로 설정하세요. 이미 동기화된 데이터를 재사용하며(새로 가져오지 않음), manual 재정의는 절대 덮어쓰지 않습니다. |
20. 공급자별 설정
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
OPENROUTER_CATALOG_TTL_MS |
86400000 (24시간) |
src/lib/catalog/openrouterCatalog.ts |
OpenRouter 모델 카탈로그 캐시 TTL입니다. |
MODEL_CATALOG_INCLUDE_NAMES |
true |
src/shared/constants/featureFlagDefinitions.ts |
/v1/models 응답에 표시하기 쉬운 name 필드를 포함합니다. ID만 예상하는 클라이언트의 경우 비활성화하세요. |
CATALOG_BUILD_TIMEOUT_MS |
8000 (8초) |
src/app/api/v1/models/catalogCache.ts |
병합된 GET /v1/models 카탈로그 재빌드의 콜드 경로 대기 제한 시간입니다(#12627). 시간 초과 시 마지막으로 성공한 200 응답이 있으면 이를 제공합니다. |
OMNIROUTE_SYNCED_CATALOG_STALE_AFTER_MS |
2592000000 (30일) |
src/lib/db/models/activeSyncedCatalog.ts |
연결의 동기화된 모델 목록이 라우팅에 대한 권위 있는 정보로 간주되지 않고 레지스트리를 허용하도록 전환되는 기준 경과 시간입니다(#12849). 타임스탬프가 한 번도 지정되지 않은 행은 오래된 것으로 간주됩니다. |
NANOBANANA_POLL_TIMEOUT_MS |
120000 |
open-sse/handlers/imageGeneration.ts |
NanoBanana 이미지 생성 작업의 최대 대기 시간입니다. |
NANOBANANA_POLL_INTERVAL_MS |
2500 |
open-sse/handlers/imageGeneration.ts |
NanoBanana 작업 폴링 주기입니다. |
ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS |
8000 |
open-sse/services/adobeFireflyUpscale.ts |
Adobe Firefly 업스케일 제출 재시도의 지수 백오프에 사용되는 기본 지연 시간입니다. |
AWS_REGION |
(설정되지 않음) | src/lib/providers/validation.ts, open-sse/handlers/audioSpeech.ts |
AWS Bedrock 엔드포인트(Kiro, 오디오)를 구성하는 데 사용되는 리전입니다. |
AWS_DEFAULT_REGION |
(설정되지 않음) | src/lib/providers/validation.ts, open-sse/handlers/audioSpeech.ts |
AWS_REGION이 설정되지 않은 경우 사용하는 대체 값입니다. |
CLOUDFLARE_ACCOUNT_ID |
(설정되지 않음) | open-sse/executors/cloudflare-ai.ts |
Cloudflare Workers AI의 계정 ID입니다. |
CLOUDFLARE_PLAYGROUND_CHROME_PATH |
(설정되지 않음) | open-sse/executors/cloudflare-playground.ts |
헤드리스 핑거프린트 검사에서 Playwright의 번들 Chromium이 차단될 때 사용하는 Cloudflare AI Playground 실행기용 전체 데스크톱 Chrome 바이너리 경로입니다. |
CLOUDFLARE_API_BASE |
https://api.cloudflare.com/client/v4 |
src/app/api/settings/proxy/cloudflare-deploy/route.ts |
프록시 풀 Workers 릴레이 배포 도구에서 사용하는 Cloudflare REST API 베이스를 재정의합니다(#4640 / 9router#1360). |
NEXT_PUBLIC_CLOUDFLARE_RELAY_DEFAULT_PROJECT |
omniroute-relay |
src/app/(dashboard)/dashboard/settings/components/proxy/CloudflareRelayModal.tsx |
프록시 풀 "릴레이 배포" 모달에서 제안하는 기본 Worker 프로젝트 이름입니다. |
NEXT_PUBLIC_CLOUDFLARE_RELAY_ENABLED |
true |
src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx |
프록시 풀 탭에서 Cloudflare Workers 릴레이 옵션을 숨기려면 false로 설정하세요. |
CLOUDFLARED_BIN |
자동 감지 | src/lib/cloudflaredTunnel.ts |
cloudflared 바이너리의 사용자 지정 경로입니다. |
CLOUDFLARED_PROTOCOL |
http2 |
src/lib/cloudflaredTunnel.ts |
터널 전송 프로토콜입니다: http2(기본값), quic 또는 auto. |
CLOUDFLARED_CONFIG |
(설정되지 않음) | src/lib/cloudflaredTunnel.ts |
로컬에서 관리하는 cloudflared config.yml의 경로입니다(tunnel:, credentials-file:, ingress: 포함). 설정하면 OmniRoute는 임시 빠른 터널 대신 tunnel --config <path> run(명명된 터널)을 실행합니다. |
CLOUDFLARED_HOSTNAME |
(구성의 ingress에서 가져옴) | src/lib/cloudflaredTunnel.ts |
publicUrl/apiUrl로 보고되는 명명된 터널의 공개 호스트 이름(예: ai.example.com) 재정의 값입니다. 설정하지 않으면 구성의 첫 번째 ingress 호스트 이름에서 읽습니다. |
DENO_DEPLOY_API_BASE |
https://api.deno.com/v2 |
src/app/api/settings/proxy/deno-deploy/route.ts |
프록시 풀 릴레이 배포 도구에서 사용하는 Deno Deploy REST API 베이스를 재정의합니다(#4643 / 9router#1437). |
NEXT_PUBLIC_DENO_RELAY_DEFAULT_PROJECT |
omniroute-deno-relay |
src/app/(dashboard)/dashboard/settings/components/proxy/DenoRelayModal.tsx |
프록시 풀 "릴레이 배포" 모달에서 제안하는 기본 Deno Deploy 앱 이름입니다. |
NEXT_PUBLIC_DENO_RELAY_ENABLED |
true |
src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx |
프록시 풀 탭에서 Deno Deploy 릴레이 옵션을 숨기려면 false로 설정합니다. |
SEARCH_CACHE_TTL_MS |
300000 (5분) |
open-sse/services/searchCache.ts |
검색 API(Perplexity, Brave 등) 응답 캐싱의 TTL입니다. |
ENABLE_CC_COMPATIBLE_PROVIDER |
false |
src/shared/utils/featureFlags.ts |
Claude Code 전용 릴레이를 위한 실험적 CC 호환 제공자 UI를 표시합니다. |
NINEROUTER_HOST |
127.0.0.1 |
open-sse/executors/ninerouter.ts |
내장된 9router 인스턴스가 수신 대기하는 호스트를 재정의합니다. |
NINEROUTER_PORT |
20130 |
open-sse/executors/ninerouter.ts |
내장된 9router 인스턴스가 수신 대기하는 포트를 재정의합니다. |
EMBED_WS_PROXY_HOST |
127.0.0.1 |
src/lib/services/embedWsProxy.ts |
내장 서비스 WebSocket 프록시의 바인딩 호스트입니다(기본적으로 루프백 전용). |
EMBED_WS_PROXY_PORT |
20131 |
src/lib/services/embedWsProxy.ts |
내장 서비스 WebSocket 프록시 서버의 포트입니다. |
CLIPROXYAPI_HOST |
127.0.0.1 |
open-sse/executors/cliproxyapi.ts |
CLIProxyAPI 브리지 호스트입니다(레거시 통합). |
CLIPROXYAPI_PORT |
5544 |
open-sse/executors/cliproxyapi.ts |
CLIProxyAPI 브리지 포트입니다. |
CLIPROXYAPI_API_KEY |
(비어 있음) | open-sse/handlers/chatCore/cliproxyapiCredentials.ts |
cliproxyapi_api_key 설정이 없을 때 사용하는 데이터 플레인 키 대체 값입니다. |
CLIPROXYAPI_MANAGEMENT_KEY |
(비어 있음) | src/lib/services/cliproxyAccountHealth.ts |
외부에서 관리되는 CLIProxyAPI 인스턴스에서 계정 상태를 조회하기 위한 관리 키입니다. |
CLIPROXYAPI_CONFIG_DIR |
~/.cli-proxy-api |
src/lib/versionManager/processManager.ts |
CLIProxyAPI 구성 디렉터리입니다. |
CLIPROXY_BIND_HOST |
127.0.0.1 |
docker-compose.yml |
docker-compose가 cliproxyapi 사이드카를 게시하는 호스트 인터페이스입니다(#12578). 해당 데이터 볼륨에는 제공자의 OAuth/API 자격 증명이 저장되며, 고정된 이미지에는 환경 변수 기반 데이터 플레인 api-keys 재정의 기능이 없고 마운트된 config.yaml만 사용하므로, 0.0.0.0으로 설정하면 자격 증명을 포함한 서비스가 전체 LAN에 노출됩니다. |
MUX_SERVICE_PORT |
8322 |
src/lib/services/bootstrap.ts |
내장된 Mux(coder/mux) 에이전트 오케스트레이션 데몬이 수신 대기하는 포트를 재정의합니다(항상 127.0.0.1). |
DARIO_HOST |
127.0.0.1 |
open-sse/executors/dario.ts |
Dario 내장 서비스의 바인딩/연결 호스트입니다(기본적으로 루프백 전용). |
DARIO_PORT |
3456 |
open-sse/executors/dario.ts |
Dario 내장 서비스 포트입니다. |
DARIO_HOST |
127.0.0.1 |
open-sse/executors/dario.ts |
Dario 내장 서비스의 바인딩/연결 호스트입니다(기본적으로 루프백 전용). |
DARIO_PORT |
3456 |
open-sse/executors/dario.ts |
Dario 내장 서비스 포트입니다. |
LOCAL_HOSTNAMES |
(비어 있음) | open-sse/config/providerRegistry.ts |
"로컬"로 간주할 추가 호스트 이름(Docker 서비스 이름 등)을 쉼표로 구분한 목록입니다. |
ENABLE_CC_COMPATIBLE_PROVIDER는 Claude Code 클라이언트만 허용하는 서드파티 릴레이 전용입니다.
OmniRoute는 해당 릴레이가 요청을 허용하도록 요청을 재작성합니다. Claude Code CLI만 사용하려는 경우나
이러한 릴레이가 무엇인지 확실하지 않은 경우에는 이 기능을 비활성화한 상태로 유지하고 대신 일반
Anthropic 호환 제공자를 추가하세요.
21. 프록시 상태
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
PROXY_FAST_FAIL_TIMEOUT_MS |
2000 |
src/lib/proxyHealth.ts |
빠른 실패 상태 확인 타임아웃입니다. |
PROXY_LATENCY_WINDOW_HOURS |
3 |
src/lib/db/proxies.ts |
지연 시간 최적화 풀 전략에서 후보 프록시의 평균 지연 시간을 계산하는 시간 범위(시간 단위)입니다. |
PROXY_HEALTH_CACHE_TTL_MS |
30000 |
src/lib/proxyHealth.ts |
상태 확인 결과 캐시 TTL입니다. |
PROXY_HEALTH_UNHEALTHY_CACHE_TTL_MS |
2000 |
src/lib/proxyHealth.ts |
실패한 프록시 상태 프로브의 캐시 TTL입니다. 높은 동시성에서 발생하는 일시적인 프록시 타임아웃을 빠르게 재시도하면서 실제로 작동하지 않는 프록시에 대한 빠른 실패 기능은 유지할 수 있도록 이 값을 PROXY_HEALTH_CACHE_TTL_MS보다 짧게 설정하세요. |
PROXY_HEALTH_ENABLED |
true |
src/lib/proxyHealth/scheduler.ts |
등록된 프록시를 주기적으로 프로브하는 백그라운드 프록시 상태 스케줄러를 비활성화하려면 false로 설정하세요. |
PROXY_HEALTH_INTERVAL_MS |
600000 |
src/lib/proxyHealth/scheduler.ts |
백그라운드 상태 스케줄러의 전체 검사 간격(ms 단위, 최솟값 60000)입니다. |
PROXY_HEALTH_TEST_URL |
https://httpbin.org/ip |
src/lib/proxyHealth/probeTarget.ts |
스케줄러와 /api/settings/proxies/auto-test 엔드포인트에서 사용하는 도달 가능성 프로브 대상입니다. 공개 기본값을 사용하지 않으려면 내부/자체 호스팅 URL로 지정하세요. |
PROXY_HEALTH_TEST_CONCURRENCY |
10 |
src/lib/proxyHealth/probeTarget.ts |
스케줄러와 /api/settings/proxies/auto-test 엔드포인트가 공유하며, 배치당 동시에 시작되는 프로브 수입니다. 최솟값은 1로 내림 처리되고 최댓값은 50으로 제한됩니다. |
PROXY_HEALTH_TEST_STAGGER_MS |
100 |
src/lib/proxyHealth/probeTarget.ts |
배치 내에서 두 프로브가 출발하는 사이의 지연 시간(ms)입니다. 이 값이 없으면 전체 배치가 동시에 출발하므로 공유 송신 IP가 속도 제한 대상에 걸릴 수 있습니다. 간격을 비활성화하려면 0으로 설정하세요. 최댓값은 5000으로 제한됩니다. |
PROXY_HEALTH_USE_PROVIDER_TARGET |
true |
src/lib/proxyHealth/providerProbeTarget.ts |
프록시에 할당된 공급자의 실제 호스트(GET /models, API 키 없음)에 대한 프로브를 중단하고 항상 PROXY_HEALTH_TEST_URL을 대신 사용하려면 "false"로 설정하세요. |
PROXY_HEALTH_AUTO_DEACTIVATE |
false |
src/lib/proxyHealth/statusPolicy.ts |
false(기본값)이면 자동 도달 가능성 프로브(스케줄러 + /api/settings/proxies/auto-test의 "모두 테스트" 버튼)는 읽기 전용이며 프록시 상태를 절대 변경하지 않습니다. 활성/비활성 상태는 운영자만 설정하므로, 불안정한 프로브 때문에 할당된 프록시가 고립되는 일을 방지할 수 있습니다(#6246). 기존의 테스트 후 상태 설정 동작을 복원하려면 true로 설정하세요. |
PROXY_POOL_EGRESS_OBSERVATION |
false |
src/shared/utils/featureFlags.ts |
옵트인 기능 플래그입니다(FEATURE_FLAGS.md 참조; 대시보드 DB 재정의가 우선합니다). true(또는 1, yes)로 설정하면 대시보드의 프록시 풀 아래에 읽기 전용 풀 송신 관측 정보가 표시됩니다(프록시 로그를 기반으로 지난 24시간 동안의 고유 송신 IP, 연결 수, 단일 IP 뒤에서 가장 많이 관측된 수). 라우팅에는 절대 사용되지 않습니다. |
PROXY_AUTO_REMOVE |
false |
src/lib/proxyHealth/scheduler.ts |
연속 실패가 반복된 후 스케줄러가 프록시를 자동 제거하도록 하려면 true로 설정하세요. |
PROXY_AUTO_REMOVE_AFTER |
3 |
src/lib/proxyHealth/scheduler.ts |
스케줄러가 프록시를 자동 제거하기 전까지 허용되는 연속 실패 횟수입니다(PROXY_AUTO_REMOVE=true인 경우). |
PROXY_AUTO_DISABLE |
false |
src/lib/proxyHealth/scheduler.ts |
반복적으로 연속 실패한 프록시를 제거하는 대신 스케줄러가 소프트 비활성화(상태 dead, 삭제하지 않음)하도록 하려면 true로 설정합니다. PROXY_AUTO_REMOVE의 비파괴적 대안입니다. 프록시는 풀/로테이션 해석에서 즉시 제외되며(범위 풀 해석에서 사용하는 활성 상태 필터가 이미 해당 프록시를 제외함), 프로브를 다시 통과하기 시작하면 자동으로 재활성화됩니다. PROXY_AUTO_REMOVE_AFTER 임계값을 공유합니다. 두 플래그가 모두 true이면 PROXY_AUTO_REMOVE가 우선합니다. |
OMNIROUTE_CONTROL_PLANE_PROXY_DIRECT_FALLBACK |
false |
src/shared/constants/featureFlagDefinitions.ts |
프록시 도달 가능성 사전 검사가 실패할 때 OAuth 및 공급자 검증 흐름이 고정된 프록시를 우회하여 직접 연결하도록 허용합니다. 적용 우선순위는 Feature Flags DB 재정의 > 환경 변수 > 기본값입니다. |
RATE_LIMIT_MAX_WAIT_MS |
30000 (30초) |
open-sse/services/rateLimitManager.ts |
요청을 실패 처리하기 전에 429 응답에서 대기할 최대 시간입니다. |
RATE_LIMIT_EXECUTION_MAX_WAIT_MS |
600000 (10분) |
open-sse/services/rateLimitManager.ts |
허용된 요청의 속도 제한 예약이 만료되기 전까지 실행 상태로 유지될 수 있는 최대 시간입니다. 큐 대기 시간 예산과 분리되어 있어 비증분 게이트웨이에서 느린 가져오기 시작으로 인해 시간 초과가 발생하지 않습니다(#12027). |
RATE_LIMIT_MAX_QUEUE_DEPTH |
0 (비활성화됨) |
open-sse/services/rateLimitManager.ts |
큐 허용 한도입니다. 이미 큐에 대기 중인 요청 수가 이 값에 도달하면 429 queue_full로 거부합니다. 0 = 무제한(기본값). |
RATE_LIMIT_AUTO_ENABLE |
(설정되지 않음) | open-sse/services/rateLimitManager.ts |
저장된 대시보드 설정과 관계없이 자동 활성화 속도 제한 안전망을 강제로 켜거나 끕니다. 강제로 켜려면 true/1/on, 강제로 끄려면 false/0/off를 사용할 수 있습니다. |
PROVIDER_COOLDOWN_ENABLED |
(설정되지 않음 → 꺼짐) | open-sse/services/providerCooldownTracker.ts |
요청 전반에 걸친 전역 공급자/연결 쿨다운 추적을 선택적으로 활성화합니다. 기본값은 꺼짐입니다(Connection Cooldown / Provider Circuit Breaker와 기능이 겹침). 활성화하려면 true/1/on을 사용할 수 있습니다. |
PROVIDER_COOLDOWN_MIN_MS |
5000 |
open-sse/services/providerCooldownTracker.ts |
실패한 공급자/연결을 재시도하기 전의 최소 쿨다운(ms)입니다. 연속 실패 횟수에 따라 지수적으로 증가합니다. PROVIDER_COOLDOWN_ENABLED가 활성화된 경우에만 사용됩니다. |
PROVIDER_COOLDOWN_MAX_MS |
300000 (5분) |
open-sse/services/providerCooldownTracker.ts |
실패한 공급자/연결을 무조건 재시도하기 전까지의 최대 쿨다운 상한(ms)입니다. PROVIDER_COOLDOWN_ENABLED가 활성화된 경우에만 사용됩니다. |
STREAM_RECOVERY_ENABLED |
(미설정 → 꺼짐) | src/lib/resilience/settings.ts (초기값) → open-sse/services/streamRecovery.ts (로직) |
기능: 잘린 업스트림 스트림을 투명하게 복구합니다(free-claude-code 포팅). 최초 SSE 구간을 최대 STREAM_RECOVERY.HOLDBACK_MS(750ms) 동안 보류하여, 바이트가 클라이언트에 도달하기 전에 발생하는 커밋 전 중단을 감지하면 스트림을 다시 열어 사용자에게 드러나지 않게 재시도합니다. 활성화 시점: 스트림 시작 시 0바이트로 자주 잘리는 불안정한 업스트림을 사용하는 경우 활성화합니다. 모든 스트림에서 첫 토큰까지 걸리는 시간이 최대 750ms 늘어나는 것을 감수할 수 없다면 꺼진 상태로 두십시오. true/1/on을 허용합니다. 영구 저장되는 복원력 설정의 초기값을 지정하며, 대시보드 설정이 지정된 이후에는 해당 설정이 우선합니다. |
STREAM_RECOVERY_MIDSTREAM_ENABLED |
(미설정 → 꺼짐) | src/lib/resilience/settings.ts (초기값) → open-sse/services/streamRecovery.ts (로직) |
기능: 스트림 중간 이어받기(Fase 4.4) — 커밋 후 잘림(바이트가 이미 클라이언트에 도달한 상태)이 발생하면 부분 텍스트를 어시스턴트 프리필로 사용해 다시 요청하고 누락된 접미부를 이어 붙입니다. 일반 텍스트 OpenAI 호환 스트림에서만 작동하며, 도구 호출이 진행 중일 때는 절대 실행되지 않습니다. 활성화 시점: 긴 생성 결과가 답변 중간에 잘리고, 복구된 뒷부분이 토큰 단위가 아닌 한 번에 도착하는 것을 허용할 수 있는 경우 활성화합니다. STREAM_RECOVERY_ENABLED와는 독립적입니다(위험 특성이 다름). true/1/on을 허용합니다. |
STREAM_THROUGHPUT_WATCHDOG_ENABLED |
(미설정 → 꺼짐) | src/lib/resilience/settings.ts → open-sse/services/throughputWatchdog.ts |
선택적으로 활성화하는 스트림 유효 출력 감시 기능입니다. 청크를 계속 전송하지만 설정된 어시스턴트 출력 속도에 미달하는 스트림을 감지합니다. 하트비트, 사용량 이벤트, 빈 델타 및 도구/추론 단계는 진행 상황으로 오인되지 않습니다. 유휴 및 하드 데드라인 타임아웃과는 별개입니다. |
STREAM_THROUGHPUT_WATCHDOG_WARMUP_MS |
30000 |
src/lib/resilience/settings/normalize.ts |
처리량 평가 전 유예 기간이며, 0~600000ms 범위로 제한됩니다. |
STREAM_THROUGHPUT_WATCHDOG_WINDOW_MS |
30000 |
src/lib/resilience/settings/normalize.ts |
유효 출력의 이동 구간이며, 1000~600000ms 범위로 제한됩니다. 중단 전에 하나의 전체 구간이 완료되어야 합니다. |
STREAM_THROUGHPUT_WATCHDOG_MIN_BYTES_PER_SECOND |
4 |
src/lib/resilience/settings/normalize.ts |
UTF-8 어시스턴트 출력의 최소 바이트 속도(보수적인 토큰 대용 지표)이며, 1~1000000 범위로 제한됩니다. |
STREAM_THROUGHPUT_WATCHDOG_MIN_USEFUL_BYTES |
1 |
src/lib/resilience/settings/normalize.ts |
측정 가능한 것으로 간주되는 0이 아닌 유효 출력 샘플의 최소 크기이며, 1~1000000바이트 범위로 제한됩니다. |
HEALTHCHECK_STAGGER_MS |
3000 |
src/lib/tokenHealthCheck.ts |
시작 시 공급자 토큰 상태 확인 사이의 시차 간격(ms)입니다. |
HEALTHCHECK_JITTER_MIN_MS |
500 |
src/lib/tokenHealthCheck.ts |
버스트를 방지하기 위해 공급자 토큰 상태 확인 사이에 HEALTHCHECK_STAGGER_MS에 더해지는 무작위 지터의 최솟값(ms)입니다(Issue #1220). |
HEALTHCHECK_JITTER_MAX_MS |
5000 |
src/lib/tokenHealthCheck.ts |
버스트를 방지하기 위해 공급자 토큰 상태 확인 사이에 HEALTHCHECK_STAGGER_MS에 더해지는 무작위 지터의 최댓값(ms)입니다(Issue #1220). |
HEALTHCHECK_BATCH_SIZE |
20 |
src/lib/tokenHealthCheck.ts |
시작 시 토큰 상태 확인 스윕의 동시 확인 배치 크기입니다. 값이 클수록 더 많은 연결을 병렬로 확인하고, 값이 작을수록 순간 부하가 감소합니다(Issue #7875, #7719의 회귀). |
REQUEST_RETRY |
2 |
src/sse/services/cooldownAwareRetry.ts |
모델 범위의 쿨다운 응답에 대해 클라이언트에 오류를 반환하기 전까지 수행할 자동 재시도 횟수입니다. |
MAX_RETRY_INTERVAL_SEC |
30 |
src/sse/services/cooldownAwareRetry.ts |
쿨다운 재시도 사이의 최대 백오프 간격(초)입니다. 업스트림 Retry-After 값과 관계없이 이 값으로 제한됩니다. |
HEADROOM_URL |
http://localhost:8787 |
src/lib/headroom/detect.ts |
Headroom 토큰 절약 프록시 URL입니다. 대시보드 수명 주기(api/headroom/*)는 기본적으로 루프백에서 로컬 headroom-ai CLI를 실행합니다. 외부 Docker 사이드카 프록시를 가리킬 때만 재정의하세요. |
스트림 복구 튜닝 상수
복구 홀드백 동작은 참고용으로 아래에 표시된
open-sse/config/constants.ts의 하드코딩된 상수(STREAM_RECOVERY)로 조정됩니다.
이를 변경하려면 환경 변수가 아니라 코드를 수정해야 합니다.
STREAM_RECOVERY.HOLDBACK_MS = 750— 클라이언트에 바이트가 커밋되기 전에 조기 잘림을 재시도할 수 있도록 초기 SSE 윈도우를 유지하는 시간입니다.STREAM_RECOVERY.BUFFER_MAX_BYTES = 65536— 유지되는 윈도우의 엄격한 상한입니다. 타이머와 관계없이 이만큼의 바이트가 누적되면 즉시 커밋(플러시 + 패스스루)합니다.STREAM_RECOVERY.EARLY_RETRY_MAX = 4— 홀드백이 아직 커밋되지 않은 동안 업스트림 스트림을 투명하게 다시 여는 최대 횟수입니다.
공급자별 슬라이딩 윈도우 속도 제한(환경 변수 없음): FCC에서 포팅된 공급자별 슬라이딩 윈도우 속도 제한 _폴백_은 코드에 존재하지만 (
open-sse/services/providerDefaultRateLimit.ts,open-sse/services/rateLimitManager.ts를 통해 연결됨) 기본 맵이 비어 있는 상태로 제공되며 현재 운영자용 환경 변수가 없습니다. 테스트 훅 또는 코드 수정을 통해서만 활성화됩니다. 따라서 의도적으로 위 표에는 포함하지 않았습니다. 조정 가능한 옵션이 있는(token, IP)별 릴레이 제한기는RELAY_IP_PER_MINUTE입니다(§3 네트워크 및 포트).
22. 디버깅
Caution
이 변수들은 상세한 출력을 생성하며 민감한 데이터가 유출될 수 있습니다. 프로덕션 환경에서는 절대 활성화하지 마세요.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
CURSOR_DEBUG |
(설정되지 않음) | open-sse/executors/cursor.ts |
상세한 Cursor 실행기 로그(디코딩된 SSE 청크 등)를 활성화하려면 1로 설정합니다. |
CURSOR_STREAM_DEBUG |
(설정되지 않음) | open-sse/executors/cursor.ts |
CURSOR_DEBUG의 이전 버전 호환 별칭입니다. |
CURSOR_DUMP_FILE |
(설정되지 않음) | open-sse/executors/cursor.ts |
CURSOR_DEBUG=1일 때 디코딩된 원시 Cursor 청크를 기록할 선택적 파일 경로입니다. |
CURSOR_STREAM_TIMEOUT_MS |
300000 |
open-sse/executors/cursor.ts |
Cursor 실행기의 스트림 유휴 제한 시간(ms)입니다. |
CURSOR_KV_GRACE_MS |
2000 |
open-sse/executors/cursor.ts |
바이트가 버퍼에 남아 있을 때 composer kv_after_text 소프트 종료자 이후의 유예 시간(ms)입니다. 후속 exec_mcp 도구 호출이 프레임을 완료할 시간을 제공합니다. |
CURSOR_TOOL_DIRECTIVE |
활성화됨 (!== "0") |
open-sse/executors/cursor.ts |
composer-2.5가 도구 호출을 안정적으로 실행하도록 하는 도구 커밋 지시문입니다. 비활성화하려면 0으로 설정합니다. |
OMNIROUTE_SYSTEM_INSTRUCTION_APPEND |
(설정되지 않음) | open-sse/translator/request/claude-to-openai.ts, open-sse/translator/response/openai-to-claude.ts |
변환 후 시스템 메시지에 추가되는 운영자 정의 시스템 프롬프트 텍스트(변환 후 삽입)로, codex/Responses 및 /v1/messages 경로에 전달됩니다. 에코된 시스템 프리앰블 블록에서 제거되는 지시문 접두사로도 사용됩니다. 비활성화하려면 설정하지 않은 상태로 두세요. |
CURSOR_IMAGE_FETCH_TIMEOUT_MS |
15000 |
open-sse/utils/cursorImages.ts |
원격 image_url 비전 입력의 이미지별 가져오기 제한 시간(ms)입니다. |
CURSOR_STATE_DB_PATH |
(탐색됨) | open-sse/utils/cursorVersionDetector.ts |
IDE 버전 감지에 사용되는 Cursor IDE 상태 DB 조회를 재정의합니다. |
CURSOR_AGENT_CLI_VERSION |
(감지 / 고정) | open-sse/utils/cursorAgentCliVersion.ts |
Agent Run의 x-cursor-client-version: cli-…에 사용할 Agent CLI 빌드 ID(YYYY.MM.DD-<hash>)입니다. |
CURSOR_AGENT_BIN |
(설정되지 않음) | open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts |
이미지 생성에 사용되는 Cursor Agent 바이너리의 경로입니다. 설정하지 않으면 핸들러는 providerSpecificData.agentBin을 사용한 다음 PATH를 사용합니다. |
CURSOR_IMG_TIMEOUT_MS |
210000 |
open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts |
Cursor Agent 이미지 작업의 이미지별 총 제한 시간(ms)입니다. |
CURSOR_IMG_MAX_CONCURRENT |
2 |
open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts |
Cursor 이미지 작업의 공유 시트 동시성 제한입니다. |
CURSOR_IMG_MODEL |
요청 / auto |
open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts |
이미지 작업용 Cursor CLI --model을 재정의합니다. |
UC_IMAGE_POLL_INTERVAL_MS |
2000 |
open-sse/handlers/imageGeneration/providers/ucImage.ts |
UC(uncensored.com) 이미지 생성 결과의 폴링 주기(ms)입니다. |
UC_IMAGE_POLL_TIMEOUT_MS |
60000 |
open-sse/handlers/imageGeneration/providers/ucImage.ts |
UC 이미지 생성 결과 폴링의 총 제한 시간(ms)입니다. |
UC_VIDEO_POLL_INTERVAL_MS |
3000 |
open-sse/handlers/videoGeneration/providers/ucVideo.ts |
UC(uncensored.com) 동영상 생성 결과의 폴링 주기(ms)입니다. |
UC_VIDEO_POLL_TIMEOUT_MS |
300000 |
open-sse/handlers/videoGeneration/providers/ucVideo.ts |
UC 동영상 생성 결과 폴링의 총 제한 시간(ms)입니다. |
CURSOR_DATA_DIR |
(탐색됨) | open-sse/utils/cursorAgentCliVersion.ts |
Cursor Agent CLI 데이터 디렉터리(…/versions/<id>)를 재정의합니다. 공식 에이전트가 사용하는 것과 동일한 변수입니다. |
CURSOR_TOKEN |
(설정되지 않음) | scripts/ad-hoc/cursor-tap.cjs |
개발자 도구에서 사용하는 직접 Cursor bearer 토큰입니다. |
OMNIROUTE_LOG_REQUEST_SHAPE |
비활성화됨("1"로 옵트인) |
src/app/api/v1/chat/completions/route.ts |
"1"로 설정하면 대용량 채팅 페이로드의 콘텐츠 유형/길이 마커를 기록합니다. 로그 노이즈를 줄이기 위해 기본적으로 꺼져 있습니다. |
DEBUG_RESPONSES_SSE_TO_JSON |
(설정되지 않음) | open-sse/handlers/responseTranslator.ts |
Responses API SSE→JSON 변환 세부 정보를 기록하려면 true로 설정합니다. |
DEBUG_CLAUDE_NONSTREAM |
(설정되지 않음) | open-sse/handlers/responseTranslator.ts |
Claude 응답 변환 경로에서 빈 textContent 청크를 노출하려면 true로 설정합니다(디버그 전용). |
NEXT_PUBLIC_OMNIROUTE_E2E_MODE |
(설정되지 않음) | E2E 테스트 하네스 | E2E 테스트 모드(완화된 인증, 테스트 훅)를 활성화하려면 true로 설정합니다. |
23. GitHub 통합
사용자가 대시보드에서 직접 이슈를 보고할 수 있도록 합니다.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
GITHUB_ISSUES_REPO |
(설정되지 않음) | src/app/api/v1/issues/report/route.ts |
owner/repo 형식의 저장소입니다. |
GITHUB_ISSUES_TOKEN |
(설정되지 않음) | src/app/api/v1/issues/report/route.ts |
issues:write 범위를 가진 GitHub 개인용 액세스 토큰입니다. |
GITHUB_TOKEN |
(설정되지 않음) | 이슈 분류 / 클라우드 에이전트 도우미 | GITHUB_ISSUES_TOKEN의 대체값으로 사용되며 src/lib/cloudAgent/*의 클라우드 에이전트 도우미에서도 사용하는 범용 GitHub 액세스 토큰입니다. |
배포 시나리오
릴레이 백엔드 SRE 지침(ts/bifrost/auto 동작, 9router와 CLIProxyAPI 배치 비교, 고처리량 폴백 전략)은 릴레이 백엔드 전략을 참조하세요.
최소 로컬 개발 환경
JWT_SECRET=$(openssl rand -base64 48)
API_KEY_SECRET=$(openssl rand -hex 32)
INITIAL_PASSWORD=dev123
PORT=20128
NODE_ENV=development
Docker 프로덕션 환경
JWT_SECRET=<generated>
API_KEY_SECRET=<generated>
INITIAL_PASSWORD=<generated>
STORAGE_ENCRYPTION_KEY=<generated>
DATA_DIR=/data
PORT=20128
API_PORT=20129
NODE_ENV=production
AUTH_COOKIE_SECURE=true
REQUIRE_API_KEY=true
NEXT_PUBLIC_BASE_URL=https://omniroute.example.com
BASE_URL=http://localhost:20128
OMNIROUTE_MEMORY_MB=8192
CORS_ORIGIN=https://your-frontend.example.com
에어갭 / CI 환경
JWT_SECRET=test-jwt-secret-for-ci
API_KEY_SECRET=test-api-key-secret-for-ci
INITIAL_PASSWORD=testpass
NODE_ENV=production
OMNIROUTE_DISABLE_BACKGROUND_SERVICES=true
APP_LOG_TO_FILE=false
리버스 프록시를 사용하는 VPS(nginx + Cloudflare)
JWT_SECRET=<generated>
API_KEY_SECRET=<generated>
STORAGE_ENCRYPTION_KEY=<generated>
PORT=20128
AUTH_COOKIE_SECURE=true
REQUIRE_API_KEY=true
NEXT_PUBLIC_BASE_URL=https://omniroute.example.com
BASE_URL=http://127.0.0.1:20128
CORS_ORIGIN=https://omniroute.example.com
ENABLE_TLS_FINGERPRINT=true
CLI_COMPAT_ALL=1
24. Skills 샌드박스 (v3.8.0+)
Skills 프레임워크(src/lib/skills/)가 샌드박스 환경에서 사용자 정의 자동화를 실행할 때 적용되는 제한 및 안전 설정입니다.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
SKILLS_SANDBOX_TIMEOUT_MS |
10000 (10초) |
src/lib/skills/builtins.ts |
샌드박스에서 실행되는 스킬 코드의 실행별 실제 경과 시간 제한입니다. 엄격한 상한이며, 이보다 오래 실행되면 종료됩니다. |
SKILLS_EXECUTION_TIMEOUT_MS |
(SKILLS_SANDBOX_TIMEOUT_MS로 대체) |
src/lib/skills/ |
상위 수준의 스킬 오케스트레이션 시간 제한입니다. 다단계 워크플로를 허용하려면 SKILLS_SANDBOX_TIMEOUT_MS보다 높게 설정하세요. |
SKILLS_MAX_FILE_BYTES |
1048576 (1 MB) |
src/lib/skills/builtins.ts |
스킬이 샌드박스 내 단일 파일에서 읽을 수 있는 최대 바이트 수입니다. |
SKILLS_MAX_HTTP_RESPONSE_BYTES |
256000 (250 KB) |
src/lib/skills/builtins.ts |
스킬 내에서 단일 HTTP 응답으로부터 캡처할 수 있는 최대 바이트 수입니다. |
SKILLS_MAX_SANDBOX_OUTPUT_CHARS |
100000 |
src/lib/skills/builtins.ts |
샌드박스 호출에서 반환되는 stdout/stderr 문자 수의 엄격한 상한입니다. |
SKILLS_SANDBOX_NETWORK_ENABLED |
false |
src/lib/skills/builtins.ts |
샌드박스 내부에서 외부 네트워크 연결을 허용하려면 1/true로 설정하세요. 안전을 위해 기본적으로 격리됩니다. |
SKILLS_ALLOWED_SANDBOX_IMAGES |
(비어 있음) | src/lib/skills/builtins.ts |
샌드박스 실행에 허용되는 컨테이너 이미지의 쉼표로 구분된 허용 목록입니다. 비어 있으면 기본 제공 이미지만 허용됩니다. |
SKILLS_SANDBOX_DOCKER_IMAGE |
(기본 제공값) | src/lib/skills/ |
Docker 기반 샌드박스를 생성할 때 사용하는 컨테이너 이미지입니다. 사용자 지정 강화 베이스 이미지를 고정하려면 재정의하세요. |
SKILLS_SANDBOX_RUNTIME |
auto |
src/lib/skills/sandbox.ts, src/lib/skills/containerProvider.ts |
스킬 샌드박싱에 사용할 컨테이너 런타임입니다: auto | docker | apple | wsl | orbstack | podman. auto는 호스트 OS별로 설치된 최적의 런타임(macOS에서는 Apple Container/OrbStack, Windows에서는 WSL Container, Linux에서는 Podman)을 선택하며, 사용할 수 없으면 Docker로 대체합니다. |
Caution
SKILLS_SANDBOX_NETWORK_ENABLED=true를 활성화하면 임의의 스킬 코드에서 외부로 나가는 경로가 열립니다. 공유 배포 환경에서는OUTBOUND_SSRF_GUARD_ENABLED=true및 엄격한CORS_ORIGIN/프록시 정책과 함께 사용하세요.
25. 공급자 할당량, 터널, 백업 및 기타 런타임
공급자 할당량 엔드포인트, 네트워크 터널(Tailscale, Ngrok, MITM 디버그 프록시), 1Proxy 이그레스 풀, 데이터베이스 백업, 실행기 계층 또는 스크립트에서 참조하는 기능별 소규모 재정의 설정입니다.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
REDIS_URL |
redis://localhost:6379 |
src/shared/utils/rateLimiter.ts |
속도 제한기 백엔드용 Redis 연결 문자열입니다. |
ALIBABA_CODING_PLAN_HOST |
(프로덕션 호스트) | open-sse/services/bailianQuotaFetcher.ts |
Alibaba Bailian 코딩 플랜 할당량을 가져오는 데 사용되는 호스트를 재정의합니다. |
ALIBABA_CODING_PLAN_QUOTA_URL |
호스트에서 파생됨 | open-sse/services/bailianQuotaFetcher.ts |
Alibaba Bailian의 전체 할당량 URL을 재정의합니다. |
QWEN_CLOUD_COOKIE |
(설정되지 않음) | open-sse/services/qwenTokenPlanQuotaFetcher.ts |
Qwen Cloud / Model Studio 개인 Token Plan 할당량 게이트웨이용 콘솔 세션 쿠키입니다(추론 API 키로는 이를 읽을 수 없음). home.qwencloud.com의 Billing › Subscription에서(F12 › Network) cs-data.qwencloud.com으로 보내는 임의의 api.json 호출에서 login_qwencloud_ticket이 포함된 전체 Cookie 요청 헤더를 복사하세요. 민감한 세션 범위 값이므로 연결별 qwenCloudCookie Dashboard 필드를 사용하는 것이 좋습니다. |
QWEN_CLOUD_SEC_TOKEN |
(설정되지 않음) | open-sse/services/qwenTokenPlanQuotaFetcher.ts |
Token Plan 콘솔 게이트웨이용 수동 sec_token 재정의 값입니다. 민감한 값이며, 설정하지 않으면 가져오기 도구가 쿠키를 사용해 대시보드 HTML에서 이를 확인합니다. |
QWEN_TOKEN_PLAN_HOST |
https://cs-data.qwencloud.com |
open-sse/services/qwenTokenPlanQuotaFetcher.ts |
개인 Token Plan 할당량 가져오기 도구의 게이트웨이 호스트를 재정의합니다(예: Model Studio 콘솔의 bailian-singapore-cs.alibabacloud.com). |
QWEN_TOKEN_PLAN_DASHBOARD_URL |
https://home.qwencloud.com/ |
open-sse/services/qwenTokenPlanQuotaFetcher.ts |
로그인된 HTML에서 sec_token을 확인하는 데 사용되는 대시보드 URL입니다. |
ALIBABA_FREE_TIER_VISION_FE_PATH |
/costing-balance/free-quota-image-video |
open-sse/services/alibabaFreeTierQuotaFetcher.ts |
Alibaba Model Studio 무료 등급 비전/미디어 할당량을 가져오기 위한 콘솔 프런트엔드 경로를 재정의합니다. |
ALIBABA_FREE_TIER_MULTIMODAL_FE_PATH |
/costing-balance/free-quota-multimodal |
open-sse/services/alibabaFreeTierQuotaFetcher.ts |
Alibaba Model Studio 무료 티어 멀티모달 할당량을 가져오기 위한 콘솔 프런트엔드 경로 재정의입니다. |
ALIBABA_FREE_TIER_AUDIO_FE_PATH |
/costing-balance/free-quota-audio |
open-sse/services/alibabaFreeTierQuotaFetcher.ts |
Alibaba Model Studio 무료 티어 오디오 할당량을 가져오기 위한 콘솔 프런트엔드 경로 재정의입니다. |
ALIBABA_FREE_TIER_ALLOWLIST_PATH |
(설정되지 않음) | open-sse/services/alibabaFreeTierAllowlist.ts |
기본 제공되는 Alibaba 무료 티어 텍스트 모델 허용 목록을 재정의하는 로컬 JSON 파일의 선택적 경로입니다. $DATA_DIR/alibaba-free-tier-allowlist.json, 그다음 config/alibaba-free-tier-allowlist.json 순으로 대체 경로를 사용합니다. |
CONTEXT_RESERVE_TOKENS |
1024 |
open-sse/services/contextManager.ts |
프롬프트 예산을 계산할 때 완성 출력용으로 예약되는 토큰 수입니다. |
CONTEXT_KEEP_LATEST_IMAGES |
2 |
open-sse/services/contextManager.ts |
컨텍스트 창에 맞추기 위해 오래된 인라인 이미지를 제거할 때 유지할 최신 인라인 이미지의 수입니다(#8560). |
MODEL_ALIAS_COMPAT_ENABLED |
활성화됨 | open-sse/services/model.ts |
이전 클라이언트에서 사용하는 레거시 모델 별칭 호환성 계층을 전환합니다. |
OMNIROUTE_EMERGENCY_FALLBACK |
활성화됨 | open-sse/services/emergencyFallback.ts |
실패한 요청을 무료 nvidia/openai/gpt-oss-120b 모델로 재라우팅하는 긴급 예산 소진 대체 기능을 비활성화하려면 false(또는 0)로 설정합니다. 적용 우선순위는 기능 플래그 DB 재정의 > 환경 변수 > 기본값이며, 사용할 수 없는 경우 서비스는 원시 환경 변수 값으로 대체합니다. |
COMMAND_CODE_CALLBACK_PORT |
(설정되지 않음) | src/app/api/providers/command-code/auth/shared.ts |
Command Code CLI 도우미의 OAuth 방식 콜백에 사용되는 로컬 포트입니다. |
COMMAND_CODE_VERSION |
0.33.2 |
open-sse/executors/commandCode.ts |
Command Code 업스트림에 x-command-code-version 헤더로 전송되는 값입니다. CLI 버전을 올리려면 재정의하세요. |
COMMANDCODE_API_URL |
https://api.commandcode.ai |
open-sse/services/usage/command-code.ts |
스마트폰 할당량 가져오기 도구의 원격 측정에서 사용하는 Command Code 사용량/할당량 업스트림의 기본 URL입니다. 자체 호스팅/대체 Command Code API를 사용하려면 재정의하세요. |
MITM_LOCAL_PORT |
443 |
src/mitm/server.cjs |
MITM 디버그 프록시의 로컬 바인드 포트입니다. |
MITM_DISABLE_TLS_VERIFY |
0 |
src/mitm/server.cjs |
업스트림 TLS 검증을 비활성화하려면 1로 설정합니다(개발 환경 전용). |
MITM_IDLE_TIMEOUT_MS |
60000 |
src/mitm/socketTimeouts.ts, src/mitm/server.cjs |
프록시 연결의 유휴 소켓 제한 시간(ms)입니다. 이 시간을 초과하여 유휴 상태인 소켓은 반개방 터널 누수를 방지하기 위해 종료됩니다. |
MITM_VERBOSE |
1 |
src/mitm/server.cjs, src/mitm/_internal/bypass.cjs |
라우팅 결정 로그의 상세 수준입니다. 0은 로그를 출력하지 않으며, 값이 높을수록 더 많은 우회/라우팅 결정을 기록합니다. |
MITM_ROOT_CA_ENABLED |
false |
src/mitm/manager.ts |
루트 CA + 호스트별 리프 인증서 모델(#6684)을 사용하려면 true로 설정합니다. 새로 설치하면 이 모델이 자동으로 적용되며, 이미 신뢰된 기존 레거시 리프 인증서가 있는 설치에서는 명시적으로 활성화하지 않는 한 레거시 고정 SAN 인증서를 계속 사용합니다. |
MITM_CERT_MODE |
legacy |
src/mitm/manager.ts, src/mitm/server.cjs |
생성된 프록시 프로세스를 위해 MITM 관리자가 설정하는 값(root-ca | legacy)으로, 인증서 마이그레이션 결정을 나타냅니다. 수동으로 설정하기 위한 값이 아닙니다. |
OMNIROUTE_NO_SUDO |
0 |
src/mitm/systemCommands.ts |
MITM 인증서 신뢰 명령에서 앞의 sudo를 제거하려면 1(참으로 평가되는 값)로 설정합니다. 운영자가 CA를 수동으로 신뢰하는 루트리스/사용자 네임스페이스 배포 환경을 위한 옵션입니다(예: Node의 추가 CA 인증서 메커니즘 사용). |
SKIP_ANTIGRAVITY_DNS |
(설정되지 않음) | src/mitm/dns/provision.ts |
Antigravity 프록시 호스트 이름에 대한 /etc/hosts DNS 항목 프로비저닝을 완전히 건너뛰려면 true로 설정합니다. sudo/root를 사용할 수 없는 컨테이너를 위한 옵션입니다. |
OMNIROUTE_SKIP_DNS_WRITE |
(설정되지 않음) | src/mitm/dns/dnsConfig.ts |
DNS 항목을 추가하거나 제거할 때 hosts 파일에 쓰는 작업을 건너뛰려면 1로 설정합니다. 샌드박스 또는 읽기 전용 테스트 환경을 위한 옵션입니다. |
OMNIROUTE_SKIP_SYSTEM_TRUST |
0 |
src/mitm/cert/install.ts, src/mitm/tproxy/caTrust.ts |
테스트/CI 전용 보호 장치입니다. 1로 설정하면 인증서 신뢰 설치/제거가 아무 작업도 수행하지 않으므로 테스트 스위트가 OS 신뢰 저장소를 변경하지 않습니다. 테스트 설정과 CI 워크플로에서 자동으로 설정됩니다. |
CHANGELOG_BASE_REF |
(자동) | scripts/check/check-changelog-integrity.mjs |
CHANGELOG 삭제 방지 게이트에 사용할 명시적 기준 ref입니다(CI에서는 기본적으로 PR의 기준 브랜치, 그 외에는 가장 높은 release/v*를 사용). |
FREE_PROXY_AUTO_SYNC_ENABLED |
false |
src/lib/freeProxyProviders/scheduler.ts |
백그라운드 무료 프록시 풀 자동 동기화 스케줄러를 활성화하려면 true로 설정합니다. 옵트인 방식이며 기본적으로 비활성화되어 있습니다. |
FREE_PROXY_AUTO_SYNC_INTERVAL_MS |
1800000 |
src/lib/freeProxyProviders/scheduler.ts |
자동 동기화 간격(밀리초)입니다(기본값 30분). |
FREE_PROXY_1PROXY_ENABLED |
true |
src/lib/freeProxyProviders/oneproxy.ts |
1proxy 무료 프록시 소스를 활성화합니다. 비활성화하려면 false로 설정합니다. |
FREE_PROXY_1PROXY_API_URL |
(oneproxy.ts 참조) | src/lib/freeProxyProviders/oneproxy.ts |
1proxy API URL을 재정의합니다. |
FREE_PROXY_1PROXY_MAX |
500 |
src/lib/freeProxyProviders/oneproxy.ts |
1proxy에서 동기화할 때마다 가져올 최대 프록시 수입니다. |
FREE_PROXY_1PROXY_MIN_QUALITY |
50 |
src/lib/freeProxyProviders/oneproxy.ts |
1proxy에서 가져올 프록시의 최소 품질 점수 임계값입니다. |
FREE_PROXY_PROXIFLY_ENABLED |
true |
src/lib/freeProxyProviders/proxifly.ts |
Proxifly 무료 프록시 소스를 활성화합니다. 비활성화하려면 false로 설정합니다. |
FREE_PROXY_PROXIFLY_QUANTITY |
100 |
src/lib/freeProxyProviders/proxifly.ts |
Proxifly 동기화당 가져올 프록시 수입니다. |
FREE_PROXY_PROXIFLY_ANONYMITY |
elite |
src/lib/freeProxyProviders/proxifly.ts |
Proxifly의 익명성 수준 필터입니다(elite, anonymous, transparent). |
FREE_PROXY_IPLOCATE_ENABLED |
false |
src/lib/freeProxyProviders/iplocate.ts |
IPLocate 무료 프록시 소스를 활성화합니다. 명시적으로 활성화해야 합니다. |
FREE_PROXY_IPLOCATE_BASE_URL |
https://raw.githubusercontent.com/iplocate/free-proxy-list/main/protocols |
src/lib/freeProxyProviders/iplocate.ts |
IPLocate 프록시 목록의 기본 URL을 재정의합니다. |
FREE_PROXY_WEBSHARE_ENABLED |
true |
src/lib/freeProxyProviders/webshare.ts |
Webshare 프록시 풀 소스를 활성화합니다. 비활성화하려면 false로 설정하세요. 또한 FREE_PROXY_WEBSHARE_API_KEY가 설정되어 있어야 합니다. |
FREE_PROXY_WEBSHARE_API_KEY |
(없음) | src/lib/freeProxyProviders/webshare.ts |
Webshare 계정 API 토큰(Authorization: Token <key>)입니다. 필수 항목이며, 설정하지 않으면 공급자가 비활성화된 상태로 유지됩니다. |
FREE_PROXY_WEBSHARE_API_URL |
https://proxy.webshare.io/api/v2/proxy/list/ |
src/lib/freeProxyProviders/webshare.ts |
Webshare 프록시 목록 API URL을 재정의합니다. |
FREE_PROXY_WEBSHARE_MAX |
500 |
src/lib/freeProxyProviders/webshare.ts |
Webshare 동기화 한 번당 가져올 최대 프록시 수입니다. |
NEXT_PUBLIC_VERCEL_RELAY_ENABLED |
true |
src/app/(dashboard)/…/ProxyPoolTab.tsx |
프록시 풀 탭에서 Vercel Relay 배포 버튼을 표시하거나 숨깁니다. |
VERCEL_API_BASE |
https://api.vercel.com |
src/app/api/settings/proxy/vercel-deploy/route.ts |
Vercel API 기본 URL을 재정의합니다(테스트용). |
NEXT_PUBLIC_VERCEL_RELAY_DEFAULT_PROJECT |
omniroute-relay |
src/app/(dashboard)/…/VercelRelayModal.tsx |
Vercel Relay 배포 모달에 미리 입력되는 기본 프로젝트 이름입니다. |
TAILSCALE_BIN |
(자동 감지) | src/lib/tailscaleTunnel.ts |
tailscale 바이너리의 명시적 경로입니다. |
TAILSCALED_BIN |
(자동 감지) | src/lib/tailscaleTunnel.ts |
tailscaled 데몬 바이너리의 명시적 경로입니다. |
TAILSCALE_AUTHKEY |
(설정되지 않음) | src/lib/tailscaleTunnel.ts |
비대화형 / 헤드리스 tailscale up을 위한 사전 공유 Tailscale 인증 키입니다(--auth-key=를 통해 전달). 설정되지 않은 경우 대화형 브라우저 인증 URL을 사용하는 로그인 방식으로 대체됩니다. |
NGROK_AUTHTOKEN |
(설정되지 않음) | src/lib/ngrokTunnel.ts |
아웃바운드 ngrok 터널을 인증합니다. |
DB_BACKUP_MAX_FILES |
20 |
src/lib/db/backup.ts |
수동/예약 백업 정리 시 유지할 SQLite 백업 파일의 최대 개수입니다. 마이그레이션 스냅샷은 콘텐츠 주소 지정 방식으로 저장되며 DB 상태가 동일하면 재사용됩니다. 동시 마이그레이션 기간에는 정리되지 않습니다. 설정 → 데이터베이스 백업 보존에 저장된 값을 재정의합니다. |
DB_BACKUP_RETENTION_DAYS |
0 |
src/lib/db/backup.ts |
수동/예약 백업 정리 시 유지할 최대 기간(일)입니다. 0은 기간 기반 정리를 비활성화합니다. 동시 마이그레이션 기간에는 마이그레이션 스냅샷이 정리되지 않습니다. 설정 → 데이터베이스 백업 보존에 저장된 값을 재정의합니다. |
OMNIROUTE_BACKUP_SCHEDULE_JOB_INTERVAL_MS |
30000 |
src/lib/jobs/backupScheduleJob.ts |
backup-schedule.json을 실행하는 서버 측 작업의 틱 간격(ms)입니다. 1분 단위의 cron 정밀도보다 훨씬 짧아야 하며, 5000 미만이거나 파싱할 수 없는 값은 30000으로 대체됩니다. |
CONTAINER_HOST |
docker |
scripts/check-permissions.sh |
엔트리포인트 권한 검사를 위한 컨테이너 런타임 힌트입니다. 모든 Podman 토폴로지에서는 podman으로 설정합니다. 컨테이너는 엔진이 로컬에 있는지 또는 Podman Machine을 통해 연결되는지 확인할 수 없으므로, 경고는 특정 토폴로지에 종속되지 않으며 contrib/podman/README.md를 안내합니다. |
QUOTA_STORE_DRIVER |
sqlite |
src/lib/quota/storeFactory.ts |
할당량 공유 사용량 저장소 백엔드입니다: sqlite(기본값) 또는 redis. |
QUOTA_STORE_REDIS_URL |
(설정되지 않음) | src/lib/quota/storeFactory.ts |
QUOTA_STORE_DRIVER=redis일 때 사용하는 Redis 연결 문자열입니다(예: redis://localhost:6379). |
QUOTA_SATURATION_THRESHOLD |
0.5 |
src/lib/quota/enforce.ts |
풀 포화 비율(0..1)입니다. 이 값 이상이면 풀이 엄격 모드로 전환되어 차용이 허용되지 않습니다. |
QUOTA_SOFT_DEPRIORITIZE_FACTOR |
0.7 |
open-sse/services/combo.ts |
소프트 할당량 정책이 대상을 후순위로 지정할 때 적용되는 점수 배수(0..1). |
STATUS_SOFT_DEPRIORITIZE_FACTOR |
0.5 |
open-sse/services/combo/autoStrategy.ts |
사전 점검 할당량 차단이 꺼져 있을 때(#4540), 자동 콤보 점수 산정에서 소진된 공급자(credits_exhausted/rate_limited)에 적용되는 점수 배수(0..1). |
QUOTA_CONSUMPTION_RETENTION_DAYS |
14 |
src/lib/db/quotaConsumption.ts |
GC(gcQuotaConsumption) 전 quota_consumption 버킷의 보존 기간(일). |
QUOTA_PREFLIGHT_CUTOFF_ENABLED |
false |
src/lib/resilience/settings.ts |
선택적 활성화(기본값 꺼짐): 점수 산정 전에 할당량이 적은 후보를 제외하는 자동 라우팅의 엄격한 할당량 차단을 활성화합니다. |
OMNIROUTE_AUTO_FREE_FALLBACK_TO_FULL_POOL |
false |
open-sse/services/autoCombo/virtualFactory.ts |
선택적 활성화(기본값 꺼짐): auto/<category>:<tier> 필터와 일치하는 연결된 후보가 없을 때 빈 풀을 반환하는 대신 필터링되지 않은 전체 풀로 폴백하는 기존 동작을 복원합니다. 기본값이 꺼짐이므로 :free는 "무료 티어만"을 의미합니다. |
OMNIROUTE_CHAOS_MAX_PANEL |
5 |
open-sse/services/autoCombo/virtualFactory.ts |
auto/*:chaos 브로드캐스트 변형의 패널 크기 상한(1~10으로 제한) — 하나의 요청이 최대 이 수만큼 공급자가 서로 다른 모델로 팬아웃됩니다. |
OMNIROUTE_CHAOS_MIN_PANEL |
(엔진 기본값) | open-sse/services/autoCombo/virtualFactory.ts |
chaos 브로드캐스트 핸들러로 전달되는 최소 패널 크기 조정값이며, 설정하지 않으면 엔진 기본값을 유지합니다. |
OMNIROUTE_CHAOS_PANEL_TIMEOUT_MS |
(엔진 기본값) | open-sse/services/autoCombo/virtualFactory.ts |
전체 chaos 패널 팬아웃에 대한 엄격한 타임아웃(ms)이며, 설정하지 않으면 엔진 기본값을 유지합니다. |
GROK_AUTH_PATH |
~/.grok/auth.json |
open-sse/services/grokQuotaFetcher.ts |
grok-web 주간 할당량을 가져오는 데 사용되는 Grok CLI auth.json의 경로이며, 테스트 또는 비표준 CLI 설치 시 재정의할 수 있습니다. |
AGENTBRIDGE_UPSTREAM_CA_CERT |
(설정되지 않음) | src/mitm/manager.ts |
AgentBridge 업스트림 TLS 연결에서 신뢰할 추가 CA 인증서(PEM). |
INSPECTOR_BUFFER_SIZE |
1000 |
src/mitm/inspector/buffer.ts |
Traffic Inspector 링 버퍼에 보관되는 캡처된 요청의 최대 개수입니다. |
INSPECTOR_MAX_BODY_KB |
1024 |
src/mitm/inspector/buffer.ts |
잘리기 전 캡처된 요청/응답 본문의 최대 크기(KB)입니다. |
INSPECTOR_HTTP_PROXY_PORT |
8080 |
src/mitm/inspector/httpProxyServer.ts |
Traffic Inspector HTTP 프록시의 로컬 포트입니다. |
INSPECTOR_HTTP_PROXY_AUTOSTART |
false |
src/mitm/inspector/httpProxyServer.ts |
부팅 시 Inspector HTTP 프록시를 자동으로 시작합니다. |
INSPECTOR_TLS_INTERCEPT |
false |
src/lib/inspector/captureState.ts |
캡처된 HTTPS 트래픽에 대해 TLS 가로채기(MITM)를 활성화합니다. |
INSPECTOR_LLM_HOSTS_EXTRA |
(설정되지 않음) | src/lib/inspector/captureState.ts |
캡처할 LLM 엔드포인트로 취급되는 추가 호스트 이름(쉼표로 구분)입니다. |
INSPECTOR_MASK_SECRETS |
true |
src/mitm/inspector/buffer.ts |
캡처된 트래픽에서 비밀 정보(인증 헤더/API 키)를 마스킹합니다. |
INSPECTOR_SYSTEM_PROXY_GUARD_MINUTES |
30 |
src/app/api/tools/traffic-inspector/capture-modes/system-proxy/route.ts |
시스템 프록시 가드가 OS 프록시 설정을 자동으로 되돌리기까지의 시간(분)입니다. |
INSPECTOR_INTERNAL_INGEST_TOKEN |
(자동) | src/app/api/tools/traffic-inspector/internal/ingest/route.ts |
Inspector로 내부 캡처 데이터를 수집할 때 인증하는 토큰입니다. |
PLAYGROUND_COMPARE_MAX_COLUMNS |
4 |
src/app/(dashboard)/dashboard/playground/ |
Playground 비교 모드에서 나란히 표시할 수 있는 최대 열 수입니다. |
PLAYGROUND_IMPROVE_PROMPT_DEFAULT_MODEL |
(설정되지 않음) | src/app/(dashboard)/dashboard/playground/ |
Playground의 '프롬프트 개선' 작업에 사용할 기본 모델입니다(설정되지 않은 경우 활성 모델로 대체됨). |
BIFROST_ENABLED |
1 |
src/app/api/v1/relay/chat/completions/bifrost/route.ts |
Bifrost 사이드카 프록시의 마스터 비상 중지 스위치입니다. 0으로 설정하면 라우트가 X-Bifrost-Killswitch 헤더와 함께 503을 반환하고 작업자는 TS 경로로 전환됩니다. 재배포 없이 사이드카를 비활성화해야 할 때 사용합니다(티어 1 라우터 장애, 키 교체). |
BIFROST_BASE_URL |
(설정되지 않음) | src/app/api/v1/relay/chat/completions/bifrost/route.ts |
설정하면 Bifrost 사이드카 프록시 라우트가 /v1/chat/completions 트래픽을 TS 릴레이 핸들러 대신 이 Go 게이트웨이로 전달합니다. 설정되지 않음 → 폴백을 포함한 503 응답. 후행 슬래시는 제거됩니다. |
BIFROST_PORT |
8080 |
src/lib/services/bootstrap.ts |
OmniRoute가 Bifrost 사이드카 수명 주기를 관리할 때, 감독되는 내장 Bifrost 서비스가 바인딩할 포트입니다(127.0.0.1:<port>). 기본값은 8080입니다. |
BIFROST_API_KEY |
(설정되지 않음) | src/app/api/v1/relay/chat/completions/bifrost/route.ts |
Bifrost 게이트웨이용 API 키입니다(Authorization: Bearer ... 형식으로 전송됨). 설정되지 않은 경우 라우트는 요청에 유효한 OmniRoute API 키가 포함되어 있어야 합니다. 이 키는 게이트웨이 측 인증에만 사용됩니다. |
BIFROST_STREAMING_ENABLED |
true |
src/app/api/v1/relay/chat/completions/bifrost/route.ts |
true이면 Bifrost 사이드카 라우트가 TS 스트리밍 실행기 대신 게이트웨이를 통해 SSE로 응답을 다시 스트리밍합니다. 게이트웨이를 통해 비스트리밍 JSON 응답을 강제하려면 0으로 설정합니다. |
BIFROST_TIMEOUT_MS |
30000 |
src/app/api/v1/relay/chat/completions/bifrost/route.ts |
Bifrost 게이트웨이로 프록시할 때의 요청별 제한 시간(ms)입니다. 제한 시간이 초과되면 라우트가 X-Bifrost-Fallback 헤더를 통해 TS 릴레이 경로를 반환합니다. |
OMNIROUTE_BIFROST_KEY |
(설정되지 않음) | src/app/api/v1/relay/chat/completions/bifrost/route.ts |
BIFROST_API_KEY의 별칭입니다(OMNIROUTE_*를 통해 환경 변수를 읽는 스크립트에서 사용됨). 둘 다 설정된 경우 BIFROST_API_KEY가 우선합니다. |
OMNIROUTE_RELAY_BACKEND |
ts / auto |
src/app/api/v1/relay/chat/completions/routingBackend.ts |
/api/v1/relay/chat/completions의 릴레이 백엔드입니다: ts | bifrost | auto. ts = TypeScript 릴레이(Bifrost가 구성되지 않았을 때의 기본값), auto는 BIFROST_BASE_URL이 설정되어 있고 BIFROST_ENABLED ≠ 0이면 Bifrost를 선택하며 사이드카에 연결할 수 없는 경우 자동으로 TS로 폴백합니다. bifrost는 Bifrost를 강제합니다(엄격 모드, 폴백 없음). 인증/요청 속도 제한/인젝션 가드/허용 목록은 항상 Next 라우트에서 먼저 실행됩니다. 응답에는 X-Routing-Backend / X-Routing-Fallback / X-Routing-Fallback-Reason이 포함됩니다. |
RELAY_ROUTING_BACKEND |
(설정되지 않음) | src/app/api/v1/relay/chat/completions/routingBackend.ts |
OMNIROUTE_RELAY_BACKEND에 허용되는 별칭입니다(동일한 ts | bifrost | auto 값). 둘 다 설정된 경우 OMNIROUTE_RELAY_BACKEND가 우선합니다. |
OMNIROUTE_BIFROST_FAILURE_COOLDOWN_MS |
5000 |
src/app/api/v1/relay/chat/completions/bifrostCooldown.ts |
auto 모드에서 Bifrost 사이드카 홉이 실패한 후 릴레이가 사이드카를 다시 시도하기까지의 쿨다운(ms)입니다. 쿨다운이 지속되는 동안에는 TS 경로로 직접 라우팅한 다음 다시 탐색합니다. 0으로 설정하면 비활성화됩니다. OMNIROUTE_RELAY_BACKEND=auto인 경우에만 적용됩니다. |
OMNIROUTE_TLS_CERT |
(설정되지 않음) | bin/cli/commands/serve.mjs |
HTTPS를 통해 omniroute serve를 제공하기 위한 PEM TLS 인증서 경로입니다(--tls-cert와 동일). OMNIROUTE_TLS_KEY와 함께 설정해야 하며, 그러면 독립 실행형 서버가 동일한 리스너에서 TLS를 종료합니다(wss://는 변경 없이 작동). 설정하지 않으면 → 일반 HTTP입니다. 인증서/키 중 하나만 제공하거나 읽을 수 없는 경로를 제공하면 경고를 기록하고 HTTP를 유지합니다. |
OMNIROUTE_TLS_KEY |
(설정되지 않음) | bin/cli/commands/serve.mjs |
omniroute serve HTTPS용 PEM TLS 비공개 키 경로입니다(--tls-key와 동일). OMNIROUTE_TLS_CERT와 함께 설정해야 합니다. OMNIROUTE_TLS_CERT를 참조하세요. |
OMNIROUTE_LOCAL_ENDPOINTS_ENABLED |
0 |
src/lib/security/localEndpoints.ts |
/api/local/* 라우트의 마스터 스위치입니다. 설정되지 않았거나 0이면 프로덕션에서 모든 /api/local/* 라우트가 503을 반환합니다. 비루프백 배포에서 Redis 런처와 이와 유사한 원클릭 로컬 서비스 시작 도구를 활성화하려면 1이어야 합니다. isLocalOnlyPath() 라우트 가드 분류(src/server/authz/routeGuard.ts의 LOCAL_ONLY_API_PREFIXES)와 함께 이중으로 보호합니다. |
OMNIROUTE_LOCAL_ENDPOINTS_TOKEN |
(설정되지 않음) | src/lib/security/localEndpoints.ts |
루프백에 있지 않은 /api/local/* 호출자(예: 데스크톱 앱)를 위한 전달자 토큰입니다. 설정된 경우 비루프백 IP의 요청에는 Authorization: Bearer <token>이 포함되어야 합니다. 비루프백 배포에서 OMNIROUTE_LOCAL_ENDPOINTS_ENABLED=1인 경우 필수입니다. |
OMNIROUTE_REDIS_CONTAINER_NAME |
omniroute-redis |
bin/cli/commands/redis.mjs |
원클릭 Redis 런처(omniroute redis up)의 컨테이너 이름입니다. CLI와 RedisLauncherPanel GUI 모두에서 사용됩니다. |
OMNIROUTE_REDIS_HOST_PORT |
6379 |
bin/cli/commands/redis.mjs |
원클릭 Redis 런처의 호스트 포트입니다. 호스트에서 이미 6379를 바인딩하고 있다면 값을 높이세요. 컨테이너의 내부 포트는 6379로 유지됩니다. |
OMNIROUTE_REDIS_BIND_HOST |
127.0.0.1 |
bin/cli/commands/redis.mjs |
원클릭 Redis 런처가 게시하는 호스트 인터페이스입니다. 런처는 비밀번호 없이 Redis를 시작하므로 0.0.0.0에 바인딩하면 LAN의 모든 호스트에 인증되지 않은 Redis가 노출됩니다. 인스턴스에 직접 비밀번호도 설정한 경우에만 범위를 확장하세요. |
REDIS_BIND_HOST |
127.0.0.1 |
docker-compose.yml |
docker-compose가 Redis 사이드카를 게시하는 호스트 인터페이스입니다(#9286). compose Redis는 requirepass 없이 실행되며, 앱 컨테이너는 compose 네트워크(redis:6379)를 통해 접근합니다. 게시된 포트는 호스트 측 도구만을 위해 존재합니다. 0.0.0.0은 인증되지 않은 Redis를 전체 LAN에 노출합니다. |
REDIS_PORT |
6379 |
docker-compose.yml |
compose Redis 사이드카의 호스트 포트입니다. |
APP_BIND_HOST |
127.0.0.1 |
docker-compose.yml, docker-compose.prod.yml |
docker-compose가 앱 자체의 대시보드/API/live-WS 포트를 게시하는 호스트 인터페이스입니다(#12568). .env.example의 기본값으로 REQUIRE_API_KEY=false가 제공되는 상태에서 0.0.0.0을 사용하면 익명 /v1 LLM 프록시가 전체 LAN/WAN에 노출됩니다. REQUIRE_API_KEY=true로 설정하거나 앞단의 리버스 프록시가 자체 인증을 적용하는 경우에만 바인딩 범위를 확장하세요. |
QDRANT_BIND_HOST |
127.0.0.1 |
docker-compose.yml |
docker-compose가 Qdrant 메모리 사이드카를 게시하는 호스트 인터페이스입니다(#12578). LAN 노출에 관한 근거는 REDIS_BIND_HOST와 동일합니다. |
BIFROST_BIND_HOST |
127.0.0.1 |
docker-compose.yml |
docker-compose가 Bifrost 라우터 사이드카를 게시하는 호스트 인터페이스입니다(#12578). LAN 노출에 관한 근거는 REDIS_BIND_HOST와 동일합니다. |
REDIS_KEY_PREFIX |
omniroute: |
src/shared/utils/rateLimiter.ts |
모든 OmniRoute Redis 키(속도 제한기, 인증 캐시, 할당량 저장소, 워밍업 회로 차단기)에 적용되는 네임스페이스 접두사입니다. Redis 인스턴스를 다른 앱과 공유할 때 키 충돌을 방지합니다(#11042). |
OMNIROUTE_INTERNAL_SERVICE_TOKEN |
(설정되지 않음 — 메커니즘 비활성화) | src/lib/api/internalServiceAuth.ts |
신원을 보존하는 내부 REST 홉을 위한 공유 비밀값입니다(#9260). 다른 로컬 OmniRoute 경로를 호출하는 OmniRoute 구성 요소는 원래 호출자의 신원이 유지되도록 이 값을 x-omniroute-internal-service-token으로 전송합니다. timingSafeEqual을 사용하여 비교됩니다. |
OMNIROUTE_INTERNAL_SERVICE_TOKEN_FILE |
(설정되지 않음) | src/lib/api/internalServiceAuth.ts |
내부 서비스 토큰의 비밀 파일 변형으로, 공백을 제거한 파일 내용이 토큰으로 사용되는 파일의 경로입니다. 인라인 변수가 설정되지 않은 경우에만 참조됩니다. |
OPENROUTER_PROVIDER_STATS_ENABLED |
true |
src/lib/catalog/openrouterProviderStats.ts |
대시보드의 제공자 목록을 OpenRouter 주간 순위 통계로 보강합니다(#9324). 기본적으로 활성화되며, 백그라운드 가져오기를 완전히 건너뛰려면 false로 설정하세요(비차단 방식이며 치명적 오류를 일으키지 않음). |
OPENROUTER_PROVIDER_STATS_TTL_MS |
86400000 (24시간) |
src/lib/catalog/openrouterProviderStats.ts |
OpenRouter 제공자 통계 스냅샷의 캐시 TTL이며, 단위는 밀리초입니다. |
OMNIROUTE_REDIS_IMAGE |
redis:7-alpine |
bin/cli/commands/redis.mjs |
원클릭 Redis 실행기에서 사용하는 Redis 이미지입니다. 필요에 따라 redis:8-alpine 또는 비공개 레지스트리 미러로 재정의하세요. |
QDRANT_HOST |
qdrant |
(옵트인 클러스터 프로필) | --profile memory가 활성화된 경우 Qdrant 사이드카의 호스트 이름입니다. 기본값은 네트워크 내부의 qdrant 서비스 이름을 가리키며, 외부 배포를 사용하는 경우 재정의하세요. 코드에서 qdrantEnabled가 true인 경우에만 사용됩니다(src/lib/memory/vectorStore.ts:108). |
QDRANT_PORT |
6333 |
(옵트인 클러스터 프로필) | Qdrant 사이드카의 REST 포트입니다. |
QDRANT_GRPC_PORT |
6334 |
(옵트인 클러스터 프로필) | Qdrant 사이드카의 gRPC 포트입니다. 스트리밍 작업에서 REST보다 gRPC를 선호하는 클라이언트 라이브러리가 사용합니다. |
QDRANT_API_KEY |
(설정되지 않음) | (옵트인 클러스터 프로필) | Qdrant Cloud 또는 인증된 온프레미스 인스턴스를 위한 선택적 API 키입니다. 비어 있으면 → api-key 헤더가 전송되지 않습니다. |
QDRANT_COLLECTION |
omniroute-memory |
(옵트인 클러스터 프로필) | OmniRoute의 대화 메모리 임베딩을 위한 컬렉션 이름입니다. 최초 실행 시 QDRANT_VECTOR_SIZE 차원으로 생성됩니다. |
QDRANT_EMBEDDING_MODEL |
text-embedding-3-small |
(옵트인 클러스터 프로필) | Qdrant 컬렉션 메타데이터에 기록되는 기본 임베딩 모델 이름입니다. 실제 임베딩은 OmniRoute 설정의 embeddingModel 필드가 가리키는 프로바이더에서 생성됩니다. |
QDRANT_VECTOR_SIZE |
1536 |
(옵트인 클러스터 프로필) | 임베딩 벡터 차원입니다. 임베딩에 사용하는 모델과 일치해야 합니다(text-embedding-3-small → 1536; ada-002 → 1536; nomic-embed-text → 768). |
QDRANT_HNSW_EF_CONSTRUCT |
128 |
(옵트인 클러스터 프로필) | HNSW 인덱스 구축 시 정확도입니다. 값이 높을수록 구축은 느려지고 검색은 빨라집니다. |
OMNIROUTE_ROTATION_ENABLED |
true |
open-sse/services/rotationConfig.ts |
운영자가 구성할 수 있는 계정 로테이션의 마스터 스위치입니다. false이면 아래의 OMNIROUTE_ROTATE_* 클래스 중 어느 것도 계정 대체를 트리거하지 않습니다(마스터가 꺼진 상태에서는 기본적으로 활성화된 429/500/502 클래스도 차단됩니다). 이를 통해 감독 프런트엔드(예: VibeProxy 데스크톱 앱)가 자체 로테이션 규칙을 백엔드의 계정 대체 엔진에 반영할 수 있습니다. |
OMNIROUTE_ROTATION_RATE_LIMIT_RESET_SECONDS |
0 |
open-sse/services/rotationConfig.ts |
업스트림에서 명시적인 재설정 힌트를 제공하지 않을 때 요청률 제한이 적용된 계정에 적용되는 쿨다운(초)입니다. 0 = 고정된 재정의 값 대신 엔진의 기본 쿨다운을 사용합니다. |
OMNIROUTE_ROTATION_DISABLE_TAG_WITHOUT_RESET |
true |
open-sse/services/rotationConfig.ts |
프런트엔드의 "재설정 시간이 없으면 요청률 제한으로 태그하지 않음" 환경설정을 미러링합니다. |
OMNIROUTE_ROTATE_ON_429 |
true |
open-sse/services/rotationConfig.ts |
429 오류에 대한 상태별 폴백 활성화 여부입니다. false인 경우(OMNIROUTE_ROTATION_ENABLED=true인 경우에도) 429는 더 이상 계정 로테이션을 트리거하지 않고 대신 클라이언트에 반환됩니다. |
OMNIROUTE_ROTATE_429_THRESHOLD |
1 |
open-sse/services/rotationConfig.ts |
계정을 로테이션하기 전에 OMNIROUTE_ROTATE_429_WINDOW_SECONDS 내에 발생해야 하는 429 오류 수입니다. 1(기본값)은 즉시 로테이션하여 기존 동작을 유지합니다. |
OMNIROUTE_ROTATE_429_WINDOW_SECONDS |
120 |
open-sse/services/rotationConfig.ts |
429 오류를 OMNIROUTE_ROTATE_429_THRESHOLD에 반영하여 집계하는 슬라이딩 윈도우(초)입니다. |
OMNIROUTE_ROTATE_ON_500 |
true |
open-sse/services/rotationConfig.ts |
5xx 서버 오류(502는 별도 분류이므로 제외)에 대한 상태별 폴백 활성화 여부입니다. false인 경우 이러한 오류는 더 이상 계정 로테이션을 트리거하지 않습니다. |
OMNIROUTE_ROTATE_500_THRESHOLD |
1 |
open-sse/services/rotationConfig.ts |
계정을 로테이션하기 전에 OMNIROUTE_ROTATE_500_WINDOW_SECONDS 내에 발생해야 하는 5xx 오류 수입니다. 1(기본값)은 즉시 로테이션합니다. |
OMNIROUTE_ROTATE_500_WINDOW_SECONDS |
120 |
open-sse/services/rotationConfig.ts |
5xx 오류를 OMNIROUTE_ROTATE_500_THRESHOLD에 반영하여 집계하는 슬라이딩 윈도우(초)입니다. |
OMNIROUTE_ROTATE_ON_502 |
true |
open-sse/services/rotationConfig.ts |
502(잘못된 게이트웨이) 오류에 대한 상태별 폴백 활성화 여부입니다. false인 경우 502 오류는 더 이상 계정 로테이션을 트리거하지 않습니다. |
OMNIROUTE_ROTATE_502_THRESHOLD |
1 |
open-sse/services/rotationConfig.ts |
계정을 로테이션하기 전에 OMNIROUTE_ROTATE_502_WINDOW_SECONDS 내에 발생해야 하는 502 오류 수입니다. 1(기본값)은 즉시 로테이션합니다. |
OMNIROUTE_ROTATE_502_WINDOW_SECONDS |
120 |
open-sse/services/rotationConfig.ts |
502 오류를 OMNIROUTE_ROTATE_502_THRESHOLD에 반영하여 집계하는 슬라이딩 윈도우(초)입니다. |
OMNIROUTE_ROTATE_ON_400 |
false |
open-sse/services/rotationConfig.ts |
선택적 활성화(기본값은 꺼짐): true인 경우 일반 400(잘못된 요청)도 계정 로테이션을 트리거합니다. 이 옵션은 기존 동작에 추가로만 적용됩니다. 즉, 이 플래그와 관계없이 속도 제한/할당량 관련 텍스트가 포함된 400에 대해 엔진이 계속 폴백하는 기존 동작을 차단하지 않습니다. |
OMNIROUTE_ROTATE_400_THRESHOLD |
1 |
open-sse/services/rotationConfig.ts |
계정이 로테이션되기 전에 OMNIROUTE_ROTATE_400_WINDOW_SECONDS 내에서 발생해야 하는 400 오류 수입니다(OMNIROUTE_ROTATE_ON_400=true인 경우에만 참조됨). |
OMNIROUTE_ROTATE_400_WINDOW_SECONDS |
120 |
open-sse/services/rotationConfig.ts |
400 오류가 OMNIROUTE_ROTATE_400_THRESHOLD에 반영되도록 집계되는 슬라이딩 윈도우(초)입니다. |
Claude 워밍업 스케줄러
옵트인된 Anthropic OAuth 연결을 위한 cron 기반 워밍업으로, 5시간의 사용량 제한 창이 첫 번째 실제 요청이 아닌 예약된 간단한 요청에 의해 열리도록 합니다(#8848). OMNIROUTE_WARMUP_ENABLED가 참 값이고 연결이 settings.claudeWarmup.connections에 지정된 경우에만 스케줄러가 활성화됩니다. 연결 목록이 비어 있으면 환경 변수가 활성화되어 있어도 워밍업되는 연결이 없습니다.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
OMNIROUTE_WARMUP_ENABLED |
(설정되지 않음 → 비활성화) | src/lib/warmupScheduler.ts |
워밍업 스케줄러의 마스터 스위치입니다. 1/true/yes/on을 허용합니다(대소문자를 구분하지 않으며 공백은 제거됨). 그 외의 값이거나 설정되지 않은 경우 스케줄러는 비활성화됩니다. |
OMNIROUTE_WARMUP_CRON |
0 7 * * * |
src/lib/warmupScheduler.ts |
워밍업 틱을 위한 5필드 cron 표현식입니다. 호스트 시계와 관계없이 America/Los_Angeles(Anthropic의 재설정 시간대)를 기준으로 평가됩니다. |
OMNIROUTE_WARMUP_CONCURRENCY |
3 |
src/lib/warmupScheduler.ts |
틱마다 병렬로 워밍업되는 연결 수입니다. 1-10 범위로 제한되며, 숫자가 아닌 값은 3으로 대체됩니다. |
OMNIROUTE_WARMUP_MODEL |
claude-3-5-haiku-20241022 |
src/lib/warmupScheduler.ts |
워밍업 요청에 사용되는 모델입니다. 기본 모델을 사용 중인 요금제에서 사용할 수 없는 경우에만 재정의하세요. 제한 창을 열 수 있는 가장 저렴한 모델을 선택하세요. |
브라우저 로그인 VNC 세션 및 데이터 디렉터리 별칭
대화형 브라우저 로그인 자격 증명 캡처(/api/vnc-session)에 사용되는 컨테이너화된 Chromium+VNC와 레거시 DATA_DIR 별칭입니다. 모두 선택 사항입니다. VNC 기본값은 번들로 제공되는 omniroute-vnc-chromium:local 이미지를 대상으로 하며, 사용자 지정 컨테이너 이미지, 포트 또는 수명 주기 조정이 필요한 경우에만 재정의합니다.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
OMNIROUTE_VNC_IMAGE |
omniroute-vnc-chromium:local |
src/lib/vncSession/manifest.ts |
Chromium+VNC 로그인 컨테이너용 Docker 이미지 태그입니다. docker/vnc-browser/chromium을 빌드하거나 사용자 지정 이미지를 가리키도록 설정하세요. |
OMNIROUTE_DOCKER_BIN |
docker |
src/lib/vncSession/manifest.ts |
VNC 컨테이너를 실행하는 데 사용되는 컨테이너 런타임 바이너리입니다(예: podman으로 설정). |
OMNIROUTE_VNC_CONTAINER_VNC_PORT |
3000 |
src/lib/vncSession/manifest.ts |
컨테이너 내부에 노출되는 VNC/noVNC 포트입니다. |
OMNIROUTE_VNC_CONTAINER_CDP_PORT |
9223 |
src/lib/vncSession/manifest.ts |
컨테이너 내부의 Chrome DevTools Protocol 포트입니다. |
OMNIROUTE_VNC_CONTAINER_PROFILE_DIR |
/config |
src/lib/vncSession/manifest.ts |
컨테이너 내부의 Chromium 프로필 디렉터리 경로입니다. |
OMNIROUTE_VNC_PROFILE_DIR |
$HOME/.omniroute/browser-login-profiles |
src/lib/vncSession/manifest.ts |
영구 저장된 브라우저 로그인 프로필을 보관하는 호스트 디렉터리입니다. |
OMNIROUTE_VNC_IDLE_MS |
600000 (10분) |
src/lib/vncSession/manifest.ts |
비활성 VNC 세션을 정리하기 전까지의 유휴 제한 시간(ms)입니다. |
OMNIROUTE_VNC_MAX_MS |
1800000 (30분) |
src/lib/vncSession/manifest.ts |
단일 VNC 세션 수명에 대한 최대 제한(ms)입니다. |
OMNIROUTE_VNC_MAX_SESSIONS |
4 |
src/lib/vncSession/manifest.ts |
동시에 실행할 수 있는 VNC 세션의 최대 개수입니다. |
OMNIROUTE_VNC_READY_MS |
45000 |
src/lib/vncSession/manifest.ts |
컨테이너화된 브라우저가 CDP 준비 상태가 될 때까지 기다리는 제한 시간(ms)입니다. |
OMNIROUTE_VNC_HARVEST_MS |
20000 |
src/lib/vncSession/manifest.ts |
로그인 완료 후 캡처된 세션/쿠키를 수집하는 데 적용되는 제한 시간(ms)입니다. |
OMNIROUTE_VNC_CHROMIUM_ARGS |
--remote-debugging-port=9222 --no-first-run --no-default-browser-check |
src/lib/vncSession/manifest.ts |
컨테이너화된 Chromium에 전달되는 추가 명령줄 플래그입니다. |
OMNIROUTE_VNC_NETWORK |
omniroute-vnc-browser-login |
src/lib/vncSession/manifest.ts |
VNC 로그인 컨테이너가 기본 브리지 대신 연결되는 전용 Docker 네트워크입니다(#12571). 이를 통해 동일 환경의 다른 컨테이너가 해당 컨테이너의 CDP 브리지 포트에 접근하지 못하게 합니다. |
VIBEPROXY_DATA_DIR |
(설정되지 않음) | open-sse/services/notionThreadSessions.ts |
DATA_DIR의 레거시 별칭으로, DATA_DIR과 OMNIROUTE_DATA_DIR이 모두 설정되지 않은 경우에만 확인됩니다. Notion 웹 스레드 세션 캐시(<dir>/notion-web-thread-sessions.json)의 위치를 지정합니다. |
26. 테스트 및 E2E 하네스
scripts/dev/run-next-playwright.mjs, scripts/dev/smoke-electron-packaged.mjs,
scripts/dev/run-ecosystem-tests.mjs, scripts/build/uninstall.mjs에서 사용됩니다. 프로덕션 배포에서는
아래의 모든 값을 설정하지 않은 상태로 두세요.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
OMNIROUTE_E2E_BOOTSTRAP_MODE |
auth |
scripts/dev/run-next-playwright.mjs |
Playwright 실행기의 E2E 부트스트랩 모드(auth, fresh, reuse)입니다. |
OMNIROUTE_E2E_PASSWORD |
INITIAL_PASSWORD로 대체됨 |
scripts/dev/run-next-playwright.mjs |
Playwright 환경에 주입되는 관리자 비밀번호입니다. |
OMNIROUTE_DISABLE_LOCAL_HEALTHCHECK |
true |
scripts/dev/run-next-playwright.mjs |
Playwright 실행 중 로컬 상태 확인 폴링을 비활성화합니다. |
OMNIROUTE_DISABLE_TOKEN_HEALTHCHECK |
true |
scripts/dev/run-next-playwright.mjs |
테스트 중 OAuth 토큰 상태 확인 루프를 비활성화합니다. |
OMNIROUTE_HEALTHCHECK_SKIP_PROVIDERS |
(설정되지 않음) | src/lib/tokenHealthCheck.ts |
선제적 토큰 갱신 순회에서 제외할 공급자를 쉼표로 구분하여 지정합니다(예: codex,openai). 상태 확인을 완전히 비활성화하는 대신 사용할 수 있는 선별적 대안으로, TTL이 짧은 공급자는 계속 갱신되는 반면 캐스케이드 공급자는 반응형으로만 유지됩니다. |
OMNIROUTE_HIDE_HEALTHCHECK_LOGS |
true |
scripts/dev/run-next-playwright.mjs |
Playwright stdout에서 상태 확인 관련 불필요한 로그를 출력하지 않습니다. |
OMNIROUTE_PLAYWRIGHT_SKIP_BUILD |
0 |
scripts/dev/run-next-playwright.mjs |
Playwright가 시작되기 전 Next.js 프로덕션 빌드를 건너뜁니다(CI 최적화). |
OMNIROUTE_SKIP_UNINSTALL_HOOK |
0 |
scripts/build/uninstall.mjs |
OmniRoute 제거 훅을 건너뜁니다(CI에서 node_modules를 그대로 유지하기 위해 사용). |
ECOSYSTEM_SERVER_WAIT_MS |
180000 |
scripts/dev/run-ecosystem-tests.mjs |
에코시스템/프로토콜 테스트를 실행하기 전에 서버가 정상 상태가 될 때까지 기다리는 시간(ms)입니다. |
ELECTRON_SMOKE_URL |
http://127.0.0.1:20128/login |
scripts/dev/smoke-electron-packaged.mjs |
Electron 스모크 하네스가 패키징된 앱에서 제공될 것으로 예상하는 URL입니다. |
ELECTRON_SMOKE_TIMEOUT_MS |
45000 |
scripts/dev/smoke-electron-packaged.mjs |
스모크 하네스가 중단될 때까지의 전체 제한 시간(ms)입니다. |
ELECTRON_SMOKE_SETTLE_MS |
2000 |
scripts/dev/smoke-electron-packaged.mjs |
페이지가 로드된 후 안정화를 기다리는 시간(ms)입니다. |
ELECTRON_SMOKE_APP_EXECUTABLE |
(자동) | scripts/dev/smoke-electron-packaged.mjs |
패키징된 Electron 실행 파일의 명시적 경로입니다. |
ELECTRON_SMOKE_DATA_DIR |
(tmpdir) | scripts/dev/smoke-electron-packaged.mjs |
Electron 스모크 실행에 사용할 데이터 디렉터리입니다. |
ELECTRON_SMOKE_KEEP_DATA |
0 |
scripts/dev/smoke-electron-packaged.mjs |
실행 후 스모크 데이터 디렉터리를 보존하려면 1로 설정합니다. |
ELECTRON_SMOKE_STREAM_LOGS |
0 |
scripts/dev/smoke-electron-packaged.mjs |
실행 중 Electron 로그를 stdout으로 스트리밍하려면 1로 설정합니다. |
ELECTRON_SMOKE_COLD_RESTART |
0 |
scripts/dev/smoke-electron-packaged.mjs |
#7592: 동일한 데이터 디렉터리를 사용하여 다시 실행하고 두 번째 실행에서 네이티브 SQLite 드라이버가 선택되는지 확인합니다. |
CLI_DEVIN_BIN |
(PATH 조회) | open-sse/executors/devin-cli.ts |
Devin CLI 바이너리 경로를 재정의합니다. |
문서 번역 파이프라인
scripts/i18n/run-translation.mjs에서 사용됩니다(npm run i18n:run 명령).
다섯 개 변수 모두 기본적으로 설정되어 있지 않습니다. 문서 번역기를 실행할 수 있어야 하는 머신의
.env에서만 설정하세요.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
OMNIROUTE_TRANSLATION_API_URL |
(설정되지 않음) | scripts/i18n/run-translation.mjs |
번역 백엔드의 OpenAI 호환 기본 URL입니다. |
OMNIROUTE_TRANSLATION_API_KEY |
(설정되지 않음) | scripts/i18n/run-translation.mjs |
번역 백엔드의 Bearer 토큰입니다(절대 로그에 기록되지 않음). |
OMNIROUTE_TRANSLATION_MODEL |
(설정되지 않음) | scripts/i18n/run-translation.mjs |
모델 ID입니다(예: gpt-4o-mini 또는 cx/gpt-5.4-mini). |
OMNIROUTE_TRANSLATION_TIMEOUT_MS |
60000 |
scripts/i18n/run-translation.mjs |
요청별 제한 시간(밀리초)입니다. |
OMNIROUTE_TRANSLATION_CONCURRENCY |
4 |
scripts/i18n/run-translation.mjs |
여러 파일/로케일을 처리할 때의 병렬 번역 요청 수입니다. |
27. Radar 피드(셀프 호스팅)
RADAR_ENABLED 기능 플래그로 제어되는 선택적 추가 기능입니다(기본값은 꺼짐 — 환경 변수가 아니라 Settings/DB를 통해 전환되는 기능 플래그입니다.
docs/frameworks/RADAR.md를 참조하세요).
아래의 처음 네 변수는 셀프 호스팅 또는 포크된 피드와
후원자 키 흐름을 위한 선택적 재정의 항목입니다. 다섯 번째 변수인 RADAR_ADMIN_URL은 소유자의
비공개 운영 패널로 연결되는 별도의 기본값 없는 링크입니다. 전체
모듈 문서 및
엔드투엔드 활성화 및 안내형 설정 절차는 docs/frameworks/RADAR.md를 참조하세요.
일반적인 Home/Changelog 공지 리더는 환경 변수로
구성되지 않으며 RADAR_ENABLED 기능 플래그에 의존하지 않습니다. 이 리더는
src/shared/utils/releaseNotes.ts에 선언된 공개 저장소의 news.json URL을
GET으로만 읽으며, 닫은 항목의 ID는 브라우저 로컬 스토리지에 유지됩니다.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
RADAR_FEED_URL |
https://radar.omniroute.online |
src/lib/radar/{sync,referralsSync,offersSync,intelSync}.ts |
개별적으로 서명된 카탈로그, 추천, 후원자 혜택 및 Intel 피드가 공유하는 기본 URL입니다. 셀프 호스팅 또는 포크된 서비스를 가리키도록 재정의할 수 있습니다. |
RADAR_FEED_PUBKEY |
(고정된 기본 키) | src/lib/radar/pinnedKeys.ts |
사용자 지정 피드의 서명을 확인하는 데 사용되는 Ed25519 공개 키(base64-DER SPKI 또는 PEM)입니다. |
RADAR_CONTRIBUTOR_CLAIM_URL |
https://radar.omniroute.online/auth/github |
src/lib/radar/links.ts |
"I'm a contributor" 대시보드 버튼을 클릭할 때 열리는 URL입니다(GitHub OAuth 후원자 키 청구 흐름). |
RADAR_SUPPORTER_PLANS_URL |
https://radar.omniroute.online/planos |
src/lib/radar/links.ts |
"Support the project" 대시보드 버튼을 클릭할 때 열리는 URL입니다(결제/요금제 페이지). |
RADAR_ADMIN_URL |
(설정되지 않음) | src/lib/radar/links.ts |
소유자 전용 비공개 운영 패널 링크입니다. HTTP 루프백 SSH 포워딩을 제외하면 HTTPS가 필요하며, 값이 설정되지 않았거나 유효하지 않으면 탐색 항목이 생성되지 않습니다. |
감사: 제거된 변수 / 사용되지 않는 변수
다음 변수들은 이전 버전의 .env.example에 있었지만 현재 코드베이스에는 런타임 참조가 없습니다. 따라서 제거되었습니다:
| 변수 | 이유 |
|---|---|
STORAGE_DRIVER=sqlite |
어떤 소스 파일에서도 읽지 않습니다. SQLite가 유일하게 지원되는 드라이버이므로 선택할 필요가 없습니다. |
INSTANCE_NAME=omniroute |
이전 문서/env 템플릿에는 존재하지만 런타임에서는 사용되지 않습니다. 향후 멀티 인스턴스 기능에서 다시 사용될 수 있습니다. |
SQLITE_MAX_SIZE_MB=2048 |
소스 코드에서 참조되지 않습니다. 데이터베이스 크기는 인위적으로 제한되지 않습니다. |
SQLITE_CLEAN_LEGACY_FILES=true |
소스 코드에서 참조되지 않습니다. 레거시 정리 기능은 제거된 것으로 보입니다. |
CLI_ROO_BIN |
src/shared/services/cliRuntime.ts에 등록되어 있지 않습니다. |
CLI_KIMI_CODING_BIN |
src/shared/services/cliRuntime.ts에 등록되어 있지 않습니다(Kimi Coding은 CLI 바이너리가 아닌 OAuth를 사용합니다). |
IFLOW_OAUTH_CLIENT_ID / IFLOW_OAUTH_CLIENT_SECRET |
소스 코드 어디에서도 참조되지 않습니다. |
CEREBRAS_API_KEY / COHERE_API_KEY / FIREWORKS_API_KEY / GROQ_API_KEY / MISTRAL_API_KEY / NEBIUS_API_KEY / PERPLEXITY_API_KEY / TOGETHER_API_KEY / XAI_API_KEY |
v3.8.0에서 제거되었습니다. 런타임은 더 이상 이러한 env 변수를 읽지 않으며, 자격 증명은 Dashboard / data/provider-credentials.json / 암호화된 DB에서 가져옵니다. |
CURSOR_PROTOBUF_DEBUG |
v3.8.0에서 제거되었습니다. Cursor 실행기는 CURSOR_DEBUG / CURSOR_STREAM_DEBUG를 사용합니다(§22 참조). |
CLI_COMPAT_KIRO |
v3.8.0에서 제거되었습니다. Kiro는 CLI_COMPAT_OMITTED_PROVIDER_IDS에 포함되어 있으므로 해당 토글은 아무런 효과가 없습니다. |
QIANFAN_API_KEY |
v3.8.0에서 사용되지 않는 다른 제공자 API 키 스텁과 함께 제거되었습니다. |
기본값 수정 사항
| 변수 | 이전 .env.example 값 |
실제 코드 기본값 | 수정 사항 |
|---|---|---|---|
APP_LOG_RETENTION_DAYS |
90 |
7 |
✅ 오해의 소지가 있는 값을 제거하고 7을 기본값으로 문서화 |
CALL_LOG_RETENTION_DAYS |
90 |
7 |
✅ 오해의 소지가 있는 값을 제거하고 7을 기본값으로 문서화 |
OpenCode 구성 재생성(임시 도구)
실행 중인 OmniRoute 인스턴스에서 가져온 정확한 limit.context 및 limit.output
값을 사용하여 opencode.json을 재생성하기 위해 scripts/ad-hoc/regen-opencode-config.ts에서
사용됩니다. 정상적인 작동에는 이들 중 어느 것도 필요하지 않으며, 이 스크립트는
개발자용 도구일 뿐입니다.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
OMNIROUTE_URL |
http://localhost:20128 |
scripts/ad-hoc/regen-opencode-config.ts |
/v1/models를 조회할 OmniRoute 인스턴스의 기본 URL입니다. |
OMNIROUTE_KEY |
(설정되지 않음) | scripts/ad-hoc/regen-opencode-config.ts |
OmniRoute /v1/models 엔드포인트 인증에 사용할 API 키입니다. 설정되지 않은 경우 OPENCODE_API_KEY를 사용합니다. |
OPENCODE_API_KEY |
(설정되지 않음) | scripts/ad-hoc/regen-opencode-config.ts |
다시 생성된 opencode.json에 기록되는 OpenCode 형식의 API 키(sk-...)입니다. 설정되지 않은 경우 OMNIROUTE_KEY를 사용합니다. |
압축 오프라인 평가 하네스(임시 도구)
오프라인 압축 평가 CLI인 scripts/compression-eval/index.ts에서 사용됩니다.
정상적인 운영에는 필요하지 않으며 개발자 전용 도구입니다.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
OMNIROUTE_EVAL_CREDENTIALS |
{} (비어 있음) |
scripts/compression-eval/index.ts |
오프라인 압축 평가 CLI에서 실행하는 제공업체를 위해 운영자가 제공하는 JSON 자격 증명입니다(JSON.parse로 파싱). 드라이 런을 실행하려면 설정하지 마세요. |
VNC 브라우저 세션
브라우저 자동화 제공업체를 위한 Docker 기반 헤드리스 Chromium 세션을 구성하기 위해 src/lib/vncSession/manifest.ts에서 사용됩니다. 모두 선택 사항이며 기본값은 아래와 같습니다.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
OMNIROUTE_DOCKER_BIN |
docker |
src/lib/vncSession/manifest.ts |
VNC 컨테이너를 생성하는 데 사용되는 Docker 바이너리의 경로입니다. |
OMNIROUTE_VNC_IMAGE |
omniroute-vnc-chromium:local |
src/lib/vncSession/manifest.ts |
VNC Chromium 컨테이너용 Docker 이미지입니다. |
OMNIROUTE_VNC_CHROMIUM_ARGS |
(기본 제공 플래그) | src/lib/vncSession/manifest.ts |
컨테이너 내부 브라우저에 전달되는 추가 Chromium CLI 인수입니다. |
OMNIROUTE_VNC_CONTAINER_VNC_PORT |
3000 |
src/lib/vncSession/manifest.ts |
컨테이너 내부의 VNC 포트입니다. |
OMNIROUTE_VNC_CONTAINER_CDP_PORT |
9223 |
src/lib/vncSession/manifest.ts |
컨테이너 내부의 Chrome DevTools Protocol 포트입니다. |
OMNIROUTE_VNC_CONTAINER_PROFILE_DIR |
/config |
src/lib/vncSession/manifest.ts |
컨테이너 내부의 프로필 디렉터리입니다. |
OMNIROUTE_VNC_PROFILE_DIR |
(설정되지 않음) | src/lib/vncSession/manifest.ts |
영구 브라우저 프로필을 위한 호스트 측 디렉터리입니다. |
OMNIROUTE_VNC_IDLE_MS |
600000 |
src/lib/vncSession/manifest.ts |
VNC 세션을 회수하기 전의 유휴 시간 제한(ms)입니다. |
OMNIROUTE_VNC_MAX_MS |
1800000 |
src/lib/vncSession/manifest.ts |
최대 세션 지속 시간(ms)입니다. |
OMNIROUTE_VNC_MAX_SESSIONS |
4 |
src/lib/vncSession/manifest.ts |
최대 동시 VNC 세션 수입니다. |
OMNIROUTE_VNC_READY_MS |
45000 |
src/lib/vncSession/manifest.ts |
브라우저 준비 시간 제한(ms)입니다. |
OMNIROUTE_VNC_HARVEST_MS |
20000 |
src/lib/vncSession/manifest.ts |
회수/정리 시간 제한(ms)입니다. |
OMNIROUTE_VNC_NETWORK |
omniroute-vnc-browser-login |
src/lib/vncSession/manifest.ts |
컨테이너가 기본 브리지 대신 연결되는 전용 Docker 네트워크입니다(#12571). |
VIBEPROXY_DATA_DIR |
(설정되지 않음) | open-sse/services/notionThreadSessions.ts |
Notion 스레드 세션을 영구 저장하기 위한 디렉터리입니다. |
내부 서비스 인증
| 변수 | 기본값 | 설명 |
|---|---|---|
OMNIROUTE_INTERNAL_SERVICE_TOKEN |
– | 관리 플레인의 서비스 간 인증에 사용되는 인라인 토큰입니다. |
OMNIROUTE_INTERNAL_SERVICE_TOKEN_FILE |
– | 내부 서비스 토큰이 포함된 파일의 경로입니다(컨테이너에서 권장되며 인라인 변수를 재정의함). |
OpenRouter 제공업체 통계
| 변수 | 기본값 | 설명 |
|---|---|---|
OPENROUTER_PROVIDER_STATS_ENABLED |
true |
카탈로그 보강을 위한 OpenRouter 제공업체별 통계 가져오기를 건너뛰려면 false로 설정합니다. |
OPENROUTER_PROVIDER_STATS_TTL_MS |
3600000 |
가져온 OpenRouter 제공업체 통계의 캐시 TTL(ms)입니다. |
내장 Redis 바인딩
| 변수 | 기본값 | 설명 |
|---|---|---|
REDIS_BIND_HOST |
127.0.0.1 |
내장 Redis 서비스의 바인드 주소입니다. |
REDIS_PORT |
6379 |
내장 Redis 서비스의 포트입니다. |
OMNIROUTE_REDIS_BIND_HOST |
– | 내장 Redis 바인드 주소에 대한 OmniRoute 범위의 재정의 값입니다. |
24. 릴리스 v3.8.50 추가 사항
이 설정들은 이전 환경 계약 스냅샷 이후에 도입되었습니다.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
OMNIROUTE_CHAT_ADMISSION_QUEUE_MS |
2000 |
src/shared/middleware/chatBodyAdmission.ts |
재시도 가능한 503을 반환하기 전에 고부하 채팅 승인 슬롯을 기다리는 최대 시간입니다. 짧고 제한된 대기 시간을 두어 에이전트의 요청 폭주를 즉시 503으로 거부하는 대신 순차적으로 처리합니다. 0으로 설정하면 즉시 거부가 복원됩니다. |
OMNIROUTE_CHAT_ADMISSION_MAX_QUEUED_BYTES |
4194304 (4 MB) |
src/shared/middleware/chatBodyAdmission.ts |
승인 대기를 위한 대기열 바이트 예산입니다. 프로세스 전체에 보류되어 버퍼링되는 본문 바이트의 총량을 제한하여 대기로 인해 힙 사용량이 증폭되지 않도록 합니다(#4380). 예산을 초과한 대기 요청에는 재시도 가능한 503이 즉시 반환됩니다. |
OMNIROUTE_CHAT_VIRTUAL_TTL_MS |
60000 (60초) |
src/shared/middleware/chatBodyAdmission.ts |
#10110 이후로는 아무 작업도 수행하지 않는 사용 중단 설정입니다. 세션별 승인 레인은 프로세스 전체에서 사용하는 단일 예산으로 대체되었습니다. 구성 호환성을 위해 허용되지만 무시됩니다. |
OMNIROUTE_CHAT_VIRTUAL_MAX_SESSIONS |
64 |
src/shared/middleware/chatBodyAdmission.ts |
#10110 이후로는 아무 작업도 수행하지 않는 사용 중단 설정입니다. 세션별 승인 레인은 프로세스 전체에서 사용하는 단일 예산으로 대체되었습니다. 구성 호환성을 위해 허용되지만 무시됩니다. |
OMNIROUTE_CHAT_VIRTUAL_LANES |
0 (꺼짐) |
open-sse/services/admission/runtime.ts |
적응형 런타임 가상 승인 레인(#9654): 테넌트별 적응형 게이트(시스템 2)의 마스터 스위치입니다. 위의 사용 중단된 연결별 레인 변수(TTL_MS / MAX_SESSIONS, #10110 이후 아무 작업도 수행하지 않음)와는 별개입니다. 같은 이름의 대시보드 기능 플래그가 있으며, 환경 변수가 대시보드 재정의보다 우선하고 재시작이 필요합니다. |
OMNIROUTE_RUNNOW_TIMEOUT_MS |
30000 |
src/app/api/jobs/[id]/run-now/route.ts |
대기열에 추가된 실행을 시작하기 전에 run-now 호출이 진행 중인 작업을 기다리는 시간을 제한합니다. |
ADOBE_FIREFLY_BROWSER_REFRESH |
활성화됨 | open-sse/services/adobeFireflySession.ts |
계정 범위의 Chrome CDP 세션을 통해 IMS 및 브라우저 위험 상태를 최신으로 유지합니다. 비활성화하려면 0으로 설정하십시오. |
ADOBE_FIREFLY_SESSION_DISK |
활성화됨 | open-sse/services/adobeFireflySession.ts |
복구된 Adobe 세션을 DATA_DIR 아래에 영구 저장합니다. 메모리에만 상태를 유지하려면 0으로 설정하십시오. |
ADOBE_FIREFLY_MIN_SUBMIT_GAP_MS |
12000 |
open-sse/services/adobeFireflySession.ts |
Adobe Firefly 생성 제출 사이의 최소 간격입니다. |
ADOBE_FIREFLY_BATCH_EXTRA_GAP_MS |
15000 |
open-sse/services/adobeFireflySession.ts |
Adobe 제출이 세 번 성공할 때마다 추가되는 대기 시간입니다. |
ADOBE_FIREFLY_CHROME_HEADLESS |
0 |
open-sse/services/adobeFireflyBrowserLogin.ts |
디버깅 전용 실제 헤드리스 모드입니다. 일반적으로 Adobe colligo는 그 결과 생성된 위험 세션을 거부합니다. |
CHROME_PATH |
자동 감지 | open-sse/executors/cloudflare-playground.ts, open-sse/executors/chatgpt-web-codex.ts |
플랫폼 자동 감지만으로 충분하지 않을 때 브라우저 기반 실행기가 사용하는 선택적 Chrome 실행 파일 절대 경로입니다. |
TELEGRAM_BOT_TOKEN |
(설정되지 않음) | src/lib/telegram/config.ts |
인바운드 웹훅을 활성화하고 Mini App initData에 서명하는 BotFather 토큰입니다. |
TELEGRAM_WEBHOOK_SECRET |
(설정되지 않음) | src/lib/telegram/config.ts |
setWebhook을 통해 등록되고 모든 웹훅 전달 시 X-Telegram-Bot-Api-Secret-Token 헤더와 대조하여 검증되는 공유 비밀 값입니다. 웹훅 경로에 필수이며, 설정되지 않으면 웹훅 전달이 503으로 거부됩니다. |
TELEGRAM_DEFAULT_MODEL |
auto/chat |
src/lib/telegram/chatProxy.ts |
Telegram 채팅 응답에 사용되는 모델입니다. |
TELEGRAM_BOT_API_BASE |
https://api.telegram.org |
src/lib/telegram/config.ts |
프록시 또는 자체 호스팅 Bot API 서버를 위한 Bot API 기본 URL 재정의입니다. |
TELEGRAM_WEBHOOK_TIMEOUT_MS |
60000 |
src/lib/telegram/config.ts |
아웃바운드 Bot API 호출의 제한 시간(밀리초)입니다. |
OMNIROUTE_OPTIONAL_PACK_TAR |
1 (활성화됨) |
scripts/build/optionalPackStaging.mjs |
Electron 독립 실행형 트리를 위한 선택적 ML/브라우저 팩을 스테이징할 때 .tar.gz tarball 생성을 건너뛰려면 0으로 설정하십시오. 팩 디렉터리와 optional-packs.index.json은 계속 생성됩니다. 데스크톱 릴리스 워크플로에서 아티팩트 업로드 크기를 줄이는 데 사용됩니다. |
ChatGPT Web (Codex)
헤드리스 브라우저와 아웃바운드 도구 터널의 전역 기본값입니다. 대시보드에서 설정한 연결 값이 우선합니다.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
CHATGPT_WEB_CODEX_CHROME_PATH |
(자동 감지) | open-sse/executors/chatgpt-web-codex.ts |
npm, systemd 및 PM2 실행에 사용할 명시적 Chrome/Chromium 경로입니다. |
CHROME_PATH |
(자동 감지) | open-sse/executors/chatgpt-web-codex.ts |
명시적 Chrome/Chromium 경로를 위한 공통 폴백입니다. |
CHATGPT_WEB_CODEX_CDP_URL |
(설정되지 않음) | open-sse/executors/chatgpt-web-codex.ts |
내부 CDP 엔드포인트이며, Docker는 포트 9223의 사이드카를 사용합니다. |
CDP_PROXY_TOKEN |
(설정되지 않음) | docker/chatgpt-web-codex-browser/cdp-proxy.mjs |
설정된 경우 CDP 프록시 사이드카에 대한 모든 요청은 X-Omni-Cdp-Token 헤더에 이 값을 포함해야 합니다(#13679). 값이 없으면 프록시는 인증 없이 요청을 전달하므로 Compose 네트워크 chatgpt-web-codex-net의 네트워크 격리만이 이를 보호합니다. openssl rand -hex 32로 생성할 수 있습니다. |
CHATGPT_WEB_CODEX_TUNNEL_ID |
(설정되지 않음) | open-sse/executors/chatgpt-web-codex.ts |
로컬 Codex 도구 라운드를 위한 전역 OpenAI 터널 ID입니다. |
CHATGPT_WEB_CODEX_RUNTIME_KEY |
(설정되지 않음) | open-sse/executors/chatgpt-web-codex.ts |
전역 터널 런타임 키이며, 로그에 절대 출력해서는 안 됩니다. |
CHATGPT_WEB_CODEX_CONNECTOR_NAME |
OmniRoute Codex v2 |
open-sse/executors/chatgpt-web-codex.ts |
MCP 브리지를 위해 새로 생성된 ChatGPT 사용자 지정 커넥터의 정확한 이름입니다. |
CODEX_CHATGPT_WEB_HOME |
<DATA_DIR>/chatgpt-web-codex |
open-sse/vendor/codex-chatgpt-web/config.ts |
브라우저, 브로커 및 터널 상태를 위한 전용 디렉터리입니다. |
CODEX_CHATGPT_WEB_BROWSER_DIAGNOSTICS |
0 |
open-sse/vendor/codex-chatgpt-web/adapters/chatgpt-web/browser-worker.ts |
1로 설정하면 각 체크포인트에서 브라우저 진단 이미지가 캡처됩니다. |
CODEX_CHATGPT_WEB_LAUNCHER |
(설정되지 않음) | open-sse/vendor/codex-chatgpt-web/config.ts |
영구 런처 바이너리의 선택적 절대 경로입니다. |
CODEX_CHATGPT_WEB_BUN |
(자동 감지) | open-sse/vendor/codex-chatgpt-web/config.ts |
Bun 런타임 바이너리의 선택적 절대 경로입니다. |
CODEX_WEB_GPT_BUN |
(설정되지 않음) | open-sse/vendor/codex-chatgpt-web/config.ts |
CODEX_CHATGPT_WEB_BUN의 레거시 폴백이며, 새 설정에서는 정식 이름을 사용합니다. |
OmniConductor 브리지
OmniConductor 허브 작업을 로컬 A2A TaskManager(src/lib/conductor/)에 미러링하는 장기 실행 SSE 소비자입니다. 옵트인 방식이며, CONDUCTOR_HUB_URL이 설정된 경우에만 브리지가 시작됩니다. 서버 측 전용이므로 허브 토큰이 브라우저에 절대 전달되어서는 안 됩니다.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
CONDUCTOR_HUB_URL |
(비어 있음) | src/lib/conductor/boot.ts |
OmniConductor 허브의 기본 URL(예: http://127.0.0.1:7910)입니다. 설정하지 않으면 브리지가 비활성화됩니다. |
CONDUCTOR_HUB_TOKEN |
(비어 있음) | src/lib/conductor/boot.ts |
SSE 피드용 허브 자격 증명입니다. 허브에서 spokesperson 유형의 피어를 생성하세요(POST /v1/peers, 관리자 권한 필요). |
CONDUCTOR_ORCHESTRATOR_TOKEN |
(비어 있음) | src/lib/conductor/hubProxy.ts |
수신 A2A→허브 작업 위임(POST /v1/tasks)용 자격 증명입니다. 설정하지 않으면 CONDUCTOR_HUB_TOKEN을 대신 사용합니다. |
CONDUCTOR_SPOKESPERSON_URL |
http://127.0.0.1:7920 |
src/lib/conductor/faroProxy.ts |
대시보드 채팅 프록시(/api/conductor/ask) 뒤에 있는 대변인(Faro) 서비스의 기본 URL입니다. |
할당량 인식 스케줄링
open-sse/services/combo.ts 및 src/lib/quota/quotaScheduler.ts에서 요청 전 토큰 예산 검사에 사용됩니다. 옵트인 방식이며, 설정하지 않으면 기본 라우팅 동작이 변경되지 않습니다.
| 변수 | 기본값 | 소스 파일 | 설명 |
|---|---|---|---|
OMNIROUTE_QUOTA_AWARE_ROUTING |
0 |
open-sse/services/combo.ts |
1이면 디스패치 전에 윈도우별 토큰 예산(rateLimitOverrides.tpm, provider_quota_state 테이블)으로 예상 요청 비용을 감당할 수 없는 연결을 건너뜁니다. 예산이 구성되지 않은 경우에는 허용하는 방식으로 처리합니다. |