# Environment Variables Reference (Ελληνικά)
🌐 **Languages:** 🇺🇸 [English](../../../../reference/ENVIRONMENT.md) · 🇪🇹 [am](../../../am/docs/reference/ENVIRONMENT.md) · 🇸🇦 [ar](../../../ar/docs/reference/ENVIRONMENT.md) · 🇦🇿 [az](../../../az/docs/reference/ENVIRONMENT.md) · 🇧🇬 [bg](../../../bg/docs/reference/ENVIRONMENT.md) · 🇧🇩 [bn](../../../bn/docs/reference/ENVIRONMENT.md) · 🇧🇦 [bs](../../../bs/docs/reference/ENVIRONMENT.md) · 🇨🇿 [cs](../../../cs/docs/reference/ENVIRONMENT.md) · 🇩🇰 [da](../../../da/docs/reference/ENVIRONMENT.md) · 🇩🇪 [de](../../../de/docs/reference/ENVIRONMENT.md) · 🇪🇸 [es](../../../es/docs/reference/ENVIRONMENT.md) · 🇪🇪 [et](../../../et/docs/reference/ENVIRONMENT.md) · 🇮🇷 [fa](../../../fa/docs/reference/ENVIRONMENT.md) · 🇫🇮 [fi](../../../fi/docs/reference/ENVIRONMENT.md) · 🇫🇷 [fr](../../../fr/docs/reference/ENVIRONMENT.md) · 🇮🇪 [ga](../../../ga/docs/reference/ENVIRONMENT.md) · 🇮🇳 [gu](../../../gu/docs/reference/ENVIRONMENT.md) · 🇳🇬 [ha](../../../ha/docs/reference/ENVIRONMENT.md) · 🇮🇱 [he](../../../he/docs/reference/ENVIRONMENT.md) · 🇮🇳 [hi](../../../hi/docs/reference/ENVIRONMENT.md) · 🇭🇷 [hr](../../../hr/docs/reference/ENVIRONMENT.md) · 🇭🇺 [hu](../../../hu/docs/reference/ENVIRONMENT.md) · 🇦🇲 [hy](../../../hy/docs/reference/ENVIRONMENT.md) · 🇮🇩 [id](../../../id/docs/reference/ENVIRONMENT.md) · 🇳🇬 [ig](../../../ig/docs/reference/ENVIRONMENT.md) · 🇮🇹 [it](../../../it/docs/reference/ENVIRONMENT.md) · 🇯🇵 [ja](../../../ja/docs/reference/ENVIRONMENT.md) · 🇬🇪 [ka](../../../ka/docs/reference/ENVIRONMENT.md) · 🇰🇭 [km](../../../km/docs/reference/ENVIRONMENT.md) · 🇮🇳 [kn](../../../kn/docs/reference/ENVIRONMENT.md) · 🇰🇷 [ko](../../../ko/docs/reference/ENVIRONMENT.md) · 🇱🇹 [lt](../../../lt/docs/reference/ENVIRONMENT.md) · 🇱🇻 [lv](../../../lv/docs/reference/ENVIRONMENT.md) · 🇮🇳 [ml](../../../ml/docs/reference/ENVIRONMENT.md) · 🇮🇳 [mr](../../../mr/docs/reference/ENVIRONMENT.md) · 🇲🇾 [ms](../../../ms/docs/reference/ENVIRONMENT.md) · 🇲🇹 [mt](../../../mt/docs/reference/ENVIRONMENT.md) · 🇲🇲 [my](../../../my/docs/reference/ENVIRONMENT.md) · 🇳🇵 [ne](../../../ne/docs/reference/ENVIRONMENT.md) · 🇳🇱 [nl](../../../nl/docs/reference/ENVIRONMENT.md) · 🇳🇴 [no](../../../no/docs/reference/ENVIRONMENT.md) · 🇮🇳 [or](../../../or/docs/reference/ENVIRONMENT.md) · 🇮🇳 [pa](../../../pa/docs/reference/ENVIRONMENT.md) · 🇵🇭 [phi](../../../phi/docs/reference/ENVIRONMENT.md) · 🇵🇱 [pl](../../../pl/docs/reference/ENVIRONMENT.md) · 🇵🇹 [pt](../../../pt/docs/reference/ENVIRONMENT.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/reference/ENVIRONMENT.md) · 🇷🇴 [ro](../../../ro/docs/reference/ENVIRONMENT.md) · 🇷🇺 [ru](../../../ru/docs/reference/ENVIRONMENT.md) · 🇱🇰 [si](../../../si/docs/reference/ENVIRONMENT.md) · 🇸🇰 [sk](../../../sk/docs/reference/ENVIRONMENT.md) · 🇸🇮 [sl](../../../sl/docs/reference/ENVIRONMENT.md) · 🇷🇸 [sr](../../../sr/docs/reference/ENVIRONMENT.md) · 🇸🇪 [sv](../../../sv/docs/reference/ENVIRONMENT.md) · 🇰🇪 [sw](../../../sw/docs/reference/ENVIRONMENT.md) · 🇮🇳 [ta](../../../ta/docs/reference/ENVIRONMENT.md) · 🇮🇳 [te](../../../te/docs/reference/ENVIRONMENT.md) · 🇹🇭 [th](../../../th/docs/reference/ENVIRONMENT.md) · 🇹🇷 [tr](../../../tr/docs/reference/ENVIRONMENT.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/reference/ENVIRONMENT.md) · 🇵🇰 [ur](../../../ur/docs/reference/ENVIRONMENT.md) · 🇺🇿 [uz](../../../uz/docs/reference/ENVIRONMENT.md) · 🇻🇳 [vi](../../../vi/docs/reference/ENVIRONMENT.md) · 🇳🇬 [yo](../../../yo/docs/reference/ENVIRONMENT.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/reference/ENVIRONMENT.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/reference/ENVIRONMENT.md)
---
> Πλήρης αναφορά για κάθε μεταβλητή περιβάλλοντος που αναγνωρίζεται από το OmniRoute.
> Για ένα πρότυπο γρήγορης εκκίνησης, ανατρέξτε στο [`.env.example`](../../.env.example).
> [!IMPORTANT]
> Κάθε μεταβλητή που τεκμηριώνεται εδώ πρέπει επίσης να εμφανίζεται στο `.env.example`, και
> κάθε μεταβλητή στο `.env.example` πρέπει να εμφανίζεται εδώ. Το `npm run check:env-doc-sync`
> επιβάλλει αυτόν τον έλεγχο κατά το commit και στο CI. Για να παραλείψετε σκόπιμα μια μεταβλητή, προσθέστε την
> στη λίστα επιτρεπόμενων μέσα στο `scripts/check/check-env-doc-sync.mjs`.
---
## Πίνακας περιεχομένων
- [1. Απαιτούμενα μυστικά](#1-required-secrets)
- [2. Αποθήκευση & βάση δεδομένων](#2-storage--database)
- [3. Δίκτυο & θύρες](#3-network--ports)
- [4. Ασφάλεια & έλεγχος ταυτότητας](#4-security--authentication)
- [5. Εξυγίανση εισόδου & προστασία PII](#5-input-sanitization--pii-protection)
- [6. Πολιτικές εργαλείων & δρομολόγησης](#6-tool--routing-policies)
- [7. URL & συγχρονισμός στο cloud](#7-urls--cloud-sync)
- [8. Εξερχόμενος διακομιστής μεσολάβησης](#8-outbound-proxy)
- [9. Ενσωμάτωση εργαλείων CLI](#9-cli-tool-integration)
- [10. Ενσωματώσεις εσωτερικού agent & MCP](#10-internal-agent--mcp-integrations)
- [11. Διαπιστευτήρια παρόχων OAuth](#11-oauth-provider-credentials)
- [12. Παρακάμψεις User-Agent παρόχων](#12-provider-user-agent-overrides)
- [13. Συμβατότητα αποτυπώματος CLI](#13-cli-fingerprint-compatibility)
- [14. Πάροχοι κλειδιών API](#14-api-key-providers)
- [15. Ρυθμίσεις χρονικού ορίου](#15-timeout-settings)
- [16. Καταγραφή](#16-logging)
- [17. Βελτιστοποίηση μνήμης](#17-memory-optimization)
- [18. Συγχρονισμός τιμολόγησης](#18-pricing-sync)
- [19. Συγχρονισμός μοντέλων (Dev)](#19-model-sync-dev)
- [20. Ρυθμίσεις ανά πάροχο](#20-provider-specific-settings)
- [21. Εύρυθμη λειτουργία διακομιστή μεσολάβησης](#21-proxy-health)
- [22. Αποσφαλμάτωση](#22-debugging)
- [23. Ενσωμάτωση GitHub](#23-github-integration)
- [24. Sandbox δεξιοτήτων (v3.8.0+)](#24-skills-sandbox-v380)
- [27. Ροή Radar (αυτοφιλοξενία)](#27-radar-feed-self-hosting)
- [Σενάρια ανάπτυξης](#deployment-scenarios)
- [Έλεγχος: Καταργημένες / ανενεργές μεταβλητές](#audit-removed--dead-variables)
---
## 1. Απαιτούμενα μυστικά
Τα μη ορισμένα μυστικά που επισημαίνονται με **Ναι** δημιουργούνται αυτόματα κατά την πρώτη εκτέλεση (`JWT_SECRET`, `API_KEY_SECRET`) και αποθηκεύονται μόνιμα στο `server.env` μέσα στον κατάλογο δεδομένων — ορίστε τα ρητά όταν αυτός ο κατάλογος είναι εφήμερος. Εξαίρεση αποτελεί το `OMNIROUTE_WS_BRIDGE_SECRET`: δεν αποθηκεύεται μόνιμα στο `server.env` — τα σημεία εκκίνησης του διακομιστή δημιουργούν μια εφήμερη τιμή ανά εκκίνηση, την οποία μπορεί να χρησιμοποιήσει μόνο το εσωτερικό (in-process) bridge, επομένως οι εξωτερικοί πελάτες του bridge πρέπει να το ορίσουν ρητά.
| Μεταβλητή | Απαιτείται | Προεπιλογή | Αρχείο πηγής | Περιγραφή |
| ---------------------------- | ------------------ | ------------------------- | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `JWT_SECRET` | **Ναι** | _(καμία)_ | `src/lib/auth` | Υπογράφει/επαληθεύει όλα τα cookies συνεδρίας του dashboard (JWT). Δημιουργία με `openssl rand -base64 48`. |
| `API_KEY_SECRET` | **Ναι** | _(καμία)_ | `src/lib/db/apiKeys.ts` | Κλειδί κρυπτογράφησης AES για τις τιμές των κλειδιών API σε αδράνεια στην SQLite. Δημιουργία με `openssl rand -hex 32`. |
| `INITIAL_PASSWORD` | Όχι | _(μη ορισμένο)_ | `src/lib/auth/managementPassword.ts` | Ορίζει τον κωδικό πρόσβασης του dashboard κατά την εκκίνηση, όσο δεν έχει αποθηκευτεί ακόμη κανένας· αγνοείται μόλις αποθηκευτεί κάποιος κωδικός. Οι εγκαταστάσεις μέσω npm και από τον πηγαίο κώδικα αντιγράφουν το `.env.example` στο `.env`, επομένως ξεκινούν με το δημόσια γνωστό υποκατάστατο `CHANGEME`: αντικαταστήστε το πριν από την πρώτη εκκίνηση, ή ορίστε `INITIAL_PASSWORD=` (κενό) σε εκείνο το `.env` ώστε ο κωδικός να δημιουργηθεί στον οδηγό αρχικής ρύθμισης κατά την πρώτη επίσκεψη, όπως συμβαίνει με μια μη ορισμένη τιμή (η προεπιλογή της εικόνας Docker). Αλλάξτε έναν αποθηκευμένο κωδικό στο Dashboard → Ρυθμίσεις → Ασφάλεια, ή εκτελέστε `omniroute reset-password` (`node bin/reset-password.mjs` σε αντίγραφο του πηγαίου κώδικα) με το `DATA_DIR` ορισμένο στον κατάλογο δεδομένων του διακομιστή. |
| `OMNIROUTE_WS_BRIDGE_SECRET` | **Ναι** (παραγωγή) | _(μη ορισμένο)_ | `src/app/api/internal/codex-responses-ws/route.ts` | Κοινό μυστικό για το εσωτερικό WebSocket bridge του Codex Responses. Πιστοποιεί τα αιτήματα του bridge μεταξύ του WS relay Electron/προγράμματος περιήγησης και του OmniRoute. ⚠️ **ΑΠΑΙΤΕΙΤΑΙ σε παραγωγή — όταν δεν είναι ορισμένο, όλα τα αιτήματα WS bridge απορρίπτονται.** Δημιουργία με `openssl rand -base64 32`. |
| `OMNIROUTE_SW_BUILD_ID` | Όχι | _(git SHA)_ | `next.config.mjs`, `scripts/build/assembleStandalone.mjs` | Ρητό αναγνωριστικό cache-busting του service worker για το κέλυφος PWA (#11779)· πρώτο στην αλυσίδα επίλυσης. |
| `SOURCE_VERSION` | Όχι | _(μη ορισμένο)_ | `next.config.mjs`, `scripts/build/assembleStandalone.mjs` | Δεύτερο στην αλυσίδα — ορίζεται από builders PaaS (π.χ. τύπου Heroku) ως το αναπτυγμένο commit. |
| `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` | Μυστικό ανά διεργασία που αποδεικνύει ότι η αξιόπιστη σφραγίδα peer-IP προήλθε από τον δικό του HTTP διακομιστή του OmniRoute (`scripts/dev/peer-stamp.mjs`). Το middleware εξουσιοδότησης (authz) εμπιστεύεται την τοπικότητα του αιτήματος (περιορισμός loopback/LAN των διαδρομών LOCAL_ONLY) μόνο όταν η σφραγίδα φέρει αυτό το token. Δημιουργείται αυτόματα σε κάθε εκκίνηση — αφήστε το μη ορισμένο· ορίστε το σταθερά μόνο για εγκαταστάσεις πολλαπλών διεργασιών που πρέπει να μοιράζονται τη σφραγίδα. |
| `OMNIROUTE_TRUSTED_PROXIES` | Όχι | _(μη ορισμένο)_ | `scripts/dev/peer-stamp.mjs` | Διευθύνσεις IP διαχωρισμένες με κόμμα ή εύρη CIDR αντίστροφων μεσολαβητών (reverse proxies), των οποίων τις κεφαλίδες `X-Forwarded-For` / `X-Real-IP` μπορεί να εμπιστεύεται η λίστα αποδοχής/άρνησης IP, επιπλέον των διευθύνσεων loopback, των διευθύνσεων ιδιωτικών δικτύων και των edge του Cloudflare, οι οποίες θεωρούνται πάντα αξιόπιστες. Απαιτείται μόνο για μεσολαβητή σε οποιαδήποτε άλλη δημόσια διεύθυνση· διαφορετικά, το φίλτρο κρίνει βάσει της ίδιας της διεύθυνσης του μεσολαβητή. Ο περιορισμός ρυθμού ανά πελάτη του relay (`/api/v1/relay/chat/completions`) βασίζεται στην ίδια επιλυμένη διεύθυνση πελάτη, ποτέ αποκλειστικά στις κεφαλίδες προώθησης. |
### Εντολές δημιουργίας
```bash
# Δημιουργία και των τεσσάρων μυστικών με μία κίνηση:
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`, αλλά επαληθεύστε πριν το push.
---
## 2. Αποθήκευση & Βάση Δεδομένων
Το OmniRoute χρησιμοποιεί **SQLite** (μέσω `better-sqlite3`) για κάθε μόνιμη αποθήκευση. Αυτές οι μεταβλητές ελέγχουν τη θέση των δεδομένων, την κρυπτογράφηση και τον κύκλο ζωής.
| Μεταβλητή | Προεπιλογή | Αρχείο πηγαίου κώδικα | Περιγραφή |
| ------------------------------------------ | ----------------------------- | ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `DATA_DIR` | `~/.omniroute/` | `src/lib/db/core.ts` | Ριζικός κατάλογος για τη βάση δεδομένων SQLite, τα αντίγραφα ασφαλείας και τα αρχεία δεδομένων. Παρακάμψτε τον για τόμους Docker ή προσαρμοσμένες διαδρομές. |
| `OMNIROUTE_ALLOW_DEFAULT_DATA_DIR` | _(μη ορισμένο)_ | `src/lib/dataPaths.ts` | Δίοδος διαφυγής για την προστασία DATA_DIR των δοκιμών/eval (#10428). Οι δοκιμές και οι διερευνητικές κλήσεις eval/print του Node (`-e`/`--eval`/`-p`/`--print`, συμπεριλαμβανομένων των μορφών `--eval=`/`--print=`) χωρίς `DATA_DIR` ανακατευθύνονται σε προσωρινό κατάλογο μίας χρήσης, ώστε να μην μπορούν να ανοίξουν την πραγματική βάση δεδομένων του χειριστή· ορίστε σε `1` για να επιλέξετε ξανά τον πραγματικό κατάλογο. |
| `OMNIROUTE_BUILD_SHA` | _(μη ορισμένο)_ | `src/lib/monitoring/buildSha.ts` | Το Git SHA του τρέχοντος artifact. Αποτυπώνεται από το `npm run build:release`· μπορεί να εγχυθεί σε containers που διανέμονται χωρίς το sentinel `dist/BUILD_SHA`. Εκτίθεται ως `system.buildSha` στο `/api/monitoring/health`. |
| `OMNIROUTE_RELEASE_REF` | `origin/main` | `scripts/build/buildProvenance.ts` | Το ref έναντι του οποίου η πύλη προέλευσης του pack-artifact ελέγχει το SHA του build (#10427). |
| `OMNIROUTE_ALLOW_CANARY_BUILD` | _(μη ορισμένο)_ | `scripts/build/buildProvenance.ts` | Ορίστε σε `1` για να επιτρέψετε τη συσκευασία ενός build του οποίου το SHA δεν βρίσκεται στη γραμμή έκδοσης, καταγράφοντάς το ως σκόπιμο canary αντί να αποτύχει η πύλη (#10427). |
| `OMNIROUTE_SMOKE_API_KEY` | _(μη ορισμένο)_ | `scripts/ops/deploy-canary.mjs` | Κλειδί API για τον smoke probe του canary deploy, που αποστέλλεται ως `Authorization: Bearer` στο `/v1/chat/completions`. Χρησιμοποιείται μόνο από το script ανάπτυξης (#10429), ποτέ από τον διακομιστή. Δεν σχετίζεται με τις μεταβλητές `OMNIROUTE_SMOKE_*` του opt-in πλαισίου smoke δοκιμών CLI (`RUN_CLI_SMOKE=1`, `OMNIROUTE_SMOKE_BASE_URL/MODEL/API_KEY_ENV/TARGETS/TIMEOUT_MS` στο `tests/integration/upstream-cli-smoke.int.test.ts`) — δείτε [Ενσωματώσεις CLI → Πραγματικό smoke sweep](../guides/CLI-INTEGRATIONS.md). |
| `OMNIROUTE_BUILDING` | _(μη ορισμένο)_ | `src/lib/buildPhase.ts` | Σήμα φάσης build (#10060): ορίζεται σε `1` από το `scripts/build/build-next-isolated.mjs` και κληρονομείται από κάθε εκκινημένο worker build, ώστε το επίπεδο DB να επιστρέφει ένα no-op stub αντί να φορτώνει το εγγενές addon better-sqlite3 (το οποίο τερματίζει ακανόνιστα τον worker κατά την έξοδο). Δεν ορίζεται ποτέ για τον διακομιστή σε λειτουργία. |
| `OMNIROUTE_SKIP_NATIVE_DEP_CHECK` | `0` | `scripts/check/check-native-deps.mjs` | Ορίστε σε `1` για να παραλείψετε τον προαιρετικό έλεγχο prebuild εγγενών εξαρτήσεων για εξωτικά vendored δέντρα. Αυτό δεν καθιστά δυνατή τη δόμηση μιας ελλείπουσας εξάρτησης· χρησιμοποιήστε το μόνο όταν οι εγγενείς εξαρτήσεις παρέχονται εκτός καναλιού (out of band). |
| `OMNIROUTE_DATA_DIR` | _(μη ορισμένο)_ | `open-sse/executors/promptql/threadSticky.ts` | **Εναλλακτικό ψευδώνυμο** για το `DATA_DIR`, που ελέγχεται μόνο όταν το `DATA_DIR` δεν έχει οριστεί. Χρησιμοποιείται για τον εντοπισμό της on-disk cache συνεδριών thread-sticky του PromptQL executor (`
/promptql-thread-sessions.json`)· αν δεν έχει οριστεί καμία από τις δύο μεταβλητές, η cache παραμένει μόνο στη μνήμη (δεν διατηρείται μεταξύ επανεκκινήσεων). |
| `OMNIROUTE_PLUGINS_DIR` | _(μη ορισμένο)_ | `src/lib/plugins/scanner.ts` | Ο κατάλογος που διαβάζει ο **runtime plugin scanner** — και η ρίζα στην οποία εγκαθιστά ο διαχειριστής plugin — παρακάμπτοντας την προεπιλογή που παράγεται από το home (#11827). Κατευθύνετέ τον στο δέντρο plugin που είναι προσαρτημένο μέσω bind mount σε Docker/K8s, αντί να μετακινήσετε το HOME μόνο για να μετατοπίσετε τη διαδρομή σάρωσης (το HOME διέπει επίσης κάθε άλλη συμπεριφορά σχετική με το home). Μη ορισμένο = `~/.omniroute/plugins`, ή `/tmp/.omniroute/plugins` όταν η διεργασία δεν εξάγει καθόλου home — τη σιωπηλή μη ανακάλυψη που εξαλείφει αυτή η μεταβλητή. Ο τελικός κατάλογος που επιλύθηκε καταγράφεται μία φορά κατά την εκκίνηση ως `scanner.dir_resolved` μαζί με την είσοδο που επικράτησε. Μόνο από πλευράς διακομιστή: τα plugin εντολών CLI διατηρούν το δικό τους `OMNIROUTE_PLUGIN_PATH` (ενότητα 9). |
| `STORAGE_ENCRYPTION_KEY` | _(κενό = απενεργοποιημένο)_ | `src/lib/db/encryption.ts` | Κλειδί AES για πλήρη κρυπτογράφηση της βάσης δεδομένων SQLite σε κατάσταση ηρεμίας. Δημιουργήστε το με `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, εγγραφές ρυθμίσεων). Τα μη αυτόματα αντίγραφα ασφαλείας και τα αντίγραφα πριν από επαναφορά εκτελούνται ακόμη. **Δεν** απενεργοποιεί το υποχρεωτικό ανθεκτικό στιγμιότυπο ασφαλείας του εκτελεστή μεταναστεύσεων ούτε τον φρουρό μαζικής μετανάστευσης για υπάρχουσα μόνιμη βάση δεδομένων. Τα μη αυτόματα αντίγραφα ασφαλείας περιορίζονται σε συχνότητα το πολύ μία φορά κάθε 60 λεπτά. Ο πίνακας ελέγχου **Settings → Storage** μπορεί να απενεργοποιήσει ανεξάρτητα τη συνήθη αυτόματη δημιουργία αντιγράφων ασφαλείας. |
| `OMNIROUTE_SQLITE_SLOW_MS` | _(μη ορισμένο/ανενεργό)_ | `src/lib/db/adapters/slowDiagnostics.ts` | Χιλιοστά του δευτερολέπτου· τιμές κάτω από 1 ή μη αριθμητικές παραμένουν ανενεργές· προειδοποιεί το πολύ μία φορά ανά 10 δευτερόλεπτα· η γραμμή καταγραφής περιέχει μόνο driver, operation και elapsedMs. |
| `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` | _(καταργήθηκε)_ | `src/lib/db/walMaintenance.ts` | **Καταργήθηκε.** Ένα περιοδικό ενεργό `wal_checkpoint(TRUNCATE)` μπορεί να ακυρώσει την κοινόχρηστη αντιστοίχιση wal-index και να προκαλέσει κατάρρευση της διεργασίας με SIGBUS (#13973), επομένως ο χρονοπρογραμματιστής δεν υπάρχει πλέον. Η μεταβλητή είναι αδρανής: μια θετική τιμή καταγράφει μία εφάπαξ προειδοποίηση απόσυρσης, ενώ η τιμή `0` ή η μη ρύθμιση παραμένει σιωπηλή. Το WAL συντηρείται από checkpoints PASSIVE (παρακάτω) και περικόπτεται από το checkpoint τερματισμού. |
| `OMNIROUTE_WAL_PASSIVE_INTERVAL_MS` | `300000` (5 λεπτά) | `src/lib/db/walMaintenance.ts` | Αντικαθιστά το συχνό διάστημα `wal_checkpoint(PASSIVE)` (ms). Διατηρεί τα εκκρεμή πλαίσια WAL μικρά, ώστε τα checkpoints να παραμένουν γρήγορα και το αρχείο WAL να παραμένει εντός ορίων μεταξύ των περικοπών κατά τον τερματισμό. Η τιμή `0` το απενεργοποιεί. |
| `OMNIROUTE_WAL_GUARD_MAX_MB` | `256` | `src/lib/db/walMaintenance.ts` | Όταν ένας κύκλος PASSIVE βρίσκει το αρχείο WAL πάνω από αυτό το μέγεθος, εκτελείται `wal_checkpoint(RESTART)` ώστε το WAL να ξεκινήσει από την αρχή χωρίς να ξαναγραφτεί το αντιστοιχισμένο wal-index. Τα ενεργά checkpoints σε λειτουργία truncate καταργήθηκαν (δείτε τη γραμμή `OMNIROUTE_WAL_TRUNCATE_INTERVAL_MS`). |
| `OMNIROUTE_PRESSURE_SELF_RESTART` | `false` | `open-sse/utils/resourcePressure.ts` | Ορίστε σε `1`/`true`/`yes`/`on` για έξοδο της διεργασίας αφού η κρίσιμη πίεση πόρων διατηρηθεί για `OMNIROUTE_PRESSURE_SELF_RESTART_AFTER_MS`, επιτρέποντας σε έναν επόπτη (systemd `Restart=always`, πολιτική επανεκκίνησης Docker) να επαναφέρει μια καθαρή διεργασία αντί να συνεχίζει να επιστρέφει 503 επ' αόριστον. |
| `OMNIROUTE_PRESSURE_SELF_RESTART_AFTER_MS` | `120000` (2 λεπτά) | `open-sse/utils/resourcePressure.ts` | Πόσο χρόνο πρέπει να διατηρηθεί η κρίσιμη πίεση πριν ενεργοποιηθεί η έξοδος αυτοεπανεκκίνησης. |
| `OMNIROUTE_PRESSURE_PSI_DISABLED` | `false` | `open-sse/utils/resourcePressurePolicy.ts` | Ορίστε σε `1`/`true`/`yes`/`on` για να αγνοείται το `/proc/pressure/memory` σε επίπεδο κεντρικού υπολογιστή (`psi_some` / `psi_full`) όταν ένας θορυβώδης γείτονας προκαλεί 503 ενώ αυτή η διεργασία είναι εντάξει (#13124). Οι φρουροί cgroup και V8 heap παραμένουν ενεργοί. Το PSI επίσης παύει να μετράει ως απόδειξη περιορισμού από τον πυρήνα για το `cgroup_high`: ένα σύνολο cgroup πάνω από το `memory.high` γίνεται κρίσιμο μόνο σε περίπτωση αύξησης του `high`/`max` στο `memory.events`. Χωρίς το `memory.events`, διατηρείται ο ακατέργαστος λόγος. |
| `OMNIROUTE_SQLJS_WASM_PATH` | _(αυτόματη ανίχνευση)_ | `src/lib/db/adapters/sqljsAdapter.ts` | Ρητή διαδρομή (απόλυτη ή σχετική με το cwd) προς το `sql-wasm.wasm` όταν χρησιμοποιείται ο εφεδρικός προσαρμογέας WASM `sql.js`. Ανιχνεύεται αυτόματα μέσω εξαρτήσεων πακέτων και υποψήφιων διατάξεων όταν δεν έχει οριστεί. |
| `OMNIROUTE_BATCH_RETENTION_DAYS` | `30` | `src/lib/db/cleanup.ts` | Ημέρες κατά τις οποίες τα checkpoints, τα αναφερόμενα αρχεία εισόδου/εξόδου/σφαλμάτων και η γραμμή μιας τερματικής (completed/failed/cancelled/expired) εργασίας Batch API διατηρούνται από την αυτόματη σάρωση καθαρισμού πριν από τη διαγραφή. Τίθεται σε ισχύ μόνο όταν ενεργοποιηθεί το `BATCH_AND_FILE_AUTO_CLEANUP_ENABLED`· αντιστοιχεί στο παράθυρο διατήρησης εξόδου του ίδιου του Batch API του OpenAI. Δεν επηρεάζει τη διαδρομή `DELETE /api/v1/batches/delete-completed` που ενεργοποιείται από τον χειριστή, η οποία παραμένει άνευ όρων (χωρίς φίλτρο ηλικίας) εκ σχεδιασμού. |
| `BATCH_AND_FILE_AUTO_CLEANUP_ENABLED` | `false` | `src/lib/db/cleanup.ts` | Όταν είναι `true`, επιτρέπει στην αυτόματη σάρωση καθαρισμού να διαγράφει τερματικές εργασίες Batch API (και τα checkpoints τους) μετά την παρέλευση του `OMNIROUTE_BATCH_RETENTION_DAYS`, και να καθαρίζει το περιεχόμενο BLOB των μεταφορτωμένων αρχείων μετά το δικό τους `expires_at`. Απενεργοποιημένο από προεπιλογή: κάθε υπάρχουσα εγκατάσταση διατηρεί αυτά τα δεδομένα ακριβώς όπως πριν, μέχρι ένας χειριστής να το ενεργοποιήσει ρητά. Επίσης feature flag επεξεργάσιμο από το dashboard — δείτε `docs/reference/FEATURE_FLAGS.md` → Runtime. |
| `OMNIROUTE_SKIP_DB_HEALTHCHECK` | `0` | `src/lib/db/core.ts`, `src/lib/db/healthCheck.ts` | Ορίστε σε `1` για να παραλείψετε πλήρως τον έλεγχο υγείας της βάσης δεδομένων κατά την εκκίνηση. Χρήσιμο για βραχύβιες εργασίες και δοκιμές ενσωμάτωσης. |
| `OMNIROUTE_FORCE_DB_HEALTHCHECK` | `0` | `src/lib/db/core.ts` | Ορίστε σε `1` για να επιβάλετε την ενεργοποίηση του βρόχου ελέγχου υγείας της βάσης δεδομένων, ακόμη και όταν θα παραλειπόταν κανονικά (π.χ. βραχύβιες εργασίες). |
| `OMNIROUTE_SKIP_POSTINSTALL` | `0` | `scripts/postinstall.mjs` | Ορίστε σε `1` για να παραλείψετε το warm-up του native runtime κατά το `npm install`. Χρήσιμο σε εγκαταστάσεις CI/headless όπου το sqlite είναι ήδη μεταγλωττισμένο. |
| `OMNIROUTE_MIGRATIONS_DIR` | _(αυτόματος εντοπισμός)_ | `src/lib/db/migrationRunner.ts` | Παρακάμπτει τον κατάλογο που σαρώνει το εργαλείο εκτέλεσης migrations. Χρήσιμο κατά τη διανομή ενσωματωμένων migrations σε προσαρμοσμένα builds. |
| `OMNIROUTE_EXTRA_MIGRATIONS_DIRS` | _(μη ορισμένο)_ | `src/lib/db/migrationRunner/extraDirs.ts` | Επιπλέον κατάλογοι migrations ως καταχωρήσεις `namespace=dir` διαχωρισμένες με τον οριοθέτη διαδρομών της πλατφόρμας (π.χ. `ee=/opt/app/enterprise/db/migrations`). Τα αρχεία που βρίσκονται εκεί καταγράφονται ως `-`, ώστε μια διανομή που παρέχει τα δικά της migrations να μην συγκρούεται ποτέ με τους αριθμητικούς κωδικούς του upstream. Μια εσφαλμένη καταχώρηση, ένα μη έγκυρο namespace ή ένας κατάλογος που λείπει προκαλεί σφάλμα κατά την εκκίνηση αντί για σιωπηλή παράλειψη του σχήματος. |
| `OMNIROUTE_MAX_PENDING_MIGRATIONS` | `50` | `src/lib/db/migrationRunner.ts` | Κατώφλι ασφαλείας για μαζικά εκκρεμή migrations (#3416). Η εκκίνηση ματαιώνεται αν περισσότερα από αυτόν τον αριθμό migrations εκκρεμούν σε μια υπάρχουσα βάση δεδομένων (προστατεύει από έναν διαγραμμένο πίνακα παρακολούθησης). Αυξήστε το για να επαναφέρετε ένα παλαιότερο backup· ορίστε σε `0` για να απενεργοποιήσετε τον έλεγχο. |
| `OMNIROUTE_INSTALL_UPGRADE_WORKDIR` | _(`/.install-upgrade`)_ | `scripts/check/check-install-upgrade.mjs` | Κατάλογος εργασίας για το release gate `check:install-upgrade`. Χρειάζεται περίπου 12 GB (δύο δέντρα εγκατάστασης ~3 GB συν το tarball), επομένως δεν πρέπει να εκτελείται σε μικρό tmpfs — στον self-hosted runner το `/tmp` είναι tmpfs 12 GB υποστηριζόμενο από RAM και το gate το εξάντλησε, περικόπτοντας το πακέτο. |
| `OMNIROUTE_SPEND_FLUSH_INTERVAL_MS` | _(προεπιλογή στον κώδικα)_ | `src/lib/spend/batchWriter.ts` | Διάστημα flush (ms) για τον εγγραφέα δαπανών/κόστους με ομαδοποίηση. Χαμηλότερες τιμές μειώνουν τη συγχώνευση εγγραφών· υψηλότερες τιμές μειώνουν τον ανταγωνισμό στη βάση δεδομένων. |
| `OMNIROUTE_SPEND_MAX_BUFFER_SIZE` | _(προεπιλογή στον κώδικα)_ | `src/lib/spend/batchWriter.ts` | Μέγιστος αριθμός εγγραφών δαπανών στο buffer πριν από εξαναγκασμένο flush. Αυξήστε σε αναπτύξεις με υψηλό QPS· μειώστε όταν η περιορισμένη μνήμη μετράει περισσότερο. |
| `OMNIROUTE_PROXY_FETCH_DEBUG` | _(μη ορισμένο)_ | `open-sse/utils/proxyFetch.ts` | Ορίστε σε `"true"` για εκπομπή καταγραφών αποσφαλμάτωσης `[ProxyFetch]` στη διαδρομή relay του Vercel. Απενεργοποιημένο από προεπιλογή για αποφυγή διαρροής υποδείξεων δρομολόγησης. |
| `OMNIROUTE_PROXY_CORE_BINARY_PATH` | _(μη ορισμένο)_ | `src/lib/proxySubscription/coreConfig/sync.ts` | Απόλυτη διαδρομή του τοπικού δυαδικού αρχείου πυρήνα proxy (ένα αρχείο με όνομα `sing-box`) που ελέγχει μια παραγόμενη διαμόρφωση πυρήνα πριν αντικαταστήσει το υιοθετημένο αρχείο. Όταν δεν έχει οριστεί, γράφει μόνο το `.generated` δίπλα στο υιοθετημένο αρχείο. Μόνο για το περιβάλλον του host: δεν αποθηκεύεται ποτέ στη βάση δεδομένων ούτε γίνεται αποδεκτό μέσω του API διαχείρισης, επειδή το δυαδικό αρχείο εκτελείται. |
| `OMNIROUTE_PROXY_CORE_RELOAD_COMMAND` | _(μη ορισμένο)_ | `src/lib/proxySubscription/coreConfig/reload.ts` | Πώς επαναφορτώνει ο τοπικός πυρήνας proxy μετά από μια επαληθευμένη αντικατάσταση διαμόρφωσης: ένας πίνακας ορισμάτων JSON που εκτελείται χωρίς shell, ή ακριβώς `external` όταν ένας εξωτερικός παρατηρητής εφαρμόζει το αρχείο. Δεν αποθηκεύεται ποτέ στη βάση δεδομένων ούτε εκτίθεται μέσω του API. |
| `PROXY_LOG_INCLUDE_IPS` | `false` | `src/lib/proxyLogger.ts` | Ορίστε σε `"true"` ή `"1"` για να συμπεριληφθούν οι IP πελάτη/εξερχόμενης κυκλοφορίας και το πρόθεμα λογαριασμού στην αναλυτική γραμμή καταγραφής διεργασίας `[ProxyEgress]`. Παραμένει ΑΠΕΝΕΡΓΟΠΟΙΗΜΕΝΟ από προεπιλογή ώστε το αρχείο καταγραφής διεργασίας να μην αποκαλύπτει IP ή το πρόθεμα λογαριασμού. |
| `OMNIROUTE_DEBUG` | _(δεν έχει οριστεί)_ | `bin/cli/commands/quota.mjs` | Ορίστε σε `1` για εκτύπωση διαγνωστικών χρονισμού ανά αίτημα (`[omniroute] GET completed in Nms`) από τις εντολές quota του CLI στο stderr. |
| `OMNIROUTE_HEALTHCHECK_PATH` | _(αυτόματο)_ | `scripts/dev/healthcheck.mjs` | Ρητή διαδρομή που ανιχνεύεται από τον έλεγχο υγείας του container. Όταν δεν έχει οριστεί, ο έλεγχος την παράγει από το `OMNIROUTE_BASE_PATH`· ο ορισμός της επαναφέρει τη χρήση του endpoint βαθιάς παρακολούθησης. |
| `OMNIROUTE_DEBUG_COMPLETION` | _(δεν έχει οριστεί)_ | `bin/cli/commands/completion.mjs` | Ορίστε οποιαδήποτε μη κενή τιμή για εκπομπή διαγνωστικών `[omniroute completion]` από τις διαδρομές cache αυτόματης συμπλήρωσης shell του CLI (ανάγνωση/ανανέωση/εγγραφή). Απενεργοποιημένο από προεπιλογή — αυτές οι caches αποτυγχάνουν σιωπηλά, ώστε μια ελλιπής/κατεστραμμένη cache να μην διακόπτει ποτέ την αυτόματη συμπλήρωση με tab. |
| `BATCH_RETRY_DURATION_MS` | `86400000` (24h) | `open-sse/services/batchProcessor.ts` | Μέγιστο παράθυρο επαναλήψεων για μεμονωμένα στοιχεία batch (ms). Τα στοιχεία που υπερβαίνουν αυτή τη διάρκεια επισημαίνονται ως αποτυχημένα. |
| `BATCH_BACKOFF_BASE_MS` | `5000` | `open-sse/services/batchProcessor.ts` | Βασική καθυστέρηση (ms) για το εκθετικό backoff στις επαναλήψεις στοιχείων batch. |
| `BATCH_BACKOFF_MAX_MS` | `3600000` (1h) | `open-sse/services/batchProcessor.ts` | Ανώτατο όριο (ms) για το εκθετικό backoff μεταξύ επαναλήψεων στοιχείων batch. |
| `BATCH_MAX_CONCURRENT` | `1` | `open-sse/services/batchProcessor.ts` | Μέγιστος αριθμός batches που επεξεργάζονται ταυτόχρονα. Αυξήστε το για μεγαλύτερη ρυθμαπόδοση· κρατήστε το χαμηλό για να αποφύγετε καταιγισμό ορίων ρυθμού (rate limits). |
> [!IMPORTANT]
> Πριν από την τροποποίηση μιας υπάρχουσας μόνιμης βάσης δεδομένων, ο εκτελεστής μεταναστεύσεων δημοσιεύει ένα πλήρες,
> επικυρωμένο ως προς το περιεχόμενο στιγμιότυπο στο `DATA_DIR/db_backups/`. Η δημοσίευση απαιτεί σύστημα αρχείων
> που υποστηρίζει σκληρούς συνδέσμους (hard links) στο ίδιο σύστημα αρχείων χωρίς αντικατάσταση, καθώς και ανθεκτικό συγχρονισμό αρχείων. Οι κεντρικοί υπολογιστές POSIX
> απαιτούν επίσης συγχρονισμό καταλόγων· στα Windows, το Node ενδέχεται να απορρίψει handles καταλόγων, οπότε το OmniRoute κάνει flush το
> δημοσιευμένο αρχείο και αντιμετωπίζει τον συγχρονισμό καταχωρήσεων καταλόγου ως βέλτιστη προσπάθεια.
> Αν το προσαρτημένο `DATA_DIR` δεν μπορεί να παρέχει αυτές τις εγγυήσεις, η εκκίνηση αποτυγχάνει με ασφαλή τρόπο πριν εφαρμοστεί
> μια μετανάστευση. Μετακινήστε το `DATA_DIR` σε τόμο που διαθέτει αυτές τις βασικές λειτουργίες· μην χρησιμοποιείτε
> το `DISABLE_SQLITE_AUTO_BACKUP` για να παρακάμψετε την ασφάλεια των μεταναστεύσεων.
### Σενάρια
| Σενάριο | Διαμόρφωση |
| ----------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| **Τοπική ανάπτυξη** | Αφήστε όλες τις προεπιλογές. Η βάση δεδομένων βρίσκεται στο `~/.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 endpoints (λειτουργία μίας θύρας). |
| `OMNIROUTE_BASE_PATH` | _(κενό = root)_ | `next.config.mjs`, `scripts/docker/ensure-docker-base-path.mjs` | Υποδιαδρομή URL για την εξυπηρέτηση του OmniRoute πίσω από reverse proxy (ορίζει το `basePath` του Next.js· τα auth redirects λαμβάνουν υπόψη το basePath). Π.χ. `/omniroute`. Στο Docker η τιμή ενσωματώνεται κατά το `docker build` (`ARG OMNIROUTE_BASE_PATH`)· τα προκατασκευασμένα root images μπορούν να εφαρμόσουν μια διαφορετική τιμή χρόνου εκτέλεσης μία φορά κατά την εκκίνηση του container, πριν εκκινήσει το Next.js. Ορίστε το `NEXT_PUBLIC_BASE_URL` στο δημόσιο origin συμπεριλαμβανομένης της ίδιας υποδιαδρομής. |
| `NEXT_PUBLIC_OMNIROUTE_BASE_PATH` | _(κενό = root)_ | `src/shared/hooks/useDisplayBaseUrl.ts` | Αντίγραφο του `OMNIROUTE_BASE_PATH` ορατό στον browser, ενσωματωμένο κατά το build ώστε η εμφάνιση του endpoint στο dashboard να δείχνει `https://host/omniroute/v1` αντί για `https://host/v1`. Επιστρέφει στο `OMNIROUTE_BASE_PATH` όταν δεν έχει οριστεί. Απαιτείται rebuild μετά την αλλαγή (το `basePath` του Next ορίζεται κατά το build). |
| `DASHBOARD_ALLOW_EMBED` | _(μη ορισμένο = ποτέ σε frame)_ | `next.config.mjs`, `scripts/build/dashboardEmbed.mjs` | Ενσωμάτωση των HTML σελίδων σε iframe κατόπιν επιλογής (opt-in). Όταν δεν έχει οριστεί, κάθε διαδρομή αποστέλλει `frame-ancestors 'none'` + `X-Frame-Options: DENY`. Ορίστε το σε `vscode` για να εξυπηρετούνται οι σελίδες (dashboard, login, docs, landing) με `frame-ancestors 'self' vscode-webview:` και χωρίς `X-Frame-Options`, ώστε ο Simple Browser του VS Code να μπορεί να τις αποδώσει (λειτουργία `dashboardOpen: "editor"` του OmniCopilot). Η επιφάνεια του API (`/api`, `/v1`, `/v1beta`, `/a2a`, `/healthz`, aliases επιπέδου root) διατηρεί τις αυστηρές κεφαλίδες σε κάθε περίπτωση. Μόνο το `vscode` αναγνωρίζεται — τα `1`/`true` δεν το ενεργοποιούν. Build-time: απαιτείται rebuild μετά την αλλαγή (`docker build --build-arg DASHBOARD_ALLOW_EMBED=vscode` για images· ο ορισμός της σε προκατασκευασμένη εγκατάσταση δεν έχει κανένα αποτέλεσμα). |
| `API_PORT` | _(μη ορισμένο)_ | `src/lib/runtime/ports.ts` | Όταν οριστεί, εξυπηρετεί το `/v1/*` proxy API σε αυτήν την ξεχωριστή θύρα. |
| `API_HOST` | `0.0.0.0` | `src/lib/runtime/ports.ts` | Διεύθυνση σύνδεσης (bind) για τη θύρα του API. |
| `DASHBOARD_PORT` | _(μη ορισμένο)_ | `src/lib/runtime/ports.ts` | Όταν οριστεί, εξυπηρετεί το Dashboard UI σε αυτήν την ξεχωριστή θύρα. |
| `OMNI_MAX_CONCURRENT_CONNECTIONS` | `0` _(απενεργοποιημένο)_ | `src/sse/utils/backpressure.ts` | Θέτει ανώτατο όριο στις ταυτόχρονες ενεργές συνδέσεις chat· τα αιτήματα πέρα από το όριο λαμβάνουν `503` με `Retry-After`. Θετικός ακέραιος ενεργοποιεί τον έλεγχο· χωρίς ορισμό/`0` τον απενεργοποιεί. |
| `OMNIROUTE_INSTANCE_ID` | _(μη ορισμένο)_ | `src/shared/resilience/peerRouting.ts` | Σταθερό, μοναδικό ID για αυτό το gateway κατά την αλυσίδωση στιγμιοτύπων OmniRoute. Ενεργοποιεί ελέγχους peer-loop για εισερχόμενη κίνηση. Επιτρεπόμενοι χαρακτήρες: γράμματα, ψηφία, `.`, `_`, `:` και `-`· μέγιστο 64 χαρακτήρες. |
| `OMNIROUTE_PEER_URLS` | _(μη ορισμένο)_ | `src/shared/resilience/peerRouting.ts`, `open-sse/executors/base.ts` | Βασικά URLs OmniRoute διαχωρισμένα με κόμμα που μπορούν να λάβουν το `X-OmniRoute-Peer-Trace`. Μόνο ρητά επιτρεπόμενα (allowlisted) upstream URLs λαμβάνουν μεταδεδομένα peer· όλοι οι υπόλοιποι πάροχοι παραμένουν ανέπαφοι. |
| `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` | Δημοσιευμένη θύρα πλευράς host για το Dashboard σε λειτουργία παραγωγής Docker. |
| `PROD_API_PORT` | `20131` | `docker-compose.prod.yml` | Δημοσιευμένη θύρα πλευράς host για το API σε λειτουργία παραγωγής Docker. |
| `OMNIROUTE_PORT` | _(μη ορισμένο)_ | `src/lib/runtime/ports.ts` | Υπερισχύει του `PORT` όταν εκτελείται μέσα σε Electron ή άλλα wrappers. |
| `LIVE_WS_PORT` | `20129` | `src/server/ws/liveServer.ts` | Θύρα για τον διακομιστή ζωντανής παρακολούθησης WebSocket σε πραγματικό χρόνο. |
| `LIVE_WS_HOST` | `127.0.0.1` | `src/server/ws/liveServer.ts` | Διεύθυνση σύνδεσης (bind) για τον διακομιστή ζωντανού WebSocket. Ορίστε σε `0.0.0.0` για έκθεση στο LAN (διαμορφώστε επίσης το `LIVE_WS_ALLOWED_ORIGINS`). Οι συνδέσεις πιστοποιούνται με το cookie συνεδρίας του dashboard ή με Bearer API key που διαθέτει πεδίο διαχείρισης (`manage`/`admin`). |
| `LIVE_WS_ALLOWED_ORIGINS` | _(μη ορισμένο)_ | `src/server/ws/liveServer.ts` | Επιπλέον origins διαχωρισμένα με κόμμα που επιτρέπεται να ανοίξουν ζωντανό WebSocket. Τα loopback origins του dashboard επιτρέπονται ήδη από προεπιλογή. |
| `LIVE_WS_ALLOWED_HOSTS` | _(μη ορισμένο)_ | `src/server/ws/liveServerAllowList.ts` | Επιπλέον hostnames διαχωρισμένα με κόμμα που επιτρέπονται για origins ζωντανού WebSocket. Σε αντίθεση με το `LIVE_WS_ALLOWED_ORIGINS` (πλήρη origin URLs), γίνεται ταίριασμα μόνο στο τμήμα host — χρήσιμο για εγκαταστάσεις LAN/Tailscale. |
| `NEXT_PUBLIC_LIVE_WS_PUBLIC_URL` | _(μη ορισμένο)_ | `src/hooks/useLiveDashboard.ts` | Δημόσιο URL για το WebSocket του ζωντανού dashboard (πλευρά προγράμματος περιήγησης). Ορίζεται όταν ο διακομιστής WS βρίσκεται πίσω από reverse proxy ή Cloudflare Tunnel (π.χ. `wss://ws.my-ai.com/live-ws`)· το πρόγραμμα περιήγησης συνδέεται εκεί αντί για `ws://hostname:20132`. Το τμήμα pathname χρησιμοποιείται επίσης ως διαδρομή αναβάθμισης WebSocket (προεπιλογή: `/live-ws`). |
| `OMNIROUTE_ENABLE_LIVE_WS` | `true` | `src/server/ws/liveServer.ts` και `scripts/start-ws-server.mjs` | Ορίστε σε `0` ή `false` για απενεργοποίηση του διακομιστή WebSocket πραγματικού χρόνου (ενεργοποιημένος από προεπιλογή, συνδεδεμένος σε loopback). Διακόπτης CI/harness που απενεργοποιεί το αυτόνομο βοηθητικό script ζωντανού WebSocket. |
| `RELAY_IP_PER_MINUTE` | `30` | `src/app/api/v1/relay/chat/completions/route.ts` | Όριο ρυθμού relay ανά (token, IP), αιτήσεις/λεπτό. Στη μνήμη, ανά στιγμιότυπο. `0` ή αρνητική τιμή απενεργοποιεί την πύλη της διάστασης IP (το όριο DB ανά token εξακολουθεί να ισχύει). |
| `NODE_ENV` | `production` | Next.js core | Ελέγχει την αναλυτικότητα καταγραφής, την προσωρινή αποθήκευση, την έκθεση λεπτομερειών σφαλμάτων και τις βελτιστοποιήσεις του Next.js. |
| `OMNIROUTE_USE_TURBOPACK` | `1` (Turbopack — προεπιλογή κώδικα) | `package.json` / Next.js 16 | Το Turbopack είναι ο προεπιλεγμένος bundler για τα `npm run dev` και `npm run build` (2-3× ταχύτερα builds, μετρημένα με benchmark). Ορίστε σε `0` για επιστροφή στο webpack στα Windows, όταν αντιμετωπίζετε ασυμβατότητες native binding / bundler-compat, **ή σε μηχανήματα με περιορισμένη RAM** — τα production builds του Turbopack σε αυτή τη σειρά εκδόσεων του Next.js (16.2.x) είναι γνωστό upstream ότι φτάνουν σε αιχμή πολύ υψηλότερα σε μνήμη από το webpack σε μεγάλα γραφήματα modules (η διόρθωση memory-eviction του Turbopack στο Next 16.3 δεν είναι ακόμη σταθερή)· η εναλλακτική λύση webpack φτάνει σε αιχμή πολύ χαμηλότερα. Δείτε #6409. **Τα builds εικόνων Docker έχουν προεπιλογή `0` (webpack)**: το `Dockerfile` δηλώνει `ARG OMNIROUTE_USE_TURBOPACK=0` ώστε ένα απλό `docker build .` (Railway και άλλοι one-click hosts, ad-hoc self-hosters) να μην τερματίζεται με OOM σε builder με περιορισμένη μνήμη· περάστε `--build-arg OMNIROUTE_USE_TURBOPACK=1` για να χτίσετε την εικόνα με Turbopack. Δείτε `docs/guides/DOCKER_GUIDE.md` → Πόροι κατά το build. |
| `OMNIROUTE_SKIP_DB_HEALTHCHECK` | _(μη ορισμένο)_ | `src/lib/db/core.ts` / `src/lib/db/healthCheck.ts` | Ορίστε σε `1` για να παραλείψετε τον έλεγχο υγείας ακεραιότητας της SQLite κατά την εκκίνηση. Χρήσιμο για ταχύτερη εκκίνηση σε μεγάλες βάσεις δεδομένων. |
| `NOTIFY_SOCKET` | _(μη ορισμένο)_ | systemd (πρωτόκολλο sd_notify) | Ορίζεται από το systemd όταν η διεργασία εκτελείται υπό service unit με ενσωμάτωση sd_notify· το OmniRoute τη διαβάζει (δείτε `OMNIROUTE_DISABLE_SD_NOTIFY`) για να στείλει ειδοποιήσεις READY/WATCHDOG. Δεν ορίζεται ποτέ από τον χρήστη. |
| `OMNIROUTE_DISABLE_SD_NOTIFY` | _(μη ορισμένο)_ | `scripts/dev/systemd-notify.mjs` | Ορίστε σε `1` για να απενεργοποιήσετε το systemd sd_notify (Type=notify / WatchdogSec=) ακόμη και όταν εκτελείται υπό systemd unit. Ο notifier είναι no-op εκτός systemd ούτως ή άλλως. |
| `CREDENTIAL_HEALTH_CHECK_INTERVAL` | `3600000` | `open-sse/config/constants.ts` / `src/lib/credentialHealth/scheduler.ts` | Διάστημα (ms) για τον προγραμματιστή ελέγχου υγείας διαπιστευτηρίων στο παρασκήνιο. Ελάχιστο: 10000 (10s). |
| `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` για να απενεργοποιήσετε τον περιοδικό έλεγχο συνδέσεων παρόχων στο παρασκήνιο. Οι πάροχοι αναζήτησης (SEARCH_VALIDATOR_CONFIGS στο `src/lib/providers/validation/searchProviders.ts`, π.χ. `tavily-search`) εξαιρούνται πάντα από τη σάρωση — η «επικύρωσή» τους είναι ένα πραγματικό χρεώσιμο upstream ερώτημα, επομένως δεν υποβάλλονται ποτέ σε έλεγχο υγείας με χρονοδιακόπτη (#9970). |
| `DEEP_HEALTH_CHECK_ENABLED` | `0` | `src/app/api/monitoring/health/route.ts` | Ορίστε σε `1` για να επιτρέψετε σε έναν πιστοποιημένο καλούντα να ζητήσει `/api/monitoring/health?deep=1`, το οποίο δειγματοληπτεί την επιφάνεια completions μία φορά ανά TTL. Οι ανώνυμοι καλούντες δεν ενεργοποιούν ποτέ την ανίχνευση. |
| `OMNIROUTE_EVENT_LOOP_STALL_THRESHOLD_MS` | `5000` | `src/lib/healthzLag.ts` | Όριο καθυστέρησης (ms) για τον καταγραφέα event-loop εκκίνησης: ένα πάγωμα μεγαλύτερο από αυτό καταγράφει μία γραμμή `event loop stalled` κατά τη συνέχιση με μετρήσεις μνήμης και in-flight, και αυξάνει τον μετρητή/μέγιστο `eventLoopStall` στο `/api/monitoring/health`. Ορίστε σε `0` για απενεργοποίηση· μια μη αναγνώσιμη ή αρνητική τιμή επαναφέρει σε `5000`. |
| `HOST` | `0.0.0.0` | `scripts/dev/run-next.mjs` | Διεύθυνση σύνδεσης για τον dev/start server του Next.js. Παρακάμπτει την προεπιλογή `0.0.0.0` όταν οριστεί. |
| `HOSTNAME` | `127.0.0.1` | `scripts/dev/run-next-playwright.mjs` | Διεύθυνση bind που χρησιμοποιεί ο runner του Playwright κατά την εκκίνηση του Next.js. Προεπιλογή σε `127.0.0.1` για ερμητικά tests. **Να μην χρησιμοποιείται για το `omniroute serve`** — χρησιμοποιήστε αντί αυτού το `OMNIROUTE_SERVER_HOST` (τα POSIX shells ορίζουν αυτόματα το `HOSTNAME` στο όνομα του μηχανήματος· το `.env` δεν μπορεί να το παρακάμψει). |
| `OMNIROUTE_SERVER_HOST` | `0.0.0.0` | `bin/cli/commands/serve.mjs` | Διεύθυνση bind για το `omniroute serve`. Αποφεύγει τη σύγκρουση με τη μεταβλητή `HOSTNAME` του POSIX shell (ορίζεται πάντα στο όνομα του μηχανήματος από τα bash/zsh). Όταν δεν έχει οριστεί, γίνεται επιστροφή σε `0.0.0.0`. (#6194) |
### Λειτουργίες Θύρας
```
┌─────────────────────────── Single Port (default) ──────────────────────────┐
│ PORT=20128 │
│ → Dashboard: http://localhost:20128 │
│ → API: http://localhost:20128/v1/chat/completions │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────── Split Ports ─────────────────────────────────────┐
│ DASHBOARD_PORT=20128 │
│ API_PORT=20129 │
│ API_HOST=0.0.0.0 │
│ → Dashboard: http://localhost:20128 │
│ → API: http://0.0.0.0:20129/v1/chat/completions │
│ Use case: Expose API to LAN while restricting Dashboard to localhost. │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────── Docker Production ──────────────────────────────┐
│ PROD_DASHBOARD_PORT=443 PROD_API_PORT=8443 │
│ → Maps container ports to host ports in docker-compose.prod.yml. │
└─────────────────────────────────────────────────────────────────────────────┘
```
---
## 4. Ασφάλεια & Έλεγχος ταυτότητας
| Μεταβλητή | Προεπιλογή | Αρχείο πηγαίου κώδικα | Περιγραφή |
| ------------------------------------------- | --------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `MACHINE_ID_SALT` | `endpoint-proxy-salt` | `src/lib/auth` | Salt που συνδυάζεται με αναγνωριστικά υλικού για τη δημιουργία δακτυλικού αποτυπώματος μηχανής. Αλλάξτε το ανά ανάπτυξη για απομόνωση. |
| `OMNIROUTE_CLI_SALT` | _(μη ορισμένο = τυχαίο salt ανά εγκατάσταση που αποθηκεύεται στο `/cli-token-salt.json`)_ | `src/lib/machineToken.ts` | HMAC salt για την παραγωγή του τοπικού token ελέγχου ταυτότητας CLI. Ο ορισμός αυτής της τιμής εναλλάσσει όλα τα token CLI στο μηχάνημα και έχει πάντα προτεραιότητα έναντι του αποθηκευμένου salt. Δείτε `docs/security/CLI_TOKEN.md`. |
| `AUTH_COOKIE_SECURE` | `false` | `src/lib/auth` | Ορίζει τη σημαία `Secure` στα cookies συνεδρίας. **Πρέπει να είναι `true`** κατά την εκτέλεση πίσω από HTTPS. |
| `REQUIRE_API_KEY` | `false` | middleware API | Όταν είναι `true`, όλα τα αιτήματα proxy `/v1/*` πρέπει να περιλαμβάνουν έγκυρο κλειδί API. **Αυτή η σημαία δεν ελέγχει το `GET /v1/models`**, το οποίο ακολουθεί τη στάση σύνδεσης του dashboard (`requireAuthForModels`) — επομένως ένα `401` από το `/v1/models` ΔΕΝ σημαίνει ότι η εκτέλεση inference προστατεύεται. Δείτε `docs/security/INFERENCE_AUTH_POSTURE.md` (#13695). |
| `ALLOW_API_KEY_REVEAL` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | Επιτρέπει την αποκάλυψη πλήρων τιμών κλειδιών API στο περιβάλλον χρήστη του Dashboard. Διαμορφώνεται από τα Feature Flags του Dashboard· ενέχει κίνδυνο ασφαλείας σε κοινόχρηστες εγκαταστάσεις. |
| `NO_LOG_API_KEY_IDS` | _(κενό)_ | `src/lib/compliance/index.ts` | Αναγνωριστικά κλειδιών API διαχωρισμένα με κόμματα που παρακάμπτουν την καταγραφή αιτημάτων (συμμόρφωση GDPR). |
| `DEFAULT_RATE_LIMIT_PER_DAY` | _(μη ορισμένο = απεριόριστο)_ | `src/shared/utils/apiKeyPolicy.ts` | Εφεδρικό ημερήσιο όριο αιτημάτων που εφαρμόζεται σε κλειδιά API των οποίων η στήλη `rate_limits` είναι null. Μη ορισμένο ή κενό: κανένα έμμεσο ανώτατο όριο (#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 (διαδρομή BYTE, συμπεριλαμβανομένου του `POST /v1/responses`). Ο ίδιος μηχανισμός διαφυγής υγιούς περιθωρίου του [#10437](https://github.com/diegosouzapw/OmniRoute/pull/10437) όπως και στο structure-heavy· εξακολουθεί να περιορίζεται από το `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` / [#10110](https://github.com/diegosouzapw/OmniRoute/issues/10110), ώστε το [#7849](https://github.com/diegosouzapw/OmniRoute/issues/7849) να μην επιστρέψει. |
| `OMNIROUTE_CHAT_HARD_MAX_BODY_BYTES` | `52428800` (50 MB) | `src/shared/middleware/chatBodyAdmission.ts` | Αυστηρό ανώτατο όριο της διαδρομής chat που επιβάλλεται στα bytes που διαβάζονται κατά την περιορισμένη απορρόφηση, συμπεριλαμβανομένων αιτημάτων με ελλιπές, μη έγκυρο ή ψευδές `Content-Length`· η υπέρβαση λαμβάνει `413`. |
| `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` | _(μη ορισμένο — χωρίς ανώτατο όριο πλήθους αιτημάτων)_ | `src/shared/middleware/chatBodyAdmission.ts` | **#503-fanout:** αυτό το παλαιό ανώτατο όριο ΠΛΗΘΟΥΣ αιτημάτων δεσμεύει πλέον μόνο όταν οριστεί ρητά. Όταν παραμείνει μη ορισμένο (η προεπιλογή), η είσοδος βαρέων αιτημάτων chat ελέγχεται αντιθέτως από το `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` — έναν αυτόματα παραγόμενο προϋπολογισμό BYTE, διαστασιολογημένο από το πραγματικό ανώτατο όριο μνήμης της διεργασίας σε **μία διεργασία** (ένας σωρός V8). Δύο επικαλυπτόμενα `/v1/responses` ~750k token ματαιώνουν σωρούς ~12 Gi (#7849) — μια προειδοποίηση **προϋπολογισμού μνήμης**, όχι σκληρό προϊοντικό μέγιστο του 2. Μια υγιής διεργασία (σωρός κάτω από τον λόγο εκφόρτωσης) ΜΠΟΡΕΙ να δεχτεί περισσότερα ταυτόχρονα μακρά `/v1/responses` μέσω του `OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM`. Δεκάδες μακροί πελάτες SSE (40–50) είναι σωρός + `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` / #10110, όχι «μέγιστο 2». Η τυφλή αύξησή του για «χρήση του κεντρικού υπολογιστή» επανεισάγει το #7849. Πολλαπλασιάστε τους **σωρούς** με **N ανεξάρτητα `DATA_DIR`** (#11024)· ποτέ `replicas>1` σε ένα αρχείο SQLite. |
| `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` | _(αυτόματα παραγόμενο)_ | `src/shared/middleware/admissionBudget.ts` | **#503-fanout:** παράκαμψη για τον αυτόματα παραγόμενο προϋπολογισμό byte απορρόφησης (25% του αυστηρότερου ανώτατου ορίου μνήμης V8/cgroup, διαιρεμένο διά της 8x παροδικής ενίσχυσης). Οι παραγόμενες και οι ρητές τιμές περιορίζονται σε 8 MiB–2 GiB. Ένα σώμα μεγαλύτερο από τον εν ισχύι προϋπολογισμό αποτυγχάνει αμέσως με `413 body_exceeds_budget`· η αντιπαράθεση μεταξύ μεμονωμένα εξυπηρετήσιμων σωμάτων παραμένει επαναλήψιμη `503`. 40–50 ταυτόχρονοι μακροί πελάτες SSE είναι αυτός ο προϋπολογισμός + σωρός, όχι σκληρό «μέγιστο 2». Διαβάστε τα `chatAdmission.maxInflightBytes` / `budgetSource` / `pressureSeverity` στο `/api/monitoring/health` πριν από τη ρύθμιση. |
| `OMNIROUTE_CHAT_ADMISSION_HEAP_SHED_RATIO` | `0.75` | `src/shared/middleware/chatBodyAdmission.ts` | Λόγος εκφόρτωσης πίεσης σωρού (`heapUsed / heap_size_limit`) για την είσοδο βαρέων αιτημάτων BYTE και STRUCTURE (#10183, #10268, #10437). Ένα ταυτόχρονο βαρύ αίτημα πέρα από το `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` εκφορτώνεται με το επαναλήψιμο `503` μόνο όταν ο σωρός βρίσκεται ΕΠΙΣΗΣ στο ή πάνω από αυτόν τον λόγο· σε υγιή σωρό γίνεται δεκτό μέσω healthy-headroom αντιθέτως. |
| `OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM` | `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` (προεπιλογή `1`) | `src/shared/middleware/chatBodyAdmission.ts` | Περιορισμένη επιπλέον χωρητικότητα για τη γρήγορη διαδρομή υγιούς σωρού (#10437) **τόσο** σε STRUCTURE όσο και σε BYTE (`admitChatRequest`, συμπεριλαμβανομένων σωμάτων ≥ `OMNIROUTE_CHAT_LARGE_BODY_BYTES`). Χωρίς αυτό το όριο, κάθε αίτημα με απασχολημένο αλλά υγιή σωρό παρέκαμπτε την είσοδο χωρίς κανένα ανώτατο όριο. Μόλις τόσες ταυτόχρονες μισθώσεις είναι ενεργές μέσω της διαδρομής υγιούς σωρού, περαιτέρω αιτήματα σε συνθήκες φόρτου μεταπίπτουν στην ΙΔΙΑ διαδρομή περιορισμένης αναμονής/εκφόρτωσης που χρησιμοποιείται υπό πραγματική πίεση σωρού. Το `0` απενεργοποιεί πλήρως την παράκαμψη. |
| `OMNIROUTE_CHAT_HEAVY_MESSAGE_COUNT` | `200` | `src/shared/middleware/chatBodyAdmission.ts` | Αριθμός μηνυμάτων που ταξινομεί ένα αίτημα chat ως βαρύ ακόμη και όταν το σώμα του βρίσκεται κάτω από το κατώφλι byte. |
| `OMNIROUTE_CHAT_HEAVY_TOOL_COUNT` | `64` | `src/shared/middleware/chatBodyAdmission.ts` | Αριθμός εργαλείων που ταξινομεί ένα αίτημα chat ως βαρύ ακόμη και όταν το σώμα του βρίσκεται κάτω από το κατώφλι byte. |
| `OMNIROUTE_CHAT_HEAVY_ESTIMATED_TOKENS` | `32000` | `src/shared/middleware/chatBodyAdmission.ts` | Συντηρητική εκτίμηση token βάσει μεγέθους συμβολοσειράς που ταξινομεί ένα αίτημα ως βαρύ· πρόκειται για ενδιάμεσο μέγεθος κόστους εισόδου, όχι για tokenization χρέωσης παρόχου. |
| `OMNIROUTE_CHAT_HARD_MAX_MESSAGES` | `0` (απενεργοποιημένο) | `src/shared/middleware/chatBodyAdmission.ts` | Προαιρετικό ανώτατο όριο ιστορικού chat με opt-in. Απενεργοποιημένο από προεπιλογή: ένας αριθμός μηνυμάτων αποτελεί πολιτική ανάπτυξης, όχι καθολική ιδιότητα ενός αιτήματος, και ο περιορισμός εδώ απορρίπτει συνομιλίες με τελικό `413` πριν η διοχέτευση συμπίεσης προλάβει να τις καταστήσει εξυπηρετήσιμες. Η αύξηση του σωρού περιορίζεται από το `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` και την εκφόρτωση πίεσης σωρού. Ορίστε θετική τιμή σε αναπτύξεις με περιορισμένη μνήμη που χρειάζονται σκληρό ανώτατο όριο· η υπέρβαση τότε λαμβάνει δομημένο compact-required `413`. |
| `OMNIROUTE_MAX_NONSTREAMING_RESPONSE_BYTES` | `67108864` (64 MB) | `open-sse/handlers/chatCore/nonStreamingResponseBody.ts` | Σκληρό ανώτατο όριο για μια μη ροής απόκριση upstream που αποθηκεύεται πλήρως ενδιάμεσα στη μνήμη. Πέρα από αυτό, ο αναγνώστης upstream ακυρώνεται και το αίτημα αποτυγχάνει γρήγορα, αντί να διογκώνει μια απεριόριστη συμβολοσειρά μέχρι να εξαντληθεί ο σωρός. |
| `OMNIROUTE_FORWARDING_HEADER_BUDGET_BYTES` | `768` | `open-sse/handlers/chatCore/responseHeaders.ts` | Μέγιστα bytes δικτύου (wire) που προωθούνται από τις κεφαλίδες απάντησης του upstream. Όταν το όριο ξεπεραστεί, κεφαλίδες χαμηλότερης προτεραιότητας (π.χ. προσαρμοσμένες `x-codex-*`, `x-oai-request-id`) απορρίπτονται ώστε το μέγεθος να παραμένει εντός των συνηθισμένων ορίων κεφαλίδων των reverse-proxy. Ορίστε υψηλότερη τιμή για να προωθούνται περισσότερα μεταδεδομένα του upstream, με κόστος το μεγαλύτερο μέγεθος των κεφαλίδων απάντησης. |
| `CORS_ORIGIN` | _(μη ορισμένο)_ | `src/server/cors/origins.ts` | Παλαιού τύπου λίστα επιτρεπόμενων προελεύσεων CORS μίας μόνο προέλευσης. Προτιμήστε το `CORS_ALLOWED_ORIGINS` για νέες εγκαταστάσεις. Το CORS αφορά μόνο πελάτες API προγράμματος περιήγησης με αιτήματα cross-origin· οι πιστοποιημένες εγγραφές από τον πίνακα ελέγχου χρησιμοποιούν αντί αυτού αιτήματα same-origin συν προστασία 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/outboundUrlGuardPolicy.ts` | Παλαιού τύπου ψευδώνυμο. Ο διακόπτης του στον πίνακα ελέγχου (παράκαμψη σε βάση δεδομένων) διαβάζεται πριν από αυτή την τιμή περιβάλλοντος· οι τιμές `false`, `0`, `no` ή `off` σε οποιοδήποτε από τα δύο απενεργοποιούν τους ελέγχους κεντρικών υπολογιστών με τον τρόπο που το κάνει το `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS=true`, ακόμη κι αν ο διακόπτης εκείνης της σημαίας στον πίνακα ελέγχου είναι αποθηκευμένος ως ανενεργός· άλλες τιμές αφήνουν τον φρουρό στις δύο παρακάτω σημαίες. |
| `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS` | `false` | `src/shared/network/outboundUrlGuardPolicy.ts` | Απενεργοποιεί τους ελέγχους κεντρικών υπολογιστών του φρουρού εξερχόμενων URL, συμπεριλαμβανομένου του αποκλεισμού μεταδεδομένων cloud (ολόκληρο το 169.254.0.0/16, metadata.google.internal), στις διαδρομές παρόχων που ακολουθούν τη λειτουργία φρουρής: επικύρωση URL, ανακάλυψη μοντέλων, βασικά URL κόμβων παρόχων (συμπεριλαμβανομένων απομακρυσμένων κόμβων rerank) και η δοκιμή proxy-fallback, μεταξύ άλλων εξερχόμενων διαδρομών παρακείμενων στους παρόχους, όπως η απομακρυσμένη λήψη εικόνων/πολυμέσων. Επιτρέπει επίσης ιδιωτικούς στόχους webhook, εκτός από τελικά σημεία μεταδεδομένων cloud/link-local, τα οποία παραμένουν αποκλεισμένα ακόμη και με ενεργή αυτή τη σημαία. Τα αιτήματα συνομιλίας που αποστέλλονται μέσω `BaseExecutor.execute()` διατηρούν τον έλεγχο μεταδεδομένων cloud τους. Οι τοπικοί πάροχοι λειτουργούν με τις προεπιλογές: το `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` (προεπιλογή `true`) επιτρέπει ήδη τοπικά URL και URL LAN στις διαδρομές επικύρωσης, ανακάλυψης και κόμβων παρόχων· η δοκιμή proxy-fallback και οι ιδιωτικοί στόχοι webhook συμβουλεύονται μόνο αυτή τη σημαία και αποκλείουν τοπικούς/LAN κεντρικούς υπολογιστές όσο αυτή είναι ανενεργή. Παρακάμπτει το `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS=false`. Τιμή που έχει αποθηκευτεί από τον διακόπτη του πίνακα ελέγχου υπερισχύει αυτής της μεταβλητής. |
| `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` | `true` | `src/shared/network/outboundUrlGuardPolicy.ts` | Επιτρέπει URL παρόχων σε τοπικές/ιδιωτικές διευθύνσεις (127.0.0.1, localhost, LAN, ιδιωτικά εύρη) για την επικύρωση παρόχων, την ανακάλυψη μοντέλων, τη συνομιλία και τις λοιπές εξερχόμενες διαδρομές παρακείμενες στους παρόχους που διέπει η λειτουργία φρουρής. **Προεπιλογή `true`** (τοπικό-πρώτο): ο φρουρός αποκλείει τότε τελικά σημεία μεταδεδομένων cloud — ολόκληρο το 169.254.0.0/16 συν τα γνωστά ονόματα κεντρικών υπολογιστών μεταδεδομένων (metadata.google.internal, metadata.goog, Alibaba/Azure/Oracle IMDS, fd00:ec2::254). Ορίστε `false` για λειτουργία μόνο-δημόσιων, η οποία αποκλείει επίσης ιδιωτικούς και loopback κεντρικούς υπολογιστές. Ο φρουρός ελέγχει το όνομα κεντρικού υπολογιστή ή την κυριολεκτική τιμή IP όπως είναι γραμμένη, πριν από οποιαδήποτε αναζήτηση DNS· στη λειτουργία μόνο-δημόσιων, το περιτύλιγμα safe-fetch επιπλέον επιλύει το όνομα κεντρικού υπολογιστή και απορρίπτει οποιαδήποτε ιδιωτική απάντηση. Το `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS=true` απενεργοποιεί αυτούς τους ελέγχους στις διαδρομές που παραθέτει η αντίστοιχη γραμμή του. Οι ενσωματωμένοι τοπικοί πάροχοι, όπως LM Studio, Ollama, vLLM, Llamafile και Triton, παρακάμπτουν όλους τους ελέγχους κεντρικών υπολογιστών για την επικύρωση κλειδιού και τη συνομιλία. Τιμή που έχει αποθηκευτεί από τον διακόπτη του πίνακα ελέγχου υπερισχύει αυτής της μεταβλητής. (#5066) |
| `AUDIO_REMOTE_PROVIDER_NODES` | `false` | `src/app/api/v1/_shared/audioProviderNodes.ts` | Επιτρέπει στις διαδρομές `/v1/audio/*` (μεταγραφές, ομιλία, μεταφράσεις) να χρησιμοποιούν κόμβο παρόχου συμβατό με OpenAI που φιλοξενείται εκτός localhost. Ανενεργό από προεπιλογή — η δρομολόγηση ήχου σε απομακρυσμένο κεντρικό υπολογιστή αλλάζει την ταυτότητα εξερχόμενης κίνησης και πρέπει να αποτελεί ρητή απόφαση του διαχειριστή. Κόμβοι loopback/ιδιωτικοί (localhost, 127.0.0.1, 172.16-31.x) επιτρέπονται πάντα και δεν επηρεάζονται. (#3963) |
| `RERANK_REMOTE_PROVIDER_NODES` | `false` | `src/app/api/v1/_shared/rerankProviderNodes.ts` | Επιτρέπει στο `POST /v1/rerank` (και στο βήμα loopback rerank της μηχανής μνήμης) να χρησιμοποιεί κόμβο παρόχου συμβατό με OpenAI που φιλοξενείται εκτός localhost — ένα μηχάνημα LAN ή έναν ομότιμο κόμβο Tailscale που εκτελεί TEI, Infinity, vLLM κ.λπ. Ανενεργό από προεπιλογή — η δρομολόγηση σε απομακρυσμένο κεντρικό υπολογιστή αλλάζει την ταυτότητα εξερχόμενης κίνησης και πρέπει να αποτελεί ρητή απόφαση του διαχειριστή. Κόμβοι loopback (localhost, 127.0.0.1, 172.16-31.x) επιτρέπονται πάντα και δεν επηρεάζονται. Το βασικό URL ενός απομακρυσμένου κόμβου πρέπει επίσης να περνά την πολιτική εξερχόμενων URL παρόχων (`OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` / `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS`). |
| `OMNIROUTE_LOCAL_PROVIDER_NODE_HOSTS` | _(κενό)_ | `src/shared/network/localNodeHosts.ts` | Ονόματα host (διαχωρισμένα με κόμμα ή κενά) που η δρομολόγηση provider-node αντιμετωπίζει ως τοπικά — τυπικά το όνομα υπηρεσίας Docker/Compose ενός reranker, TEI ή audio sidecar στο δικό του δίκτυο Docker του OmniRoute (`http://reranker:8080/v1`), ώστε ο κόμβος να μην χρειάζεται μια σταθερά ορισμένη IP container. Τα καταγεγραμμένα hosts είναι επιλέξιμα για τα `/v1/rerank`, `/v1/audio/*` και τον τοπικό έλεγχο υγείας χωρίς να ενεργοποιούνται τα `RERANK_REMOTE_PROVIDER_NODES` / `AUDIO_REMOTE_PROVIDER_NODES` για κάθε απομακρυσμένο κόμβο, και καλούνται απευθείας — ποτέ μέσω `HTTP(S)_PROXY` ή ενός καρφιτσωμένου proxy σύνδεσης. Εξακολουθούν να στέλνουν το API key της σύνδεσης. Γίνονται αποδεκτά μόνο ονόματα ενός μόνο label και ονόματα `.internal`/`.local`· δημόσια FQDN, κυριολεκτικές τιμές IP και ονόματα cloud-metadata αγνοούνται με προειδοποίηση. (#14635) |
| `OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN` | `false` | `src/app/api/auth/login/route.ts` | Όταν το OIDC είναι ενεργοποιημένο, απενεργοποιεί τη σύνδεση με κωδικό πρόσβασης, ώστε οι χρήστες να μπορούν να πιστοποιούνται μόνο μέσω OIDC Single Sign-On. Το σκέτο ψευδώνυμο `OIDC_DISABLE_PASSWORD_LOGIN` γίνεται επίσης αποδεκτό· το Dashboard Feature Flag του ίδιου κλειδιού έχει προτεραιότητα. (#10889) |
| `OIDC_DISABLE_PASSWORD_LOGIN` | `false` | `src/app/api/auth/login/route.ts` | Σκέτο ψευδώνυμο του `OMNIROUTE_OIDC_DISABLE_PASSWORD_LOGIN` (#10889). |
### Λίστα Ελέγχου Hardening
```bash
# Ελάχιστες απαιτήσεις ασφάλειας για παραγωγή:
AUTH_COOKIE_SECURE=true # Απαιτεί HTTPS
REQUIRE_API_KEY=true # Πιστοποίηση όλων των κλήσεων proxy
ALLOW_API_KEY_REVEAL=false # Ποτέ μην εκθέτετε κλειδιά στο UI
CORS_ALLOWED_ORIGINS=https://your.domain.com
MAX_BODY_SIZE_BYTES=5242880 # Όριο 5 MB
```
---
## 5. Εξυγίανση εισόδου & προστασία PII
Το OmniRoute παρέχει άμυνα δύο επιπέδων: σάρωση για επιθέσεις εισαγωγής στην πλευρά του αιτήματος και αφαίρεση PII στην πλευρά της απόκρισης.
> **⚠️ Περιορισμοί:** Αυτοί οι μηχανισμοί προστασίας βασίζονται σε ευρετικούς εντοπισμούς _βέλτιστης προσπάθειας_ και δεν αποτελούν ένα ολοκληρωμένο τείχος προστασίας από επιθέσεις εισαγωγής προτροπών ούτε σύστημα DLP για PII. Μπορούν να παράγουν ψευδώς θετικά αποτελέσματα (επισήμανση αβλαβών προτροπών περσόνας/RPG) και ψευδώς αρνητικά αποτελέσματα (μοτίβα leetspeak, χρήση κενών ή μοτίβα σε άλλες γλώσσες εκτός της αγγλικής). Δεν επαρκούν από μόνα τους για τη διασφάλιση συμμόρφωσης. Ρυθμίστε τις λειτουργίες και δοκιμάστε τις με τη δική σας κίνηση πριν βασιστείτε σε αυτές.
### Πλευρά αιτήματος: Προστασία από εισαγωγή προτροπών
| Μεταβλητή | Προεπιλογή | Αρχείο προέλευσης | Περιγραφή |
| --------------------------------- | -------------------- | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `INPUT_SANITIZER_ENABLED` | `true` | `src/middleware/promptInjectionGuard.ts` | Ενεργοποιεί τη σάρωση των εισερχόμενων μηνυμάτων για μοτίβα εισαγωγής προτροπών. |
| `INPUT_SANITIZER_MODE` | `warn` | `src/middleware/promptInjectionGuard.ts` | Πολιτική εισαγωγής: `warn` = μόνο καταγραφή, `block` = απόρριψη του αιτήματος με 400. Η παλαιότερη επιλογή `redact` **δεν** αφαιρεί το κείμενο εισαγωγής· χρησιμοποιήστε το `PII_REDACTION_ENABLED` για επανεγγραφή των PII του αιτήματος. |
| `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` | Αφαιρεί το έμμεσο περιβάλλον του ενεργού προγράμματος επεξεργασίας (`editorContext`, `activeEditor`, `currentFile`, `selection`, `openTabs`…) από τα αιτήματα `/v1/vscode/[token]/*` και αποκρύπτει το περιεχόμενο ευαίσθητων αρχείων που έχουν επισυναφθεί ρητά. Ασφαλές από προεπιλογή· ορίστε το σε `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 με τους κανόνες χειρισμού payload (προσαρμογές upstream ανά μοντέλο/πρωτόκολλο). |
| `OMNIROUTE_PAYLOAD_RULES_RELOAD_MS` | `5000` | `open-sse/services/payloadRules.ts` | Διάστημα επαναφόρτωσης (ms) για τη δυναμική επαναφόρτωση (hot-reload) του αρχείου κανόνων payload. Ελάχιστο `1000`. |
| `OMNIROUTE_PREFER_CLAUDE_CODE_FOR_UNPREFIXED_CLAUDE_MODELS` | `false` | `open-sse/services/model.ts` | Προαιρετική ενεργοποίηση: δρομολογεί απλά αναγνωριστικά μοντέλων `claude-*` από πελάτες Claude Code μέσω του λογαριασμού Claude Code OAuth, αντί να απαιτεί πρόθεμα παρόχου. Τα ρητά προθέματα παρόχου εξακολουθούν να υπερισχύουν. Ρυθμίζεται επίσης μέσω διακόπτη στον πίνακα ελέγχου, στη σελίδα του παρόχου Claude. |
| `OMNIROUTE_REDACT_THINKING` | `true` | `open-sse/executors/base/redactThinkingBeta.ts` | Ορίστε `false` για να σταματήσει το OmniRoute να προσθέτει το ίδιο το Anthropic beta `redact-thinking-2026-02-12` (κενά thinking blocks μόνο με υπογραφή). Αιτήματα με `thinking.display: "summarized"` το παρακάμπτουν ούτως ή άλλως· ένα redact beta που διαπραγματεύτηκε ο πελάτης ή μια συμβατή με CC προαιρετική ρύθμιση `requestDefaults.redactThinking` το διατηρεί. Τα αιτήματα Claude OAuth διατηρούν το beta (αποτελεί μέρος του αποτυπώματος Claude Code OAuth), εκτός αν είναι ενεργό το εξ ορισμού ανενεργό feature flag `CLAUDE_OAUTH_SUMMARIZED_THINKING_UNREDACTED`. |
| `BARE_MODEL_DEFAULT_OVERRIDE_LEGACY` | `false` | `open-sse/services/model.ts` | Παλαιά συμπεριφορά `resolveBareModelToConnectionDefault` (#4825): αντικαθιστά οποιοδήποτε απλό όνομα μοντέλου με το `defaultModel` της επιλεγμένης σύνδεσης. Απενεργοποιημένη από προεπιλογή· αντικαθίστανται μόνο το `auto` ή ένα κενό μοντέλο· όταν είναι ενεργή, καταγράφει μία προειδοποίηση ανά ζεύγος. |
| `COMBO_CONCURRENCY_PER_MODEL` | `3` | `open-sse/services/comboConfig.ts` | Ανώτατο όριο ταυτόχρονων αιτημάτων ανά μοντέλο για combos round-robin (#9100). Ο σηματοφορέας των round-robin combos ήταν σταθερά περιορισμένος σε 3 ταυτόχρονα αιτήματα ανά μοντέλο χωρίς δυνατότητα παράκαμψης, σειριοποιώντας κίνηση μεγαλύτερης ταυτόχρονης εκτέλεσης πίσω από αυτό το όριο. Επικυρώνεται σε `>= 1`, περιορίζεται σε `<= 32`. |
| `DISABLE_CONTEXT_WINDOW_CHECKS` | `false` | `open-sse/handlers/chatCore.ts` | Επικίνδυνη προαιρετική ενεργοποίηση που παρακάμπτει τον τοπικό έλεγχο παραθύρου περιβάλλοντος / μέγιστων token εισόδου του OmniRoute για απευθείας αιτήματα μεμονωμένου μοντέλου. Οι upstream πάροχοι εξακολουθούν να επιβάλλουν τα πραγματικά τους όρια· η συμπίεση prompt και το όριο token εξόδου του ίδιου του μοντέλου παραμένουν ενεργά. Η ισχύουσα προτεραιότητα είναι: παράκαμψη Feature Flags DB > μεταβλητή περιβάλλοντος > προεπιλογή· δεν απαιτείται επανεκκίνηση. |
| `OMNIROUTE_SELF_HOSTED_PROVIDERS` | _(μη ορισμένο)_ | `open-sse/services/selfHostedEntry.ts` | Ενσωματωμένο YAML έγγραφο `providers:` (RIC-738, D4). Όταν οριστεί (με ή χωρίς μπλοκ `strategy:`), το `/v1/chat/completions` εκτρέπεται προς το self-hosted ενοποιημένο σημείο εισόδου συμβατό με OpenAI, αντί για την cloud pipeline. Όταν δεν έχει οριστεί (η προεπιλογή): η διαδρομή συνεχίζει απευθείας στην υπάρχουσα cloud pipeline. Δείτε `docs/routing/SELF_HOSTED_OPENAI_ENTRY.md`. |
| `OMNIROUTE_SELF_HOSTED_PROVIDERS_FILE` | _(μη ορισμένο)_ | `open-sse/services/selfHostedEntry.ts` | Διαδρομή προς αρχείο YAML που περιέχει το ίδιο έγγραφο `providers:` με το `OMNIROUTE_SELF_HOSTED_PROVIDERS`, για αναπτύξεις που προτιμούν αρχείο αντί για inline μεταβλητή περιβάλλοντος. Οποιοδήποτε από τα δύο ενεργοποιεί το self-hosted σημείο εισόδου. |
| `OMNIROUTE_SELF_HOSTED_API_KEY` | _(μη ορισμένο — ανοικτή διαδρομή)_ | `open-sse/services/selfHostedEntry.ts` | Προαιρετικό κοινόχρηστο κλειδί API για το ενοποιημένο self-hosted σημείο εισόδου (σκαλωσιά D5, δεσμευμένο για το σύστημα ορίων ανά κλειδί). Όταν οριστεί, τα αιτήματα πρέπει να περιλαμβάνουν `Authorization: Bearer `. Όταν δεν έχει οριστεί: η διαδρομή είναι ανοικτή, σύμφωνα με το υπάρχον μοτίβο self-hosted τοπικών παρόχων (ανάπτυξη σε loopback/αξιόπιστο δίκτυο). |
| `OMNIROUTE_SELF_HOSTED_STRATEGY` | _(δεν έχει οριστεί)_ | `open-sse/services/routingStrategies.ts` | Ενσωματωμένο έγγραφο YAML `strategy:` για τη ντετερμινιστική μηχανή δρομολόγησης (M2/RIC-740, D3) — blacklist/whitelist, διακόπτης κυκλώματος με cooldown, προτεραιότητα κατά κόστος, με επίγνωση καθυστέρησης, αλυσίδα fallback. Παρακάμπτει ένα ενσωματωμένο μπλοκ `strategy:` εμφωλευμένο μέσα στο `OMNIROUTE_SELF_HOSTED_PROVIDERS`, ανά κλειδί. Δείτε `docs/routing/DETERMINISTIC_ROUTING.md`. |
| `OMNIROUTE_SELF_HOSTED_STRATEGY_FILE` | _(δεν έχει οριστεί)_ | `open-sse/services/routingStrategies.ts` | Διαδρομή προς ένα αρχείο YAML που περιέχει το ίδιο έγγραφο `strategy:` με το `OMNIROUTE_SELF_HOSTED_STRATEGY`, για αναπτύξεις που προτιμούν ένα αρχείο αντί για ενσωματωμένη μεταβλητή περιβάλλοντος. |
| `OMNIROUTE_DISABLE_CONVERSATION_TRACKING` | _(δεν έχει οριστεί)_ | `open-sse/services/conversationTracker.ts` | Ορίστε `1` για να σταματήσει η συλλογή ιστορικού συνομιλιών. Η `resolveConversationId()` επιστρέφει ένα μη παρακολουθούμενο αποτέλεσμα πριν διαβάσει το SQLite ή αναλύσει το ιστορικό μηνυμάτων, και καλύπτονται επίσης τα session IDs που παρέχονται από τον πελάτη. Ο χειρισμός των συνεδριών δρομολόγησης παραμένει αμετάβλητος και οι υπάρχουσες εγγραφές δεν διαγράφονται. Για αναπτύξεις που δεν χρησιμοποιούν την προβολή συνομιλιών του πίνακα ελέγχου και θέλουν ο πίνακας γύρων να σταματήσει να μεγαλώνει. |
| `OMNIROUTE_NADIR_API_KEY` | _(δεν έχει οριστεί)_ | `open-sse/services/autoCombo/nadirStrategy.ts` | Κλειδί API για την προαιρετική (opt-in) στρατηγική δρομολογητή auto-combo `nadir`, χρησιμοποιείται όταν το `config.nadir.apiKey` του ίδιου του combo δεν έχει οριστεί. Προαιρετικό: οι κλήσεις χωρίς κλειδί καταλήγουν στο ανώνυμο tier του Nadir, το οποίο υπόκειται σε περιορισμό ρυθμού ανά IP και επομένως δεν είναι χρησιμοποιήσιμο πίσω από μια κοινόχρηστη πύλη. Ευαίσθητο· προτιμήστε το πεδίο ανά combo όταν τα combos χρησιμοποιούν διαφορετικούς λογαριασμούς. |
| `OMNIROUTE_NADIR_BASE_URL` | `https://api.getnadir.com` | `open-sse/services/autoCombo/nadirStrategy.ts` | Το βασικό origin του Nadir decision API, χρησιμοποιείται όταν το `config.nadir.baseUrl` του ίδιου του combo δεν έχει οριστεί. Απαιτείται μόνο για αυτο-φιλοξενούμενο (self-hosted) Nadir, το οποίο κρατά τα heads των prompt εντός του δικού σας δικτύου. Ένα τελικό `/v1` γίνεται αποδεκτό και αφαιρείται. |
| `OMNIROUTE_API_KEY_WEEKLY_WINDOW` | `provider` | `src/lib/usage/apiKeyUsageLimits.ts` | Εβδομαδιαίο παράθυρο για τα όρια χρήσης USD ανά κλειδί API (επιβολή αιτημάτων, `GET /api/keys/{id}/usage-limits`, `@@om-usage`). `provider`: η εβδομάδα λήγει στην πρώτη χρονικά εβδομαδιαία επαναφορά μεταξύ των ανάντη συνδέσεων που μπορεί να προσεγγίσει το κλειδί, ή είναι κυλιόμενες 7 ημέρες όταν καμία δεν είναι γνωστή. `calendar`: η τοπική εβδομάδα από Δευτέρα 00:00 έως την επόμενη Δευτέρα 00:00, ίδια για κάθε κλειδί. Το `calendar` συνιστάται όταν μια δεξαμενή ανάντη λογαριασμών μοιράζεται από πολλά κλειδιά με ξεχωριστούς προϋπολογισμούς. Μη έγκυρες τιμές επανέρχονται στο `provider`. |
| `OMNIROUTE_API_KEY_WEEKLY_WINDOW_TIMEZONE` | _(ζώνη ώρας διεργασίας)_ | `src/lib/usage/apiKeyUsageLimits.ts` | Ζώνη ώρας IANA (για παράδειγμα `Asia/Shanghai`) που ορίζει τη Δευτέρα 00:00 για το εβδομαδιαίο παράθυρο `calendar`. Χωρίς ορισμό ή μη έγκυρη: η ζώνη ώρας της διεργασίας OmniRoute (το `TZ` του κεντρικού υπολογιστή ή του container, το οποίο συχνά δεν έχει οριστεί, δηλαδή είναι Συντονισμένη Παγκόσμια Ώρα, στις εικόνες container). Αγνοείται σε λειτουργία `provider`. |
| `OMNIROUTE_MAX_TOOLS_LIMIT` | `128` | `open-sse/config/constants.ts` | Προεπιλεγμένος μέγιστος αριθμός εργαλείων που επιτρέπονται σε ένα αίτημα (προεπιλογή OpenAI). Μόνο θετικοί ακέραιοι· τιμές χωρίς ορισμό ή μη έγκυρες διατηρούν το `128`. Ένας πάροχος με γνωστό/προληπτικό όριο (`grok-cli` 200, `nvidia` 1536) εξακολουθεί να εφαρμόζει το δικό του ανώτατο όριο — αυτό μετακινεί μόνο το προεπιλεγμένο ταβάνι. |
| `OMNIROUTE_PROMPT_EMULATE_TOOLS` | _(ενεργό)_ | `open-sse/executors/syntxChat.ts` | Κλήση εργαλείων SYNTX.ai με εξομοίωση μέσω prompt: χωρίς ορισμό ή με `1`/`true`/`on`/`yes` εισάγεται ο τοπικός κατάλογος εργαλείων στο prompt· οποιαδήποτε άλλη τιμή (π.χ. `0`) παραλείπει αυτή την εισαγωγή. |
---
## 7. URL & Συγχρονισμός στο cloud
| Μεταβλητή | Προεπιλογή | Αρχείο προέλευσης | Περιγραφή |
| ------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `BASE_URL` | `http://localhost:20128` | `src/lib/cloudSync.ts` | URL στην πλευρά του διακομιστή, ώστε οι εσωτερικές εργασίες συγχρονισμού να καλούν το `/api/sync/cloud`. Διατηρήστε το ως URL loopback/container, ακόμη και όταν η εφαρμογή προωθείται δημόσια μέσω διακομιστή μεσολάβησης. |
| `CLOUD_URL` | _(κενό)_ | `src/lib/cloudSync.ts` | URL τελικού σημείου αναμετάδοσης cloud (λειτουργία premium). |
| `CLOUD_SYNC_TIMEOUT_MS` | `12000` | `src/lib/cloudSync.ts` | Χρονικό όριο HTTP για αιτήματα συγχρονισμού στο cloud. |
| `OMNIROUTE_BUILD_PROFILE` | `full` | Ρύθμιση build του Webpack | Προφίλ κατά τον χρόνο του build (ορίστε το σε `minimal` για να εξαιρέσετε φυσικά τα προνομιακά modules από το bundle). |
| `OMNIROUTE_STANDALONE_DIR` | _.build/ αυτόνομη έξοδος_ | `scripts/build/colocate-standalone.mjs` | Παράκαμψη κατά τον χρόνο του build για τον κατάλογο αυτόνομης εξόδου που χρησιμοποιείται από το βήμα συστέγασης μετά το build. Δεν αποτελεί ρύθμιση χρόνου εκτέλεσης. |
| `OMNIROUTE_CLOUD_SYNC_SECRET` | _(κενό)_ | `src/lib/cloudSync.ts` | Κοινόχρηστο μυστικό που χρησιμοποιείται για την επαλήθευση της υπογραφής HMAC-SHA256 των αποκρίσεων συγχρονισμού στο cloud. |
| `OMNIROUTE_CLOUD_SYNC_SECRETS` | `false` | `src/lib/cloudSync.ts` | Ορίστε το σε `true` ώστε να επιτρέπεται στο τελικό σημείο συγχρονισμού στο cloud να αντικαθιστά τα τοπικά διαπιστευτήρια. Η προεπιλογή είναι `false`. |
| `OMNIROUTE_CLOUD_SYNC_ENFORCE_SIGNATURE` | `false` | `src/lib/cloudSync.ts` | Ορίστε το σε `true` για να απορρίπτεται μια ανυπόγραφη απόκριση συγχρονισμού στο cloud όταν δεν έχει ρυθμιστεί τοπικό μυστικό (#13679). Μια υπογραφή που υπάρχει επαληθεύεται πάντα — και απορρίπτεται πάντα όταν το `OMNIROUTE_CLOUD_SYNC_SECRET` δεν έχει οριστεί — ανεξάρτητα από αυτήν τη σημαία. Η προεπιλογή αλλάζει σε υποχρεωτική επιβολή στην v3.9. |
| `OMNIROUTE_ZED_IMPORT_LEGACY_ONE_STEP` | `false` | `src/app/api/providers/zed/import/route.ts` | Ορίστε το σε `true` για επιστροφή στη συμπεριφορά ενός βήματος «εισαγωγή όλων» της v3.8.5 χωρίς επιβεβαίωση από τον χρήστη. |
| `NEXT_PUBLIC_BASE_URL` | `http://localhost:20128` | OAuth, Πίνακας ελέγχου, συγχρονισμός | URL δημόσιας πρόσβασης για το OAuth redirect_uri, τους συνδέσμους του Πίνακα ελέγχου και τα δημιουργημένα δημόσια URL. Ορίστε το στο σταθερό δημόσιο URL όταν οι επανακλήσεις OAuth ή οι δημιουργημένοι σύνδεσμοι προγράμματος περιήγησης πρέπει να χρησιμοποιούν έναν κανονικό host αντίστροφου διακομιστή μεσολάβησης. |
| `NEXT_PUBLIC_CLOUD_URL` | _(κενό)_ | Πλευρά πελάτη | Αντίγραφο του `CLOUD_URL` στην πλευρά του πελάτη. |
| `NEXT_PUBLIC_APP_URL` | _(δεν έχει οριστεί)_ | `src/shared/services/cloudSyncScheduler.ts` | Παρωχημένη εφεδρική επιλογή για το `NEXT_PUBLIC_BASE_URL`. |
| `NEXT_PUBLIC_PORT` | _(δεν έχει οριστεί — χρησιμοποιείται εναλλακτικά το `PORT`)_ | `src/shared/hooks/useDisplayBaseUrl.ts` | Εφεδρική θύρα στην πλευρά του πελάτη για URL εμφάνισης όταν δεν είναι γνωστή η προέλευση (SSR/δοκιμές)· διαβάζεται πριν από το `PORT`. |
| `OMNIROUTE_PUBLIC_BASE_URL` | _(δεν έχει οριστεί)_ | Επίλυση δημόσιας προέλευσης, URL εικόνων | Η προέλευση OmniRoute με την υψηλότερη προτεραιότητα που προορίζεται για το πρόγραμμα περιήγησης και χρησιμοποιείται για τη δημιουργία δημόσιων URL και την επικύρωση της προέλευσης του προγράμματος περιήγησης εκτός του πίνακα ελέγχου. Ορίστε το όταν το OpenWebUI ή κάποιος άλλος αναμεταδότης προσπελαύνει το OmniRoute μέσω εσωτερικού URL, αλλά το πρόγραμμα περιήγησης του χρήστη πρέπει να ανακτήσει τα παραγόμενα πολυμέσα από προέλευση LAN, σήραγγας ή δημόσια προέλευση. **Μην** συμπεριλάβετε το `/v1`. |
| `OMNIROUTE_PROVIDER_MANIFEST_URL` | _(δεν έχει οριστεί)_ | `open-sse/config/providerPluginManifestUrl.ts` | Απόλυτο URL δηλωτικού προσθέτου παρόχου που γνωστοποιείται στους πελάτες sidecar. Όταν δεν έχει οριστεί, το OmniRoute παράγει το `/api/v1/provider-plugin-manifest` από την προέλευση του αιτήματος ή τα HOST/PORT. |
| `OMNIROUTE_PUBLIC_PROTOCOL` | `http` | `open-sse/config/providerPluginManifestUrl.ts` | Πρωτόκολλο που χρησιμοποιείται κατά την παραγωγή του URL δηλωτικού προσθέτου παρόχου από τα HOST/PORT χωρίς προέλευση αιτήματος. Ορίστε το σε `https` πίσω από έναν δημόσιο διακομιστή μεσολάβησης που τερματίζει το TLS, όταν δεν έχει οριστεί ρητά το `OMNIROUTE_PROVIDER_MANIFEST_URL`. |
| `OMNIROUTE_TRUST_PROXY` | _(δεν έχει οριστεί)_ | `src/server/origin/publicOrigin.ts` | Προαιρετική λειτουργία εμπιστοσύνης για τις προωθημένες κεφαλίδες δημόσιας προέλευσης. Χωρίς ορισμένη τιμή = να μην θεωρούνται αξιόπιστες οι `Forwarded` / `X-Forwarded-*` για αποφάσεις ασφαλείας. Οι τιμές `true` / `loopback` θεωρούν αξιόπιστα το προωθημένο host/proto μόνο από διακομιστή μεσολάβησης loopback με σήμανση token. Οι τιμές `private` / `lan` θεωρούν επίσης αξιόπιστους τους ομότιμους διακομιστές μεσολάβησης ιδιωτικού LAN και επιτρέπουν στη γέφυρα `API_PORT` να διατηρεί το `X-Forwarded-For` ενός τέτοιου ομότιμου. Σε περιβάλλον παραγωγής, προτιμήστε ένα ρητό `NEXT_PUBLIC_BASE_URL`. |
| `KIE_CALLBACK_URL` | _(δεν έχει οριστεί)_ | `open-sse/utils/kieTask.ts` | Δημόσιο URL επανάκλησης για ασύγχρονες εργασίες kie.ai. Παράκαμψη υψηλότερης προτεραιότητας πριν από τα `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_CLINEPASS_USAGE_URL` | `https://api.cline.bot/api/v1/users/me/plan/usage-limits` | `open-sse/services/usage/clinepass.ts` | Τελικό σημείο ορίου χρήσης 5 ωρών / εβδομάδας / μήνα του ClinePass που χρησιμοποιείται από τη σελίδα Χρήσης. Παρακάμψτε το για αναμεταδότες / δοκιμαστικά δεδομένα. |
| `OMNIROUTE_OPENCODE_QUOTA_URL` | `https://opencode.ai/zen/go/v1/usage` | `open-sse/services/opencodeQuotaFetcher.ts` | Επίσημο τελικό σημείο χρήσης OpenCode Go με έλεγχο ταυτότητας μέσω κλειδιού API, το οποίο χρησιμοποιείται από τη σελίδα Χρήσης. Παρακάμψτε το για αναμεταδότες / δοκιμαστικά δεδομένα. |
| `OPENCODE_SYNTHESIZE_CLI_HEADERS` | `true` | `open-sse/executors/opencode.ts` | Συνθέτει κεφαλίδες ταυτότητας του OpenCode CLI (User-Agent, x-opencode-client/project, UUID αιτήματος/συνεδρίας) σε αιτήματα opencode-go/zen προς upstream υπηρεσίες, όταν ο πελάτης δεν τις έστειλε, ώστε το Cloudflare να τα αποδέχεται κατά την έξοδο από VPS (#6210/#5997). Ενεργοποιημένο από προεπιλογή από το #10571· απενεργοποιήστε το με `false`/`0`/`no`/`off`. |
| `OPENCODE_USER_AGENT` | `opencode/1.18.31` | `open-sse/utils/opencodeHeaders.ts` | Προεπιλεγμένο User-Agent που χρησιμοποιείται όταν το `OPENCODE_SYNTHESIZE_CLI_HEADERS` είναι ενεργοποιημένο και δεν έχει οριστεί παράκαμψη `_USER_AGENT` ανά πάροχο. Εφαρμόζεται μόνο σε εκτελεστές opencode. Σε ένα αίτημα χωρίς κλειδί που υπόκειται σε περιορισμούς από την υπηρεσία ανάντη, μια διαμορφωμένη τιμή που δεν περιέχει `opencode/= 1.17>` αντικαθίσταται από αυτήν την προεπιλογή αντί να απορρίπτεται. |
| `OMNIROUTE_FORWARD_ATTRIBUTION` | `1` (ενεργό) | `open-sse/utils/opencodeHeaders.ts` | Προωθεί τις κεφαλίδες απόδοσης της εφαρμογής-πελάτη (`x-session-id`, `x-title`, `http-referer`) στους παρόχους ανάντη, ώστε ένα αίτημα που ξεκινά μέσα σε ένα από τα αναφερόμενα περιβάλλοντα εκτέλεσης να διατηρεί την ταυτότητά του μέσω του δρομολογητή (οι περιορισμοί εκδοτών του OpenRouter βασίζονται σε αυτές). Τα `0`/`false`/`no`/`off` διατηρούν την ταυτότητα του μητρώου/διαχειριστή και απορρίπτουν τις τιμές που παρέχονται από τον πελάτη. Οι προσαρμοσμένες κεφαλίδες που έχουν διαμορφωθεί από τον διαχειριστή υπερισχύουν πάντα των τιμών του πελάτη. |
| `OPENCODE_CLIENT` | `desktop` | `open-sse/executors/opencode.ts` | Τιμή για τη συντεθειμένη κεφαλίδα `x-opencode-client` όταν το `OPENCODE_SYNTHESIZE_CLI_HEADERS` είναι ενεργοποιημένο. |
| `OPENCODE_PROJECT` | `global` | `open-sse/executors/opencode.ts` | Τιμή για τη συντεθειμένη κεφαλίδα `x-opencode-project` όταν το `OPENCODE_SYNTHESIZE_CLI_HEADERS` είναι ενεργοποιημένο. |
| `OMNIROUTE_EGRESS_IP_LOCK_PROVIDERS` | _(δεν έχει οριστεί)_ | `open-sse/config/providerErrorRules.ts` | Ενεργό σύνολο παρόχων των οποίων οι αποτυχίες ανάντη ομαδοποιούνται βάσει IP εξόδου (ένα 429 θέτει σε αναμονή κάθε συγγενική σύνδεση που μοιράζεται την ίδια IP). Αν δεν οριστεί, χρησιμοποιείται η προεπιλογή του δωρεάν επιπέδου `opencode,opencode-go,opencode-cli`· τα `none`/`off`/`false`/`0` απενεργοποιούν πλήρως τη διαδοχική επίδραση· μια λίστα διαχωρισμένη με κόμματα αντικαθιστά το σύνολο. Τα επί πληρωμή πλάνα ομαδοποιούνται ανάντη ανά λογαριασμό και μπορούν να το απενεργοποιήσουν με ασφάλεια (#9611). |
| `OMNIROUTE_EGRESS_QUOTA_ROTATION_PROVIDERS` | _(δεν έχει οριστεί)_ | `open-sse/config/providerErrorRules.ts` | Πεδίο εφαρμογής εναλλαγής εξόδου σε περίπτωση άρνησης λόγω ορίου χρήσης. Αν δεν οριστεί, παραμερίζει ένα μέλος του συνόλου σε περίπτωση 429 μόνο για την παραπάνω οικογένεια που ομαδοποιείται βάσει IP· το `all` επεκτείνει αυτήν την εγγραφή σε κάθε πάροχο, ώστε ένας περιορισμός ρυθμού που λαμβάνεται μέσω ενός μέλους να οδηγεί την επόμενη επιλογή σε διαφορετική έξοδο. Οποιαδήποτε τιμή εκτός από `all` αγνοείται. Απαιτεί το `PROXY_SKIP_RECENTLY_FAILED` (ενεργοποιημένο από προεπιλογή). Το αποθετήριο έχει ως κλειδί τη διεύθυνση εξόδου και όχι το ζεύγος (πάροχος, διεύθυνση), επομένως ένα διευρυμένο 429 θέτει αυτό το μέλος σε αναμονή για κάθε πάροχο μέχρι να παρέλθει η περίοδος (5 λεπτά, με διπλασιασμό στα 15). Διαβάζεται ανά αποτέλεσμα απόκρισης, επομένως μια αλλαγή εφαρμόζεται χωρίς επανεκκίνηση. |
| `OPENCODE_FREE_TIER_REQUEST_CONTRACT` | _(δεν έχει οριστεί)_ | `open-sse/executors/opencodeFreeTierContract.ts` | Ορίστε το σε `off` για να διακοπεί η προσαρμογή του σώματος των αιτημάτων OpenCode χωρίς κλειδί (σημαία ροής και λίστα εργαλείων). Οι κεφαλίδες εξακολουθούν να εφαρμόζονται. Διαβάζεται ανά αίτημα, επομένως μια αλλαγή τίθεται σε ισχύ αμέσως. |
| `OPENCODE_FREE_TIER_PLACEHOLDER_TOOLS` | _(δεν έχει οριστεί)_ | `open-sse/executors/opencodeFreeTierContract.ts` | Ονόματα εργαλείων διαχωρισμένα με κόμματα, τα οποία θα δηλώνονται σε ένα αίτημα OpenCode χωρίς κλειδί που δεν περιέχει κανένα εργαλείο, όταν δεν έχει παρατηρηθεί ακόμη τίποτα για το συγκεκριμένο μοντέλο. Αν είναι κενό, χρησιμοποιείται ως εφεδρεία ένα μοναδικό σύμβολο κράτησης θέσης, για το οποίο το μοντέλο λαμβάνει οδηγία να μην το καλέσει. Έως 32 καταχωρίσεις, `[A-Za-z_][A-Za-z0-9_-]{0,63}`· οι μη έγκυρες καταχωρίσεις αγνοούνται. |
| `OMNIROUTE_OLLAMA_CLOUD_USAGE_URL` | `https://ollama.com/settings` | `open-sse/services/usage.ts` | URL ρυθμίσεων του Ollama Cloud που χρησιμοποιείται για την εξαγωγή δεδομένων ορίου χρήσης. Παρακάμψτε την για αναμεταδότες / δοκιμαστικά δεδομένα. |
| `OMNIROUTE_OLLAMA_CLOUD_BALANCE_URL` | `https://ollama.com/api/balance` | `open-sse/services/ollamaCloudBalance.ts` | Τεκμηριωμένο τελικό σημείο υπολοίπου ανάντη του Ollama Cloud (`GET https://ollama.com/api/balance`, `Authorization: Bearer `). Διαβάζεται μία φορά κατά τη φόρτωση της μονάδας. Χρησιμοποιείται πρώτο για το όριο χρήσης του Ollama Cloud όταν η σύνδεση διαθέτει κλειδί API· η εξαγωγή δεδομένων μέσω cookie από τη σελίδα ρυθμίσεων παραμένει ως εφεδρική επιλογή. Παρακάμψτε την για αναμεταδότες / δοκιμαστικά δεδομένα. |
| `OLLAMA_USAGE_COOKIE` | _(δεν έχει οριστεί)_ | `open-sse/services/usage.ts` | Cookie `__Secure-session` του Ollama Cloud που χρησιμοποιείται για την εξαγωγή δεδομένων ορίου χρήσης από τη σελίδα ρυθμίσεων. Ευαίσθητο· προτιμήστε το πεδίο του Dashboard ανά σύνδεση όταν έχουν διαμορφωθεί πολλοί λογαριασμοί. |
| `OLLAMA_CLOUD_USAGE_COOKIE` | _(δεν έχει οριστεί)_ | `open-sse/services/usage.ts` | Εναλλακτική μεταβλητή περιβάλλοντος για το cookie `__Secure-session` του Ollama Cloud. Ευαίσθητο· προτιμήστε το πεδίο του Dashboard ανά σύνδεση όταν έχουν διαμορφωθεί πολλοί λογαριασμοί. |
| `OMNIROUTE_OLLAMA_USAGE_COOKIE` | _(δεν έχει οριστεί)_ | `open-sse/services/usage.ts` | Εναλλακτική μεταβλητή περιβάλλοντος για το cookie `__Secure-session` του Ollama Cloud, η οποία χρησιμοποιείται πριν από τα συντομότερα ψευδώνυμα. Ευαίσθητο δεδομένο· προτιμήστε το πεδίο του Dashboard ανά σύνδεση όταν έχουν διαμορφωθεί πολλοί λογαριασμοί. |
| `OMNIROUTE_CODEWHISPERER_BASE_URL` | `https://codewhisperer.us-east-1.amazonaws.com` | `open-sse/services/usage.ts` | Τερματικό σημείο ορίων χρήσης του CodeWhisperer (AWS Kiro). Παρακάμψτε το για αναμεταδότες / δοκιμαστικά fixtures. |
> [!IMPORTANT]
> Κατά την ανάπτυξη πίσω από αντίστροφο διακομιστή μεσολάβησης (nginx, Caddy), ορίστε το `NEXT_PUBLIC_BASE_URL` στη σταθερή δημόσια διεύθυνση URL σας (π.χ. `https://omniroute.example.com`) όταν οι επανακλήσεις OAuth ή οι παραγόμενοι δημόσιοι σύνδεσμοι πρέπει να χρησιμοποιούν αυτό το όνομα κεντρικού υπολογιστή. Χωρίς αυτό, οι επανακλήσεις OAuth μπορεί να αποτύχουν επειδή το redirect_uri δεν θα αντιστοιχεί και οι παραγόμενοι δημόσιοι σύνδεσμοι μπορεί να παραπέμπουν στην εσωτερική προέλευση του κοντέινερ.
>
> Διατηρήστε το `BASE_URL` ως εσωτερική διεύθυνση URL βρόχου επιστροφής/κοντέινερ για εργασίες μεταξύ διακομιστών. Μην χρησιμοποιείτε ένα `Origin` προγράμματος περιήγησης ή δημόσιο όνομα κεντρικού υπολογιστή για εσωτερικές αυτοανακτήσεις που περιλαμβάνουν διαπιστευτήρια.
>
> Οι πιστοποιημένες εγγραφές του dashboard δεν απαιτούν στατική δημόσια βασική διεύθυνση URL: το dashboard αποστέλλει μη ασφαλή αιτήματα ίδιας προέλευσης με ένα διακριτικό CSRF δεσμευμένο στην περίοδο λειτουργίας. Το OmniRoute εξακολουθεί να συγκεντρώνει την επικύρωση δημόσιας προέλευσης για ενσωματώσεις προγράμματος περιήγησης εκτός dashboard: πρώτα θεωρούνται αξιόπιστες οι ρητές μεταβλητές περιβάλλοντος δημόσιας διεύθυνσης URL· οι ανεπεξέργαστες κεφαλίδες `Forwarded` / `X-Forwarded-*` αγνοούνται, εκτός εάν είναι ενεργοποιημένο το `OMNIROUTE_TRUST_PROXY` και ο άμεσος ομότιμος διακομιστής μεσολάβησης φέρει διακριτικό που τον χαρακτηρίζει ως αξιόπιστο. Μην χρησιμοποιείτε ρυθμίσεις CORS για να διορθώσετε αιτήματα ίδιας προέλευσης του dashboard· το CORS προορίζεται μόνο για πελάτες προγράμματος περιήγησης διαφορετικής προέλευσης.
---
## 8. Εξερχόμενη Μεσολάβηση (Outbound Proxy)
Δρομολογήστε τις κλήσεις προς τους ανάντη παρόχους LLM μέσω ενός διακομιστή μεσολάβησης HTTP ή SOCKS5 για έλεγχο εξερχόμενης κίνησης, γεωγραφική δρομολόγηση ή απόκρυψη διεύθυνσης IP.
Η μεταβλητή `OMNIROUTE_UPSTREAM_HTTP2_ENABLED` έχει προεπιλεγμένη τιμή `true`. Ορίστε την σε `false`, `0`, `no` ή
`off` για να επιβάλετε HTTP/1.1 στους dispatchers του Undici στα αρχεία
`open-sse/utils/proxyDispatcher.ts` και `open-sse/utils/proxyFetch.ts`: άμεση εξερχόμενη κίνηση, διακομιστές μεσολάβησης HTTP(S)/SOCKS, αναμεταδότες (relays) και
τις επαναλήψεις τους με νέα υποδοχή (fresh socket). Αυτό διατηρεί την επαλήθευση πιστοποιητικών TLS, τον έλεγχο ταυτότητας διακομιστή μεσολάβησης, τα όρια συνδέσεων και τις ρυθμίσεις keep-alive. Επανεκκινήστε το OmniRoute μετά την αλλαγή της, επειδή οι dispatchers αποθηκεύονται στην προσωρινή μνήμη (cache) και οι agents των αναμεταδοτών δημιουργούνται κατά την εκκίνηση.
Ο διακόπτης δεν ελέγχει το wreq TLS fingerprinting ούτε τα ειδικά ανά πάροχο transports.
| Μεταβλητή | Προεπιλογή | Αρχείο πηγής | Περιγραφή |
| ---------------------------------------- | --------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `ENABLE_SOCKS5_PROXY` | `true` | `open-sse/executors` | Ενεργοποιεί τον agent proxy SOCKS5 για κλήσεις upstream. Απενεργοποίηση με `false`. |
| `NEXT_PUBLIC_ENABLE_SOCKS5_PROXY` | `true` | Πλευρά πελάτη | Επίγνωση της διαθεσιμότητας SOCKS5 στην πλευρά του πελάτη. |
| `PROXY_SKIP_RECENTLY_FAILED` | `true` | `src/shared/utils/featureFlags.ts` | Feature flag ενεργό από προεπιλογή (βλ. [FEATURE_FLAGS.md](./FEATURE_FLAGS.md)· υπερισχύει μια παράκαμψη από τη βάση δεδομένων του dashboard). Τα pool proxy και η εναλλαγή ανά λογαριασμό σταματούν να εξυπηρετούν εκ νέου ένα μέλος που μόλις απέτυχε (απορριφθείσα διερεύνηση TCP, ή 429 μέσω αυτού) για μια περίοδο που διπλασιάζεται σε κάθε επανάληψη, έως ένα ανώτατο όριο. Το `false` επαναφέρει την απλή επιλογή. |
| `SELECTOR_CONTROL_ALLOWLIST` | _(μη ορισμένο)_ | `src/lib/proxySubscription/selectorGuard.ts` | Λίστα επιτρεπόμενων για στόχους selector-control τοπικού πυρήνα πέρα από το loopback (hosts ή IP διαχωρισμένα με κόμμα/κενό, το `*` ανοίγει το LAN/private αλλά ποτέ metadata/link-local). Το loopback μέσω http/https επιτρέπεται από προεπιλογή. Μια τιμή από τη βάση δεδομένων του dashboard υπερισχύει αυτής της μεταβλητής όταν είναι ορισμένη και μη κενή. |
| `PROXY_QUOTA_429_BASE_MS` | `300000` | `open-sse/utils/proxyRefusalMemory.ts` | Βασική περίοδος (ms) του προσωρινού αποκλεισμού λόγω 429, που διπλασιάζεται σε κάθε επανάληψη. Διαβάζεται μία φορά κατά την εκκίνηση. Περιορίζεται στο `1000..3600000`· τιμή εκτός εύρους ή μη αναγνώσιμη επαναφέρει την προεπιλογή με προειδοποίηση. |
| `PROXY_QUOTA_429_MAX_MS` | `900000` | `open-sse/utils/proxyRefusalMemory.ts` | Ανώτατο όριο (ms) του προσωρινού αποκλεισμού λόγω 429. Διαβάζεται μία φορά κατά την εκκίνηση. Περιορίζεται στο `1000..3600000`· τιμή εκτός εύρους ή μη αναγνώσιμη επαναφέρει την προεπιλογή με προειδοποίηση. Όταν το ανώτατο όριο είναι χαμηλότερο από τη βάση, επαναφέρεται η προεπιλογή. Η μείωση του ανώτατου ορίου συντομεύει επίσης τη λήθη του σερί: οι εγγραφές διαγράφονται `2 x max` μετά τη λήξη. |
| `PROXY_POOL_SHARED_EGRESS_ORDER` | `false` | `src/shared/utils/featureFlags.ts` | Feature flag με ρητή ενεργοποίηση (βλ. [FEATURE_FLAGS.md](./FEATURE_FLAGS.md)· υπερισχύει μια παράκαμψη από τη βάση δεδομένων του dashboard). Για παρόχους των οποίων το quota ομαδοποιείται κατά διεύθυνση εξόδου, κατατάσσει ένα μέλος του pool που μοιράζεται την παρατηρούμενη διεύθυνση εξόδου ενός πρόσφατα απορριφθέντος μέλους ακριβώς κάτω από τα υγιή μέλη. Επηρεάζει μόνο τη σειρά, δεν αποκλείει ποτέ. Απαιτεί το `PROXY_SKIP_RECENTLY_FAILED`, το οποίο παράγει το σήμα απόρριψης που διαβάζει. |
| `PROXY_WEBHOOK_REBOUND_MS` | `300000` | `src/lib/proxyEvents/proxyTransitionBridge.ts` | Παράθυρο rebound (ms) που περιορίζει τις επαναλαμβανόμενες ειδοποιήσεις webhook `proxy.set_aside` ανά μέλος του pool, ώστε μια ριπή απορρίψεων να στέλνει ένα μόνο συμβάν. Διαβάζεται σε κάθε εκπομπή. Περιορίζεται στο `1000..3600000`· τιμή εκτός εύρους ή μη αναγνώσιμη επαναφέρει σιωπηλά την προεπιλογή. |
| `HTTP_PROXY` | _(μη ορισμένο)_ | Πρότυπο Node.js | HTTP proxy για κλήσεις upstream. |
| `HTTPS_PROXY` | _(μη ορισμένο)_ | Πρότυπο Node.js | HTTPS proxy για κλήσεις upstream. |
| `ALL_PROXY` | _(μη ορισμένο)_ | Πρότυπο Node.js | Καθολικό proxy (υποστηρίζει `socks5://`). |
| `OMNIROUTE_PROXY_ECHO_URL` | _(unset)_ | `src/lib/proxyEchoTarget.ts` | Καρφιτσώνει τον στόχο echo-IP που χρησιμοποιείται από τους ελέγχους εξερχόμενης κυκλοφορίας (egress) του proxy σε ένα μόνο URL. Όταν δεν έχει οριστεί, ο έλεγχος δοκιμάζει το `api64.ipify.org` και μετά το `api4.ipify.org`, ώστε οι σήραγγες μόνο για IPv4 να μην αναφέρονται ως νεκρές (#9694). |
| `NO_PROXY` | _(unset)_ | Πρότυπο του Node.js | Ονόματα host/IPs διαχωρισμένα με κόμμα για παράκαμψη του proxy. |
| `OMNIROUTE_PROXY_DISPATCHER_CONNECTIONS` | `32` | `open-sse/utils/proxyDispatcher.ts` | Μέγιστος αριθμός ταυτόχρονων sockets ανά αποθηκευμένο στην cache dispatcher HTTP/SOCKS proxy. Οι μακρόβιες ροές SSE όπως το Codex `/v1/responses` χρειάζονται περισσότερες από μία συνδέσεις όταν πολλά αιτήματα μοιράζονται το ίδιο proxy σε επίπεδο λογαριασμού. Οι τιμές πάνω από `256` περιορίζονται. |
| `SOCKS_HANDSHAKE_TIMEOUT_MS` | `10000` | `open-sse/utils/socksConnectorWithFamily.ts` | Χρονικό όριο του handshake SOCKS5 (σύνδεσης) σε ms. Αυξήστε το όταν ένας μεμονωμένος host οικιακής πύλης δέχεται υψηλή ταυτόχρονη φόρτωση (π.χ. 100 ταυτόχρονα αιτήματα) — το πραγματικό handshake μπορεί να ξεπεράσει τα 10s σε κορεσμένο pool ακόμη κι αν το proxy είναι προσβάσιμο, κάτι που διαφορετικά εμφανίζεται ως ψευδές `[Proxy Fast-Fail] Proxy unreachable`. Περιορίζεται στα `120000`. |
| `PROXY_FAIL_OPEN` | `false` | `src/sse/handlers/chatHelpers.ts` | Όταν είναι `false` (προεπιλογή), ένα αίτημα του οποίου το εκχωρημένο proxy αποτυγχάνει να επιλυθεί **απορρίπτεται (fail-closed)** αντί να υποχωρεί σε απευθείας σύνδεση — αποτρέπει διαρροές της πραγματικής IP. Ορίστε `true` για να επαναφέρετε την παλιά εναλλακτική συμπεριφορά DIRECT. |
| `ENABLE_TLS_FINGERPRINT` | `false` | `open-sse/executors` | Πλαστογράφηση του αποτυπώματος TLS με χρήση wreq-js (μιμείται τον Chrome 124). Αντιμετωπίζει τον αποκλεισμό JA3/JA4. |
| `TLS_FINGERPRINT_PROVIDERS` | _(unset)_ | `open-sse/utils/proxyFetch.ts` | Λίστα επιτρεπόμενων παρόχων διαχωρισμένη με κόμμα για τη νέα δρομολόγηση TLS μέσω proxy (`open-sse/utils/proxyFetch.ts`). Το απευθείας TLS διατηρεί την παλιά του συμπεριφορά όταν δεν έχει οριστεί· μόνο αυτοί οι πάροχοι δρομολογούνται μέσω της γέφυρας αποτυπώματος Chrome 124. Το Groq (`api.groq.com`) εξαιρείται ακόμη κι όταν η λίστα επιτρεπόμενων δεν έχει οριστεί, επειδή το JA3 του Chrome προκαλεί Cloudflare 1010, ενώ το εγγενές undici φτάνει στο API. |
| `OMNIROUTE_TURNSTILE_IGNORE_TLS_ERRORS` | `false` | `open-sse/services/claudeTurnstileSolver.ts` | Επιτρέπει στο περιβάλλον προγράμματος περιήγησης Playwright του Claude Turnstile να αγνοεί σφάλματα πιστοποιητικών HTTPS. |
### Σενάρια
| Σενάριο | Διαμόρφωση |
| --------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **SOCKS5 μέσω σήραγγας SSH** | `ALL_PROXY=socks5://127.0.0.1:7890`, `ENABLE_SOCKS5_PROXY=true` |
| **Εταιρικό HTTP proxy** | `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 είναι μη διαθέσιμο, αντί να διαρρέουν μέσω απευθείας σύνδεσης. |
| **Παλαιό / ανάπτυξη — επίτρεψη απευθείας εναλλακτικής** | `PROXY_FAIL_OPEN=true`. Επαναφέρει τη συμπεριφορά πριν από την ενίσχυση της ασφάλειας: χρησιμοποιείται απευθείας σύνδεση όταν η επίλυση του proxy αποτυγχάνει. |
> **Σημείωση (παράκαμψη επικύρωσης NVIDIA — #3226):** Το endpoint επικύρωσης κλειδιού API της NVIDIA
> κολλάει όταν δρομολογείται μέσω του καθολικού fetch με proxy/TLS patch (undici dispatcher → 504).
> Η `src/lib/providers/validation.ts::directHttpsRequest()` παρακάμπτει σκόπιμα το
> patch του proxy για αυτή τη μία κλήση επικύρωσης χρησιμοποιώντας `safeOutboundFetch({ bypassProxyPatch: true })`.
> Πρόκειται για τεκμηριωμένη εξαίρεση περιορισμένης εμβέλειας — **δεν** επηρεάζει την εξερχόμενη κυκλοφορία chat/χρήσης.
> Η παράκαμψη είναι καρφιτσωμένη ως προς την εμβέλειά της από το `tests/unit/proxy-bypass-scope-guard-3226.test.ts`.
---
## 9. Ενσωμάτωση Εργαλείων CLI
Ελέγχει τον τρόπο με τον οποίο το OmniRoute ανακαλύπτει και εκκινεί sidecars CLI (Claude Code, Codex, κ.λπ.).
| Μεταβλητή | Προεπιλογή | Αρχείο πηγαίου κώδικα | Περιγραφή |
| --------------------------------- | -------------------------------- | --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CLI_MODE` | `auto` | `src/shared/services/cliRuntime.ts` | `auto` = αναζήτηση στο PATH του συστήματος· `manual` = χρήση μόνο ρητά καθορισμένων διαδρομών. |
| `CLI_EXTRA_PATHS` | _(μη ορισμένη)_ | `src/shared/services/cliRuntime.ts` | Πρόσθετες καταχωρίσεις PATH για τον εντοπισμό εκτελέσιμων CLI (διαχωρισμένες με άνω-κάτω τελεία). |
| `CLI_CONFIG_HOME` | _(μη ορισμένη)_ | `src/shared/services/cliRuntime.ts` | Παράκαμψη του αρχικού καταλόγου (home) για την ανάγνωση ρυθμίσεων CLI (`~/.claude`, `~/.codex`). Πρέπει να είναι απόλυτη διαδρομή και εντός του home της διεργασίας — **ή**, σε container, μια διαδρομή bind-mounted (έτσι λειτουργεί το `/host-home`). Οτιδήποτε άλλο επιστρέφει στον αρχικό κατάλογο. |
| `CLI_ALLOW_CONFIG_WRITES` | `true` | `src/shared/services/cliRuntime.ts` | Επιτρέπει στο OmniRoute να γράφει αρχεία ρυθμίσεων CLI (ανανέωση token, δεδομένα συνεδρίας). Ορίστε το σε `false` ώστε κάθε εγγραφή ρυθμίσεων CLI να αποτυγχάνει με ρητό σφάλμα "writes disabled". |
| `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. Χωρίς αυτήν, η ανίχνευση δοκιμάζει πρώτα το `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)· αντικατοπτρίζει την προεπιλογή STATE_DIR του ίδιου του 5dive. |
| `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` εντοπίζει το εκτελέσιμο `gemini` από το PATH του συστήματος. |
| `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` | Προσαρμοσμένη διαδρομή προς το δυαδικό αρχείο του agent 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). Χρησιμοποιείται από τον executor Windsurf/Devin. |
| `DEVIN_DESKTOP_VERSION` | `3.6.27` | `open-sse/executors/devin-desktop.ts` | Το `ide_version` του Devin Desktop. Οι παρακάμψεις πρέπει να χρησιμοποιούν τη μορφή `x.y.z`· οι μη έγκυρες τιμές επιστρέφουν στην επαληθευμένη προεπιλογή. |
| `DEVIN_DESKTOP_EXTENSION_VERSION` | `1.48.2` | `open-sse/executors/devin-desktop.ts` | Το `extension_version` του ενσωματωμένου Codeium/language-server, ξεχωριστό από το `ide_version` του Desktop. Οι παρακάμψεις πρέπει να χρησιμοποιούν τη μορφή `x.y.z`· οι μη έγκυρες τιμές χρησιμοποιούν την ενσωματωμένη προεπιλογή. |
| `CLI_DEVIN_AGENTIC_BIN` | `devin` | `open-sse/executors/devin-cli-agentic.ts` | Παράκαμψη του Devin CLI αποκλειστικά για τη γέφυρα agentic. Ο executor αποδέχεται μόνο το τοπικό upstream ACP stdio. |
| `DEVIN_AGENTIC_HOME` | _(απαιτείται)_ | `open-sse/executors/devin-cli-agentic.ts` | Απόλυτος απομονωμένος αρχικός κατάλογος για τη υποδιεργασία agentic 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 για την απομονωμένη γέφυρα. Το live harness αντικαθιστά το παράδειγμα με ένα μοντέλο που επιστρέφει ο τρέχων λογαριασμός 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` | Ψευδώνυμο απομονωμένης γέφυρας που χρησιμοποιείται για τους subagents του Claude Code. |
| `DEVIN_SEAT_API_URL` | `https://server.codeium.com` | `open-sse/services/usage/devinCli.ts` | Προαιρετική παράκαμψη για το API διαχείρισης θέσεων (seat-management) του Codeium που χρησιμοποιείται από την ποσόστωση (quota) του Devin CLI (`GetUserStatus`). |
| `AUGGIE_BIN` | `auggie` | `open-sse/executors/auggie.ts` | Παράκαμψη απόλυτης διαδρομής για το δυαδικό αρχείο CLI του Augment (Auggie) που χρησιμοποιείται από τον τοπικό πάροχο `auggie`. Επιστρέφει στο `CLI_AUGGIE_BIN` και στη συνέχεια σε αναζήτηση στο PATH. |
| `CLI_AUGGIE_BIN` | `auggie` | `open-sse/executors/auggie.ts` | Παράκαμψη ψευδωνύμου για τη διαδρομή του δυαδικού αρχείου CLI του Augment (Auggie) (ελέγχεται μετά το `AUGGIE_BIN`). |
| `ZCODE_BIN` | `zcode` | `open-sse/executors/zcode.ts` | Δυαδικό αρχείο που χρησιμοποιείται για τον stdio πελάτη του τοπικού παρόχου `zcode`. Επιστρέφει στο `zcode` στο PATH. |
| `ZCODE_ARGS` | — | `open-sse/executors/zcode.ts` | Πίνακας JSON (≤16 συμβολοσειρές) με επιπλέον ορίσματα που περνούν στο δυαδικό αρχείο `zcode` όταν εκκινείται μέσω `cliTools`. |
| `ZCODE_CWD` | `process.cwd()` | `open-sse/executors/zcode.ts` | Κατάλογος εργασίας για τη δευτερεύουσα διεργασία (subprocess) του ZCode app-server. |
| `ZCODE_PROVIDER_ID` | `builtin:zai-coding-plan` | `open-sse/executors/zcode.ts` | Παράκαμψη για το αναγνωριστικό παρόχου που αποστέλλεται στον app-server. |
| `ZCODE_SERVER_RUNTIME_ROOT` | `~/.zcode/server` | `open-sse/executors/zcode.ts` | Ρίζα του runtime του ZCode app-server (όπου βρίσκονται τα ενσωματωμένα `node` και `zcode-server.cjs`). |
| `ZCODE_SERVER_NODE` | `/node` | `open-sse/executors/zcode.ts` | Εκτελέσιμο Node που χρησιμοποιείται για τη φιλοξενία του ZCode app-server. |
| `ZCODE_SERVER_ENTRY` | `/zcode-server.cjs` | `open-sse/executors/zcode.ts` | Σενάριο εισόδου (entry script) του app-server που χρησιμοποιείται για τη φιλοξενία του διακομιστή ZCode. |
| `ZCODE_STARTUP_TIMEOUT_MS` | `10000` | `open-sse/executors/zcode.ts` | Χρονικό όριο εκκίνησης (ms) πριν η εκκίνηση του ZCode app-server θεωρηθεί αποτυχημένη. |
| `ZCODE_RPC_TIMEOUT_MS` | `30000` | `open-sse/executors/zcode.ts` | Χρονικό όριο RPC ανά αίτημα (ms) για μια κλήση του ZCode app-server. |
| `ZCODE_TURN_TIMEOUT_MS` | `120000` | `open-sse/executors/zcode.ts` | Μέγιστη διάρκεια (ms) ενός γύρου (turn) ZCode πριν ο επιτηρητής (supervisor) τον τερματίσει λόγω χρονικού ορίου. |
| `ZCODE_POLL_INTERVAL_MS` | `250` | `open-sse/executors/zcode.ts` | Διάστημα σάρωσης (polling) (ms) για την ολοκλήρωση του γύρου ZCode. |
| `HERMES_HOME` | `~/.hermes` | `src/lib/cli-helper/config-generator/hermesHome.ts` | Αρχικός κατάλογος του Hermes Agent όπου το OmniRoute διαβάζει/γράφει τη ρύθμιση παραμέτρων του Hermes CLI. Ταιριάζει με τη μεταβλητή περιβάλλοντος που ορίζει το πρόγραμμα εγκατάστασης PowerShell του Hermes στα Windows (`%LOCALAPPDATA%\hermes`). |
### Αυτόματος Συγχρονισμός Προφίλ CLI
Αυτές οι σημαίες χαρακτηριστικών είναι προαιρετικές (opt-in) και απενεργοποιημένες από προεπιλογή. Μπορούν επίσης να εναλλάσσονται από τον πίνακα ελέγχου του 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 Code `~/.claude/profiles//settings.json` από τον ενεργό κατάλογο. Απαιτεί `CLI_ALLOW_CONFIG_WRITES`· δεν αλλάζει ποτέ την ενεργή/προεπιλεγμένη ρύθμιση παραμέτρων του Claude, τον έλεγχο ταυτότητας ή την επιλογή παρόχου. |
### Παράδειγμα Docker
```bash
# Προσαρτήστε τα δυαδικά αρχεία του κεντρικού υπολογιστή στον περιέκτη και πείτε στο 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` ισχύει μόνο όταν η διαδρομή είναι πραγματικά προσαρτημένη με bind mount από τον κεντρικό υπολογιστή — συνδυάστε το με mounts όπως `~/.codex:/host-home/.codex:rw` (δείτε το προφίλ `host` στο `docker-compose.yml`). Μια διαδρομή που δεν βρίσκεται ούτε εντός του αρχικού καταλόγου (home) του χρήστη του container ούτε είναι bind mount αγνοείται, επειδή η εγγραφή εκεί θα απορρίπτονταν κατά την επαναδημιουργία του container.
Η εικόνα εκτελείται ως `USER node`, επομένως ένα μη προσαρτημένο `/root` **δεν** αποτελεί έγκυρη παράκαμψη.
| Μεταβλητή | Προεπιλογή | Αρχείο πηγαίου κώδικα | Περιγραφή |
| ---------------------------------------- | ------------ | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_CONTAINER` | _(αυτόματο)_ | `src/shared/utils/containerEnv.ts` | Εξαναγκάζει τον εντοπισμό container σε ενεργό (`1`/`true`) ή ανενεργό (`0`/`false`). Απαιτείται μόνο σε περιβάλλοντα εκτέλεσης όπου ο αυτόματος εντοπισμός αποτυγχάνει. |
| `OMNIROUTE_ALLOW_CONTAINER_CONFIG_WRITE` | `false` | `src/shared/services/cliRuntime.ts` | Επιτρέπει ούτως ή άλλως εγγραφές ρυθμίσεων εργαλείων CLI σε μη προσαρτημένη διαδρομή container. Το ισοδύναμο στο CLI είναι `--allow-container-write`. |
| `DOCKER_UPDATE_TRIGGER_FILE` | μη ορισμένο | `src/lib/system/autoUpdate.ts` | Μόνο για εικόνα Docker: το **Ενημέρωση τώρα** του πίνακα ελέγχου γράφει ένα αίτημα JSON σε αυτό το αρχείο (πρέπει να βρίσκεται εντός του `DATA_DIR`) ώστε ένας watcher στην πλευρά του κεντρικού υπολογιστή να κάνει pull και να επαναδημιουργήσει το container. Δείτε τον [Οδηγό Docker](../guides/DOCKER_GUIDE.md#dashboard-updates-in-docker). |
### Βοηθήματα του δυαδικού CLI (`omniroute`)
Αυτές οι μεταβλητές ρυθμίζουν τη συμπεριφορά του ίδιου του δυαδικού CLI `omniroute`
(όχι τον εντοπισμό sidecar που περιγράφεται παραπάνω).
| Μεταβλητή | Προεπιλογή | Αρχείο πηγαίου κώδικα | Περιγραφή |
| ------------------------------------- | --------------------------------- | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_LANG` | _(σύστημα)_ | `bin/cli/i18n.mjs` | Εξαναγκάζει τη γλώσσα εξόδου του CLI. Τοπική ρύθμιση BCP-47 (π.χ. `en`, `pt-BR`). Παρακάμπτει τις μεταβλητές περιβάλλοντος τοπικών ρυθμίσεων του συστήματος (LC_ALL, LC_MESSAGES). |
| `OMNIROUTE_SHOW_LOG` | _(μη ορισμένο)_ | `bin/cli/runtime/processSupervisor.mjs` | Ορίστε σε `1` για προώθηση του stdout/stderr του διακομιστή στο τερματικό σε εποπτευόμενη λειτουργία. Ισοδύναμο με τη σημαία `--log` στο `omniroute serve`. |
| `OMNIROUTE_CLI_TOKEN` | _(μη ορισμένο)_ | `bin/cli/api.mjs` | Διακριτικό ελέγχου ταυτότητας μηχανήματος που εισάγεται ως κεφαλίδα `x-omniroute-cli-token`. Δημιουργείται αυτόματα στην εργασία 8.12. |
| `GEMINI_CLI_HOME` | _(μη ορισμένο)_ | `bin/cli/commands/setup-gemini.mjs` | Μόνιμη ρίζα home του Gemini· η εφάπαξ εκτέλεση χρησιμοποιεί ένα προσωρινό απομονωμένο home. |
| `OMNIROUTE_CHILD_SIGNAL_TIMEOUT_MS` | `5000` | `bin/cli/commands/run.mjs` | Περίοδος χάριτος σε χιλιοστά του δευτερολέπτου πριν από τον εξαναγκασμένο τερματισμό μιας θυγατρικής διεργασίας CLI που έλαβε σήμα. |
| `OMNIROUTE_CLI_SKIP_DEFAULT_DATA_ENV` | _(μη ορισμένο)_ | `bin/omniroute.mjs` | Ορίστε σε 1 με ρητό DATA_DIR για να παραλείψετε το αρχείο περιβάλλοντος του προεπιλεγμένου καταλόγου δεδομένων χρήστη. |
| `OMNIROUTE_SYNC_TOKEN` | _(μη ορισμένο)_ | `bin/cli/commands/sync.mjs` | Διακριτικό συγχρονισμού για το `omniroute sync bundle` (το `GET /api/sync/bundle` δέχεται μόνο διακριτικό συγχρονισμού, όχι κλειδί API). Ισοδύναμο με `--token`. |
| `OMNIROUTE_HTTP_TIMEOUT_MS` | `30000` | `bin/cli/api.mjs` | Χρονικό όριο HTTP ανά απόπειρα (ms) για αιτήματα CLI → διακομιστή. |
| `OMNIROUTE_READY_TIMEOUT_MS` | `60000` | `bin/cli/utils/pid.mjs` | Μέγιστος χρόνος (ms) που το CLI περιμένει το endpoint υγείας του διακομιστή πριν εκτυπώσει προειδοποίηση χρονικού ορίου. Χρήσιμο για αργές ψυχρές εκκινήσεις (π.χ. Windows). Ορίζεται επίσης μέσω `--ready-timeout`. |
| `OMNIROUTE_VERBOSE` | `0` | `bin/cli/api.mjs` | Ορίστε σε `1` για εκτύπωση διαγνωστικών επανάληψης/backoff στο stderr κατά την εκτέλεση εντολών CLI. |
| `OMNIROUTE_PLUGIN_PATH` | _(μη ορισμένο)_ | `bin/cli/plugins.mjs` | Προσαρμοσμένος κατάλογος για την ανακάλυψη πρόσθετων του CLI (πακέτα `omniroute-cmd-*`). Όταν δεν έχει οριστεί, η προεπιλογή είναι `~/.omniroute/plugins/`. Μόνο για CLI — δεν φτάνει ποτέ στον σαρωτή πρόσθετων της πλευράς διακομιστή, ο οποίος καθορίζεται από το `OMNIROUTE_PLUGINS_DIR` (ενότητα 2). |
| `OMNIROUTE_NO_UPDATE_NOTIFIER` | _(μη ορισμένο)_ | `bin/omniroute.mjs` | Αποκλείει την ειδοποίηση ενημέρωσης του CLI κατά την έξοδο της διεργασίας όταν οριστεί σε οποιαδήποτε μη κενή τιμή. Η ειδοποίηση παραμένει απενεργοποιημένη ανεξάρτητα σε CI, σε λειτουργία quiet και σε λειτουργίες μη κειμενικής εξόδου. |
| `OMNIROUTE_DOCTOR_LIVENESS_URL` | _(παραγόμενο)_ | `bin/cli/commands/doctor.mjs` | URL liveness που διερευνά το `omniroute doctor`. Μια προγραμματιστική επιλογή `livenessUrl` έχει προτεραιότητα· διαφορετικά χρησιμοποιείται αυτή η τιμή αυτούσια. Όταν δεν έχει οριστεί, το CLI παράγει το endpoint `/api/health/degradation` του τοπικού πίνακα ελέγχου. |
| `OMNIROUTE_PROVIDER_CATALOG_PATH` | `src/shared/constants/providers/` | `bin/cli/provider-catalog.mjs` | Διαδρομή καταλόγου παρόχων που χρησιμοποιείται από τις εντολές παρόχων του CLI. Μια προγραμματιστική επιλογή `catalogPath` έχει προτεραιότητα. Οι απόλυτες διαδρομές χρησιμοποιούνται ως έχουν· οι σχετικές διαδρομές επιλύονται από τη ρίζα του έργου. Όταν δεν έχει οριστεί, το CLI χρησιμοποιεί τον κατάλογο σταθερών παρόχων, με το παλαιό αρχείο `providers.ts` ως εφεδρεία. |
| `OMNIROUTE_PROVIDER_TEST_MODEL` | _(προεπιλογή παρόχου)_ | `bin/cli/provider-test.mjs` | Καθολικό εφεδρικό μοντέλο για τις δοκιμές σύνδεσης παρόχων του CLI. Η σειρά προτεραιότητας είναι: διαμορφωμένο μοντέλο σύνδεσης, παράκαμψη μοντέλου ανά πάροχο, αυτή η τιμή και έπειτα το ενσωματωμένο δοκιμαστικό μοντέλο του παρόχου. |
---
## 10. Εσωτερικές ενσωματώσεις Agent & MCP
| Μεταβλητή | Προεπιλογή | Αρχείο πηγαίου κώδικα | Περιγραφή |
| ----------------------------------------------- | --------------------------------------------------- | ----------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_BASE_URL` | αυτόματη ανίχνευση | `open-sse/mcp-server/server.ts` | Ρητό URL για τα εργαλεία MCP/A2A ώστε να προσεγγίζουν το OmniRoute. Παρακάμπτει την αυτόματη ανίχνευση localhost. |
| `OMNIROUTE_API_KEY` | _(δεν έχει οριστεί)_ | MCP/A2A modules | Κλειδί API για εσωτερικές κλήσεις εργαλείων MCP και δεξιοτήτων A2A. |
| `OMNIROUTE_API_KEY_ID` | _(δεν έχει οριστεί)_ | `open-sse/mcp-server/audit.ts` | Αναγνωριστικό κλειδιού για την απόδοση στο αρχείο καταγραφής ελέγχου MCP. |
| `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` | Διακόπτης απενεργοποίησης (kill-switch) για τη λειτουργία παρατηρησιμότητας memory-hits του A2A. Ορίστε σε `0` για να παραλείπεται εντελώς η αναζήτηση ανάκλησης μνήμης για μια εργασία· οποιαδήποτε άλλη τιμή (συμπεριλαμβανομένου του μη ορισμένου) τη διατηρεί ενεργοποιημένη. |
| `OMNIROUTE_ISSUE_AGENT_ENABLED` | `false` | `src/app/api/issue-agent/runs/route.ts` | Ενεργοποιεί το τοπικό/εκτός σύνδεσης endpoint καταγεγραμμένης διαλογής (recorded-triage) του Issue Agent. Αφήστε το απενεργοποιημένο εκτός αν εκτελείτε ρητά τοπικές ροές εργασίας καταγεγραμμένης διαλογής. |
| `OMNIROUTE_ISSUE_AGENT_TIMEOUT_MS` | _(δεν έχει οριστεί)_ | `src/lib/issueAgent/execution.ts` | Χρονικό όριο (ms) για μια μεμονωμένη εκτέλεση καταγεγραμμένης διαλογής του Issue Agent. Περιορίζεται σε ένα εσωτερικό μέγιστο· επαναφέρεται στην ενσωματωμένη προεπιλογή όταν δεν έχει οριστεί ή είναι άκυρη. |
| `OMNIROUTE_CONTEXT` | _(ενεργό πλαίσιο)_ | `bin/cli/program.mjs`, `bin/cli/api.mjs` | Πλαίσιο/προφίλ απομακρυσμένης λειτουργίας CLI για εντολές `omniroute`· παρακάμπτει το ενεργό πλαίσιο στον τοπικό αποθηκευτικό χώρο πλαισίων. Ισοδύναμο με `--context `. |
| `OMNIROUTE_CONTEXT_KEYCHAIN_DISABLED` | `0` | `bin/cli/contexts.mjs` | Απενεργοποιεί το προαιρετικό backend OS-keychain `keytar` για τα διαπιστευτήρια πλαισίων του CLI. Όταν είναι ενεργοποιημένο, τα διαπιστευτήρια παραμένουν στο `config.json` με δικαιώματα `0600` και το CLI εκπέμπει μια εφάπαξ προειδοποίηση εναλλακτικής (fallback)· προορίζεται για σκόπιμη λειτουργία headless/σε container. |
| `OMNIROUTE_MCP_ENFORCE_SCOPES` | `false` | `open-sse/mcp-server/server.ts` | Επιβάλλει έλεγχο πρόσβασης βάσει εμβελειών (scopes) στις κλήσεις εργαλείων 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 πριν από τη σειριοποίηση του manifest. Τιμές ενεργοποίησης: `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` | Όριο ματαίωσης (ms) για τις εσωτερικές αναγνώσεις διαχείρισης του διακομιστή MCP (health, resilience, combos, quota, usage). |
| `OMNIROUTE_MCP_UPSTREAM_TIMEOUT_MS` | `60000` | `open-sse/mcp-server/fetchTimeout.ts` | Χρονικό όριο ματαίωσης (ms) για βήματα MCP που αναμένουν έναν πάροχο (`route_request`, `web_search`, `web_fetch`). |
| `OMNIROUTE_CORPUS_CACHE_SIZE` | `5` | `src/lib/localCorpus/configured.ts` | Μέγιστος αριθμός στιγμιότυπων ευρετηρίου τοπικού σώματος κειμένων που αποθηκεύονται προσωρινά στη μνήμη (LRU, ένα ανά ευρετηριασμένο ριζικό κατάλογο). Περιορίζεται σε ελάχιστο `1`. |
| `MODEL_SYNC_INTERVAL_HOURS` | `6` | `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` | Διάκενο (ms) μεταξύ διαδοχικών λήψεων ποσοστώσεων OAuth σε μαζικό συγχρονισμό· οι συνδέσεις OAuth λαμβάνονται μία κάθε φορά για αποφυγή υπερφόρτωσης του upstream. Το `0` απενεργοποιεί το διάκενο (ταυτόχρονες λήψεις). |
| `OMNIROUTE_QUOTA_FETCH_MIN_INTERVAL_MS` | `250` | `open-sse/services/quotaFetchThrottle.ts` | Ελάχιστο διάστημα (ms) μεταξύ διαδοχικών λήψεων ποσοστώσεων upstream στη διαδρομή preflight/παρακολούθησης ανά αίτημα· κατανέμει χρονικά τις ταυτόχρονες κλήσεις δικτύου ώστε πολλοί λογαριασμοί σε μία IP να μην υπερφορτώνουν το upstream. Συνδεδεμένο με τους ανακτήτες ποσοστώσεων Codex (`/wham/usage`), DeepSeek, Bailian (και οι δύο τοποθεσίες λήψης), OpenCode και Crof (#6009, #6911). Η γενική διαδρομή αποστολής `usage.ts::getUsageForProvider` (github/glm/minimax/nanogpt/xai/κ.λπ.) δεν καλύπτεται ακόμη — παρακολουθείται ξεχωριστά. Οι επιτυχίες cache δεν επηρεάζονται. Το `0` απενεργοποιεί· περιορίζεται σε `0..60000`. |
| `OMNIROUTE_QUOTA_FETCH_JITTER_MS` | `120` | `open-sse/services/quotaFetchThrottle.ts` | Πρόσθετη τυχαία χρονική απόσταση (ms) ανά αίτημα, που δειγματοληπτείται σε κάθε δεσμευμένη λήψη ποσόστωσης upstream. Προεπιλογή 120· περιορίζεται σε `0..60000`· το `0` αφαιρεί μόνο το jitter. Ορίστε `OMNIROUTE_QUOTA_FETCH_MIN_INTERVAL_MS=0` για να απενεργοποιήσετε ολόκληρο τον περιορισμό ρυθμού. Το jitter δεν εγγυάται την αποτροπή αποκλεισμών από το upstream. |
| `PROVIDER_LIMITS_POST_USAGE_REFRESH_DELAY_MS` | `5000` | `src/lib/usage/providerLimits.ts` | Καθυστέρηση (ms) πριν από την ανανέωση των ορίων παρόχου μετά από πραγματικό συμβάν χρήσης, δίνοντας χρόνο στο API ποσόστωσης του upstream να καταγράψει την κατανάλωση. |
| `OMNIROUTE_LOGIN_BROWSER_PATH` | αυτόματος εντοπισμός | `open-sse/services/adobeFireflyBrowserLogin.ts` | Απόλυτη διαδρομή προς εκτελέσιμο Chrome ή Edge του συστήματος που χρησιμοποιείται για διαδραστική σύνδεση στο Adobe Firefly και ανανέωση εκτός οθόνης. |
| `ADOBE_FIREFLY_BROWSER_REFRESH` | ενεργοποιημένο | `open-sse/services/adobeFireflySession.ts` | Διατηρεί φρέσκια την κατάσταση IMS και κινδύνου προγράμματος περιήγησης με συνεδρίες Chrome CDP σε επίπεδο λογαριασμού. Ορίστε σε `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` | Βασική καθυστέρηση επανάληψης (backoff) σε χιλιοστά του δευτερολέπτου μετά από παροδικές απαντήσεις Adobe 408· συνδυάζεται με το διάκενο υποβολών σε έως πέντε προσπάθειες. |
| `OMNIROUTE_DISABLE_BACKGROUND_SERVICES` | `false` | `src/instrumentation-node.ts` | Απενεργοποιεί όλες τις υπηρεσίες παρασκηνίου (συγχρονισμός, τιμολόγηση, ανανέωση μοντέλων). Χρήσιμο για CI/δοκιμές. |
| `OMNIROUTE_HEADLESS` | _(μη ορισμένο)_ | `src/lib/system/headless.ts` | Εκκίνηση μόνο με τη μηχανή διαμεσολάβησης: παραλείπει προαιρετικά υποσυστήματα, `/dashboard` → 404. Ίδιο με `omniroute serve --headless`. Δείτε [HEADLESS.md](../guides/HEADLESS.md). |
| `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` | Συχνότητα προληπτικής ανάκτησης συνδέσεων σε cooldown (ms): επανεπικυρώνει συνδέσεις των οποίων το παροδικό `rate_limited_until` έχει παρέλθει, εκτός της θερμής διαδρομής αιτημάτων. Κατώτατο όριο `5000`. |
| `OMNIROUTE_DISABLE_CONNECTION_RECOVERY` | `false` | `src/lib/quota/connectionRecovery.ts` | Απενεργοποίηση του χρονοπρογραμματιστή προληπτικής ανάκτησης συνδέσεων σε cooldown (η ανάκτηση κατά απαίτηση στο `getProviderCredentials` εξακολουθεί να ισχύει). |
| `OMNIROUTE_REASONING_CACHE_CLEANUP_INTERVAL_MS` | `1800000` | `src/lib/jobs/reasoningCacheCleanupJob.ts` | Συχνότητα καθαρισμού της κρυφής μνήμης συλλογισμού (ms). Κατώτατο όριο `60000`. |
| `OMNIROUTE_REASONING_MIN_BUDGET` | _μη ορισμένο_ (απενεργοποιημένο) | `open-sse/services/reasoningTokenBuffer.ts` | Προαιρετικό κατώτατο όριο για τους προϋπολογισμούς εξόδου μοντέλων σκέψης: το `max_tokens` του καλούντος στο διάστημα `[256, floor)` αυξάνεται στο κατώτατο όριο (περιορίζεται από το ανώτατο όριο εξόδου του μοντέλου). Μη ορισμένο = οι προϋπολογισμοί του πελάτη δεν μεγεθύνονται ποτέ (#9507). |
| `OMNIROUTE_REASONING_EFFORT_PROBE_PROVIDERS` | _μη ορισμένο_ (απενεργοποιημένο) | `open-sse/services/learnedReasoningEffortCaps.ts` | Προαιρετικά, διαχωρισμένα με κόμματα αναγνωριστικά παρόχων (ή `*`): όταν ένα 400/422 για `reasoning_effort` δεν κατονομάζει αποδεκτό σύνολο, γίνεται μία επανάληψη ένα επίπεδο χαμηλότερα (ποτέ κάτω από `low`) και το επίπεδο αυτό μαθαίνεται μόνο εάν η δοκιμή απαντηθεί (#14895). |
| `OMNIROUTE_LOG_EXPORT_CRON` | `0 * * * *` | `src/lib/jobs/logExportJob.ts` | Έκφραση cron (UTC) για την εργασία εξαγωγής αρχείων καταγραφής κλήσεων που αδειάζει κάθε ενεργοποιημένο προορισμό εξαγωγής καταγραφών. Προτιμήστε `*/5 * * * *` κατά την εξαγωγή σωμάτων. |
| `OMNIROUTE_LOG_EXPORT_RUN_TIMEOUT_MS` | `900000` | `src/lib/logExport/childRunner.ts` | Χρονικό όριο πραγματικού χρόνου (wall-clock) της θυγατρικής διεργασίας ανά προορισμό, σε χιλιοστά του δευτερολέπτου. Το χρονικό όριο καταγράφει αποτυχία και τερματίζει τη διεργασία χωρίς να προωθήσει τη μη επιβεβαιωμένη παρτίδα. Μη έγκυρες/μη θετικές/μη ακέραιες τιμές χρησιμοποιούν την προεπιλογή. |
| `OMNIROUTE_LOG_EXPORT_CHILD_MAX_OLD_SPACE_MB` | `1024` | `src/lib/logExport/childRunner.ts` | Όριο old-space της V8 για τη θυγατρική διεργασία εξαγωγής Node σε MB (όχι συνολικό RSS). Η προεπιλογή αφήνει περιθώριο για 500 γραμμές περιορισμένων τεχνουργημάτων με σώματα· υπερμεγέθεις παρτίδες ενδέχεται ακόμη να εξαντλήσουν τον σωρό της θυγατρικής. Η αποτυχία συνιστά μείωση του μεγέθους παρτίδας ή αύξηση αυτού του ορίου. Μη έγκυρες/μη θετικές/μη ακέραιες τιμές χρησιμοποιούν την προεπιλογή. Οι εξαγωγές Bun υποχωρούν σε εντός-διεργασίας εκτέλεση χωρίς αυτό το όριο. |
| `OMNIROUTE_CONFIG_HOT_RELOAD_MS` | `5000` | `src/lib/config/hotReload.ts` | Διάστημα σάρωσης (ms) για hot-reload των ρυθμίσεων. Τιμές χαμηλότερες από `1000` απορρίπτονται. |
| `OMNIROUTE_DISABLE_REDIS_AUTH_CACHE` | _(ενεργοποιημένο)_ | `src/lib/db/apiKeys.ts` | Ορίστε `1` για παράκαμψη της κρυφής μνήμης ελέγχου ταυτότητας κλειδιών API που υποστηρίζεται από Redis (εξαναγκάζει αναγνώσεις 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 όταν το `lite.maxToolLength` δεν έχει οριστεί. Εύρος 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` | Διάρκεια ζωής αδράνειας σε χιλιοστά του δευτερολέπτου πριν τερματιστεί ένας αχρησιμοποίητος εργάτης συμπίεσης. |
| `OMNI_COMPRESSION_WORKER_MAX_OLD_MB` | `1024` | `open-sse/services/compression/compressionWorkerPool.ts` | Όριο heap παλιάς γενιάς V8 σε MB για κάθε worker συμπίεσης, σε όλες τις λειτουργίες (κατώτατο όριο `128`). Μια εργασία που το υπερβαίνει αποτυγχάνει ανοικτά (χωρίς συμπίεση) αντί να αυξήσει το heap του gateway. |
| `COMPRESSION_PIPELINE_BREAKER_ENABLED` | `false` | `open-sse/services/compression/pipelineEngineBreaker.ts` | Κύριος διακόπτης circuit-breaker ανά μηχανή για το T02 stacked-pipeline. **Οπτ-in (απενεργοποιημένο από προεπιλογή)** — όταν είναι ενεργό, μια μηχανή που πετάει επανειλημμένα σφάλματα μεταξύ αιτημάτων παραλείπεται (fail-open) για μια περίοδο cooldown· απενεργοποιημένο = byte-identical παλαιά συμπεριφορά. |
| `COMPRESSION_PIPELINE_BREAKER_THRESHOLD` | `3` | `open-sse/services/compression/pipelineEngineBreaker.ts` | Διαδοχικές αποτυχίες μεταξύ αιτημάτων πριν ανοίξει ο breaker μιας μηχανής. |
| `COMPRESSION_PIPELINE_BREAKER_COOLDOWN_MS` | `30000` | `open-sse/services/compression/pipelineEngineBreaker.ts` | Χιλιοστά του δευτερολέπτου που μια ανοιχτή μηχανή παραμένει παραλειπόμενη πριν από ένα half-open probe. |
| `COMPRESSION_CCR_RETRIEVAL_RAMP_FACTOR` | `2` | `open-sse/services/compression/engines/ccr/index.ts` | Ράμπα ανατροφοδότησης ανάκτησης CCR T08/H8: κάθε προηγούμενη ανάκτηση ενός αποθηκευμένου μπλοκ αυξάνει γραμμικά το ενεργό του `minChars` (περιεχόμενο που ανακτάται συχνά συμπιέζεται λιγότερο· `>=3` ανακτήσεις = δεν συμπιέζεται ποτέ). Το `1` απενεργοποιεί τη ράμπα (δυαδική παράλειψη μόνο στο κατώφλι). |
| `COMPRESSION_CCR_DURABLE_STORE` | `true` | `open-sse/services/compression/engines/ccr/index.ts` | Ανθεκτική αποθήκευση μπλοκ CCR (#9061). Υποστηρίζει την εντός-μνήμης αποθήκευση με SQLite ώστε ένα μπλοκ να επιβιώνει από εξώθηση LRU, το TTL, μια επανεκκίνηση ή μια ανάκτηση που καταλήγει σε άλλο instance. Ορίστε `false` για να διατηρείτε τα μπλοκ μόνο στη μνήμη. Μπλοκ άνω των 512KB και cloud runtimes παραμένουν μόνο-στη-μνήμη ανεξαρτήτως. |
| `COMPRESSION_PREFIX_FREEZE_ENABLED` | `false` | `open-sse/services/compression/prefixFreeze.ts` | Κύριος διακόπτης παγώματος προθέματος με βάση την παρατηρούμενη χρήση T08/H5. **Οπτ-in (απενεργοποιημένο από προεπιλογή)** — όταν είναι ενεργό, ένα system prompt που παρατηρείται `>=` το κατώφλι αντιμετωπίζεται ως σταθερό cacheable πρόθεμα και διαφυλάσσεται από τη συμπίεση ακόμη και για παρόχους που η στατική ευρετική cache χάνει (το πάγωμα μόνο _διαφυλάσσει_, ποτέ δεν μεταλλάσσει). |
| `COMPRESSION_PREFIX_FREEZE_THRESHOLD` | `3` | `open-sse/services/compression/prefixFreeze.ts` | Παρατηρήσεις ενός system prompt πριν αντιμετωπιστεί ως παγωμένο σταθερό πρόθεμα. |
| `OMNIROUTE_BOOTSTRAPPED` | `false` | `src/app/(dashboard)/dashboard/page.tsx` | Ορίζεται `true` από το bootstrap script μετά την αρχική εγκατάσταση. Ελέγχει την ορατότητα του οδηγού ρύθμισης. |
| `OMNIROUTE_ALLOW_BODY_PROJECT_OVERRIDE` | `0` | `open-sse/executors/antigravity.ts` | Διέξοδος διαφυγής: επιτρέπει στο σώμα του αιτήματος να παρακάμψει το πεδίο project του Antigravity. |
| `ANTIGRAVITY_CREDITS` | `off` | `open-sse/services/antigravityCredits.ts` | Πολιτική πιστώσεων Google One AI: `off` δεν εισάγει ποτέ πιστώσεις, `retry` εισάγει μία φορά μετά από ένα επιλέξιμο quota 429, και `always` εισάγει στο πρώτο αίτημα. |
| `ANTIGRAVITY_ALLOW_SIGNATURE_BYPASS` | `0` | `open-sse/translator/request/openai-to-gemini.ts` | Επιτρέπει στον μεταφραστή αιτημάτων Antigravity να παραλείψει την αυστηρή επικύρωση υπογραφής αιτημάτων CLI όταν το upstream απορρίπτει πραγματικές υπογραφές (λειτουργία debug/antiquated-CLI). Μη μηδενική τιμή ενεργοποιεί την παράκαμψη. |
| `AGY_TOKEN_FILE` | `~/.gemini/antigravity-cli/antigravity-oauth-token` | `src/app/api/providers/agy-auth/apply-local/route.ts` | Παράκαμψη της διαδρομής αρχείου token του Antigravity CLI (agy) για την εισαγωγή τοπικής σύνδεσης με αυτόματη ανίχνευση. |
### Γέφυρα OAuth CLI (Εσωτερική)
| Μεταβλητή | Προεπιλογή | Αρχείο πηγής | Περιγραφή |
| ------------------- | ------------------ | ------------------------------- | -------------------------------------------------------------- |
| `OMNIROUTE_SERVER` | αυτόματη ανίχνευση | `src/lib/oauth/config/index.ts` | URL διακομιστή για τη γέφυρα ελέγχου ταυτότητας CLI↔OmniRoute. |
| `OMNIROUTE_TOKEN` | _(μη ορισμένο)_ | `src/lib/oauth/config/index.ts` | Token ελέγχου ταυτότητας για τη γέφυρα CLI. |
| `OMNIROUTE_USER_ID` | `cli` | `src/lib/oauth/config/index.ts` | ID χρήστη για τις συνεδρίες γέφυρας CLI. |
| `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) | Δημόσιο client — δεν απαιτείται μυστικό. |
| `CLAUDE_CODE_REDIRECT_URI` | Claude Code | Παράκαμψη του redirect URI. Προεπιλογή: `https://platform.claude.com/oauth/code/callback` |
| `CODEX_OAUTH_CLIENT_ID` | Codex / OpenAI | Δημόσιο client. |
| `GEMINI_OAUTH_CLIENT_ID` | Gemini (Google) | Απαιτεί το αντίστοιχο `_SECRET`. |
| `GEMINI_OAUTH_CLIENT_SECRET` | Gemini (Google) | — |
| `KIMI_CODING_OAUTH_CLIENT_ID` | Kimi Coding (Moonshot) | Δημόσιο client. |
| `MUSE_CODE_OAUTH_CLIENT_ID` | Muse Code (Meta) | Προαιρετική παράκαμψη για το δημόσιο client id device-flow του Muse CLI. Αφήστε το μη ορισμένο για να χρησιμοποιηθεί το ενσωματωμένο δημόσιο client. |
| `ANTIGRAVITY_OAUTH_CLIENT_ID` | Antigravity (Google) | Απαιτεί το αντίστοιχο `_SECRET`. |
| `ANTIGRAVITY_OAUTH_CLIENT_SECRET` | Antigravity (Google) | — |
| `GITHUB_OAUTH_CLIENT_ID` | GitHub Copilot | Δημόσιο client. |
| `GHE_COPILOT_OAUTH_CLIENT_ID` | GHE Copilot | Προαιρετική παράκαμψη για το OAuth client id του GitHub Enterprise Copilot. Επιστρέφει στη δημόσια προεπιλεγμένη τιμή του `GITHUB_OAUTH_CLIENT_ID` όταν δεν έχει οριστεί. |
| `COPILOT_INTEGRATION_ID` | GitHub Copilot | Προαιρετική παράκαμψη για το client integration ID του GitHub Copilot που αποστέλλεται στις κεφαλίδες `Copilot-Integration-Id` και `Editor-Plugin-Version`. Προεπιλογή: `copilot-developer-cli`. |
| `WINDSURF_API_KEY` | Windsurf / Devin (v3.8) | Εφεδρικό API key που χρησιμοποιείται από το `open-sse/executors/devin-cli.ts` όταν δεν υπάρχει διαθέσιμο διαπιστευτήριο ανά σύνδεση. Προαιρετικό. |
| `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) | OAuth client ID για το GitLab Duo. Καταχωρίστε μια εφαρμογή στο `https://gitlab.com/-/profile/applications` με redirect URI `/callback` και scopes `api, read_user, openid, profile, email`. Επιστρέφει στο `GITLAB_OAUTH_CLIENT_ID`. |
| `GITLAB_DUO_OAUTH_CLIENT_SECRET` | GitLab Duo (v3.8) | OAuth client secret για το GitLab Duo. Προαιρετικό — η ροή PKCE δεν απαιτεί μυστικό. Επιστρέφει στο `GITLAB_OAUTH_CLIENT_SECRET`. |
| `GITLAB_DUO_BASE_URL` | GitLab Duo (v3.8) | Παράκαμψη του base URL του GitLab (self-hosted GitLab). Προεπιλογή: `https://gitlab.com`. Επιστρέφει στο `GITLAB_BASE_URL`. |
| `GITLAB_BASE_URL` | GitLab Duo (v3.8) | Εναλλακτική παλαιού τύπου (legacy) για το `GITLAB_DUO_BASE_URL`. Χρησιμοποιείται όταν δεν έχει οριστεί η παραλλαγή `_DUO_`. |
| `GITLAB_OAUTH_CLIENT_ID` | GitLab Duo (v3.8) | Εναλλακτική παλαιού τύπου για το `GITLAB_DUO_OAUTH_CLIENT_ID` που καταναλώνεται από το `src/lib/oauth/constants/oauth.ts`. |
| `GITLAB_OAUTH_CLIENT_SECRET` | GitLab Duo (v3.8) | Εναλλακτική παλαιού τύπου για το `GITLAB_DUO_OAUTH_CLIENT_SECRET` που καταναλώνεται από το `src/lib/oauth/constants/oauth.ts`. |
| `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 | Αναγνωριστικό χώρου εργασίας (Workspace ID) για το Qoder CLI. |
| `OMNIROUTE_QODER_WORKSPACE` | Qoder | Ψευδώνυμο για το `QODER_CLI_WORKSPACE`. |
| `QODER_CLI_CONFIG_DIR` | Qoder | Παράκαμψη του καταλόγου ρυθμίσεων του Qoder CLI (απομονωμένη συνεδρία PAT, αποφεύγει την αντικατάσταση μιας σύνδεσης μέσω προγράμματος περιήγησης). |
| `QODER_CLI_MAX_CONCURRENCY` | Qoder | Μέγιστος αριθμός ταυτόχρονων εκτελέσεων qodercli (print spawns ή ACP prompts)· τα επιπλέον αιτήματα μπαίνουν σε ουρά FIFO. Χωρίς ορισμό (προεπιλογή) = χωρίς ανώτατο όριο. |
| `QODER_CLI_QUEUE_TIMEOUT_MS` | Qoder | Πόσο χρόνο περιμένει ένα αίτημα Qoder για μια διαθέσιμη θέση qodercli (μόνο όταν έχει οριστεί ανώτατο όριο) πριν αποτύχει με 429 `qodercli_busy` + `Retry-After`. Προεπιλογή `120000`. |
| `QODER_CLI_TRANSPORT` | Qoder | `print` (προεπιλογή) δημιουργεί διεργασία `qodercli --print` ανά αίτημα· `acp` διατηρεί μία μόνιμη διεργασία `qodercli --acp` ανά PAT. |
| `QODER_CLI_ACP_IDLE_TIMEOUT_MS` | Qoder | Μεταφορά ACP: τερματίζει τη μόνιμη διεργασία qodercli μετά από αυτό το χρονικό διάστημα αδράνειας. Προεπιλογή `600000`. |
| `QODER_CLI_ACP_STARTUP_TIMEOUT_MS` | Qoder | Μεταφορά ACP: χρονικό όριο εντός του οποίου το qodercli πρέπει να απαντήσει στο ACP `initialize`. Προεπιλογή `60000`. |
| `QODER_CLI_ACP_MAX_SESSIONS_PER_PROCESS` | Qoder | Μεταφορά ACP: ανακυκλώνει τη μόνιμη διεργασία qodercli μετά από αυτόν τον αριθμό συνεδριών. Προεπιλογή `500`. |
| `BLACKBOX_WEB_VALIDATED_TOKEN` | Blackbox Web | Token `tk` του frontend που αποστέλλεται ως `validated` στο `/api/chat`. Απαιτείται όταν το Blackbox επιβάλλει αντιστοίχιση token· διαφορετικά το OmniRoute επιστρέφει σε ένα τυχαίο UUID. Δείτε το issue #2252. |
| `VISION_BRIDGE_BASE_URL` | Προστατευτικό Vision Bridge | Βασικό URL συμβατό με OpenAI για κλήσεις vision-bridge εκτός Anthropic. Από προεπιλογή χρησιμοποιεί το παλαιό (legacy) env του OpenAI URL ή το api.openai.com. Δείξτε το στο self-loop `/v1` του OmniRoute ή σε οποιοδήποτε endpoint συμβατό με OpenAI (Gemini OpenAI-compat, OpenRouter). Ζήτημα #2232. Όταν το URL είναι το δικό του `/v1` του OmniRoute, το δευτερεύον αίτημα describe στέλνει `x-omniroute-admission-bypass: internal` και πιστοποιείται με την επιλυμένη πιστοποίηση self-loop (το sentinel `sk_omniroute` σε τοπική λειτουργία, ή `OMNIROUTE_API_KEY` / `ROUTER_API_KEY` — #1350), ώστε να λειτουργούν οι αναπτύξεις με `REQUIRE_API_KEY=true`. |
| `VISION_BRIDGE_API_KEY` | Προστατευτικό Vision Bridge | Κλειδί API για το παραπάνω URL. Παρακάμπτει τις env μεταβλητές OpenAI / Google ανά πάροχο για κλήσεις vision-bridge εκτός Anthropic. Τα μοντέλα Anthropic διατηρούν τη δική τους ειδική διαδρομή κλειδιού Anthropic. Ζήτημα #2232. |
| `OMNIROUTE_VISION_BRIDGE_NEGATIVE_CACHE_MS` | Προστατευτικό Vision Bridge | Πόσο χρόνο αποθηκεύεται στην προσωρινή μνήμη ένα αποτέλεσμα δρομολόγησης «χωρίς χρησιμοποιήσιμο υποψήφιο», σε ms (προεπιλογή `30000`). Μη έγκυρες ή αρνητικές τιμές επιστρέφουν στην προεπιλογή· το `0` απενεργοποιεί την αρνητική προσωρινή μνήμη. Πηγή: `src/lib/guardrails/visionBridgeRouter.ts`. |
> [!WARNING]
>
> 1. Μεταβείτε στο [Google Cloud Console → Διαπιστευτήρια](https://console.cloud.google.com/apis/credentials)
> 2. Δημιουργήστε ένα OAuth 2.0 Client ID (τύπος: "Web application")
> 3. Προσθέστε το URL του διακομιστή σας ως Authorized redirect URI
> 4. Αντικαταστήστε τις τιμές διαπιστευτηρίων στο `.env`.
---
## 12. Παρακάμψεις User-Agent Παρόχων
Παράκαμψη της κεφαλίδας `User-Agent` που αποστέλλεται σε κάθε upstream πάροχο. Αυτή επιλύεται δυναμικά κατά τον χρόνο εκτέλεσης από τη βασική κλάση executor:
```
process.env[`${PROVIDER_ID}_USER_AGENT`]
```
> **Πηγή:** `open-sse/executors/base.ts` → `buildHeaders()`
| Μεταβλητή | Προεπιλεγμένη Τιμή | Πότε να Ενημερωθεί |
| -------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `CLAUDE_USER_AGENT` | `claude-cli/2.1.280 (external, cli)` | Όταν η Anthropic κυκλοφορεί νέα έκδοση CLI |
| `CLAUDE_DISABLE_TOOL_NAME_CLOAK` | `false` | `executors/base.ts` + `executors/cliproxyapi.ts` | Ορίστε σε `1`/`true` για να προωθούνται αυτούσια τα ονόματα εργαλείων τρίτων harness στην Anthropic και στις δύο διαδρομές προς Anthropic (native OAuth και CLIProxyAPI). Από προεπιλογή, ο executor δημιουργεί ντετερμινιστικά ψευδώνυμα για ονόματα εργαλείων που δεν είναι Claude Code (κανονική αντιστοίχιση Claude Code όπου υπάρχει, διαφορετικά PascalCase) και τα αντιστρέφει στην απόκριση μέσω του `_toolNameMap`, ώστε τα harness με εργαλεία snake_case να μην απορρίπτονται ως πελάτες τρίτων που έχουν αναγνωριστεί μέσω αποτυπώματος. Μόνο για αποσφαλμάτωση. |
| `CODEX_USER_AGENT` | `codex-cli/0.155.0 (Windows 10.0.26200; x64)` | Όταν η OpenAI ενημερώνει το Codex CLI |
| `CODEX_CLIENT_VERSION` | `0.155.0` | Παράκαμψη της έκδοσης πελάτη Codex ανεξάρτητα από την πλήρη συμβολοσειρά UA |
| `GROK_CLI_CLIENT_VERSION` | `1.0.41` | Παράκαμψη του `x-grok-client-version` για inference, συγχρονισμό μοντέλων και OAuth με κωδικό συσκευής, καθώς και του προεπιλεγμένου User-Agent του Grok CLI για inference και συγχρονισμό μοντέλων. Δέχεται SemVer με προαιρετικά μεταδεδομένα prerelease/build, έως 128 χαρακτήρες μετά την αφαίρεση των κενών στην αρχή και στο τέλος. Μη ορισμένες, κενές, μη έγκυρες τιμές ή τιμές που περιέχουν αλλαγές γραμμής χρησιμοποιούν το ενσωματωμένο pin. Η υπάρχουσα παράκαμψη πλήρους User-Agent για inference διατηρεί προτεραιότητα. |
| `CLAUDE_CODE_CLIENT_VERSION` | `2.1.280` | Παράκαμψη της διαφημιζόμενης έκδοσης Claude Code ανεξάρτητα από το `CLAUDE_USER_AGENT`. Η Anthropic περιορίζει ορισμένα μοντέλα με βάση αυτή την τιμή (#12417). |
| `CLAUDE_CODE_CLIENT_BUILD_REVISION` | `1e2` | Παράκαμψη του επιθέματος 3 χαρακτήρων που το OmniRoute προσαρτά στο `cc_version=` στο μπλοκ χρέωσης του Claude. Αυξήστε το παράλληλα με το `CLAUDE_CODE_CLIENT_VERSION` — η καρφίτσωση μόνο της έκδοσης διαφημίζει ένα ζεύγος `version.revision` που κανένα πραγματικό δυαδικό αρχείο δεν εκπέμπει. |
| `GITHUB_COPILOT_CLI_VERSION` | `1.0.91` | Παράκαμψη της διαφημιζόμενης έκδοσης Copilot CLI ανεξάρτητα από το `GITHUB_USER_AGENT` |
| `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` | Παράκαμψη του `clientId` κοινωνικού κωδικού συσκευής του Kiro (δημόσιο id) |
| `KIRO_VERIFY_FULL_CRC` | `false` | Προαιρετική ενεργοποίηση: πλήρης επικύρωση CRC μηνυμάτων ανά καρέ στη ροή συμβάντων του Kiro (αποσφαλμάτωση κατεστραμμένων ροών) |
| `KIRO_CREDIT_PRICE_USD` | `0.02` | USD ανά μονάδα Kiro· μετατρέπει τις μονάδες `meteringEvent` στο ακριβές κόστος ανά αίτημα |
| `KIRO_REQUIRE_CREDITS` | `false` | Αποτυχία μιας απόκρισης Kiro που δεν αναφέρει μέτρηση μονάδων, αντί να την καταγράψει ως μη χρεωμένη |
| `QODER_USER_AGENT` | `Qoder-Cli` | Όταν ενημερώνεται το Qoder CLI |
| `CURSOR_USER_AGENT` | `Cursor/3.3` | Όταν ενημερώνεται το Cursor |
> [!TIP]
> Μπορείτε να προσθέσετε παρακάμψεις User-Agent για **οποιονδήποτε** πάροχο χρησιμοποιώντας το μοτίβο `{PROVIDER_ID}_USER_AGENT`. Ο executor κατασκευάζει δυναμικά το όνομα της μεταβλητής περιβάλλοντος.
---
## 13. Συμβατότητα αποτυπώματος CLI
Όταν είναι ενεργοποιημένη, η OmniRoute αναδιατάσσει τις κεφαλίδες HTTP και τα πεδία του σώματος JSON ώστε να αντιστοιχούν στην ακριβή υπογραφή των επίσημων εργαλείων CLI. Αυτό μειώνει τον κίνδυνο επισήμανσης του λογαριασμού, διατηρώντας παράλληλα τη διεύθυνση 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
| Μεταβλητή | Προεπιλογή | Αρχείο προέλευσης | Περιγραφή |
| ----------------------- | ----------------------------- | ---------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| `KIMI_CLI_VERSION` | `1.36.0` | `src/lib/oauth/providers/kimi-coding.ts` | Παρακάμπτει την έκδοση του Kimi CLI που αποστέλλεται κατά τις κλήσεις OAuth/API. |
| `KIMI_CODING_DEVICE_ID` | _(καταγεγραμμένη προεπιλογή)_ | `src/lib/oauth/providers/kimi-coding.ts` | Παρακάμπτει το καταγεγραμμένο αναγνωριστικό συσκευής Kimi που χρησιμοποιείται στις κεφαλίδες πελάτη. |
> [!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]
> Οι στατικές καταχωρίσεις `${PROVIDER}_API_KEY` για Groq, xAI, Mistral, Perplexity, Together AI, Fireworks, Cerebras, Cohere, Nebius και Qianfan αφαιρέθηκαν στην v3.8.0, επειδή το περιβάλλον εκτέλεσης δεν τις διαβάζει πλέον — αυτοί οι πάροχοι βασίζονται αποκλειστικά στον Πίνακα ελέγχου / `data/provider-credentials.json` / την κρυπτογραφημένη βάση δεδομένων. Ανατρέξτε στην ενότητα _Έλεγχος: Καταργημένες / Ανενεργές μεταβλητές_ στο τέλος αυτού του εγγράφου για τη διαδρομή μετεγκατάστασης.
> [!TIP]
> Τα κλειδιά που ορίζονται μέσω του Πίνακα ελέγχου αποθηκεύονται κρυπτογραφημένα στο SQLite και έχουν προτεραιότητα έναντι των μεταβλητών περιβάλλοντος.
>
> **Jina:** Οι ενσωματώσεις `jina-ai/…`, η ανακατάταξη, η ταξινόμηση, η τμηματοποίηση και το `jina-search` **δεν** χρεώνουν ένα κλειδί περιβάλλοντος του συμπλέγματος όταν υπάρχει σύνδεση `jina-ai` (ή κοινόχρηστη `jina-reader`) στον πίνακα ελέγχου — το `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`. Η εγγενής πολυτροπική κίνηση χρησιμοποιεί το `x-goog-api-key` προς τα `:embedContent` / `:batchEmbedContents` — N στοιχεία OpenAI `input` μετατρέπονται σε N διανύσματα.
---
## 15. Ρυθμίσεις Χρονικών Ορίων
Όλες οι τιμές είναι σε **χιλιοστά του δευτερολέπτου**. Κεντρική επίλυση στο `src/shared/utils/runtimeTimeouts.ts`.
### Ιεραρχία Χρονικών Ορίων
```
REQUEST_TIMEOUT_MS (καθολική παράκαμψη)
├─→ FETCH_TIMEOUT_MS (κλήσεις προς τον upstream πάροχο, προεπιλογή: 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)
│ ├── OPENCODE_RESPONSES_HEADERS_WAIT_MS (ανεξάρτητο, προεπιλογή: 0 = απενεργοποιημένο, προτεινόμενη: 30000)
│ ├── OPENCODE_RESPONSES_HEADERS_WAIT_MAX_ROTATIONS (ανεξάρτητο, προεπιλογή: 2)
│ ├── 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 για κλήσεις προς upstream παρόχους. |
| `STREAM_IDLE_TIMEOUT_MS` | `600000` | Μέγιστη σιωπή μεταξύ ακατέργαστων upstream bytes πριν από τη ματαίωση. Τα μοντέλα εκτεταμένης σκέψης σπανίως σταματούν >90s. |
| `STREAM_ACTIVE_TIMEOUT_MS` | `1260000` | Μέγιστη συνολική ενεργή διάρκεια ζωής ροής SSE· δεν επαναφέρεται ποτέ με upstream bytes και είναι ανεξάρτητη από το `REQUEST_TIMEOUT_MS`. Προκύπτει από το μεγαλύτερο ανά μοντέλο `timeoutMs` στο μητρώο (1200000, Codex) συν ένα περιθώριο 60000, ώστε ένα μοντέλο που του επιτρέπεται να καταναλώσει ολόκληρο τον προϋπολογισμό του να μην τερματίζεται ποτέ στη μέση της απάντησης. Ορίστε `0` για απενεργοποίηση. |
| `OMNIROUTE_SSE_COMMENTS` | _(απενεργοποιημένο)_ | Εάν το OmniRoute επιτρέπεται να εκπέμπει γραμμές σχολίων SSE `:` (π.χ. το heartbeat `: keepalive` και τα trailers μεταδεδομένων `x-omniroute-*`). Απενεργοποιημένο από προεπιλογή (#10524), καθώς αυστηροί πελάτες συμβατοί με OpenAI εκτελούν JSON.parse σε κάθε γραμμή SSE και καταρρέουν σε σχόλια `:`· τα heartbeats `data:` δεν επηρεάζονται. Ορίστε `on`/`true`/`1`/`yes` για εκ νέου ενεργοποίηση. Χρησιμοποιείται από το `open-sse/utils/sseHeartbeat.ts`. |
| `SSE_COALESCE_MS` | `0` (ανενεργό) | Προαιρετικό: συγχώνευση διαδοχικών συμβάντων Claude `content_block_delta` (ίδιος δείκτης μπλοκ και τύπος delta) που αποστέλλονται σε πελάτες Claude, με εκκαθάριση τουλάχιστον κάθε N ms. Χωρίς απώλειες· τα `signature_delta` και τα συμβάντα ορίου δεν συγχωνεύονται ποτέ. Ισχύει για κάθε τύπο delta, εκτός εάν οριστεί μια ανά τύπο μεταβλητή παρακάτω. Χρησιμοποιείται από το `open-sse/utils/sseDeltaCoalesce.ts`. |
| `SSE_COALESCE_THINKING_MS` | `0` (ανενεργό) | Παράκαμψη ανά τύπο του `SSE_COALESCE_MS` για το `thinking_delta`. |
| `SSE_COALESCE_TEXT_MS` | `0` (ανενεργό) | Παράκαμψη ανά τύπο του `SSE_COALESCE_MS` για το `text_delta`. |
| `SSE_COALESCE_INPUT_JSON_MS` | `0` (ανενεργό) | Παράκαμψη ανά τύπο του `SSE_COALESCE_MS` για το `input_json_delta`. |
| `SSE_FRAME_COALESCE_MS` | `0` (ανενεργό) | Προαιρετικό: ομαδοποίηση πλαισίων SSE που προωθούνται εντός N ms σε μία εγγραφή προς τον πελάτη. Το πρώτο πλαίσιο και τα τελικά πλαίσια (`[DONE]`, `message_stop`, `error`, `response.completed`/`failed`/`incomplete`) δεν καθυστερούν ποτέ· με την ομαδοποίηση ενεργή, το ITL μετρά τα κενά μεταξύ παρτίδων. Χρησιμοποιείται από το `open-sse/utils/sseOutputSink.ts`. |
| `SSE_STALL_WATCHDOG` | `timer` | Υλοποίηση watchdog στασιμότητας bytes για ροές απαντήσεων. Το `timer` επανοπλίζει έναν χρονομετρητή ανά upstream chunk (ενεργοποιείται ακριβώς στο όριο στασιμότητας)· το `interval` διατηρεί έναν έλεγχο ανά ροή με περίοδο `clamp(budget/4, 1s, 5s)`, ώστε μια στασιμότητα να ενεργοποιείται εντός ορίου + περιόδου. Χρησιμοποιείται από το `open-sse/utils/streamStallWatchdog.ts`. |
| `STREAM_READINESS_TIMEOUT_MS` | `80000` | Χρόνος για τη λήψη του πρώτου συμβάντος SSE που δεν είναι ping. Κληρονομεί το `REQUEST_TIMEOUT_MS` όταν αυτό είναι ορισμένο. |
| `STREAM_READINESS_MAX_TIMEOUT_MS` | `180000` | Μέγιστο προσαρμοστικό παράθυρο ετοιμότητας πρώτου συμβάντος για μεγάλα αιτήματα ροής, με βαριά χρήση εργαλείων ή υψηλή συλλογιστική. |
| `OMNIROUTE_AGENT_GOAL_POLICY_ENABLED` | `true` | Διακόπτης απενεργοποίησης (kill-switch) για την ευρετική `/goal`. Ορίστε `false`/`0`/`off` για πλήρη απενεργοποίηση της ανίχνευσης — τα χρονικά όρια ετοιμότητας και η ανάκτηση ροής δεν αυξάνονται ποτέ από το σώμα/τις κεφαλίδες του αιτήματος, μετριάζοντας την ενίσχυση χρονικών ορίων που ελέγχεται από τον πελάτη. |
| `OMNIROUTE_AGENT_GOAL_READINESS_MAX_TIMEOUT_MS` | `600000` | Μέγιστο παράθυρο ετοιμότητας πρώτου συμβάντος για ανιχνευμένες εκτελέσεις agent `/goal` ή αιτήματα που επιβάλλονται με `x-omniroute-agent-goal`. |
| `OMNIROUTE_AGENT_GOAL_STREAM_RECOVERY` | `true` | Αυτόματη ενεργοποίηση πρώιμης ανάκτησης ροής για ανιχνευμένες εκτελέσεις agent `/goal`. Ορίστε `false`/`0`/`off` για απενεργοποίηση της ειδικής για το goal προαιρετικής ενεργοποίησης. Αυτό μπορεί μόνο να ΠΡΟΣΘΕΣΕΙ ανάκτηση επιπλέον της προεπιλογής του χειριστή — δεν παρακάμπτει ποτέ μια ρητή εξαίρεση μέσω `STREAM_RECOVERY_ENABLED`/ρυθμίσεων DB. |
| `OMNIROUTE_CODEX_DROP_NONSTANDARD_EVENTS` | `true` | Αφαίρεση μη τυπικών συμβάντων SSE `codex.*` (π.χ. `codex.rate_limits`) που διακόπτουν το `responses.stream()` του OpenAI SDK με σφάλμα 502. Προεπιλεγμένα ΕΝΕΡΓΟ (#11014). Ορίστε `0`/`false`/`no`/`off` για να τα προωθήσετε. |
| `OMNIROUTE_CODEX_APPSERVER_WS` | _(μη ορισμένο)_ | Προαιρετική μεταφορά app-server Codex. Τελικό σημείο WebSocket (`ws://`/`wss://`) ενός τοπικού sidecar `codex app-server`. Όταν ορίζεται μαζί με ένα token, τα αιτήματα Codex δρομολογούνται μέσω JSON-RPC στο sidecar αντί για το HTTP Responses API. Μπορεί επίσης να οριστεί ανά σύνδεση μέσω `providerSpecificData.codexAppServerUrl`. Χρησιμοποιείται από το `open-sse/executors/codex/appServerConfig.ts`. |
| `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN` | _(μη ορισμένο)_ | Ενσωματωμένο token capability/bearer που παρουσιάζεται στον app-server. Παράκαμψη ανά σύνδεση: `providerSpecificData.codexAppServerToken`. |
| `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN_FILE` | _(μη ορισμένο)_ | Διαδρομή προς αρχείο που περιέχει το token δυνατότητας του app-server (από `codex app-server --ws-token-file`). Χρησιμοποιείται όταν το `OMNIROUTE_CODEX_APPSERVER_WS_TOKEN` δεν έχει οριστεί. Παράκαμψη ανά σύνδεση: `providerSpecificData.codexAppServerTokenFile`. |
| `OMNIROUTE_CODEX_APPSERVER_CWD` | `/tmp` | Κατάλογος εργασίας στον οποίο εκτελείται το turn του app-server. Παράκαμψη ανά σύνδεση: `providerSpecificData.codexAppServerCwd`. |
| `OMNIROUTE_CODEX_APPSERVER_APPROVAL` | _(μη ορισμένο)_ | Πολιτική έγκρισης που περνά στο turn του app-server (π.χ. `never`, `on-request`). Παράκαμψη ανά σύνδεση: `providerSpecificData.codexAppServerApprovalPolicy`. |
| `OMNIROUTE_CODEX_APPSERVER_SANDBOX` | _(μη ορισμένο)_ | Πολιτική sandbox που περνά στο turn του app-server (π.χ. `read-only`, `workspace-write`, `danger-full-access`). Όταν δεν έχει οριστεί, ο executor χρησιμοποιεί από προεπιλογή `workspace-write` (ενισχυμένο· προηγουμένως `danger-full-access`). Παράκαμψη ανά σύνδεση: `providerSpecificData.codexAppServerSandbox`. |
| `OMNIROUTE_CODEX_APPSERVER_AUTO_APPROVE` | `false` | Αυτόματη έγκριση των δικών του προτροπών έγκρισης του app-server (εκτέλεση εντολών/αρχείων/αδειών στον κεντρικό υπολογιστή). Απενεργοποιημένο από προεπιλογή — οι προτροπές απορρίπτονται αυτόματα· οι κλήσεις εργαλείων του harness δεν επηρεάζονται (διέρχονται μέσω του ξεχωριστού περάσματος `item/tool/call`). Δέχεται `true`/`1`/`yes`. Παράκαμψη ανά σύνδεση: `providerSpecificData.codexAppServerAutoApprove`. |
| `FETCH_HEADERS_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | Χρόνος για τη λήψη των headers απόκρισης. |
| `OMNIROUTE_FETCH_START_TIMEOUT_CAP_MS` | `110000` | Μέγιστη αναμονή για headers απόκρισης σε αιτήματα streaming (ms). Το `0` απενεργοποιεί αυτό το ανώτατο όριο· μια ρητή τιμή `fetchStartTimeoutCapMs` του παρόχου έχει προτεραιότητα. |
| `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` | `30000` (30s) | Μέγιστη αναμονή έναρξης απόκρισης (ms) για κάθε απευθείας προσπάθεια χωρίς proxy. Σε timeout γίνεται μία επανάληψη σε νέο socket· ορίστε `0` για να απενεργοποιήσετε το όριο και να διατηρήσετε την προηγούμενη συμπεριφορά. |
| `OMNIROUTE_LOCAL_DIRECT_HEADERS_TIMEOUT_MS` | `300000` (5 min) | Κατώτατο όριο έναρξης απόκρισης (ms) για απευθείας προσπάθειες χωρίς proxy των οποίων ο κεντρικός υπολογιστής προορισμού είναι ιδιωτικός/LAN/loopback (για παράδειγμα `localhost`, `host.docker.internal`, `192.168.x.x`), ώστε μια εγγενής ψυχρή εκκίνηση του Ollama να μην διακόπτεται από την παραπάνω προεπιλογή των 30s. Λειτουργεί ως κατώτατο όριο: η πραγματική αναμονή είναι η μεγαλύτερη μεταξύ αυτής της τιμής και του `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS`· το `0` ή μια μη έγκυρη τιμή καταργεί το τοπικό κατώτατο όριο. Οι απομακρυσμένοι κεντρικοί υπολογιστές δεν επηρεάζονται. |
| `OMNIROUTE_DIRECT_RESPONSE_RETRY_TIMEOUT_MS` | `600000` (10 min) | Ανώτατο όριο (ms) για την προσπάθεια ΕΠΑΝΑΛΗΨΗΣ σε νέο socket μετά από timeout έναρξης απόκρισης της παραπάνω pooled προσπάθειας (#13703). Εφαρμόζεται μόνο όταν ο καλών έχει ήδη επισυνάψει το δικό του σήμα προθεσμίας (η επιλυμένη διαδοχή σύνδεσης/μοντέλου/παρόχου/`FETCH_TIMEOUT_MS`)· εκείνο το σήμα είναι το πραγματικό όριο και ενεργοποιείται πρώτο στην προβλεπόμενη διαδρομή, οπότε αυτό αποτελεί γενναιόδωρο δίχτυ ασφαλείας παρά σταθερό ανώτατο όριο — χωρίς αυτό, η επανάληψη επαναχρησιμοποιούσε το ίδιο σύντομο παράθυρο `OMNIROUTE_DIRECT_HEADERS_TIMEOUT_MS` με την pooled προσπάθεια και επέστρεφε 504 σε υγιή μοντέλα συλλογισμού με αργό TTFB. Δεν επιτρέπεται ποτέ κάτω από το παραπάνω σταθερό κατώτατο όριο· όταν ο καλών δεν παρέχει καθόλου σήμα προθεσμίας, η επανάληψη διατηρεί το σταθερό κατώτατο όριο αμετάβλητο. |
| `FETCH_BODY_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | Χρόνος για τη λήψη του πλήρους σώματος απόκρισης. |
| `FETCH_CONNECT_TIMEOUT_MS` | `30000` | Timeout εγκαθίδρυσης σύνδεσης TCP. |
| `FETCH_KEEPALIVE_TIMEOUT_MS` | `4000` | Timeout αδράνειας socket keep-alive. |
| `TLS_CLIENT_TIMEOUT_MS` | = `FETCH_TIMEOUT_MS` | Timeout του proxy αποτυπώματος TLS (wreq-js). |
| `TLS_FIRST_BYTE_WATCHDOG_MS` | `10000` | Περιορίζει τον χρόνο μέχρι το πρώτο byte ειδικά στο σώμα του μεταφορέα αποτυπώματος TLS του wreq-js· το `TLS_CLIENT_TIMEOUT_MS` από μόνο του δεν μπορεί να εντοπίσει ένα σώμα που έχει κολλήσει, καθώς ολοκληρώνεται μόλις φτάσουν τα headers (#12656). Σε timeout ακυρώνεται ο αναγνώστης wreq και γίνεται επιστροφή στον απευθείας/proxy dispatcher· το `0` απενεργοποιεί τον watchdog. |
| `RESPONSES_FIRST_BYTE_TIMEOUT_MS` | `15000` | Μόνο για τον executor OpenCode, και μόνο όσο η σημαία χαρακτηριστικού `OPENCODE_RESPONSES_STALL_ROTATION` είναι ενεργή (από προεπιλογή ανενεργή): περιορίζει την αναμονή για το πρώτο byte σώματος μιας απάντησης Responses σε ροή μετά τα headers της (#13484). Μια ροή Responses ανοίγει με `response.created`, οπότε η σιωπή πέρα από αυτό το παράθυρο αποτελεί στασιμότητα: ο λογαριασμός τίθεται σε ψύξη και το αίτημα μεταφέρεται μία φορά στον επόμενο λογαριασμό· μια δεύτερη στασιμότητα αποτυγχάνει άμεσα. Το `0` απενεργοποιεί τον έλεγχο ακόμη και με ενεργή τη σημαία. |
| `OPENCODE_RESPONSES_HEADERS_WAIT_MS` | `0` (= ανενεργό) | Μόνο για τον executor OpenCode: περιορίζει την αναμονή για headers απόκρισης upstream σε μια κλήση Responses σε ροή όταν είναι ακόμη διαθέσιμος άλλος λογαριασμός — ένα αίτημα σε ουρά σταματά να περιμένει και προχωρά αντί να δεσμεύει ολόκληρο το παράθυρο headers. Επηρεάζονται μόνο οι κλήσεις Responses σε ροή (η ροή Responses ανοίγει με `response.created`, οπότε η σιωπή εκεί είναι ουρά, όχι παραγωγή)· τα chat completions και οι κλήσεις χωρίς ροή παραμένουν ανεπηρέαστα, και το παράθυρο μόνο συντομεύει το πραγματικό ανώτατο όριο έναρξης λήψης, ποτέ δεν το παρατείνει. Προτεινόμενη τιμή κατά την ενεργοποίηση: `30000`. Το `0` απενεργοποιεί. |
| `OPENCODE_RESPONSES_HEADERS_WAIT_MAX_ROTATIONS` | `2` | Μόνο για τον executor OpenCode: πόσες φορές ανά αίτημα το παραπάνω όριο αναμονής headers μπορεί να μετακινηθεί στον επόμενο λογαριασμό. Ο τελευταίος εναπομείνας λογαριασμός διατηρεί πάντα το πλήρες παράθυρο headers. |
| `OPENCODE_PARK_AND_RESUME` | `false` | Μόνο για τον executor OpenCode: θέτει το αίτημα σε αναμονή με heartbeat μετά από επαναλαμβανόμενα παροδικά 429 (ή έναν φρέσκο δείκτη πίεσης pool) και στη συνέχεια επαναπαίζει ένα περιορισμένο σκέλος έως 3 διαδοχικών λογαριασμών αντί να απλώσει ολόκληρο τον στόλο (#13924). Απενεργοποιημένο από προεπιλογή: κάθε 429 πραγματοποιεί εναλλαγή στον επόμενο λογαριασμό ακριβώς όπως πριν. |
| `OPENCODE_PARK_REPLAY_SERVE_SETASIDE` | `false` | Μόνο για τον executor OpenCode: όταν κάθε λογαριασμός έτοιμος-μετά-cooldown στο σκέλος επανάληψης park-and-resume παραμερίζεται από τη μνήμη άρνησης proxy, εξυπηρετήστε τους ούτως ή άλλως αντί να μην επαναληφθεί τίποτα (#14851, συνέχεια του #14750). Απενεργοποιημένο από προεπιλογή: το σκέλος επανάληψης είναι κενό σε αυτή την περίπτωση, όπως πριν το #14750. |
| `STREAM_READINESS_STALL_RETRY` | `false` | Μόνο για streaming chat: όταν το πρώτο body του upstream σταματά πριν παράγει ένα χρησιμοποιήσιμο συμβάν, εκτελεί μία περιορισμένη δεύτερη προσπάθεια μέσω της ίδιας διαδρομής δρομολόγησης με το ίδιο budget ετοιμότητας και χωρίς ποινή λογαριασμού. Απενεργοποιημένο από προεπιλογή: ένα πρώτο body που σταμάτησε αποτυγχάνει το αίτημα χωρίς επανάληψη. |
| `OPENCODE_POOL_RESELECT` | `false` | Μόνο για τον executor OpenCode: μετά από ένα 429 από πάροχο με ομαδοποίηση egress σε λογαριασμό χωρίς proxy υπό ambient πλαίσιο pool, ζητά από το connection pool ένα άλλο μέλος για την επόμενη προσπάθεια αντί να επαναλάβει στην ίδια διεύθυνση egress. Ταξινομεί, δεν αποκλείει ποτέ: ένα εξαντλημένο pool διατηρεί την τρέχουσα συμπεριφορά. Απενεργοποιημένο από προεπιλογή: κάθε 429 πραγματοποιεί εναλλαγή στον επόμενο λογαριασμό ακριβώς όπως πριν. |
| `OPENCODE_POOL_STRAIN_MARKER_PATH` | _(μη ορισμένο)_ | Μόνο για τον executor OpenCode: διαδρομή παράκαμψης του δείκτη πίεσης pool που διαβάζεται πριν το parking (`{since, reason, ttl_s}`, προεπιλογή `/tmp/opencode-pool-strain.json`, #13924). Ένας φρέσκος δείκτης θέτει σε αναμονή χωρίς επαναμέτρηση· αν απουσιάζει ή είναι παρωχημένος, γίνεται επιστροφή στον μετρητή burst. |
| `API_BRIDGE_PROXY_TIMEOUT_MS` | `30000` | Timeout βήματος proxy για αιτήματα bridge `/v1`. |
| `FIRECRAWL_BASE_URL` | `https://api.firecrawl.dev` | Κατευθύνετε τον executor web-fetch του Firecrawl σε μια self-hosted εγκατάσταση (το API key είναι προαιρετικό εκτός cloud). |
| `FIRECRAWL_TIMEOUT_MS` | `30000` | Timeout ανά αίτημα για τον executor web-fetch του Firecrawl. |
| `TAVILY_BASE_URL` | _(μη ορισμένο)_ | Base URL για τον fetcher quota `/usage` του Tavily (Provider Limits)· αγνοείται όταν δείχνει στο `api.tavily.com`. Όταν δεν έχει οριστεί, γίνεται επιστροφή στο base URL της σύνδεσης. |
| `API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS` | `300000` | Συνολικό timeout αιτήματος server για το bridge. |
| `API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS` | `60000` | Χρόνος αποστολής των headers απόκρισης μέσω του bridge. |
| `API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS` | `5000` | Timeout αδράνειας keep-alive του bridge. |
| `API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS` | `0` | Timeout ακατέργαστου socket (0 = απενεργοποιημένο). |
| `SHUTDOWN_TIMEOUT_MS` | `30000` | Περίοδος χάριτος σε SIGTERM/SIGINT πριν από την εξαναγκασμένη έξοδο. |
| `OMNIROUTE_DEFAULT_FETCH_TIMEOUT_MS` | `120000` | Εναλλακτική τιμή που χρησιμοποιείται από το `src/shared/utils/fetchTimeout.ts` όταν το `FETCH_TIMEOUT_MS` δεν έχει οριστεί. |
| `OMNIROUTE_PROVIDER_PROBE_TIMEOUT_MS` | `8000` | Timeout (ms) για τα presets `validationRead` και `modelsProbe` στο `src/shared/network/safeOutboundFetch.ts`. Αυξήστε το για αργά endpoints (Cerebras, Cloudflare AI, Groq) για να αποτραπεί η διακύμανση μεταξύ active/error στο dashboard. Επιστρέφει σε 8000ms για μη έγκυρες (<1000) ή μη αριθμητικές τιμές. |
| `OMNIROUTE_RELAY_FETCH_TIMEOUT_MS` | `25000` | Timeout fetch ειδικό για relay στο `open-sse/utils/proxyFetch.ts` (#9158). Ένα κολλημένο relay πρέπει να αποτύχει πριν από το timeout του client/agent (~30s) ώστε οι καλούντες να βλέπουν μια αποτυχία ειδική για το relay αντί για ένα γενικό timeout upstream. Περιορίζεται στο `29000` ώστε να ενεργοποιείται πάντα πρώτο. |
| `OMNIROUTE_RETRY_BACKOFF_MS` | `10` | Κοινό retry backoff για τις διαδρομές direct/relay/proxy με μία επανάληψη στο `open-sse/utils/proxyFetch.ts` (#9158). `0` = άμεση επανάληψη. |
| `OMNIROUTE_CLAUDE_TLS_TIMEOUT_MS` | `60000` | Εγγενές timeout αιτήματος wreq-js (`claudeTlsClient.ts`). |
| `OMNIROUTE_CLAUDE_TLS_GRACE_MS` | `10000` | Απόλυτη περίοδος χάριτος σκληρής προθεσμίας JS που προστίθεται πάνω στο εγγενές timeout. |
| `OMNIROUTE_PPLX_TLS_TIMEOUT_MS` | `30000` | Εγγενές timeout αιτήματος wreq-js (`perplexityTlsClient.ts`). |
| `OMNIROUTE_PPLX_TLS_GRACE_MS` | `10000` | Απόλυτο επιπλέον περιθώριο σκληρής τελικής προθεσμίας JS πέρα από το εγγενές timeout. |
| `OMNIROUTE_PPLX_SEARCH_HINT` | `0` (off) | Προσθέτει το "You have built-in web search. Answer questions directly using search results." στο μήνυμα συστήματος του καλούντος (`perplexity-web/protocol.ts`). Απενεργοποιημένο από προεπιλογή — το Perplexity κάνει αναζήτηση ούτως ή άλλως και η πρόταση διαρρέει στις απαντήσεις ως μετα-σχολιασμός για τους πελάτες προγραμματισμού. Ορίστε `1`/`true`/`yes`/`on` για επαναφορά. |
| `OMNIROUTE_GROK_TLS_TIMEOUT_MS` | `60000` | Εγγενές timeout αιτήματος wreq-js (`grokTlsClient.ts`). |
| `OMNIROUTE_GROK_TLS_GRACE_MS` | `10000` | Απόλυτο επιπλέον περιθώριο σκληρής τελικής προθεσμίας JS πέρα από το εγγενές timeout. |
| `OMNIROUTE_NOTION_TLS_TIMEOUT_MS` | `30000` | Εγγενές timeout αιτήματος wreq-js (`notionTlsClient.ts`)· το `notion-web` το αυξάνει ανά αίτημα σε `180000` για εκτενείς δημιουργίες. |
| `OMNIROUTE_NOTION_TLS_GRACE_MS` | `10000` | Απόλυτο επιπλέον περιθώριο σκληρής τελικής προθεσμίας JS πέρα από το εγγενές timeout. |
| `OMNIROUTE_BROWSER_POOL` | `on` | Κοινόχρηστο pool browser Playwright για συνομιλία web-cookie μέσω browser (`browserPool.ts`)· ορίστε `off` για απενεργοποίηση. |
| `OBSCURA_BIN` | `auto-detect` | Διαδρομή προς το δυαδικό αρχείο `obscura` που χρησιμοποιείται ως κύρια μηχανή από το pool browser και τον executor του Cloudflare Playground (`open-sse/services/obscura.ts`)· εντοπίζεται αυτόματα από το PATH του συστήματος όταν δεν έχει οριστεί. |
| `OBSCURA_CDP_ENDPOINT` | _(δεν έχει οριστεί)_ | Δείχνει σε ένα ήδη εκτελούμενο Obscura (`http://host:port`) αντί να εκκινεί νέο· η μονάδα δεν κατέχει αυτή τη διεργασία (`open-sse/services/obscura.ts`). |
| `OBSCURA_PORT` | `random free port` | Ρητή θύρα για το εκκινούμενο `obscura serve`· όταν δεν έχει οριστεί, επιλέγεται αυτόματα μια ελεύθερη θύρα (`open-sse/services/obscura.ts`). |
| `WEB_COOKIE_USE_BROWSER` | `0` | Εντάσσει ένα αίτημα συνομιλίας web-cookie στη διαδρομή μέσω browser (`browserBackedChat.ts`)· `1` για ενεργοποίηση. |
| `KIMI_WEB_BASE_URL` | `https://www.kimi.ai` | Βασικό URL για τον executor Kimi Web (διεθνές kimi.ai Connect-RPC) (`kimi-web.ts`)· παρακάμψτε μόνο για endpoints mirror/proxy. |
| `KIMI_WEB_CHAT_URL` | `/apiv2/kimi.gateway.chat.v1.ChatService/Chat` | Πλήρες endpoint συνομιλίας για τον executor Kimi Web (`kimi-web.ts`). |
| `OMNIROUTE_LOGIN_BROWSER_PATH` | _(αυτόματος εντοπισμός)_ | Διαδρομή προς εκτελέσιμο Chrome/Edge του συστήματος για τη διαδραστική σύνδεση μέσω browser στο Adobe Firefly (`adobeFireflyBrowserLogin.ts`)· παρακάμπτει τον αυτόματο εντοπισμό ανά λειτουργικό σύστημα. |
| `OMNIROUTE_STANDALONE_DIR` | _Έξοδος standalone στο .build/_ | Παράκαμψη κατά το build για τον κατάλογο εξόδου standalone που καταναλώνεται από το βήμα colocation μετά το build (`scripts/build/colocate-standalone.mjs`)· εργαλείο build, όχι runtime. |
Οι προσπάθειες στόχων combo κληρονομούν το επιλυμένο timeout αιτήματος upstream (`FETCH_TIMEOUT_MS`, ή
`REQUEST_TIMEOUT_MS` όταν αυτό παρέχει την προεπιλογή του fetch). Ορίστε `targetTimeoutMs` σε ένα combo,
στις προεπιλογές combo ή σε παράκαμψη παρόχου μόνο για να επιταχύνετε το fallback του combo· οι τιμές πάνω από το
τρέχον timeout upstream περιορίζονται στο timeout upstream.
Το `comboTimeoutMs` είναι ξεχωριστό όριο πραγματικού χρόνου (wall-clock) για ολόκληρο το combo σε όλους τους
στόχους failover. Αφήστε το χωρίς τιμή ή `0` για απεριόριστες επαναλήψεις (εξακολουθεί να ισχύει
μια σκληρά κωδικοποιημένη διακοπή μπλοκαρίσματος 10 λεπτών στο `comboPredicates.ts`). Μια θετική τιμή
αντικαθιστά αυτό το δίχτυ ασφαλείας για το combo. Κρατήστε το `comboTimeoutMs` μεγαλύτερο από το
`targetTimeoutMs`, ώστε το failover να εξακολουθεί να έχει χρόνο μετά από έναν αργό πρώτο στόχο.
### Όρια Διακόπτη Κυκλώματος
Ρύθμιση του διακόπτη κυκλώματος σε επίπεδο παρόχου. Οι προεπιλογές αντικατοπτρίζουν τις κλιμακωμένες τιμές που χρησιμοποιούνται από την 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` | Παράθυρο επαναφοράς (ms) για τον διακόπτη παρόχου OAuth. |
| `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` | Παράθυρο επαναφοράς (ms) για τον διακόπτη παρόχου με κλειδί API. |
| `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` | Διακόπτης σε επίπεδο παρόχου: κυλιόμενο παράθυρο μέτρησης αποτυχιών (ms) για παρόχους OAuth. |
| `OMNIROUTE_PROVIDER_BREAKER_OAUTH_COOLDOWN_MS` | `300000` | `open-sse/config/constants.ts` | Διακόπτης σε επίπεδο παρόχου: περίοδος αναμονής (ms) μόλις επιτευχθεί το όριο του παρόχου OAuth. |
| `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` | Μέγιστος πολλαπλασιαστής κλιμάκωσης resetTimeout για πάροχο OAuth. |
| `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` | Διακόπτης σε επίπεδο παρόχου: κυλιόμενο παράθυρο μέτρησης αποτυχιών (ms) για παρόχους με κλειδί API. |
| `OMNIROUTE_PROVIDER_BREAKER_API_KEY_COOLDOWN_MS` | `600000` | `open-sse/config/constants.ts` | Διακόπτης σε επίπεδο παρόχου: περίοδος αναμονής (ms) μόλις επιτευχθεί το όριο του παρόχου με κλειδί API. |
| `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` | Μέγιστος πολλαπλασιαστής κλιμάκωσης resetTimeout για πάροχο με κλειδί API. |
| `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) μόλις επιτευχθεί το όριο του τοπικού παρόχου. |
| `OMNIROUTE_API_KEY_COOLDOWN_MS` | `60000` | `open-sse/services/apiKeyRotator.ts` | Περίοδος αναμονής ανά κλειδί (ms) που εφαρμόζεται από την εναλλαγή πολλαπλών κλειδιών API όταν ένα 429 από τον upstream δεν περιέχει `Retry-After` (#14573). Μη θετικές ή μη αριθμητικές τιμές επιστρέφουν στην προεπιλογή. |
| `PIN_DROP_BACKOFF_LEVEL` | `2` | `open-sse/services/combo.ts` | Βάθος backoff στο οποίο ο πάροχος ενός pin κρυφής μνήμης πλαισίου θεωρείται διαρκώς μη υγιής και το pin απορρίπτεται για failover. |
| `PIN_DROP_GRACE_MS` | `20000` | `open-sse/services/combo.ts` | Παράθυρο anti-flap (ms) που ανέχεται σύντομες παροδικές περιόδους αναμονής πριν απορρίψει ένα pin κρυφής μνήμης πλαισίου. |
### Σενάρια
| Σενάριο | Διαμόρφωση |
| -------------------------------------- | --------------------------------------------------------- |
| **Μακράς διάρκειας δημιουργία κώδικα** | `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` ή απλά byte. |
| `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` | Μέγιστος αριθμός γραμμών στον πίνακα SQLite `call_logs` πριν από την εκκαθάριση. |
| `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` | Μέγιστο μέγεθος τεχνουργήματος καταγραφής κλήσεων της διοχέτευσης σε KB όταν `call_log_pipeline_enabled=true`. |
| `PROXY_LOGS_TABLE_MAX_ROWS` | `100000` | Μέγιστος αριθμός γραμμών στον πίνακα SQLite `proxy_logs` πριν από την εκκαθάριση. |
| `PROXY_LOG_INCLUDE_IPS` | `false` | Συμπεριλαμβάνει τις διευθύνσεις IP πελάτη/εξόδου και τα προθέματα λογαριασμών στις καταγραφές κονσόλας `[ProxyEgress]`. Οι εγγραφές καταγραφής proxy στον πίνακα ελέγχου/στη βάση δεδομένων διατηρούν όλες τις λεπτομέρειες. |
| `PROXY_LOG_FIRST_CHUNK_TIMING` | `false` | Ορίστε το σε `"true"` ή `"1"` για την καταγραφή του `first_chunk_ms` (από την έναρξη αποστολής έως το πρώτο χρήσιμο byte του σώματος) στις γραμμές καταγραφής proxy. Περιτυλίγει κάθε ανάντη σώμα σε μια νωχελική ροή διέλευσης και ενημερώνει τη γραμμή μόλις φτάσει το byte· είναι απενεργοποιημένο από προεπιλογή, ώστε οι αποκρίσεις να διέρχονται χωρίς τροποποίηση. |
| `APP_LOG_ROTATION_CHECK_INTERVAL_MS` | `60000` (1 λεπτό) | Πόσο συχνά το `src/lib/logRotation.ts` επανελέγχει το μέγεθος του ενεργού αρχείου καταγραφής. |
| `CHAT_LOG_TEXT_LIMIT` | `65536` | Μέγιστο μήκος συμβολοσειράς που διατηρείται στα τεχνουργήματα καταγραφής συνομιλιών (προεπιλογή 64 KB). |
| `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` | _αυτόματο_ (bare metal); **`1024` στο Docker image** | **Συνιστώμενο** όριο V8 heap (MB) για Docker/standalone. Όταν δεν έχει οριστεί, βαθμονομείται δυναμικά (~35% της RAM του συστήματος, περιορισμένο στο `[512, 4096]`)· το `512` είναι μόνο το κατώτατο όριο όταν δεν μπορεί να αναγνωστεί η συνολική μνήμη. Στο `run-standalone.mjs` (Docker CMD), μια **ρητή** τιμή προστίθεται ως `--max-old-space-size` και **υπερισχύει** έναντι αντικρουόμενης σημαίας heap του NODE_OPTIONS (V8 last-flag). Το `omniroute serve` εξακολουθεί να προτιμά ένα υπάρχον heap NODE_OPTIONS (#5238). Μην ορίζετε και τα δύο σε διαφορετικούς αριθμούς — η διεργασία καταγράφει μια προειδοποίηση που αναφέρει και τις δύο τιμές και ποια υπερισχύει. **Το επίσημο Docker image ορίζει πάντα `1024`, οπότε η βαθμονόμηση δεν εκτελείται ποτέ εκεί.** Το `/v1/responses` του coding agent χρειάζεται `8192`–`12288` συν περιθώριο cgroup — δείτε [Οδηγός Docker — RAM χρόνου εκτέλεσης](../guides/DOCKER_GUIDE.md#runtime-ram-for-coding-agents). |
| `OMNIROUTE_RSS_PRESSURE_MB` | _αυτόματο_ (`max(3072, 2 × OMNIROUTE_MEMORY_MB)`· απενεργοποιημένο όταν το `OMNIROUTE_MEMORY_MB` δεν έχει οριστεί) | `open-sse/utils/resourcePressure.ts` | Απόλυτη ασφάλεια RSS διεργασίας (MB) για εγγενή/εξωτερική μνήμη που το V8 `heapUsed` δεν μπορεί να δει· πάνω από αυτήν, νέα αιτήματα λαμβάνουν 503 `resource_pressure`. Το RSS σπάνια μειώνεται μετά από μια αιχμή, οπότε συνδυάστε το με το `OMNIROUTE_PRESSURE_SELF_RESTART`. |
| `PROMPT_CACHE_MAX_SIZE` | `50` | Μέγιστος αριθμός αποθηκευμένων καταχωρήσεων system prompt. |
| `PROMPT_CACHE_MAX_BYTES` | `2097152` (2 MB) | Μέγιστο συνολικό μέγεθος cache prompt. |
| `PROMPT_CACHE_TTL_MS` | `300000` (5 λεπτά) | TTL καταχώρησης cache prompt. |
| `SEMANTIC_CACHE_MAX_SIZE` | `100` | Μέγιστος αριθμός αποθηκευμένων απαντήσεων με temperature=0. |
| `SEMANTIC_CACHE_MAX_BYTES` | `4194304` (4 MB) | Μέγιστο συνολικό μέγεθος σημασιολογικής cache. |
| `SEMANTIC_CACHE_TTL_MS` | `1800000` (30 λεπτά) | TTL καταχώρησης σημασιολογικής cache. |
| `OMNIROUTE_CORPUS_CACHE_SIZE` | `5` | Ρίζες τοπικού corpus που διατηρούν ταυτόχρονα έναν ενεργό ευρετήριο στη μνήμη (`src/lib/localCorpus/configured.ts`). LRU: στο όριο, ο ευρετήριο της ρίζας που χρησιμοποιήθηκε λιγότερο πρόσφατα αφαιρείται και ξαναχτίζεται στο επόμενο ερώτημά της. Περιορίζεται σε ελάχιστο `1`· μη αριθμητική τιμή επιστρέφει στην προεπιλογή. |
| `STREAM_HISTORY_MAX` | `50` | Μέγιστος αριθμός πρόσφατων συμβάντων stream στο buffer ζωντανής προβολής του Dashboard. |
| `CONTEXT_LENGTH_DEFAULT` | _(δεν έχει οριστεί)_ | Καθολική παράκαμψη μήκους context (tokens) για κάθε πάροχο που δεν διαθέτει μεταβλητή `CONTEXT_LENGTH_`. Όταν οριστεί, **αντικαθιστά** τις τιμές καταλόγου, παράκαμψης dashboard και registry για αυτούς τους παρόχους· όταν δεν έχει οριστεί, το OmniRoute χρησιμοποιεί την ενσωματωμένη αλυσίδα του, της οποίας η τελευταία λύση είναι `128000`. Δείτε [Μήκος context ανά πάροχο](#per-provider-context-length-context_length_provider). |
| `USAGE_TOKEN_BUFFER` | `100` | Επιπλέον περιθώριο token που δεσμεύεται κατά την παρακολούθηση ορίων χρήσης. |
### Μήκος context ανά πάροχο (`CONTEXT_LENGTH_`)
Το `open-sse/services/contextManager.ts` (`getEnvOverride()` / `resolveTokenLimit()`) διαβάζει επίσης μια μορφή
**ανά πάροχο** της οποίας το όνομα δημιουργείται από το ID του παρόχου κατά τον χρόνο εκτέλεσης, επομένως δεν μπορεί να
παρατεθεί σειρά προς σειρά στον παραπάνω πίνακα ή στο `.env.example`.
**Όνομα.** `CONTEXT_LENGTH_`, όπου `` είναι το αναγνωριστικό παρόχου σε κεφαλαία, με
κάθε χαρακτήρα εκτός `A-Z` / `0-9` να αντικαθίσταται από `_`. Το αναγνωριστικό παρόχου είναι το κανονικό
μετά την επίλυση ψευδωνύμων (το τμήμα `provider` μιας συμβολοσειράς `provider/model` αφού έχει επιλυθεί
ένα σύντομο ψευδώνυμο). Προσαρμοσμένοι κόμβοι συμβατοί με OpenAI ή Anthropic χρησιμοποιούν το παραγόμενο
αναγνωριστικό κόμβου τους, επομένως το UUID αποτελεί μέρος του ονόματος της μεταβλητής. Η τιμή είναι ένας
θετικός ακέραιος αριθμός token· οτιδήποτε άλλο (κενό, `0`, αρνητικό, μη αριθμητικό) αγνοείται και η επίλυση
προχωρά στο επόμενο βήμα.
| Αναγνωριστικό παρόχου | Όνομα μεταβλητής |
| ----------------------------------------------------------- | -------------------------------------------------------------------------- |
| agentrouter | CONTEXT_LENGTH_AGENTROUTER |
| openrouter | CONTEXT_LENGTH_OPENROUTER |
| openai-compatible-chat-0f8e2c1a-5b7d-4e3f-9a6c-2d1b8e4f7a90 | CONTEXT_LENGTH_OPENAI_COMPATIBLE_CHAT_0F8E2C1A_5B7D_4E3F_9A6C_2D1B8E4F7A90 |
**Προτεραιότητα.** Για ένα ζεύγος `provider/model`, νικάει το πρώτο βήμα που παράγει τιμή:
1. `CONTEXT_LENGTH_` για τον συγκεκριμένο πάροχο.
2. `CONTEXT_LENGTH_DEFAULT` (καθολική παράκαμψη μέσω περιβάλλοντος).
3. Το παράθυρο ανά μοντέλο: μια αποθηκευμένη παράκαμψη context (ορίζεται στον πίνακα ελέγχου ή
καρφιτσώνεται αυτόματα από τον συμβιβαστή ανακάλυψης, δείτε `CONTEXT_WINDOW_RECONCILE_INTERVAL`),
διαφορετικά η τιμή από τον συγχρονισμένο κατάλογο / το models.dev.
4. Το `defaultContextLength` του μητρώου του παρόχου.
5. Ευρετικοί κανόνες βάσει ονόματος μοντέλου (`claude` 200000, `gemini` 1000000, `gpt` / `o1` / `o3` /
`o4` / `codex` 400000).
6. Ενσωματωμένες προεπιλογές ανά πάροχο, στη συνέχεια `128000`.
Και τα δύο βήματα περιβάλλοντος ισχύουν για **ολόκληρο τον πάροχο**: κάθε μοντέλο αυτού του παρόχου
λαμβάνει το ίδιο όριο και υπερισχύουν των παρακάμψεων ανά μοντέλο στον πίνακα ελέγχου. Όταν μόνο ένα
μοντέλο ενός παρόχου χρειάζεται διαφορετικό παράθυρο, χρησιμοποιήστε αντ' αυτού μια παράκαμψη ανά μοντέλο
στον πίνακα ελέγχου.
**Πεδίο εφαρμογής.** Αυτή η αλυσίδα τροφοδοτεί τον έλεγχο παραθύρου context κατά τον χρόνο του αιτήματος
(την απόρριψη `context_length_exceeded` / "Input exceeds context window" στο
`open-sse/handlers/chatCore.ts`), τους προϋπολογισμούς συμπίεσης prompt και τα όρια context των combo. Το
`context_length` που διαφημίζεται από το `GET /v1/models` μπορεί να εξακολουθεί να προέρχεται από
μεταδεδομένα καταλόγου ή μητρώου και δεν είναι εγγυημένο ότι αντικατοπτρίζει την παράκαμψη μέσω
περιβάλλοντος.
**Παράδειγμα.** Ένας πάροχος του οποίου το μοντέλο δέχεται παράθυρο 1.050.000 token ενώ ο κατάλογος
αναφέρει 128.000:
```dotenv
CONTEXT_LENGTH_AGENTROUTER=1050000
```
Επανεκκινήστε τον διακομιστή μετά την αλλαγή: η τιμή διαβάζεται από το περιβάλλον της διεργασίας του
διακομιστή. Στην **εφαρμογή επιφάνειας εργασίας** ο διακομιστής εκτελείται ως θυγατρική διεργασία και δεν
βλέπει μια μεταβλητή συστήματος που ορίστηκε μετά την εκκίνηση της εφαρμογής· τοποθετήστε τη γραμμή στο
αρχείο `.env` που φορτώνει η εφαρμογή (σειρά αναζήτησης στο
[Οδηγός Electron: Αναζήτηση αρχείου περιβάλλοντος](../guides/ELECTRON_GUIDE.md#environment-file-lookup)),
στη συνέχεια κλείστε πλήρως και επανεκκινήστε την εφαρμογή.
### Συμπίεση
| Μεταβλητή | Προεπιλογή | Περιγραφή |
| ------------------------------------- | ----------- | --------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_RTK_TRUST_PROJECT_FILTERS` | μη ορισμένη | Εμπιστοσύνη του `.rtk/filters.json` του έργου χωρίς hash `.rtk/trust.json`. Χρήση μόνο σε ελεγχόμενη τοπική ανάπτυξη. |
### Μηχανή Μνήμης (σχέδιο 21)
### Κόστος στον βρόχο συμβάντων από μνήμη, δεξιότητες και ανανέωση token (#10349)
Το OmniRoute είναι μια **μεμονωμένη διεργασία Node**. Η εξαγωγή/ανάκτηση μνήμης, η έγχυση δεξιοτήτων και η
ανανέωση token παρόχων εκτελούνται στον **ίδιο βρόχο συμβάντων** με το `GET /healthz` και τον πίνακα
ελέγχου. Δεν πρόκειται για ξεχωριστό νήμα εργασίας.
| Εργασία | Κώδικας | Προεπιλογή | Έλεγχος από τον χειριστή |
| ------------------------- | ---------------------------------- | --------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Εξαγωγή / ανάκτηση μνήμης | `src/lib/memory/` | **memoryEnabled** στον πίνακα ελέγχου (προεπιλογή ενεργό) | Απενεργοποίηση από **Settings → Memory**. Δεν υπάρχει ξεχωριστός διακόπτης απενεργοποίησης μέσω env πέρα από την απενεργοποίηση της λειτουργίας στις ρυθμίσεις. |
| Έγχυση δεξιοτήτων | `src/lib/skills/injection.ts` | **skillsEnabled** στον πίνακα ελέγχου (προεπιλογή ενεργό) | Απενεργοποίηση από **Settings → Memory/Skills** (`skillsEnabled`). Οι ρυθμίσεις sandbox παρακάτω περιορίζουν μόνο την εκτέλεση αφού η έγχυση είναι ήδη ενεργή. |
| Ανανέωση token | `src/sse/services/tokenRefresh.ts` | Ενεργή για συνδεδεμένους παρόχους OAuth/web | Αποσυνδέστε τον πάροχο ή αφήστε τα token να παραμείνουν έγκυρα· σήμερα δεν υπάρχει env `TOKEN_REFRESH=0`. |
Αν το `/healthz` είναι αργό σε ένα μη φορτωμένο μηχάνημα, απενεργοποιήστε πρώτα τη μνήμη + τις δεξιότητες
και μετά ελέγξτε το φορτίο καταλόγου/συμπίεσης (#10303, #9685). Αυτές οι λειτουργίες παραχωρούν τον έλεγχο
σε σημεία `await`, αλλά εξακολουθούν να ανταγωνίζονται για το μοναδικό νήμα.
Επίπεδο embeddings, αποθήκη διανυσμάτων και ρυθμίσεις επανακατάταξης για το υποσύστημα μόνιμης μνήμης
(`src/lib/memory/`).
| Μεταβλητή | Προεπιλογή | Περιγραφή |
| ------------------------------------ | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `MEMORY_EMBEDDING_CACHE_TTL_MS` | `300000` (5 λεπτά) | TTL για την κρυφή μνήμη embedding στη μνήμη (ανά υπογραφή πηγής/μοντέλου/dim). |
| `MEMORY_EMBEDDING_CACHE_MAX` | `1000` | Μέγιστος αριθμός εγγραφών LRU που διατηρούνται στην κρυφή μνήμη embedding. |
| `MEMORY_TRANSFORMERS_MODEL` | `Xenova/all-MiniLM-L6-v2` | Αναγνωριστικό αποθετηρίου HF για την προαιρετική τοπική pipeline MiniLM του `@huggingface/transformers` (~23 MB int8, ~400 MB RAM). |
| `MEMORY_STATIC_MODEL` | `minishlab/potion-base-8M` | Αναγνωριστικό αποθετηρίου HF για τον στατικό embedder πίνακα αναζήτησης potion/Model2Vec. Κατεβαίνει οκνηρά στον κατάλογο κρυφής μνήμης. |
| `MEMORY_STATIC_CACHE_DIR` | `/embeddings` | Κατάλογος που χρησιμοποιείται για την αποθήκευση των αρχείων του στατικού μοντέλου potion στην κρυφή μνήμη. Όταν δεν έχει οριστεί, η προεπιλογή είναι κάτω από το `DATA_DIR`. |
| `HF_HUB_ENDPOINT` | `https://huggingface.co` | Παράκαμψη του βασικού URL του Hugging Face Hub που χρησιμοποιείται από το `staticPotion.ts` (π.χ. endpoint καθρέφτη για air-gapped εγκαταστάσεις). |
| `MEMORY_VEC_TOP_K` | `20` | Προεπιλεγμένο top-K που χρησιμοποιείται από την αναζήτηση διανυσμάτων ωμής βίας του `sqlite-vec` στο `src/lib/memory/vectorStore.ts`. |
| `MEMORY_RRF_K` | `60` | Σταθερά `k` του Reciprocal Rank Fusion για υβριδική ανάκτηση FTS5 + διανυσμάτων (συνταγή sqlite-vec). |
| `VECTOR_STORE_DISABLE_VEC` | `false` | Δοκιμαστικό/διαγνωστικό σημείο παρεμβολής στο `getVectorStore()` (`src/lib/memory/vectorStore.ts`): όταν είναι `true`, εξαναγκάζει το vector store σε `null` (προσομοιώνει περιβάλλον cloud/WASM χωρίς `sqlite-vec`), υποβαθμίζοντας την ανάκτηση μνήμης σε αναζήτηση λέξεων-κλειδιών FTS5. Αφήστε το μη ορισμένο σε παραγωγικό περιβάλλον. |
| `NOTION_API_KEY` | _(δεν έχει οριστεί)_ | Κλειδί API για το backend Notion (χρησιμοποιείται από την προκαθορισμένη ρύθμιση γνωστού backend του `genericBackend.ts`). |
| `NOTION_API_URL` | `https://api.notion.com/v1` | Βασικό URL για το Notion API (μπορεί να παρακαμφθεί για self-hosted εναλλακτικές του Notion). |
| `OBSIDIAN_API_KEY` | _(δεν έχει οριστεί)_ | Κλειδί API για το backend Obsidian Vault (χρησιμοποιείται από την προκαθορισμένη ρύθμιση γνωστού backend του `genericBackend.ts`). |
| `OBSIDIAN_API_URL` | `http://localhost:27123` | Βασικό URL για το Obsidian Vault API (μπορεί να παρακαμφθεί για απομακρυσμένο vault). |
| `MEMORY_TYPED_DECAY_ENABLED` | `false` | Κεντρικός διακόπτης φθοράς μνήμης με τύπους TV6. **Προαιρετικό (απενεργοποιημένο από προεπιλογή)** — η σάρωση **διαγράφει** τις φθαρμένες μνήμες. Όταν είναι απενεργοποιημένο, τα `access_count`/`last_accessed_at` αποτελούν καθαρή τηλεμετρία και τίποτα δεν διαγράφεται ποτέ. |
| `MEMORY_TYPED_DECAY_EPISODIC_DAYS` | `30` | TTL (ημέρες) μετά το οποίο μια αχρησιμοποίητη `episodic` μνήμη φθείρεται. Το `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** (`src/lib/memory/injection.ts`). Για αυτούς, η ασφαλής ως προς την κρυφή μνήμη ενδιάμεση ένθεση μνήμης στον πίνακα δεν είναι ασφαλής σε συνομιλίες πολλαπλών γύρων, επομένως η μνήμη συγχωνεύεται/προστίθεται στην αρχή ως το αρχικό μήνυμα system. Η προεπιλογή είναι μόνο `xiaomi-mimo`/`mimo`· επεκτείνετέ το για self-hosted endpoints συμβατά με OpenAI (π.χ. Qwen3.5+/3.6) των οποίων το chat template επιβάλλει τον ίδιο περιορισμό ενός μόνο αρχικού μηνύματος system. |
### Παράδειγμα Docker με χαμηλή RAM
Το `128` είναι μόνο για τον πίνακα ελέγχου. Οι coding agents σε αυτό το heap εμφανίζουν `FATAL ERROR` κατά τη διάρκεια μακρών `/v1/responses`. Μην χρησιμοποιείτε αυτό το παράδειγμα ως gateway για Claude/Codex/Grok.
```bash
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` (24h) | `src/lib/pricingSync.ts` | Χρονικό διάστημα συγχρονισμού σε δευτερόλεπτα. |
| `PRICING_SYNC_SOURCES` | `litellm` | `src/lib/pricingSync.ts` | Πηγές δεδομένων διαχωρισμένες με κόμματα. |
---
## Συγχρονισμός ELO του Arena
| Μεταβλητή | Προεπιλογή | Αρχείο Προέλευσης | Περιγραφή |
| ---------------------------- | ------------- | ------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ARENA_ELO_SYNC_ENABLED` | `true` | `src/shared/constants/featureFlagDefinitions.ts` | Περιοδικός συγχρονισμός ELO του πίνακα κατάταξης Arena AI, με δυνατότητα ρύθμισης από τις Σημαίες Δυνατοτήτων του Πίνακα Ελέγχου ή εξαίρεσης με την τιμή `false`. |
| `MODELS_CATALOG_PREFIX_MODE` | `dual` | `src/shared/constants/featureFlagDefinitions.ts`, `src/app/api/v1/models/catalog.ts` | Μορφή προθέματος που χρησιμοποιείται για τα αναγνωριστικά μοντέλων στο `GET /v1/models`. Η τιμή `dual` δημοσιοποιεί τόσο το σύντομο πρόθεμα ψευδωνύμου όσο και το κανονικό πρόθεμα παρόχου για κάθε μοντέλο (συμβατότητα προς τα πίσω — περίπου διπλασιάζει τον κατάλογο)· η τιμή `alias` εκπέμπει ένα αναγνωριστικό ανά μοντέλο· η τιμή `canonical` εκπέμπει μόνο το πλήρες πρόθεμα αναγνωριστικού παρόχου (οι πάροχοι των οποίων το ψευδώνυμο είναι ήδη το κανονικό αναγνωριστικό διατηρούν τη μοναδική καταχώρισή τους). Οι πελάτες μπορούν να παρακάμψουν τη ρύθμιση ανά αίτημα με `?prefix=alias`. Ανατρέξτε στο [API_REFERENCE](API_REFERENCE.md#model-id-prefixes-prefix). |
| `ARENA_ELO_SYNC_INTERVAL` | `86400` (24h) | `src/lib/arenaEloSync.ts` | Χρονικό διάστημα συγχρονισμού σε δευτερόλεπτα. |
---
## Πάροχος PromptQL Playground (Ανεπίσημος/Πειραματικός)
Γέφυρα συνεδρίας GraphQL, η οποία έχει δημιουργηθεί μέσω αντίστροφης μηχανικής, για το prompt.ql.app (`src/shared/constants/providers/web-cookie.ts`). Όλες οι ρυθμίσεις είναι προαιρετικές — οι προεπιλεγμένες τιμές παραπέμπουν στα δημόσια τελικά σημεία του playground· παρακάμψτε τις μόνο για αυτοφιλοξενούμενη/εναλλακτική ανάπτυξη του 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` | Μέγιστος χρόνος (ms) ελέγχου του `thread_events` πριν από τη λήξη χρονικού ορίου. |
---
## Πάροχος Web 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
Αναζήτηση προσωπικού υπολοίπου σε USD και χρήσης του Kilo Pass για τον πάροχο Kilo Code. Προαιρετικό — η προεπιλογή παραπέμπει στο δημόσιο API του Kilo· παρακάμψτε την μόνο για αναμεταδότη/δοκιμαστικό fixture. Ο έλεγχος ταυτότητας χρησιμοποιεί το υπάρχον διακριτικό πρόσβασης OAuth της σύνδεσης.
| Μεταβλητή | Προεπιλογή | Αρχείο προέλευσης | Περιγραφή |
| -------------- | --------------------- | ------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| `KILO_API_URL` | `https://api.kilo.ai` | `open-sse/services/usage/kilocode.ts` | Βασικό URL που χρησιμοποιείται για την ανάκτηση του προσωπικού υπολοίπου Kilo Code και της χρήσης του Kilo Pass. |
---
## Πάροχος Web Adobe Firefly (Ανεπίσημος/Πειραματικός)
Ανανέωση συνεδρίας μέσω προγράμματος περιήγησης για τον πάροχο web Adobe Firefly
(`open-sse/services/adobeFireflyBrowserLogin.ts`, `open-sse/services/adobeFireflySession.ts`,
`open-sse/services/adobeFireflyClient.ts`). Προαιρετικό — όλες οι προεπιλογές είναι ρυθμισμένες για μια κανονική
εγκατάσταση υπολογιστή.
> **Καταργήθηκε στο #9255.** Το παλιό περιβάλλον εκτέλεσης Chrome με σύνδεση CDP (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` | Ορίστε σε `1` για πραγματικά headless Chrome (γνωστό ότι δεν λειτουργεί για τη δημιουργία· μόνο για εντοπισμό σφαλμάτων). |
| `ADOBE_FIREFLY_BROWSER_REFRESH` | `1` | `open-sse/services/adobeFireflySession.ts` | Ενεργοποίηση/απενεργοποίηση της προληπτικής προθέρμανσης του προγράμματος περιήγησης. Το `0` απενεργοποιεί την προληπτική προθέρμανση (η ανάκτηση από σφάλμα 408 στο μέσο μιας παρτίδας εξακολουθεί να εφαρμόζεται). |
| `ADOBE_FIREFLY_SESSION_DISK` | `1` | `open-sse/services/adobeFireflySession.ts` | Ορίστε σε `0` για να απενεργοποιήσετε τη διατήρηση της συνεδρίας Adobe Firefly στον δίσκο. |
| `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. Συγχρονισμός Μοντέλων (Dev)
| Μεταβλητή | Προεπιλογή | Αρχείο Προέλευσης | Περιγραφή |
| ----------------------------------- | -------------------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `MODELS_DEV_SYNC_ENABLED` | _(δεν έχει οριστεί)_ | `src/lib/modelsDevSync.ts` | Ρητή παράκαμψη για τον συγχρονισμό τιμολόγησης του models.dev. Δεν έχει οριστεί = ακολουθεί τη ρύθμιση Ρυθμίσεις > AI (`modelsDevSyncEnabled`). Οι τιμές `0`/`false`/`off`/`no` **υπερισχύουν της βάσης δεδομένων** και παραλείπουν τόσο τον περιοδικό συγχρονισμό όσο και τις σαρώσεις SQL/JSON του `getModelsDevPricing()` (για ανάκαμψη όταν ο πίνακας ελέγχου έχει κολλήσει στον ίδιο βρόχο συμβάντων). Οι τιμές `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` | TTL κρυφής μνήμης του καταλόγου μοντέλων OpenRouter. |
| `MODEL_CATALOG_INCLUDE_NAMES` | `true` | `src/shared/constants/featureFlagDefinitions.ts` | Συμπερίληψη φιλικών προς εμφάνιση πεδίων `name` στις αποκρίσεις `/v1/models`. Απενεργοποιήστε το για πελάτες που αναμένουν μόνο IDs. |
| `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` | Ηλικία μετά την οποία η συγχρονισμένη λίστα μοντέλων μιας σύνδεσης παύει να αποτελεί αυθεντική πηγή δρομολόγησης και περνά σε fail-open προς το μητρώο (#12849). Οι γραμμές που δεν έχουν λάβει ποτέ χρονοσήμανση θεωρούνται παρωχημένες. |
| `OMNIROUTE_ANALYTICS_CACHE_TTL_MS` | `60000` (60 δευτ.) | `src/lib/usage/analyticsResponseCache.ts` | Για πόσο διάστημα επαναχρησιμοποιείται μια αργή απόκριση `GET /api/usage/analytics` για την ίδια συμβολοσειρά ερωτήματος (#15629). Το `0` απενεργοποιεί την κρυφή μνήμη. |
| `OMNIROUTE_ANALYTICS_CACHE_MIN_COMPUTE_MS` | `1000` (1 δευτ.) | `src/lib/usage/analyticsResponseCache.ts` | Μόνο αποκρίσεις αναλυτικών στοιχείων των οποίων η δημιουργία διήρκεσε τουλάχιστον τόσο αποθηκεύονται στην κρυφή μνήμη, ώστε οι μικρές εγκαταστάσεις να βλέπουν πάντα φρέσκα δεδομένα. |
| `OMNIROUTE_CACHE_METRICS_MIN_COMPUTE_MS` | μη ορισμένο (ανενεργό) | `src/app/api/cache/route.ts` μέσω `src/lib/usage/analyticsResponseCache.ts` | Προαιρετική ενεργοποίηση (#16361). Όταν οριστεί σε μη αρνητικό ακέραιο N, το τμήμα ιστορικού χρήσης του `GET /api/cache` (σύνολα prompt-cache + τάση) σερβίρεται από την κοινή κρυφή μνήμη αποκρίσεων αναλυτικών στοιχείων όταν η δημιουργία του διήρκεσε τουλάχιστον N ms, ανά παράθυρο `trendHours` μετά από clamp, για χρόνο `OMNIROUTE_ANALYTICS_CACHE_TTL_MS` (το ιστορικό μπορεί να υστερεί έως αυτό το TTL· το `DELETE /api/cache` το ακυρώνει). Μη ορισμένη ή μη έγκυρη τιμή = το ιστορικό διαβάζεται ζωντανά σε κάθε αίτημα. |
| `NANOBANANA_POLL_TIMEOUT_MS` | `120000` | `open-sse/handlers/imageGeneration.ts` | Μέγιστη αναμονή για εργασίες δημιουργίας εικόνων NanoBanana. |
| `NANOBANANA_POLL_INTERVAL_MS` | `2500` | `open-sse/handlers/imageGeneration.ts` | Συχνότητα polling των εργασιών NanoBanana. |
| `ADOBE_FIREFLY_SUBMIT_BASE_DELAY_MS` | `8000` | `open-sse/services/adobeFireflyUpscale.ts` | Βασική καθυστέρηση για την εκθετική υπαναχώρηση (exponential backoff) των επαναλήψεων υποβολής upscale του Adobe Firefly. |
| `AWS_REGION` | _(μη ορισμένο)_ | `src/lib/providers/validation.ts`, `open-sse/handlers/audioSpeech.ts` | Περιοχή που χρησιμοποιείται για τη δημιουργία endpoints του 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` | ID λογαριασμού για το Cloudflare Workers AI. |
| `CLOUDFLARE_PLAYGROUND_CHROME_PATH` | _(μη ορισμένο)_ | `open-sse/executors/cloudflare-playground.ts` | Πλήρης διαδρομή του εκτελέσιμου desktop Chrome για τον executor του Cloudflare AI Playground, που χρησιμοποιείται όταν ο έλεγχος αποτυπώματος headless αποκλείει το ενσωματωμένο Chromium του Playwright. |
| `CODEBUDDY_SYSTEM_PROMPT_MAX_LEN` | ∅ (∞) — _(μη ορισμένο = χωρίς όριο μήκους)_ | `open-sse/executors/codebuddy/shared.ts` | Προαιρετικό όριο μήκους για τα system prompts του καλούντος που αποστέλλονται στο CodeBuddy (CN και Διεθνές). Από προεπιλογή, μόνο ένα prompt που φέρει δείκτη ταυτότητας coding-agent αντικαθίσταται από ένα ουδέτερο (το φίλτρο περιεχομένου της Tencent τα απορρίπτει)· τα μακρά prompts διατηρούνται. Ένας ακέραιος > 0 αντικαθιστά επίσης οποιοδήποτε system prompt μακρύτερο από τόσους χαρακτήρες· μη ορισμένη τιμή, `0` ή μη ακέραια τιμή απενεργοποιεί το όριο. Κάθε αντικατάσταση καταγράφει ποιος κανόνας ενεργοποιήθηκε (δείκτης ταυτότητας ή μήκος). |
| `CLOUDFLARE_API_BASE` | `https://api.cloudflare.com/client/v4` | `src/app/api/settings/proxy/cloudflare-deploy/route.ts` | Παράκαμψη της βάσης του Cloudflare REST API που χρησιμοποιείται από τον deployer αναμετάδοσης Workers της ομάδας proxy (#4640 / 9router#1360). |
| `NEXT_PUBLIC_CLOUDFLARE_RELAY_DEFAULT_PROJECT` | `omniroute-relay` | `src/app/(dashboard)/dashboard/settings/components/proxy/CloudflareRelayModal.tsx` | Προεπιλεγμένο όνομα έργου worker που προτείνεται στο παράθυρο "Deploy Relay" της ομάδας proxy. |
| `NEXT_PUBLIC_CLOUDFLARE_RELAY_ENABLED` | `true` | `src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx` | Ορίστε σε `false` για απόκρυψη της επιλογής αναμετάδοσης Cloudflare Workers από την καρτέλα Proxy Pool. |
| `CLOUDFLARED_BIN` | αυτόματος εντοπισμός | `src/lib/cloudflaredTunnel.ts` | Προσαρμοσμένη διαδρομή προς το εκτελέσιμο `cloudflared`. |
| `CLOUDFLARED_PROTOCOL` | `http2` | `src/lib/cloudflaredTunnel.ts` | Πρωτόκολλο μεταφοράς σήραγγας: `http2` (προεπιλογή), `quic` ή `auto`. |
| `CLOUDFLARED_CONFIG` | _(μη ορισμένο)_ | `src/lib/cloudflaredTunnel.ts` | Διαδρομή προς ένα τοπικά διαχειριζόμενο `config.yml` του cloudflared (με `tunnel:`, `credentials-file:`, `ingress:`). Όταν οριστεί, το OmniRoute εκτελεί `tunnel --config run` (ονομασμένη σήραγγα) αντί για εφήμερη γρήγορη σήραγγα. |
| `CLOUDFLARED_HOSTNAME` | _(από το ingress του config)_ | `src/lib/cloudflaredTunnel.ts` | Παράκαμψη για το δημόσιο όνομα κεντρικού υπολογιστή της ονομασμένης σήραγγας (π.χ. `ai.example.com`), που αναφέρεται ως `publicUrl`/`apiUrl`. Όταν δεν έχει οριστεί, διαβάζεται από το πρώτο όνομα κεντρικού υπολογιστή `ingress` του config. |
| `DENO_DEPLOY_API_BASE` | `https://api.deno.com/v2` | `src/app/api/settings/proxy/deno-deploy/route.ts` | Παράκαμψη της βάσης του Deno Deploy REST API που χρησιμοποιείται από τον μηχανισμό ανάπτυξης αναμετάδοσης της ομάδας proxy (#4643 / 9router#1437). |
| `NEXT_PUBLIC_DENO_RELAY_DEFAULT_PROJECT` | `omniroute-deno-relay` | `src/app/(dashboard)/dashboard/settings/components/proxy/DenoRelayModal.tsx` | Προεπιλεγμένο όνομα εφαρμογής Deno Deploy που προτείνεται στο παράθυρο "Deploy Relay" της ομάδας proxy. |
| `NEXT_PUBLIC_DENO_RELAY_ENABLED` | `true` | `src/app/(dashboard)/dashboard/settings/components/proxy/ProxyPoolTab.tsx` | Ορίστε σε `false` για απόκρυψη της επιλογής αναμετάδοσης Deno Deploy από την καρτέλα Proxy Pool. |
| `SEARCH_CACHE_TTL_MS` | `300000` (5 λεπτά) | `open-sse/services/searchCache.ts` | TTL για την προσωρινή αποθήκευση απαντήσεων του API αναζήτησης (Perplexity, Brave κ.λπ.). |
| `ENABLE_CC_COMPATIBLE_PROVIDER` | `false` | `src/shared/utils/featureFlags.ts` | Εμφάνιση του πειραματικού περιβάλλοντος παρόχου συμβατού με CC για αναμεταδόσεις αποκλειστικά Claude Code. |
| `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 proxy ενσωματωμένης υπηρεσίας (μόνο loopback από προεπιλογή). |
| `EMBED_WS_PROXY_PORT` | `20131` | `src/lib/services/embedWsProxy.ts` | Θύρα για τον διακομιστή WebSocket proxy ενσωματωμένης υπηρεσίας. |
| `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` | Διεπαφή host στην οποία το docker-compose δημοσιεύει το sidecar `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). |
| `OPENWA_SERVICE_PORT` | `8323` | `src/lib/services/bootstrap.ts` | Παράκαμψη της θύρας στην οποία ακούει ο ενσωματωμένος δαίμονας open-wa (αυτοματοποίηση WhatsApp Web) (πάντα 127.0.0.1). |
| `DARIO_HOST` | `127.0.0.1` | `open-sse/executors/dario.ts` | Host σύνδεσης (bind/connect) της ενσωματωμένης υπηρεσίας Dario (μόνο loopback από προεπιλογή). |
| `DARIO_PORT` | `3456` | `open-sse/executors/dario.ts` | Θύρα της ενσωματωμένης υπηρεσίας Dario. |
| `DARIO_HOST` | `127.0.0.1` | `open-sse/executors/dario.ts` | Host σύνδεσης (bind/connect) της ενσωματωμένης υπηρεσίας Dario (μόνο loopback από προεπιλογή). |
| `DARIO_PORT` | `3456` | `open-sse/executors/dario.ts` | Θύρα της ενσωματωμένης υπηρεσίας Dario. |
| `LOCAL_HOSTNAMES` | _(κενό)_ | `open-sse/config/providerRegistry.ts` | Πρόσθετα ονόματα host διαχωρισμένα με κόμμα που αντιμετωπίζονται ως «τοπικά» (ονόματα υπηρεσιών Docker κ.λπ.). |
Το `ENABLE_CC_COMPATIBLE_PROVIDER` προορίζεται μόνο για αναμεταδότες τρίτων που αποδέχονται
αποκλειστικά πελάτες Claude Code. Το OmniRoute ξαναγράφει τα αιτήματα ώστε αυτοί οι
αναμεταδότες να τα αποδέχονται. Αν θέλετε απλώς να χρησιμοποιήσετε το Claude Code CLI ή
δεν είστε σίγουροι τι είναι αυτοί οι αναμεταδότες, κρατήστε το απενεργοποιημένο και
προσθέστε έναν κανονικό πάροχο συμβατό με Anthropic.
---
## 21. Υγεία Proxy
| Μεταβλητή | Προεπιλογή | Αρχείο Πηγαίου Κώδικα | Περιγραφή |
| ------------------------------------------------- | ---------------------------------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `PROXY_FAST_FAIL_TIMEOUT_MS` | `2000` | `src/lib/proxyHealth.ts` | Χρονικό όριο ελέγχου υγείας fast-fail. |
| `PROXY_LATENCY_WINDOW_HOURS` | `3` | `src/lib/db/proxies.ts` | Χρονικό παράθυρο (ώρες) για τον υπολογισμό της μέσης καθυστέρησης των υποψήφιων proxies στη στρατηγική ομάδας με βελτιστοποίηση καθυστέρησης. |
| `PROXY_HEALTH_CACHE_TTL_MS` | `30000` | `src/lib/proxyHealth.ts` | TTL της προσωρινής μνήμης αποτελεσμάτων ελέγχου υγείας. |
| `PROXY_HEALTH_UNHEALTHY_CACHE_TTL_MS` | `2000` | `src/lib/proxyHealth.ts` | TTL προσωρινής μνήμης για αποτυχημένες δοκιμές υγείας proxy. Διατηρήστε την μικρότερη από το `PROXY_HEALTH_CACHE_TTL_MS`, ώστε τα παροδικά timeouts proxy υπό υψηλή ταυτόχρονη εκτέλεση να επαναλαμβάνονται γρήγορα, χωρίς να απενεργοποιείται το fast-fail για proxies που έχουν πραγματικά πέσει. |
| `PROXY_HEALTH_ENABLED` | `true` | `src/lib/proxyHealth/scheduler.ts` | Ορίστε `false` για να απενεργοποιήσετε τον προγραμματιστή υγείας proxy στο παρασκήνιο, ο οποίος δοκιμάζει περιοδικά τους καταχωρημένους proxies. |
| `PROXY_HEALTH_INTERVAL_MS` | `600000` | `src/lib/proxyHealth/scheduler.ts` | Διάστημα σάρωσης του προγραμματιστή υγείας στο παρασκήνιο σε ms (ελάχιστο `60000`). |
| `PROXY_HEALTH_RELAY_INTERVAL_MS` | `21600000` | `src/lib/proxyHealth/relayCadence.ts` | Διάστημα διερεύνησης σε ms για edge-relay proxies (`deno`/`vercel`/`cloudflare`), οι διερευνήσεις των οποίων ξυπνούν ένα χρεώσιμο serverless isolate (ελάχιστο `60000`). |
| `PROXY_HEALTH_RECOVERY_INTERVAL_MS` | `600000` | `src/lib/proxyHealth/scheduler.ts` | Διάστημα περάσματος ανάκτησης στο παρασκήνιο σε ms: πόσο συχνά επαναδιερευνώνται proxies που προηγουμένως ήταν μη υγιή, ώστε ένα ανακτημένο proxy να επιστρέφει στον κύκλο εναλλαγής χωρίς επανεκκίνηση. Τιμές κάτω από `60000` επιστρέφουν στην προεπιλογή. |
| `PROXY_HEALTH_TEST_URL` | `https://httpbin.org/ip` | `src/lib/proxyHealth/probeTarget.ts` | Στόχος διερεύνησης προσβασιμότητας που χρησιμοποιείται από τον χρονοπρογραμματιστή και το endpoint `/api/settings/proxies/auto-test`. Στρέψτε τον σε ένα εσωτερικό/αυτοφιλοξενούμενο URL για να αποφύγετε τον δημόσιο προεπιλεγμένο στόχο. |
| `PROXY_HEALTH_TEST_CONCURRENCY` | `10` | `src/lib/proxyHealth/probeTarget.ts` | Διερευνήσεις που εκκινούνται ταυτόχρονα ανά δέσμη, κοινές για τον χρονοπρογραμματιστή και το endpoint `/api/settings/proxies/auto-test`. Κατώτατο όριο το 1 και ανώτατο το 50. |
| `PROXY_HEALTH_TEST_STAGGER_MS` | `100` | `src/lib/proxyHealth/probeTarget.ts` | Καθυστέρηση σε ms μεταξύ δύο αναχωρήσεων διερευνήσεων εντός μιας δέσμης. Χωρίς αυτήν, ολόκληρη η δέσμη αναχωρεί την ίδια στιγμή και μια κοινόχρηστη IP εξόδου μπορεί να ενεργοποιήσει περιορισμό ρυθμού σε έναν στόχο με rate limiting. Ορίστε `0` για να απενεργοποιήσετε το διάκενο· ανώτατο όριο 5000. |
| `PROXY_HEALTH_USE_PROVIDER_TARGET` | `true` | `src/lib/proxyHealth/providerProbeTarget.ts` | Ορίστε "false" για να σταματήσει η διερεύνηση του πραγματικού host του εκχωρημένου παρόχου ενός proxy (`GET /models`, χωρίς API key) και να χρησιμοποιείται πάντα το `PROXY_HEALTH_TEST_URL`. |
| `PROXY_HEALTH_AUTO_DEACTIVATE` | `false` | `src/lib/proxyHealth/statusPolicy.ts` | Όταν `false` (προεπιλογή), οι αυτοματοποιημένες διερευνήσεις προσβασιμότητας (ο χρονοπρογραμματιστής + το κουμπί "Test All" του `/api/settings/proxies/auto-test`) είναι **μόνο για ανάγνωση** και δεν γράφουν ποτέ την κατάσταση ενός proxy — μόνο ο χειριστής ορίζει ενεργό/ανενεργό, ώστε μια ασταθής διερεύνηση να μην μπορεί να ακινητοποιήσει ένα εκχωρημένο proxy (#6246). Ορίστε `true` για να επαναφέρετε την παλαιά συμπεριφορά test-and-set. |
| `FLUSH_EMPTY_RETRY_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | Προαιρετική σημαία λειτουργίας (βλ. [FEATURE_FLAGS.md](./FEATURE_FLAGS.md)· μια παράκαμψη DB από τον πίνακα ελέγχου υπερισχύει). Το `true` (ή `1`, `yes`) επαναδοκιμάζει κενούς μεταφρασμένους γύρους streaming μέσω της κανονικής διαδρομής διαπιστευτηρίων (έως `STREAM_RECOVERY.EMPTY_TURN_RETRY_MAX` επαναλήψεις) αντί να εκθέτει ένα κενό 200 ή ένα 502 κενού περιεχομένου. |
| `EMPTY_STREAM_SIBLING_RECOVERY_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | Προαιρετική σημαία λειτουργίας (βλ. [FEATURE_FLAGS.md](./FEATURE_FLAGS.md)· μια παράκαμψη DB από τον πίνακα ελέγχου υπερισχύει). Το `true` (ή `1`, `yes`) ενεργοποιεί τον ανιχνευτή περιεχομένου κενής ροής Claude/Codex και δαπανά την υπάρχουσα περιορισμένη επανάληψη σε μια άλλη επιλέξιμη σύνδεση μετά από έναν γύρο `empty_content`, χωρίς cooldown ή αποκλεισμό μοντέλου. |
| `STREAM_LATE_OUTPUT_PROBE_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | Προαιρετική σημαία λειτουργίας (βλ. [FEATURE_FLAGS.md](./FEATURE_FLAGS.md)· μια παράκαμψη DB από τον πίνακα ελέγχου υπερισχύει). Το `true` (ή `1`, `yes`) συνεχίζει τη δειγματοληψία ενός προωθημένου chunk ανά 16 μετά τα πρώτα 64, ώστε η καθυστερημένη ορατή έξοδος να εξακολουθεί να χαρακτηρίζει τη ροή ως έχουσα εκπέμψει έξοδο (ένα μεμονωμένο 5xx μετά την έξοδο παραμένει περιορισμένο στο αίτημα αντί για αποκλεισμό μόνο του μοντέλου). |
| `PROXY_POOL_EGRESS_OBSERVATION` | `false` | `src/shared/utils/featureFlags.ts` | Προαιρετική σημαία χαρακτηριστικού (βλ. [FEATURE_FLAGS.md](./FEATURE_FLAGS.md)· μια παράκαμψη DB από τον πίνακα ελέγχου υπερισχύει). Το `true` (ή `1`, `yes`) εμφανίζει την παρατήρηση εξερχόμενης κυκλοφορίας του pool μόνο για ανάγνωση κάτω από ένα pool proxy στον πίνακα ελέγχου (διακριτές IP εξόδου, συνδέσεις και ο μέγιστος αριθμός που παρατηρήθηκε πίσω από μία IP τις τελευταίες 24 ώρες, από το αρχείο καταγραφής proxy). Δεν χρησιμοποιείται ποτέ για δρομολόγηση. |
| `PROXY_OPERATOR_EGRESS_ENABLED` | `false` | `src/shared/utils/featureFlags.ts` | Προαιρετική σημαία χαρακτηριστικού (βλ. [FEATURE_FLAGS.md](./FEATURE_FLAGS.md)· μια παράκαμψη DB από τον πίνακα ελέγχου υπερισχύει). Το `true` (ή `1`, `yes`) αποδέχεται χρονοσφραγισμένες παρατηρούμενες διευθύνσεις που ωθούνται από τον χειριστή ανά μέλος του pool και τις συγχωνεύει με την ανάγνωση του ημερολογίου για εμφάνιση και για τη σειρά του pool. |
| `PROXY_OPERATOR_EGRESS_WINDOW_HOURS` | `24` | `src/lib/db/proxyOperatorEgress.ts` | Παράθυρο παρατήρησης σε ώρες για τις γραμμές εξόδου που ωθούνται από τον χειριστή (διαβάζεται σε κάθε ανάγνωση· δεν απαιτείται επανεκκίνηση). Περιορίζεται σε 1..168· τιμή εκτός εύρους, μη αριθμητική ή κενή επανέρχεται σε 24 με μία μόνο προειδοποίηση σε επίπεδο διεργασίας, ποτέ με εξαίρεση. |
| `PROXY_AUTO_REMOVE` | `false` | `src/lib/proxyHealth/scheduler.ts` | Ορίστε `true` για να επιτρέψετε στον χρονοπρογραμματιστή την αυτόματη αφαίρεση proxy μετά από επαναλαμβανόμενες διαδοχικές αποτυχίες. |
| `PROXY_AUTO_REMOVE_AFTER` | `3` | `src/lib/proxyHealth/scheduler.ts` | Διαδοχικές αποτυχίες πριν ο χρονοπρογραμματιστής αφαιρέσει αυτόματα έναν proxy (όταν `PROXY_AUTO_REMOVE=true`). |
| `PROXY_AUTO_DISABLE` | `false` | `src/lib/proxyHealth/scheduler.ts` | Ορίστε `true` για να επιτρέψετε στον χρονοπρογραμματιστή την ήπια απενεργοποίηση (κατάσταση `dead`, δεν διαγράφεται ποτέ) ενός proxy μετά από επαναλαμβανόμενες διαδοχικές αποτυχίες, αντί να τον αφαιρέσει. Μη καταστροφική εναλλακτική του `PROXY_AUTO_REMOVE`: ο proxy εξέρχεται αμέσως από την επίλυση pool/εναλλαγής (το φίλτρο κατάστασης alive που χρησιμοποιείται από την επίλυση scope-pool τον αποκλείει ήδη) και επανενεργοποιείται αυτόματα μόλις αρχίσει ξανά να περνάει τους ελέγχους. Μοιράζεται το όριο `PROXY_AUTO_REMOVE_AFTER`. Αν και οι δύο σημαίες είναι `true`, υπερισχύει το `PROXY_AUTO_REMOVE`. |
| `PROXY_HEALTH_PASSIVE_SKIP` | `false` | `src/lib/proxyHealth/scheduler.ts` | Προαιρετική παθητική παράλειψη: όταν είναι `true`, ο χρονοπρογραμματιστής παραλείπει τον ζωντανό έλεγχο για ένα τελικό σημείο του οποίου η πρόσφατη παραγωγική κυκλοφορία το αποδεικνύει ήδη (τουλάχιστον μία επιτυχία και καμία αποδιδόμενη αποτυχία proxy στο παράθυρο, ακριβώς ένας πάροχος παρατηρήθηκε). Απενεργοποιημένο από προεπιλογή: κάθε proxy ελέγχεται. |
| `PROXY_PASSIVE_WINDOW_MS` | `300000` | `src/lib/proxyHealth/passiveVerdict.ts` | Παράθυρο σε ms παραγωγικής κυκλοφορίας που εξετάζει η παθητική παράλειψη (περιορισμένο σε `60000..599999`). Μικρότερο από το διάστημα σάρωσης των 10 λεπτών, ώστε μια πρόσφατη αποτυχία να υπερισχύει αντί να αραιώνεται. |
| `OMNIROUTE_CONTROL_PLANE_PROXY_DIRECT_FALLBACK` | `false` | `src/shared/constants/featureFlagDefinitions.ts` | Επιτρέπει στις ροές OAuth και επικύρωσης παρόχου να παρακάμπτουν έναν καρφιτσωμένο proxy και να συνδέονται απευθείας όταν οι προ-έλεγχοι προσβασιμότητας proxy αποτυγχάνουν. Η ενεργή προτεραιότητα είναι: παράκαμψη DB Feature Flags > μεταβλητή περιβάλλοντος > προεπιλογή. |
| `RATE_LIMIT_MAX_WAIT_MS` | `30000` (30 δευτ.) | `src/lib/resilience/settings.ts` | Προεπιλεγμένο χρονικό περιθώριο **αναμονής σε ουρά**: πόσο καιρό μπορεί ένα αίτημα να περιμένει για μια θέση παρόχου και να παραμείνει στην ουρά πριν απορριφθεί, χωρίς ποτέ να φτάσει στο upstream. Ο χρονομετρητής μηδενίζεται μόλις η εργασία αρχίσει να εκτελείται — η εκτέλεση περιορίζεται ξεχωριστά από το `RATE_LIMIT_EXECUTION_MAX_WAIT_MS`. Η μεταβλητή περιβάλλοντος ορίζει μόνο την προεπιλογή: μια αποθηκευμένη τιμή `resilienceSettings.requestQueue.maxWaitMs`, και στη συνέχεια μια ανά σύνδεση `rateLimitOverrides.maxWaitMs`, υπερισχύουν η καθεμία έναντι αυτής. |
| `RATE_LIMIT_EXECUTION_MAX_WAIT_MS` | `600000` (10 λεπτά) | `open-sse/services/rateLimitManager.ts` | Ανώτατο όριο για το πόσο καιρό μπορεί ένα αποδεκτό αίτημα να παραμείνει σε εκτέλεση πριν λήξει η δέσμευση ορίου ρυθμού του — αποσυνδεδεμένο από το περιθώριο αναμονής σε ουρά, ώστε η αργή έναρξη του fetch σε πύλες χωρίς σταδιακή απόκριση να μην λήγει λόγω χρονικού ορίου (#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` | Εξαναγκάζει την ενεργοποίηση/απενεργοποίηση του δικτύου ασφαλείας αυτόματης ενεργοποίησης ορίου ρυθμού, ανεξάρτητα από την αποθηκευμένη ρύθμιση του Dashboard (`resilienceSettings.requestQueue.autoEnableApiKeyProviders`). Δέχεται `true`/`1`/`on` για εξαναγκασμένη ενεργοποίηση, `false`/`0`/`off` για εξαναγκασμένη απενεργοποίηση. Όταν είναι ενεργό (προεπιλογή), οι ενεργές συνδέσεις με κλειδί API προστατεύονται αυτόματα με όριο ρυθμού. Η ρύθμιση ανά σύνδεση `rateLimitProtection: false` απενεργοποιεί τη ρητή προστασία, αλλά δεν εξαιρείται από αυτό το δίκτυ ασφαλείας· η ρύθμιση αυτής της μεταβλητής περιβάλλοντος σε `false` είναι ο καθολικός μηχανισμός για τη λειτουργία συνδέσεων με κλειδί API χωρίς ουρές ορίου ρυθμού. |
| `PROVIDER_COOLDOWN_ENABLED` | _(μη ορισμένο → απενεργοποιημένο)_ | `open-sse/services/providerCooldownTracker.ts` | Προαιρετική (opt-in) καθολική παρακολούθηση περιόδου αναμονής (cooldown) παρόχου/σύνδεσης μεταξύ αιτημάτων. ΑΠΕΝΕΡΓΟΠΟΙΗΜΕΝΟ από προεπιλογή (επικαλύπτεται με τα 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` (λογική) | **Τι:** διαφανής ανάκτηση περικομμένων ροών upstream (μεταφορά από το free-claude-code). Συγκρατεί το αρχικό παράθυρο SSE έως `STREAM_RECOVERY.HOLDBACK_MS` (750 ms), ώστε μια διακοπή _πριν από τη δέσμευση_ — δηλαδή μια που συμβαίνει πριν οποιοδήποτε byte φτάσει στον πελάτη — να επανοίγεται και να επαναλαμβάνεται αόρατα. **Πότε να ενεργοποιηθεί:** σε ασταθή upstreams που συχνά περικόπτονται με 0 byte στην έναρξη της ροής· αφήστε το ΑΠΕΝΕΡΓΟΠΟΙΗΜΕΝΟ αν δεν μπορείτε να ανεχθείτε έως 750 ms επιπλέον χρόνο μέχρι το πρώτο token σε κάθε ροή. Δέχεται `true`/`1`/`on`. Αρχικοποιεί την αποθηκευμένη ρύθμιση Resilience· η ρύθμιση του Dashboard υπερισχύει μόλις οριστεί. |
| `STREAM_RECOVERY_MIDSTREAM_ENABLED` | _(μη ορισμένο → ανενεργό)_ | `src/lib/resilience/settings.ts` (seed) → `open-sse/services/streamRecovery.ts` (logic) | **Τι είναι:** συνέχεια εν μέσω ροής (Fase 4.4) — μετά από περικοπή _post-commit_ (bytes που έχουν ήδη φτάσει στον πελάτη), το αίτημα υποβάλλεται εκ νέου με το μερικό κείμενο ως prefill του assistant και συρράπτεται το ελλείπον επίθημα. Μόνο για ροές απλού κειμένου συμβατές με OpenAI· δεν ενεργοποιείται ποτέ όταν εκκρεμεί tool call. **Πότε να το ενεργοποιήσετε:** σε μακροσκελείς δημιουργίες που κόβονται στη μέση της απάντησης και αποδέχεστε ότι η ανακτημένη ουρά φτάνει ως μία ενιαία ριπή αντί token-προς-token. Ανεξάρτητο από το `STREAM_RECOVERY_ENABLED` (διαφορετικό προφίλ κινδύνου). Δέχεται `true`/`1`/`on`. |
| `STREAM_THROUGHPUT_WATCHDOG_ENABLED` | _(μη ορισμένο → ανενεργό)_ | `src/lib/resilience/settings.ts` → `open-sse/services/throughputWatchdog.ts` | Προαιρετικός (opt-in) επιτηρητής (watchdog) χρήσιμης εξόδου ενεργών ροών. Εντοπίζει ροές που συνεχίζουν να στέλνουν chunks αλλά παραμένουν κάτω από τον διαμορφωμένο ρυθμό εξόδου του assistant· heartbeats, συμβάντα usage, κενά deltas και φάσεις tool/reasoning δεν μεταμφιέζονται ως πρόοδος. Ανεξάρτητο από τα timeouts αδράνειας (idle) και σκληρής προθεσμίας (hard-deadline). |
| `STREAM_THROUGHPUT_WATCHDOG_WARMUP_MS` | `30000` | `src/lib/resilience/settings/normalize.ts` | Περίοδος χάριτος πριν από την αξιολόγηση του throughput, με όρια 0–600000 ms. |
| `STREAM_THROUGHPUT_WATCHDOG_WINDOW_MS` | `30000` | `src/lib/resilience/settings/normalize.ts` | Κυλιόμενο παράθυρο χρήσιμης εξόδου, με όρια 1000–600000 ms· απαιτείται ένα πλήρες παράθυρο πριν από το abort. |
| `STREAM_THROUGHPUT_WATCHDOG_MIN_BYTES_PER_SECOND` | `4` | `src/lib/resilience/settings/normalize.ts` | Ελάχιστος ρυθμός bytes εξόδου assistant σε UTF-8 (συντηρητικό υποκατάστατο του ρυθμού token), με όρια 1–1000000. |
| `STREAM_THROUGHPUT_WATCHDOG_MIN_USEFUL_BYTES` | `1` | `src/lib/resilience/settings/normalize.ts` | Ελάχιστο μη μηδενικό δείγμα χρήσιμης εξόδου που θεωρείται μετρήσιμο, με όρια 1–1000000 bytes. |
| `HEALTHCHECK_STAGGER_MS` | `3000` | `src/lib/tokenHealthCheck.ts` | Διάστημα stagger (ms) μεταξύ των healthcheck token παρόχων κατά την εκκίνηση. |
| `HEALTHCHECK_JITTER_MIN_MS` | `500` | `src/lib/tokenHealthCheck.ts` | Ελάχιστο τυχαιοποιημένο jitter (ms) που προστίθεται πάνω στο `HEALTHCHECK_STAGGER_MS` μεταξύ των healthcheck token παρόχων, για την αποτροπή ριπών (Issue #1220). |
| `HEALTHCHECK_JITTER_MAX_MS` | `5000` | `src/lib/tokenHealthCheck.ts` | Μέγιστο τυχαιοποιημένο jitter (ms) που προστίθεται πάνω στο `HEALTHCHECK_STAGGER_MS` μεταξύ των healthcheck token παρόχων, για την αποτροπή ριπών (Issue #1220). |
| `HEALTHCHECK_BATCH_SIZE` | `20` | `src/lib/tokenHealthCheck.ts` | Μέγεθος παρτίδας ταυτόχρονων ελέγχων για τη σάρωση healthcheck token κατά την εκκίνηση· μεγαλύτερες τιμές ελέγχουν περισσότερες συνδέσεις παράλληλα, μικρότερες τιμές μειώνουν το φορτίο ριπών (Issue #7875, παλινδρόμηση του #7719). |
| `REQUEST_RETRY` | `2` | `src/sse/services/cooldownAwareRetry.ts` | Αριθμός αυτόματων επαναλήψεων σε απαντήσεις cooldown σε επίπεδο μοντέλου πριν επιστραφεί σφάλμα στον πελάτη. |
| `MAX_RETRY_INTERVAL_SEC` | `30` | `src/sse/services/cooldownAwareRetry.ts` | Μέγιστο διάστημα backoff (δευτερόλεπτα) μεταξύ επαναλήψεων cooldown. Περιορίζεται από αυτή την τιμή ανεξάρτητα από το upstream `Retry-After`. |
| `HEADROOM_URL` | `http://localhost:8787` | `src/lib/headroom/detect.ts` | URL διακομιστή μεσολάβησης εξοικονόμησης token Headroom. Ο κύκλος ζωής του dashboard (`api/headroom/*`) εκκινεί από προεπιλογή ένα τοπικό CLI `headroom-ai` στο loopback· παρακάμψτε το μόνο για να δείξετε σε εξωτερικό Docker sidecar proxy. |
### Σταθερές ρύθμισης ανάκτησης ροής
Η συμπεριφορά holdback ανάκτησης ρυθμίζεται από hardcoded σταθερές στο
`open-sse/config/constants.ts` (`STREAM_RECOVERY`), που παρουσιάζονται εδώ για
αναφορά — η αλλαγή τους απαιτεί επεξεργασία κώδικα, όχι μεταβλητή περιβάλλοντος:
- `STREAM_RECOVERY.HOLDBACK_MS = 750` — πόσο χρόνο συγκρατείται το αρχικό
παράθυρο SSE, ώστε μια πρώιμη περικοπή να μπορεί να επαναληφθεί πριν
δεσμευτεί οποιοδήποτε byte προς τον πελάτη.
- `STREAM_RECOVERY.BUFFER_MAX_BYTES = 65536` — σκληρό όριο στο συγκρατούμενο
παράθυρο· γίνεται δέσμευση (flush + passthrough) μόλις συσσωρευτούν τόσα
bytes, ανεξάρτητα από τον χρονομετρητή.
- `STREAM_RECOVERY.EARLY_RETRY_MAX = 4` — μέγιστες διαφανείς επανεκκινήσεις της
upstream ροής όσο το holdback παραμένει μη δεσμευμένο.
> **Όριο ρυθμού συρόμενου παραθύρου ανά πάροχο (χωρίς μεταβλητή περιβάλλοντος):**
> το μεταφερμένο από το FCC εφεδρικό (_fallback_) όριο ρυθμού συρόμενου
> παραθύρου ανά πάροχο υπάρχει στον κώδικα
> (`open-sse/services/providerDefaultRateLimit.ts`, συνδεδεμένο μέσω
> `open-sse/services/rateLimitManager.ts`), αλλά διατίθεται με **κενό
> προεπιλεγμένο χάρτη** και σήμερα **δεν διαθέτει μεταβλητή περιβάλλοντος για
> τον χειριστή** — ενεργοποιείται μόνο μέσω test hook / επεξεργασίας κώδικα.
> Σκοπίμως δεν παρατίθεται στον παραπάνω πίνακα. Ο περιοριστής αναμετάδοσης ανά
> `(token, IP)` που _διαθέτει_ ρύθμιση είναι το `RELAY_IP_PER_MINUTE` (§3 Δίκτυο
> & Θύρες).
---
## 22. Αποσφαλμάτωση
> [!CAUTION]
> Αυτές οι μεταβλητές παράγουν **λεπτομερή έξοδο** και ενδέχεται να διαρρεύσουν ευαίσθητα δεδομένα. **Μην τις ενεργοποιείτε ποτέ σε περιβάλλον παραγωγής.**
| Μεταβλητή | Προεπιλογή | Αρχείο προέλευσης | Περιγραφή |
| ------------------------------------- | ------------------------------------------------------ | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CURSOR_DEBUG` | _(δεν έχει οριστεί)_ | `open-sse/executors/cursor.ts` | Ορίστε την τιμή `1` για να ενεργοποιήσετε τα λεπτομερή αρχεία καταγραφής του εκτελεστή Cursor (αποκωδικοποιημένα τμήματα SSE κ.λπ.). |
| `CURSOR_STREAM_DEBUG` | _(δεν έχει οριστεί)_ | `open-sse/executors/cursor.ts` | Ψευδώνυμο του `CURSOR_DEBUG` με συμβατότητα προς τα πίσω. |
| `CURSOR_DUMP_FILE` | _(δεν έχει οριστεί)_ | `open-sse/executors/cursor.ts` | Προαιρετική διαδρομή αρχείου στην οποία εγγράφονται τα ανεπεξέργαστα αποκωδικοποιημένα τμήματα του Cursor όταν ισχύει `CURSOR_DEBUG=1`. |
| `CURSOR_STREAM_TIMEOUT_MS` | `300000` | `open-sse/executors/cursor.ts` | Χρονικό όριο αδράνειας της ροής (ms) για τον εκτελεστή Cursor. |
| `CURSOR_KV_GRACE_MS` | `2000` | `open-sse/executors/cursor.ts` | Περίοδος χάριτος (ms) μετά από έναν ήπιο τερματιστή composer kv_after_text, όταν παραμένουν byte στην προσωρινή μνήμη — παρέχει χρόνο σε μια τελική κλήση εργαλείου 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`. Χρησιμοποιείται επίσης ως πρόθεμα οδηγίας που αφαιρείται από επαναλαμβανόμενα μπλοκ προοιμίου συστήματος. Αφήστε το χωρίς τιμή για απενεργοποίηση. |
| `OMNIROUTE_STRIP_SYSTEM_PREAMBLE` | `0` (ανενεργό) | `open-sse/translator/response/openai-to-claude.ts`, `open-sse/utils/directivePreambleStripper.ts` | Ορίστε την τιμή `1` για να αφαιρούνται τα επαναλαμβανόμενα μπλοκ προοιμίου της προτροπής συστήματος από την αρχή μιας ροής openai→claude. Ανενεργό από προεπιλογή — οι ευρετικές μέθοδοι είναι προσαρμοσμένες σε αγγλικό πεζό λόγο και τροποποιούν το ωφέλιμο φορτίο της απόκρισης, επομένως μια απάντηση που ξεκινά θεμιτά με μια τέτοια ενότητα θα την έχανε. |
| `CURSOR_IMAGE_FETCH_TIMEOUT_MS` | `15000` | `open-sse/utils/cursorImages.ts` | Χρονικό όριο ανάκτησης ανά εικόνα (ms) για απομακρυσμένη είσοδο όρασης `image_url`. |
| `CURSOR_STATE_DB_PATH` | _(ανιχνεύεται)_ | `open-sse/utils/cursorVersionDetector.ts` | Παρακάμπτει την αναζήτηση της βάσης δεδομένων κατάστασης του Cursor που χρησιμοποιείται για την ανίχνευση της έκδοσης του IDE. |
| `CURSOR_AGENT_CLI_VERSION` | _(ανίχνευση / καρφίτσωμα)_ | `open-sse/utils/cursorAgentCliVersion.ts` | Αναγνωριστικό έκδοσης του Agent CLI (`YYYY.MM.DD-`) για το `x-cursor-client-version: cli-…` κατά την εκτέλεση του Agent. |
| `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` | Μέγιστος πραγματικός χρόνος ανά εικόνα (ms) για εργασίες εικόνων του Cursor Agent. |
| `CURSOR_IMG_MAX_CONCURRENT` | `2` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Όριο ταυτόχρονης εκτέλεσης κοινόχρηστης θέσης για εργασίες εικόνων του Cursor. |
| `CURSOR_IMG_MODEL` | αίτημα / `auto` | `open-sse/handlers/imageGeneration/providers/cursorAgentImage.ts` | Παρακάμπτει το `--model` του Cursor CLI για εργασίες εικόνων. |
| `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/`)· είναι η ίδια μεταβλητή που χρησιμοποιεί ο επίσημος agent. |
| `CURSOR_TOKEN` | _(δεν έχει οριστεί)_ | `scripts/ad-hoc/cursor-tap.cjs` | Άμεσο διακριτικό bearer του Cursor που χρησιμοποιείται από τα εργαλεία προγραμματιστών. |
| `OMNIROUTE_LOG_REQUEST_SHAPE` | απενεργοποιημένο (προαιρετική ενεργοποίηση μέσω `"1"`) | `src/app/api/v1/chat/completions/route.ts` | Καταγράφει ενδείξεις τύπου/μήκους περιεχομένου για μεγάλα ωφέλιμα φορτία συνομιλίας όταν έχει οριστεί η τιμή `"1"`. Ανενεργό από προεπιλογή για τη μείωση του θορύβου στα αρχεία καταγραφής. |
| `DEBUG_RESPONSES_SSE_TO_JSON` | _(δεν έχει οριστεί)_ | `open-sse/handlers/responseTranslator.ts` | Ορίστε την τιμή `true` για να καταγράφονται λεπτομέρειες της μετάφρασης SSE→JSON του Responses API. |
| `DEBUG_CLAUDE_NONSTREAM` | _(δεν έχει οριστεί)_ | `open-sse/handlers/responseTranslator.ts` | Ορίστε την τιμή `true` για να εμφανίζονται κενά τμήματα textContent στη διαδρομή μετάφρασης αποκρίσεων του Claude (μόνο για αποσφαλμάτωση). |
| `NEXT_PUBLIC_OMNIROUTE_E2E_MODE` | _(δεν έχει οριστεί)_ | Υποδομή δοκιμών E2E | Ορίστε την τιμή `true` για να ενεργοποιήσετε τη λειτουργία δοκιμών E2E (χαλαρότερος έλεγχος ταυτότητας, άγκιστρα δοκιμών). |
---
## 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` | Προσωπικό διακριτικό πρόσβασης GitHub με εμβέλεια `issues:write`. |
| `GITHUB_TOKEN` | _(δεν έχει οριστεί)_ | διαλογή ζητημάτων / βοηθητικά εργαλεία πράκτορα cloud | Γενικό διακριτικό πρόσβασης GitHub που χρησιμοποιείται εφεδρικά για το `GITHUB_ISSUES_TOKEN` και από τα βοηθητικά εργαλεία πράκτορα cloud στο `src/lib/cloudAgent/*`. |
---
## Σενάρια Ανάπτυξης
Για οδηγίες SRE σχετικά με το backend αναμετάδοσης (συμπεριφορά ts/bifrost/auto, τοποθέτηση 9router έναντι CLIProxyAPI και στρατηγική εφεδρικής λειτουργίας υψηλής διεκπεραιωτικής ικανότητας), ανατρέξτε στη [Στρατηγική Backend Αναμετάδοσης](/docs/reference/RELAY_BACKEND_STRATEGY.md).
### Ελάχιστη Τοπική Ανάπτυξη
```bash
JWT_SECRET=$(openssl rand -base64 48)
API_KEY_SECRET=$(openssl rand -hex 32)
INITIAL_PASSWORD=dev123
PORT=20128
NODE_ENV=development
```
### Παραγωγή με Docker
```bash
JWT_SECRET=<δημιουργημένο>
API_KEY_SECRET=<δημιουργημένο>
INITIAL_PASSWORD=<δημιουργημένο>
STORAGE_ENCRYPTION_KEY=<δημιουργημένο>
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
```bash
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)
```bash
JWT_SECRET=<δημιουργημένο>
API_KEY_SECRET=<δημιουργημένο>
STORAGE_ENCRYPTION_KEY=<δημιουργημένο>
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` | Χρονικό όριο πραγματικού χρόνου ανά εκτέλεση για τον κώδικα skill στο απομονωμένο περιβάλλον. Αποτελεί αυστηρό όριο· οτιδήποτε διαρκεί περισσότερο τερματίζεται. |
| `SKILLS_EXECUTION_TIMEOUT_MS` | _(χρησιμοποιεί εφεδρικά το `SKILLS_SANDBOX_TIMEOUT_MS`)_ | `src/lib/skills/` | Χρονικό όριο ενορχήστρωσης skill υψηλού επιπέδου. Ορίστε το υψηλότερα από το `SKILLS_SANDBOX_TIMEOUT_MS`, ώστε να επιτρέπονται ροές εργασίας πολλαπλών βημάτων. |
| `SKILLS_MAX_FILE_BYTES` | `1048576` (1 MB) | `src/lib/skills/builtins.ts` | Μέγιστος αριθμός byte που μπορεί να διαβάσει ένα skill από οποιοδήποτε μεμονωμένο αρχείο στο απομονωμένο περιβάλλον. |
| `SKILLS_MAX_HTTP_RESPONSE_BYTES` | `256000` (250 KB) | `src/lib/skills/builtins.ts` | Μέγιστος αριθμός byte που καταγράφεται από οποιαδήποτε μεμονωμένη απόκριση HTTP μέσα σε ένα skill. |
| `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` | Λίστα επιτρεπόμενων εικόνων container, διαχωρισμένων με κόμματα, για εκτέλεση στο απομονωμένο περιβάλλον. Η κενή τιμή σημαίνει ότι επιτρέπεται μόνο η ενσωματωμένη προεπιλογή. |
| `SKILLS_SANDBOX_DOCKER_IMAGE` | _(ενσωματωμένη προεπιλογή)_ | `src/lib/skills/` | Εικόνα container που χρησιμοποιείται κατά τη δημιουργία ενός απομονωμένου περιβάλλοντος με υποστήριξη Docker. Παρακάμψτε την τιμή για να καρφιτσώσετε μια προσαρμοσμένη, ενισχυμένη εικόνα βάσης. |
| `SKILLS_SANDBOX_RUNTIME` | `auto` | `src/lib/skills/sandbox.ts`, `src/lib/skills/containerProvider.ts` | Περιβάλλον εκτέλεσης container για την απομόνωση των skill: `auto` \| `docker` \| `apple` \| `wsl` \| `orbstack` \| `podman`. Το `auto` επιλέγει το καλύτερο εγκατεστημένο περιβάλλον εκτέλεσης ανά λειτουργικό σύστημα κεντρικού υπολογιστή (Apple Container/OrbStack σε macOS, WSL Container σε Windows, Podman σε Linux), με εφεδρική επιλογή το Docker. |
> [!CAUTION]
> Η ενεργοποίηση του `SKILLS_SANDBOX_NETWORK_ENABLED=true` ανοίγει μια διαδρομή εξερχόμενης κίνησης από αυθαίρετο κώδικα skill. Συνδυάστε τη με `OUTBOUND_SSRF_GUARD_ENABLED=true` και μια αυστηρή πολιτική `CORS_ORIGIN`/διακομιστή μεσολάβησης σε κοινόχρηστες εγκαταστάσεις.
---
## 25. Όρια Παρόχων, Τούνελ, Αντίγραφα Ασφαλείας & Διάφορα Χρόνου Εκτέλεσης
Τα endpoints ορίων παρόχων, τα τούνελ δικτύου (Tailscale, Ngrok, proxy αποσφαλμάτωσης MITM), το pool εξερχόμενης κίνησης 1Proxy, τα αντίγραφα ασφαλείας βάσεων δεδομένων και μικρές παρακάμψεις ανά λειτουργία που αναφέρονται από το επίπεδο εκτέλεσης (executor) ή από scripts.
| Μεταβλητή | Προεπιλογή | Αρχείο πηγαίου κώδικα | Περιγραφή |
| ---------------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `REDIS_URL` | `redis://localhost:6379` | `src/shared/utils/rateLimiter.ts` | Συμβολοσειρά σύνδεσης Redis για το backend του rate limiter. |
| `ALIBABA_CODING_PLAN_HOST` | _(host παραγωγής)_ | `open-sse/services/bailianQuotaFetcher.ts` | Παράκαμψη του host που χρησιμοποιείται για την ανάκτηση των ορίων του Alibaba Bailian coding-plan. |
| `ALIBABA_CODING_PLAN_QUOTA_URL` | προκύπτει από τον host | `open-sse/services/bailianQuotaFetcher.ts` | Πλήρης παράκαμψη του URL ορίων για το Alibaba Bailian. |
| `QWEN_CLOUD_COOKIE` | _(μη ορισμένο)_ | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | Cookie συνεδρίας κονσόλας για την πύλη ορίων του προσωπικού Token Plan του Qwen Cloud / Model Studio (το κλειδί API συμπερασμάτων δεν μπορεί να το διαβάσει). Αντιγράψτε ολόκληρη την κεφαλίδα αιτήματος `Cookie` — περιέχει το `login_qwencloud_ticket` — από οποιαδήποτε κλήση `api.json` προς το `cs-data.qwencloud.com` στη σελίδα home.qwencloud.com › Χρέωση › Συνδρομή (F12 › Δίκτυο). Ευαίσθητο και περιορισμένο στη συνεδρία· προτιμήστε το πεδίο `qwenCloudCookie` του Dashboard ανά σύνδεση. |
| `QWEN_CLOUD_SEC_TOKEN` | _(μη ορισμένο)_ | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | Χειροκίνητη παράκαμψη του `sec_token` για την πύλη κονσόλας του Token Plan. Ευαίσθητο· όταν δεν έχει οριστεί, ο μηχανισμός ανάκτησης το επιλύει από το HTML του πίνακα ελέγχου χρησιμοποιώντας το cookie. |
| `QWEN_TOKEN_PLAN_HOST` | `https://cs-data.qwencloud.com` | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | Παράκαμψη του host πύλης για τον μηχανισμό ανάκτησης ορίων του προσωπικού Token Plan (π.χ. `bailian-singapore-cs.alibabacloud.com` για την κονσόλα Model Studio). |
| `QWEN_TOKEN_PLAN_DASHBOARD_URL` | `https://home.qwencloud.com/` | `open-sse/services/qwenTokenPlanQuotaFetcher.ts` | URL πίνακα ελέγχου που χρησιμοποιείται για την επίλυση του `sec_token` από το HTML της ενεργής σύνδεσης. |
| `XIAOMI_MIMO_CONSOLE_COOKIE` | _(μη ορισμένο)_ | `open-sse/services/usage/xiaomi-mimo.ts` | Cookie συνεδρίας κονσόλας για το API ορίων του Xiaomi MiMo Token Plan (`platform.xiaomimimo.com/api/v1/tokenPlan/usage` + `tokenPlan/detail` — το κλειδί API συμπερασμάτων δεν μπορεί να το διαβάσει). Αντιγράψτε ολόκληρη την κεφαλίδα αιτήματος `Cookie` — περιέχει τα `api-platform_serviceToken` και `userId` — από οποιοδήποτε αίτημα προς το `platform.xiaomimimo.com` στη σελίδα του Token Plan (F12 › Δίκτυο). Ευαίσθητο και περιορισμένο στη συνεδρία· προτιμήστε το πεδίο `xiaomiMimoConsoleCookie` του Dashboard ανά σύνδεση. |
| `XIAOMI_MIMO_MONTHLY_TOKEN_LIMIT` | `4100000000` | `open-sse/services/usage/xiaomi-mimo.ts` | Μηνιαίο όριο (Credits) για το fallback Xiaomi MiMo που παρακολουθείται από το OmniRoute και χρησιμοποιείται όταν δεν έχει ρυθμιστεί cookie κονσόλας. Από προεπιλογή είναι τα 4.1B του Lite tier· ορίστε το στα Credits του πλάνου (Standard 11B / Pro 38B / Max 82B). Μια παράκαμψη ανά σύνδεση μέσω `providerSpecificData.monthlyTokenLimit` υπερισχύει αυτής της μεταβλητής περιβάλλοντος. |
| `ALIBABA_FREE_TIER_VISION_FE_PATH` | `/costing-balance/free-quota-image-video` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | Παράκαμψη διαδρομής front-end κονσόλας για την ανάκτηση του ορίου vision/media του δωρεάν επιπέδου του Alibaba Model Studio. |
| `ALIBABA_FREE_TIER_MULTIMODAL_FE_PATH` | `/costing-balance/free-quota-multimodal` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | Παράκαμψη διαδρομής front-end κονσόλας για την ανάκτηση του πολυτροπικού (multimodal) ορίου του δωρεάν επιπέδου του Alibaba Model Studio. |
| `ALIBABA_FREE_TIER_AUDIO_FE_PATH` | `/costing-balance/free-quota-audio` | `open-sse/services/alibabaFreeTierQuotaFetcher.ts` | Παράκαμψη διαδρομής front-end κονσόλας για την ανάκτηση του ορίου ήχου του δωρεάν επιπέδου του Alibaba Model Studio. |
| `ALIBABA_FREE_TIER_ALLOWLIST_PATH` | _(μη ορισμένο)_ | `open-sse/services/alibabaFreeTierAllowlist.ts` | Προαιρετική διαδρομή προς μια τοπική παράκαμψη JSON για την ενσωματωμένη λίστα επιτρεπόμενων μοντέλων κειμένου (allowlist) του δωρεάν επιπέδου του Alibaba. Σε απουσία της, χρησιμοποιείται το `$DATA_DIR/alibaba-free-tier-allowlist.json` και στη συνέχεια το `config/alibaba-free-tier-allowlist.json`. |
| `CONTEXT_RESERVE_TOKENS` | `1024` | `open-sse/services/contextManager.ts` | Tokens που δεσμεύονται για την έξοδο ολοκλήρωσης κατά τον υπολογισμό των ορίων του prompt. |
| `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` | Ορίστε `false` (ή `0`) για να απενεργοποιήσετε το εφεδρικό μηχανισμό εξάντλησης προϋπολογισμού που ανακατευθύνει τα αποτυχημένα αιτήματα στο δωρεάν μοντέλο `nvidia`/`openai/gpt-oss-120b`. Η ισχύουσα προτεραιότητα είναι: παράκαμψη Feature Flags DB > μεταβλητή περιβάλλοντος > προεπιλογή· εάν δεν είναι διαθέσιμη, η υπηρεσία επιστρέφει στην αρχική τιμή της μεταβλητής περιβάλλοντος. |
| `COMMAND_CODE_CALLBACK_PORT` | _(μη ορισμένο)_ | `src/app/api/providers/command-code/auth/shared.ts` | Τοπική θύρα που χρησιμοποιείται για callbacks τύπου OAuth από το βοηθητικό εργαλείο Command Code CLI. |
| `COMMAND_CODE_VERSION` | `0.33.2` | `open-sse/executors/commandCode.ts` | Τιμή που αποστέλλεται ως κεφαλίδα `x-command-code-version` προς το upstream του Command Code. Παρακάμψτε την για να αναβαθμίσετε την έκδοση του CLI. |
| `COMMANDCODE_API_URL` | `https://api.commandcode.ai` | `open-sse/services/usage/command-code.ts` | Βασικό URL για το upstream χρήσης/quota του Command Code που χρησιμοποιείται από την τηλεμετρία λήψης quota του smartphone. Παρακάμψτε το για self-hosted/εναλλακτικό API του Command Code. |
| `MITM_LOCAL_PORT` | `443` | `src/mitm/server.cjs` | Τοπική θύρα σύνδεσης για τον διακομιστή μεσολάβησης αποσφαλμάτωσης MITM. |
| `MITM_DISABLE_TLS_VERIFY` | `0` | `src/mitm/server.cjs` | Ορίστε `1` για απενεργοποίηση της επαλήθευσης TLS του upstream (μόνο για ανάπτυξη). |
| `MITM_IDLE_TIMEOUT_MS` | `60000` | `src/mitm/socketTimeouts.ts`, `src/mitm/server.cjs` | Χρονικό όριο αδράνειας socket (ms) για συνδέσεις μέσω proxy· τα αδρανή sockets πέραν αυτού του ορίου τερματίζονται για να αποφευχθεί η διαρροή μισανοιχτών tunnels. |
| `BRIDGE_PORT` | `20129` | `bin/antigravity-bridge.mjs` | Θύρα στην οποία ακούει η γέφυρα MITM του Antigravity. |
| `ROUTER_URL` | `http://127.0.0.1:20128/v1/antigravity` | `bin/antigravity-bridge.mjs` | Το endpoint του δρομολογητή στο οποίο η γέφυρα προωθεί την κίνηση του Antigravity. |
| `CERT_DIR` | `/mitm` | `bin/antigravity-bridge.mjs` | Παρακάμπτει τον κατάλογο από τον οποίο η γέφυρα διαβάζει το υλικό TLS της. Το μοντέλο πιστοποιητικών επιλέγεται όπως στον διακομιστή AgentBridge: `server.crt`/`server.key` για παλαιού τύπου εγκατάσταση leaf, διαφορετικά `ca.crt`/`ca.key` (root CA, ένα leaf ανά υποκλαπέντα κεντρικό υπολογιστή· επιβάλλεται με `MITM_ROOT_CA_ENABLED=true`). Η γέφυρα τερματίζει κατά την εκκίνηση αν λείπουν τα αρχεία του ενεργού μοντέλου. |
| `MITM_VERBOSE` | `1` | `src/mitm/server.cjs`, `src/mitm/_internal/bypass.cjs` | Αναλυτικότητα καταγραφής αποφάσεων δρομολόγησης: το `0` σιωπά, υψηλότερες τιμές καταγράφουν περισσότερες αποφάσεις bypass/δρομολόγησης. |
| `MITM_ROOT_CA_ENABLED` | `false` | `src/mitm/manager.ts` | Ορίστε `true` για συμμετοχή στο μοντέλο πιστοποιητικών root-CA + leaf ανά κεντρικό υπολογιστή (#6684). Οι νέες εγκαταστάσεις το λαμβάνουν αυτόματα· οι εγκαταστάσεις με προϋπάρχον αξιόπιστο παλαιού τύπου leaf διατηρούν το παλαιό πιστοποιητικό σταθερού SAN εκτός αν γίνει συμμετοχή. |
| `MITM_CERT_MODE` | `legacy` | `src/mitm/manager.ts`, `src/mitm/server.cjs` | Ορίζεται ΑΠΟ τον διαχειριστή MITM για τη διεργασία proxy που εκκινείται (`root-ca` \| `legacy`) — αντικατοπτρίζει την απόφαση μετεγκατάστασης πιστοποιητικών· δεν προορίζεται για χειροκίνητη ρύθμιση. |
| `OMNIROUTE_NO_SUDO` | `0` | `src/mitm/systemCommands.ts` | Ορίστε σε `1` (truthy) για να αφαιρεθεί το αρχικό `sudo` από τις εντολές εμπιστοσύνης πιστοποιητικών MITM — για αναπτύξεις χωρίς root / με user namespaces, όπου ο χειριστής εμπιστεύεται την CA χειροκίνητα (π.χ. μέσω του μηχανισμού extra-CA-certs του Node). |
| `SKIP_ANTIGRAVITY_DNS` | _(δεν έχει οριστεί)_ | `src/mitm/dns/provision.ts` | Ορίστε σε `true` για να παραλειφθεί πλήρως η δημιουργία εγγραφών DNS στο `/etc/hosts` για τα hostnames του Antigravity proxy — για containers χωρίς διαθέσιμο sudo/root. |
| `OMNIROUTE_SKIP_DNS_WRITE` | _(δεν έχει οριστεί)_ | `src/mitm/dns/dnsConfig.ts` | Ορίστε σε `1` για να παραλειφθεί η εγγραφή στο αρχείο hosts κατά την προσθήκη/αφαίρεση εγγραφών DNS — για sandboxed ή read-only περιβάλλοντα δοκιμών. |
| `OMNIROUTE_SKIP_SYSTEM_TRUST` | `0` | `src/mitm/cert/install.ts`, `src/mitm/tproxy/caTrust.ts` | Προστασία μόνο για δοκιμές/CI: ορίστε σε `1` ώστε η εγκατάσταση/απεγκατάσταση εμπιστοσύνης πιστοποιητικών να γίνεται no-op, έτσι ώστε η σουίτα να μην τροποποιεί ποτέ το trust store του λειτουργικού συστήματος. Ορίζεται αυτόματα από το test setup και τα CI workflows. |
| `CHANGELOG_BASE_REF` | _(αυτόματο)_ | `scripts/check/check-changelog-integrity.mjs` | Ρητό base ref για την πύλη anti-CHANGELOG-eat (προεπιλογή: το base branch του PR στο CI, ή το υψηλότερο `release/v*`). |
| `FREE_PROXY_AUTO_SYNC_ENABLED` | `false` | `src/lib/freeProxyProviders/scheduler.ts` | Ορίστε σε `true` για να ενεργοποιηθεί ο χρονοπρογραμματιστής αυτόματου συγχρονισμού του pool δωρεάν proxy στο παρασκήνιο. Με opt-in, απενεργοποιημένο από προεπιλογή. |
| `FREE_PROXY_AUTO_SYNC_INTERVAL_MS` | `1800000` | `src/lib/freeProxyProviders/scheduler.ts` | Διάστημα αυτόματου συγχρονισμού σε χιλιοστά του δευτερολέπτου (προεπιλογή 30 λεπτά). |
| `FREE_PROXY_1PROXY_ENABLED` | `true` | `src/lib/freeProxyProviders/oneproxy.ts` | Ενεργοποίηση της πηγής δωρεάν proxy 1proxy. Ορίστε σε `false` για απενεργοποίηση. |
| `FREE_PROXY_1PROXY_API_URL` | _(βλ. oneproxy.ts)_ | `src/lib/freeProxyProviders/oneproxy.ts` | Παράκαμψη του API URL του 1proxy. |
| `FREE_PROXY_1PROXY_MAX` | `500` | `src/lib/freeProxyProviders/oneproxy.ts` | Μέγιστος αριθμός proxy που ανακτώνται ανά συγχρονισμό από το 1proxy. |
| `FREE_PROXY_1PROXY_MIN_QUALITY` | `50` | `src/lib/freeProxyProviders/oneproxy.ts` | Ελάχιστο όριο βαθμού ποιότητας για εισαγωγές 1proxy. |
| `FREE_PROXY_PROXIFLY_ENABLED` | `true` | `src/lib/freeProxyProviders/proxifly.ts` | Ενεργοποίηση της πηγής δωρεάν proxy Proxifly. Ορίστε σε `false` για απενεργοποίηση. |
| `FREE_PROXY_PROXIFLY_QUANTITY` | `100` | `src/lib/freeProxyProviders/proxifly.ts` | Αριθμός proxy προς ανάκτηση ανά συγχρονισμό 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` | Ενεργοποίηση της πηγής δωρεάν proxy IPLocate. Μόνο με ρητή επιλογή (opt-in). |
| `FREE_PROXY_IPLOCATE_BASE_URL` | `https://raw.githubusercontent.com/iplocate/free-proxy-list/main/protocols` | `src/lib/freeProxyProviders/iplocate.ts` | Παράκαμψη βασικού URL λίστας proxy IPLocate. |
| `FREE_PROXY_WEBSHARE_ENABLED` | `true` | `src/lib/freeProxyProviders/webshare.ts` | Ενεργοποίηση της πηγής ομάδας proxy Webshare. Ορίστε σε `false` για απενεργοποίηση· απαιτεί επίσης τον ορισμό του `FREE_PROXY_WEBSHARE_API_KEY`. |
| `FREE_PROXY_WEBSHARE_API_KEY` | _(κανένα)_ | `src/lib/freeProxyProviders/webshare.ts` | Token API λογαριασμού Webshare (`Authorization: Token `). Απαιτείται — ο πάροχος παραμένει απενεργοποιημένος χωρίς αυτό. |
| `FREE_PROXY_WEBSHARE_API_URL` | `https://proxy.webshare.io/api/v2/proxy/list/` | `src/lib/freeProxyProviders/webshare.ts` | Παράκαμψη URL API λίστας proxy Webshare. |
| `FREE_PROXY_WEBSHARE_MAX` | `500` | `src/lib/freeProxyProviders/webshare.ts` | Μέγιστος αριθμός proxy που εισάγονται ανά συγχρονισμό Webshare. |
| `NEXT_PUBLIC_VERCEL_RELAY_ENABLED` | `true` | `src/app/(dashboard)/…/ProxyPoolTab.tsx` | Εμφάνιση/απόκρυψη του κουμπιού Deploy Vercel Relay στην καρτέλα Proxy Pool. |
| `VERCEL_API_BASE` | `https://api.vercel.com` | `src/app/api/settings/proxy/vercel-deploy/route.ts` | Παράκαμψη του βασικού URL του Vercel API (για δοκιμές). |
| `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 για μη αλληλεπιδραστική / headless εκτέλεση `tailscale up` (μεταβιβάζεται μέσω `--auth-key=`). Όταν δεν έχει οριστεί, η σύνδεση επιστρέφει στο αλληλεπιδραστικό URL ελέγχου ταυτότητας μέσω προγράμματος περιήγησης. |
| `NGROK_AUTHTOKEN` | _(δεν έχει οριστεί)_ | `src/lib/ngrokTunnel.ts` | Πραγματοποιεί έλεγχο ταυτότητας για τις εξερχόμενες σήραγγες ngrok. |
| `DB_BACKUP_MAX_FILES` | `20` | `src/lib/db/backup.ts` | Μέγιστος αριθμός αρχείων αντιγράφων ασφαλείας SQLite που διατηρούνται από τον καθαρισμό χειροκίνητων/προγραμματισμένων αντιγράφων ασφαλείας. Τα στιγμιότυπα μετεγκατάστασης διευθυνσιοδοτούνται βάσει περιεχομένου και επαναχρησιμοποιούνται για πανομοιότυπη κατάσταση της βάσης δεδομένων· δεν διαγράφονται εντός του παραθύρου ταυτόχρονης μετεγκατάστασης. Παρακάμπτει την τιμή που αποθηκεύτηκε από Ρυθμίσεις → Διατήρηση αντιγράφων ασφαλείας βάσης δεδομένων. |
| `DB_BACKUP_RETENTION_DAYS` | `0` | `src/lib/db/backup.ts` | Μέγιστη ηλικία (ημέρες) που διατηρείται από τον καθαρισμό χειροκίνητων/προγραμματισμένων αντιγράφων ασφαλείας. Η τιμή `0` απενεργοποιεί τη διαγραφή βάσει ηλικίας. Τα στιγμιότυπα μετεγκατάστασης δεν διαγράφονται εντός του παραθύρου ταυτόχρονης μετεγκατάστασης. Παρακάμπτει την τιμή που αποθηκεύτηκε από Ρυθμίσεις → Διατήρηση αντιγράφων ασφαλείας βάσης δεδομένων. |
| `OMNIROUTE_BACKUP_SCHEDULE_JOB_INTERVAL_MS` | `30000` | `src/lib/jobs/backupScheduleJob.ts` | Διάστημα κύκλου (ms) της εργασίας πλευράς διακομιστή που εκτελεί το `backup-schedule.json`. Πρέπει να παραμένει αισθητά κάτω από την ανάλυση του ενός λεπτού του cron· τιμές κάτω από `5000` ή μη αναλύσιμες επιστρέφουν στην τιμή `30000`. |
| `CONTAINER_HOST` | `docker` | `scripts/check-permissions.sh` | Υπόδειξη χρόνου εκτέλεσης container για τον έλεγχο δικαιωμάτων του entrypoint. Ορίστε σε `podman` για οποιαδήποτε τοπολογία Podman. Επειδή το container δεν μπορεί να προσδιορίσει αν η μηχανή είναι τοπική ή προσπελάται μέσω Podman Machine, η προειδοποίηση παραμένει ουδέτερη ως προς την τοπολογία και παραπέμπει στο `contrib/podman/README.md`. |
| `QUOTA_STORE_DRIVER` | `sqlite` | `src/lib/quota/storeFactory.ts` | Backend αποθήκευσης κατανάλωσης κοινόχρηστου quota: `sqlite` (προεπιλογή) ή `redis`. |
| `QUOTA_STORE_REDIS_URL` | _(unset)_ | `src/lib/quota/storeFactory.ts` | Συμβολοσειρά σύνδεσης Redis που χρησιμοποιείται όταν `QUOTA_STORE_DRIVER=redis` (π.χ. `redis://localhost:6379`). |
| `QUOTA_SATURATION_THRESHOLD` | `0.5` | `src/lib/quota/enforce.ts` | Λόγος κορεσμού pool (0..1)· σε αυτόν ή πάνω από αυτόν το pool εισέρχεται σε αυστηρή λειτουργία (χωρίς δανεισμό). |
| `QUOTA_SOFT_DEPRIORITIZE_FACTOR` | `0.7` | `open-sse/services/combo.ts` | Πολλαπλασιαστής βαθμολογίας (0..1) που εφαρμόζεται σε έναν στόχο όταν η πολιτική soft quota τον υποβιβάζει σε προτεραιότητα. |
| `STATUS_SOFT_DEPRIORITIZE_FACTOR` | `0.5` | `open-sse/services/combo/autoStrategy.ts` | Πολλαπλασιαστής βαθμολογίας (0..1) που εφαρμόζεται σε έναν εξαντλημένο πάροχο (`credits_exhausted`/`rate_limited`) στη βαθμολόγηση auto-combo όταν το preflight quota cutoff είναι OFF (#4540). |
| `QUOTA_CONSUMPTION_RETENTION_DAYS` | `14` | `src/lib/db/quotaConsumption.ts` | Παράθυρο διατήρησης (ημέρες) για τα buckets `quota_consumption` πριν από το GC (`gcQuotaConsumption`). |
| `QUOTA_PREFLIGHT_CUTOFF_ENABLED` | `false` | `src/lib/resilience/settings.ts` | Προαιρετική ενεργοποίηση (προεπιλογή OFF): ενεργοποιεί το hard quota cutoff της αυτόματης δρομολόγησης που απορρίπτει υποψηφίους με χαμηλό quota πριν από τη βαθμολόγηση. |
| `OMNIROUTE_AUTO_FREE_FALLBACK_TO_FULL_POOL` | `false` | `open-sse/services/autoCombo/virtualFactory.ts` | Προαιρετική ενεργοποίηση (προεπιλογή OFF): όταν ένα φίλτρο `auto/:` δεν ταιριάζει με κανέναν συνδεδεμένο υποψήφιο, επαναφέρει την παλαιά συμπεριφορά επιστροφής στο πλήρες (μη φιλτραρισμένο) pool αντί να επιστρέφει κενό pool. Η προεπιλογή OFF κάνει το `:free` να σημαίνει «μόνο δωρεάν επίπεδο». |
| `OMNIROUTE_CHAOS_MAX_PANEL` | `5` | `open-sse/services/autoCombo/virtualFactory.ts` | Όριο μεγέθους πάνελ (περιορίζεται σε 1–10) για την παραλλαγή broadcast `auto/*:chaos` — ένα αίτημα διαχέεται σε το πολύ τόσα μοντέλα με ποικιλία παρόχων. |
| `OMNIROUTE_CHAOS_MIN_PANEL` | _(προεπιλογή μηχανής)_ | `open-sse/services/autoCombo/virtualFactory.ts` | Ελάχιστη ρύθμιση μεγέθους panel που προωθείται στον χειριστή broadcast του chaos· αν δεν οριστεί, διατηρείται η προεπιλογή της μηχανής. |
| `OMNIROUTE_CHAOS_PANEL_TIMEOUT_MS` | _(προεπιλογή μηχανής)_ | `open-sse/services/autoCombo/virtualFactory.ts` | Αυστηρό χρονικό όριο (ms) για ολόκληρο το fan-out του chaos panel· αν δεν οριστεί, διατηρείται η προεπιλογή της μηχανής. |
| `GROK_AUTH_PATH` | `~/.grok/auth.json` | `open-sse/services/grokQuotaFetcher.ts` | Διαδρομή του `auth.json` του Grok CLI που χρησιμοποιείται για την ανάκτηση της εβδομαδιαίας ποσόστωσης του grok-web· παρακάμψτε το για δοκιμές ή μη τυπική εγκατάσταση του CLI. |
| `AGENTBRIDGE_UPSTREAM_CA_CERT` | _(μη ορισμένο)_ | `src/mitm/manager.ts` | Επιπλέον πιστοποιητικό CA (PEM) που θεωρείται έμπιστο για τις upstream TLS συνδέσεις του AgentBridge. |
| `INSPECTOR_BUFFER_SIZE` | `1000` | `src/mitm/inspector/buffer.ts` | Μέγιστος αριθμός καταγεγραμμένων αιτημάτων που διατηρούνται στον κυκλικό buffer του Traffic Inspector. |
| `INSPECTOR_MAX_BODY_KB` | `1024` | `src/mitm/inspector/buffer.ts` | Μέγιστο μέγεθος σώματος καταγεγραμμένου αιτήματος/απόκρισης (KB) πριν από την περικοπή. |
| `INSPECTOR_HTTP_PROXY_PORT` | `8080` | `src/mitm/inspector/httpProxyServer.ts` | Τοπική θύρα για τον HTTP proxy του Traffic Inspector. |
| `INSPECTOR_HTTP_PROXY_AUTOSTART` | `false` | `src/mitm/inspector/httpProxyServer.ts` | Αυτόματη εκκίνηση του HTTP proxy του inspector κατά την εκκίνηση. |
| `INSPECTOR_LLM_HOSTS_EXTRA` | _(μη ορισμένο)_ | `src/lib/inspector/captureState.ts` | Επιπλέον hostnames (διαχωρισμένα με κόμμα) που αντιμετωπίζονται ως endpoints 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` | Λεπτά πριν η προστασία system-proxy επαναφέρει αυτόματα τις ρυθμίσεις διακομιστή μεσολάβησης του λειτουργικού συστήματος. |
| `INSPECTOR_INTERNAL_INGEST_TOKEN` | _(αυτόματο)_ | `src/app/api/tools/traffic-inspector/internal/ingest/route.ts` | Token που πιστοποιεί την εσωτερική εισροή καταγραφών στον inspector. |
| `PLAYGROUND_COMPARE_MAX_COLUMNS` | `4` | `src/app/(dashboard)/dashboard/playground/` | Μέγιστος αριθμός παράλληλων στηλών στη λειτουργία σύγκρισης του Playground. |
| `PLAYGROUND_IMPROVE_PROMPT_DEFAULT_MODEL` | _(μη ορισμένο)_ | `src/app/(dashboard)/dashboard/playground/` | Προεπιλεγμένο μοντέλο για την ενέργεια 'improve prompt' του Playground (επιστρέφει στο ενεργό μοντέλο όταν δεν έχει οριστεί). |
| `BIFROST_ENABLED` | `1` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Κεντρικός διακόπτης απενεργοποίησης για το bifrost sidecar proxy. Όταν οριστεί σε `0`, η διαδρομή επιστρέφει 503 με την κεφαλίδα `X-Bifrost-Killswitch` και ο χειριστής ανακατευθύνεται στη διαδρομή TS. Χρησιμοποιήστε το για να απενεργοποιήσετε το sidecar χωρίς επανάπτυξη (περιστατικό δρομολογητή επιπέδου 1, εναλλαγή κλειδιών). |
| `BIFROST_BASE_URL` | _(μη ορισμένο)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Όταν οριστεί, η διαδρομή του Bifrost sidecar proxy προωθεί την κίνηση του `/v1/chat/completions` σε αυτή την πύλη Go αντί για τον χειριστή αναμετάδοσης TS. Μη ορισμένο → 503-με-εφεδρεία. Το τελικό slash αφαιρείται. |
| `BIFROST_PORT` | `8080` | `src/lib/services/bootstrap.ts` | Θύρα στην οποία δεσμεύεται η εποπτευόμενη ενσωματωμένη υπηρεσία Bifrost (`127.0.0.1:`) όταν το OmniRoute διαχειρίζεται τον κύκλο ζωής του Bifrost sidecar. Προεπιλογή `8080`. |
| `LLMLINGUA_PORT` | `20135` | `src/lib/services/bootstrap.ts` | Θύρα στην οποία δεσμεύεται η εποπτευόμενη υπηρεσία συμπίεσης LLMLingua (`127.0.0.1:`). Προεπιλογή `20135`. |
| `LLMLINGUA_BASE_URL` | `http://127.0.0.1:20135` | `open-sse/services/compression/engines/llmlingua/index.ts` | Βασικό URL για τον τοπικό daemon μικροϋπηρεσίας συμπίεσης LLMLingua HTTP. Προεπιλογή `http://127.0.0.1:20135`. |
| `LLMLINGUA_MODEL` | `atjsh/llmlingua-2-js-tinybert-meetingbank` | `src/lib/services/installers/llmlingua.ts` | Αναγνωριστικό μοντέλου Hugging Face που φορτώνει το εποπτευόμενο LLMLingua sidecar (περνά στο περιβάλλον της θυγατρικής διεργασίας). |
| `BIFROST_API_KEY` | _(μη ορισμένο)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Κλειδί API για την πύλη Bifrost (αποστέλλεται ως `Authorization: Bearer ...`). Εάν δεν οριστεί, η διαδρομή αναμένει ότι το αίτημα φέρει ένα έγκυρο κλειδί API OmniRoute· αυτό το κλειδί προορίζεται μόνο για έλεγχο ταυτότητας από την πλευρά της πύλης. |
| `BIFROST_STREAMING_ENABLED` | `true` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Όταν είναι true, η διαδρομή sidecar του Bifrost στέλνει τις απαντήσεις πίσω με streaming μέσω SSE διαμέσου του gateway αντί για τον TS streaming executor. Ορίστε σε `0` για να επιβάλλετε μη-streaming απαντήσεις JSON μέσω του gateway. |
| `BIFROST_TIMEOUT_MS` | `30000` | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Timeout ανά αίτημα κατά το proxying προς το Bifrost gateway (ms). Σε περίπτωση timeout, η διαδρομή επιστρέφει τη διαδρομή TS relay μέσω της κεφαλίδας `X-Bifrost-Fallback`. |
| `OMNIROUTE_BIFROST_KEY` | _(μη ορισμένο)_ | `src/app/api/v1/relay/chat/completions/bifrost/route.ts` | Ψευδώνυμο του `BIFROST_API_KEY` (χρησιμοποιείται από scripts που διαβάζουν το περιβάλλον μέσω `OMNIROUTE_*`). Το `BIFROST_API_KEY` έχει προτεραιότητα όταν είναι ορισμένα και τα δύο. |
| `OMNIROUTE_RELAY_BACKEND` | `ts` / `auto` | `src/app/api/v1/relay/chat/completions/routingBackend.ts` | Backend relay για το `/api/v1/relay/chat/completions`: `ts \| bifrost \| auto`. `ts` = TypeScript relay (προεπιλογή όταν το Bifrost δεν είναι ρυθμισμένο)· το `auto` επιλέγει Bifrost όταν είναι ορισμένο το `BIFROST_BASE_URL` και το `BIFROST_ENABLED` ≠ `0`, με αυτόματο fallback σε TS αν το sidecar είναι απρόσιτο· το `bifrost` επιβάλλει Bifrost (αυστηρό, χωρίς fallback). Auth/rate-limit/injection-guard/allowlist εκτελούνται πάντα πρώτα στη διαδρομή 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` | Περίοδος αναμονής (ms) μετά από αποτυχία ενός hop του Bifrost sidecar σε λειτουργία `auto`, πριν το relay επαναλάβει την προσπάθεια προς το sidecar· δρομολογεί απευθείας στη διαδρομή TS όσο διαρκεί η αναμονή και έπειτα δοκιμάζει ξανά. Το `0` την απενεργοποιεί. Ισχύει μόνο όταν `OMNIROUTE_RELAY_BACKEND=auto`. |
| `OMNIROUTE_TLS_CERT` | _(μη ορισμένο)_ | `bin/cli/commands/serve.mjs` | Διαδρομή προς πιστοποιητικό PEM TLS για την εξυπηρέτηση του `omniroute serve` μέσω HTTPS (ισοδύναμο με `--tls-cert`). Πρέπει να συνδυάζεται με `OMNIROUTE_TLS_KEY`· ο αυτόνομος server τερματίζει τότε το TLS στον ίδιο listener (`wss://` λειτουργεί αμετάβλητο). Μη ορισμένο → απλό HTTP. Αν παρέχεται μόνο ένα από cert/key, ή μια μη αναγνώσιμη διαδρομή, καταγράφεται προειδοποίηση και παραμένει σε HTTP. |
| `OMNIROUTE_TLS_KEY` | _(μη ορισμένο)_ | `bin/cli/commands/serve.mjs` | Διαδρομή προς το ιδιωτικό κλειδί PEM TLS για το HTTPS του `omniroute serve` (ισοδύναμο με `--tls-key`). Πρέπει να συνδυάζεται με `OMNIROUTE_TLS_CERT`. Δείτε `OMNIROUTE_TLS_CERT`. |
| `OMNIROUTE_LOCAL_ENDPOINTS_ENABLED` | `0` | `src/lib/security/localEndpoints.ts` | Κεντρικός διακόπτης για τις διαδρομές `/api/local/*`. Όταν δεν είναι ορισμένο ή είναι `0`, όλες οι διαδρομές `/api/local/*` επιστρέφουν 503 σε παραγωγή. Πρέπει να είναι `1` σε μη-loopback αναπτύξεις για να ενεργοποιηθεί ο εκκινητής Redis και παρόμοιοι εκκινητές τοπικών υπηρεσιών με 1 κλικ. Διπλή προστασία με την ταξινόμηση route-guard `isLocalOnlyPath()` (`LOCAL_ONLY_API_PREFIXES` στο `src/server/authz/routeGuard.ts`). |
| `OMNIROUTE_LOCAL_ENDPOINTS_TOKEN` | _(μη ορισμένο)_ | `src/lib/security/localEndpoints.ts` | Bearer token για καλούντες των `/api/local/*` που δεν βρίσκονται σε loopback (π.χ. η εφαρμογή desktop). Όταν είναι ορισμένο, τα αιτήματα από μη-loopback IP πρέπει να φέρουν `Authorization: Bearer `. Απαιτείται όταν `OMNIROUTE_LOCAL_ENDPOINTS_ENABLED=1` σε μη-loopback αναπτύξεις. |
| `OMNIROUTE_REDIS_CONTAINER_NAME` | `omniroute-redis` | `bin/cli/commands/redis.mjs` | Όνομα container για τον εκκινητή Redis 1-click (`omniroute redis up`). Χρησιμοποιείται τόσο από το CLI όσο και από το GUI `RedisLauncherPanel`. |
| `OMNIROUTE_REDIS_HOST_PORT` | `6379` | `bin/cli/commands/redis.mjs` | Θύρα host για τον εκκινητή Redis 1-click. Αλλάξτε την αν ο host έχει ήδη δεσμεύσει την 6379. Η εσωτερική θύρα του container παραμένει 6379. |
| `OMNIROUTE_REDIS_BIND_HOST` | `127.0.0.1` | `bin/cli/commands/redis.mjs` | Διεπαφή host στην οποία δημοσιεύει ο εκκινητής Redis 1-click. Ο εκκινητής ξεκινά το Redis ΧΩΡΙΣ κωδικό πρόσβασης, οπότε η σύνδεση στο `0.0.0.0` δίνει σε κάθε host του LAN σας ένα Redis χωρίς έλεγχο ταυτότητας — διευρύνετέ το μόνο αν ορίσετε κι εσείς οι ίδιοι κωδικό πρόσβασης στο instance. |
| `REDIS_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | Διεπαφή host στην οποία το docker-compose δημοσιεύει το Redis sidecar (#9286). Το Redis του compose τρέχει χωρίς `requirepass`· τα containers της εφαρμογής το προσεγγίζουν μέσω του δικτύου compose (`redis:6379`) — η δημοσιευμένη θύρα υπάρχει μόνο για εργαλεία από την πλευρά του host. Το `0.0.0.0` εκθέτει ένα Redis χωρίς έλεγχο ταυτότητας σε όλο το LAN. |
| `REDIS_PORT` | `6379` | `docker-compose.yml` | Θύρα host για το Redis sidecar του compose. |
| `APP_BIND_HOST` | `127.0.0.1` | `docker-compose.yml`, `docker-compose.prod.yml` | Διεπαφή host στην οποία το docker-compose δημοσιεύει τις θύρες dashboard/API/live-WS της ίδιας της εφαρμογής (#12568). Με το `REQUIRE_API_KEY=false` να αποτελεί την προεπιλογή του `.env.example`, το `0.0.0.0` εκθέτει τον ανώνυμο LLM proxy `/v1` σε όλο το LAN/WAN — διευρύνετέ το μόνο όταν `REQUIRE_API_KEY=true` ή ένας reverse proxy μπροστά επιβάλλει τον δικό του έλεγχο ταυτότητας. |
| `QDRANT_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | Διεπαφή host στην οποία το docker-compose δημοσιεύει το Qdrant memory sidecar (#12578). Ίδιο σκεπτικό έκθεσης στο LAN όπως με το `REDIS_BIND_HOST`. |
| `BIFROST_BIND_HOST` | `127.0.0.1` | `docker-compose.yml` | Διεπαφή host στην οποία το docker-compose δημοσιεύει το Bifrost router sidecar (#12578). Ίδιο σκεπτικό έκθεσης στο LAN όπως με το `REDIS_BIND_HOST`. |
| `REDIS_KEY_PREFIX` | `omniroute:` | `src/shared/utils/rateLimiter.ts` | Πρόθεμα namespace που εφαρμόζεται σε κάθε κλειδί Redis του OmniRoute (rate limiter, cache αυθεντικοποίησης, αποθήκη quota, circuit breaker προθέρμανσης). Αποτρέπει συγκρούσεις κλειδιών όταν το instance 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` | Παραλλαγή αρχείου μυστικού (secret-file) του εσωτερικού token υπηρεσίας: διαδρομή προς αρχείο του οποίου το περιεχόμενο (μετά την αφαίρεση κενών χαρακτήρων) αποτελεί το token. Λαμβάνεται υπόψη μόνο όταν η ενσωματωμένη μεταβλητή δεν έχει οριστεί. |
| `OPENROUTER_PROVIDER_STATS_ENABLED` | `true` | `src/lib/catalog/openrouterProviderStats.ts` | Εμπλουτίζει τη λίστα παρόχων του πίνακα ελέγχου με εβδομαδιαία στατιστικά κατάταξης του OpenRouter (#9324). Ενεργό από προεπιλογή· ορίστε `false` για να παραλείψετε εντελώς τη λήψη στο παρασκήνιο (χωρίς αποκλεισμό, ποτέ μοιραίο). |
| `OPENROUTER_PROVIDER_STATS_TTL_MS` | `86400000` (24h) | `src/lib/catalog/openrouterProviderStats.ts` | TTL προσωρινής μνήμης για το στιγμιότυπο στατιστικών παρόχων του OpenRouter, σε χιλιοστά του δευτερολέπτου. |
| `OMNIROUTE_REDIS_IMAGE` | `redis:7-alpine` | `bin/cli/commands/redis.mjs` | Εικόνα Redis που χρησιμοποιείται από τον εκκινητή Redis με 1 κλικ. Παρακάμψτε σε `redis:8-alpine` ή σε κατοπτρισμό (mirror) ιδιωτικού μητρώου, ανάλογα με τις ανάγκες. |
| `QDRANT_HOST` | `qdrant` | _(προαιρετικό προφίλ συμπλέγματος)_ | Όνομα κεντρικού υπολογιστή του Qdrant sidecar όταν είναι ενεργό το `--profile memory`. Η προεπιλογή δείχνει στο όνομα της υπηρεσίας qdrant εντός του δικτύου· παρακάμψτε για εξωτερική ανάπτυξη. Καταναλώνεται μόνο όταν το `qdrantEnabled` είναι `true` στον κώδικα (`src/lib/memory/vectorStore.ts:108`). |
| `QDRANT_PORT` | `6333` | _(προαιρετικό προφίλ συμπλέγματος)_ | Θύρα REST του Qdrant sidecar. |
| `QDRANT_GRPC_PORT` | `6334` | _(προαιρετικό προφίλ συμπλέγματος)_ | Θύρα gRPC του Qdrant sidecar. Χρησιμοποιείται από βιβλιοθήκες πελατών που προτιμούν gRPC έναντι REST για λειτουργίες ροής. |
| `QDRANT_API_KEY` | _(μη ορισμένο)_ | _(προαιρετικό προφίλ συμπλέγματος)_ | Προαιρετικό κλειδί API για Qdrant Cloud ή μια πιστοποιημένη εγκατάσταση εντός των εγκαταστάσεων. Κενό → δεν αποστέλλεται κεφαλίδα `api-key`. |
| `QDRANT_COLLECTION` | `omniroute-memory` | _(προαιρετικό προφίλ συμπλέγματος)_ | Όνομα συλλογής για τα embeddings μνήμης συνομιλιών του OmniRoute. Δημιουργείται στην πρώτη εκτέλεση με `QDRANT_VECTOR_SIZE` διαστάσεις. |
| `QDRANT_EMBEDDING_MODEL` | `text-embedding-3-small` | _(προαιρετικό προφίλ συμπλέγματος)_ | Προεπιλεγμένο όνομα μοντέλου embedding που καταγράφεται στα μεταδεδομένα της συλλογής Qdrant. Τα πραγματικά embeddings δημιουργούνται από όποιον πάροχο δείχνει το πεδίο `embeddingModel` στις ρυθμίσεις του OmniRoute. |
| `QDRANT_VECTOR_SIZE` | `1536` | _(προφίλ cluster με opt-in)_ | Διάσταση διανύσματος embedding. Πρέπει να ταιριάζει με το μοντέλο που χρησιμοποιείτε για embeddings (text-embedding-3-small → 1536· ada-002 → 1536· nomic-embed-text → 768). |
| `QDRANT_HNSW_EF_CONSTRUCT` | `128` | _(προφίλ cluster με opt-in)_ | Ακρίβεια του δείκτη HNSW κατά το χρόνο κατασκευής. Υψηλότερη τιμή = πιο αργή δημιουργία, πιο γρήγορη αναζήτηση. |
| `OMNIROUTE_ROTATION_ENABLED` | `true` | `open-sse/services/rotationConfig.ts` | Κεντρικός διακόπτης για την εναλλαγή λογαριασμών με δυνατότητα ρύθμισης από τον χειριστή. Όταν είναι `false`, καμία από τις παρακάτω κλάσεις `OMNIROUTE_ROTATE_*` δεν προκαλεί εναλλαγή σε εφεδρικό λογαριασμό (η απενεργοποιημένη κεντρική κατάσταση μπλοκάρει επίσης τις από προεπιλογή ενεργοποιημένες κλάσεις 429/500/502). Επιτρέπει σε ένα εποπτεύον front-end (π.χ. την εφαρμογή επιφάνειας εργασίας VibeProxy) να αντικατοπτρίζει τους δικούς του κανόνες εναλλαγής στη μηχανή εφεδρικών λογαριασμών του backend. |
| `OMNIROUTE_ROTATION_RATE_LIMIT_RESET_SECONDS` | `0` | `open-sse/services/rotationConfig.ts` | Περίοδος αναμονής (δευτερόλεπτα) που εφαρμόζεται σε λογαριασμό με περιορισμό ρυθμού όταν το upstream δεν δίνει ρητή ένδειξη επαναφοράς. `0` = χρήση της προεπιλεγμένης περιόδου αναμονής της μηχανής αντί για σταθερή παράκαμψη. |
| `OMNIROUTE_ROTATION_DISABLE_TAG_WITHOUT_RESET` | `true` | `open-sse/services/rotationConfig.ts` | Αντικατοπτρίζει την προτίμηση του front-end «να μην επισημαίνεται ως περιορισμένος σε ρυθμό χωρίς χρόνο επαναφοράς». |
| `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` | Αριθμός σφαλμάτων `429` εντός του `OMNIROUTE_ROTATE_429_WINDOW_SECONDS` που απαιτείται πριν γίνει εναλλαγή του λογαριασμού. Το `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` | Αριθμός σφαλμάτων `5xx` εντός του `OMNIROUTE_ROTATE_500_WINDOW_SECONDS` που απαιτείται πριν γίνει εναλλαγή του λογαριασμού. Το `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` | Ενεργοποίηση fallback ανά κωδικό κατάστασης για σφάλματα `502` (bad gateway). Όταν `false`, τα `502` δεν προκαλούν πλέον εναλλαγή λογαριασμού. |
| `OMNIROUTE_ROTATE_502_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Αριθμός σφαλμάτων `502` εντός του `OMNIROUTE_ROTATE_502_WINDOW_SECONDS` που απαιτούνται πριν πραγματοποιηθεί εναλλαγή του λογαριασμού. Το `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` | Ρητή ενεργοποίηση (προεπιλογή OFF): όταν `true`, ένα απλό `400` (bad request) προκαλεί επίσης εναλλαγή λογαριασμού. Αυτό είναι αποκλειστικά προσθετικό — δεν μπλοκάρει ποτέ την υπάρχουσα συμπεριφορά της μηχανής, όπου ένα `400` που περιέχει κείμενο rate-limit/quota εξακολουθεί να προκαλεί εναλλαγή ανεξάρτητα από αυτή τη σημαία. |
| `OMNIROUTE_ROTATE_400_THRESHOLD` | `1` | `open-sse/services/rotationConfig.ts` | Αριθμός σφαλμάτων `400` εντός του `OMNIROUTE_ROTATE_400_WINDOW_SECONDS` που απαιτούνται πριν πραγματοποιηθεί εναλλαγή του λογαριασμού (λαμβάνεται υπόψη μόνο όταν `OMNIROUTE_ROTATE_ON_400=true`). |
| `OMNIROUTE_ROTATE_400_WINDOW_SECONDS` | `120` | `open-sse/services/rotationConfig.ts` | Κυλιόμενο παράθυρο (δευτερόλεπτα) κατά το οποίο τα σφάλματα `400` καταμετρώνται για το `OMNIROUTE_ROTATE_400_THRESHOLD`. |
### Χρονοπρογραμματιστής προθέρμανσης Claude
Προθέρμανση μέσω cron για συνδέσεις Anthropic OAuth με ρητή ενεργοποίηση, ώστε το παράθυρο ορίου ρυθμού των 5 ωρών να ανοίγει από ένα ασήμαντο προγραμματισμένο αίτημα αντί από το πρώτο πραγματικό (#8848). Ο χρονοπρογραμματιστής είναι απενεργοποιημένος εκτός αν το `OMNIROUTE_WARMUP_ENABLED` είναι truthy **και** η σύνδεση έχει επισημανθεί στο `settings.claudeWarmup.connections`· μια κενή λίστα συνδέσεων σημαίνει ότι τίποτα δεν προθερμαίνεται, ακόμη και με τη μεταβλητή περιβάλλοντος ενεργοποιημένη.
| Μεταβλητή | Προεπιλογή | Αρχείο πηγαίου κώδικα | Περιγραφή |
| ------------------------------ | ---------------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_WARMUP_ENABLED` | _(μη ορισμένο → απενεργοποιημένο)_ | `src/lib/warmupScheduler.ts` | Κεντρικός διακόπτης για τον χρονοπρογραμματιστή προθέρμανσης. Δέχεται `1`/`true`/`yes`/`on` (χωρίς διάκριση πεζών/κεφαλαίων, με αφαίρεση κενών). Οποιαδήποτε άλλη τιμή, ή αν δεν έχει οριστεί, αφήνει τον χρονοπρογραμματιστή απενεργοποιημένο. |
| `OMNIROUTE_WARMUP_CRON` | `0 7 * * *` | `src/lib/warmupScheduler.ts` | Έκφραση 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 για σύνδεση μέσω προγράμματος περιήγησης & Ψευδώνυμο του Data-Dir
Containerized Chromium+VNC που χρησιμοποιείται για διαδραστική καταγραφή διαπιστευτηρίων σύνδεσης μέσω προγράμματος περιήγησης (`/api/vnc-session`), συν ένα παλαιό ψευδώνυμο (legacy) του `DATA_DIR`. Όλα προαιρετικά — οι προεπιλογές του VNC στοχεύουν την ενσωματωμένη εικόνα `omniroute-vnc-chromium:local` και παρακάμπτονται μόνο για προσαρμοσμένη εικόνα container, θύρες ή ρύθμιση του κύκλου ζωής.
| Μεταβλητή | Προεπιλογή | Αρχείο πηγαίου κώδικα | Περιγραφή |
| ------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_VNC_IMAGE` | `omniroute-vnc-chromium:local` | `src/lib/vncSession/manifest.ts` | Tag εικόνας Docker για το container σύνδεσης Chromium+VNC. Δημιουργήστε το `docker/vnc-browser/chromium` ή κατευθύνετέ το σε μια προσαρμοσμένη εικόνα. |
| `OMNIROUTE_DOCKER_BIN` | `docker` | `src/lib/vncSession/manifest.ts` | Το εκτελέσιμο του container runtime που χρησιμοποιείται για την εκκίνηση του VNC container (π.χ. ορίστε το σε `podman`). |
| `OMNIROUTE_VNC_CONTAINER_VNC_PORT` | `3000` | `src/lib/vncSession/manifest.ts` | Η θύρα VNC/noVNC που εκτίθεται μέσα στο container. |
| `OMNIROUTE_VNC_CONTAINER_CDP_PORT` | `9223` | `src/lib/vncSession/manifest.ts` | Η θύρα Chrome DevTools Protocol μέσα στο container. |
| `OMNIROUTE_VNC_CONTAINER_PROFILE_DIR` | `/config` | `src/lib/vncSession/manifest.ts` | Η διαδρομή του καταλόγου προφίλ του Chromium μέσα στο container. |
| `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` | Χρόνος αδράνειας (ms) πριν τερματιστεί μια ανενεργή συνεδρία VNC. |
| `OMNIROUTE_VNC_MAX_MS` | `1800000` (30 λεπτά) | `src/lib/vncSession/manifest.ts` | Απόλυτο όριο (ms) στη διάρκεια ζωής μιας μεμονωμένης συνεδρίας VNC. |
| `OMNIROUTE_VNC_MAX_SESSIONS` | `4` | `src/lib/vncSession/manifest.ts` | Μέγιστος αριθμός ταυτόχρονων συνεδριών VNC. |
| `OMNIROUTE_VNC_READY_MS` | `45000` | `src/lib/vncSession/manifest.ts` | Χρονικό όριο (ms) αναμονής έως ότου το πρόγραμμα περιήγησης στο container γίνει έτοιμο για CDP. |
| `OMNIROUTE_VNC_HARVEST_MS` | `20000` | `src/lib/vncSession/manifest.ts` | Χρονικό όριο (ms) για τη συλλογή της καταγεγραμμένης συνεδρίας/cookies μετά την ολοκλήρωση της σύνδεσης. |
| `OMNIROUTE_VNC_CHROMIUM_ARGS` | `--remote-debugging-port=9222 --no-first-run --no-default-browser-check` | `src/lib/vncSession/manifest.ts` | Επιπλέον flags γραμμής εντολών που μεταβιβάζονται στο Chromium του container. |
| `OMNIROUTE_VNC_NETWORK` | `omniroute-vnc-browser-login` | `src/lib/vncSession/manifest.ts` | Αποκλειστικό δίκτυο Docker στο οποίο συνδέεται το VNC container σύνδεσης (#12571) αντί για την προεπιλεγμένη γέφυρα, ώστε τα γειτονικά containers να μην μπορούν να προσεγγίσουν τη θύρα γέφυρας CDP του. |
| `VIBEPROXY_DATA_DIR` | _(μη ορισμένο)_ | `open-sse/services/notionThreadSessions.ts` | **Παλαιό ψευδώνυμο (legacy)** του `DATA_DIR`, ελέγχεται μόνο αφού και το `DATA_DIR` και το `OMNIROUTE_DATA_DIR` δεν έχουν οριστεί. Εντοπίζει την προσωρινή μνήμη συνεδριών web-thread του Notion (`/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` | Λειτουργία bootstrap E2E (`auth`, `fresh`, `reuse`) για τον εκτελεστή Playwright. |
| `OMNIROUTE_E2E_PASSWORD` | εναλλακτικά το `INITIAL_PASSWORD` | `scripts/dev/run-next-playwright.mjs` | Κωδικός πρόσβασης διαχειριστή που εγχέεται στο περιβάλλον του Playwright. |
| `OMNIROUTE_DISABLE_LOCAL_HEALTHCHECK` | `true` | `scripts/dev/run-next-playwright.mjs` | Απενεργοποιεί την τοπική δειγματοληψία του healthcheck κατά τις εκτελέσεις του Playwright. |
| `OMNIROUTE_DISABLE_TOKEN_HEALTHCHECK` | `true` | `scripts/dev/run-next-playwright.mjs` | Απενεργοποιεί τον βρόχο healthcheck των OAuth token κατά τη διάρκεια των δοκιμών. |
| `OMNIROUTE_HEALTHCHECK_SKIP_PROVIDERS` | _(μη ορισμένο)_ | `src/lib/tokenHealthCheck.ts` | Πάροχοι διαχωρισμένοι με κόμματα που εξαιρούνται από την προληπτική σάρωση ανανέωσης token (π.χ. `codex,openai`). Στοχευμένη εναλλακτική έναντι της πλήρους απενεργοποίησης του healthcheck — οι πάροχοι σύντομου TTL συνεχίζουν να ανανεώνονται, ενώ οι πάροχοι cascade παραμένουν αποκλειστικά αντιδραστικοί. |
| `OMNIROUTE_HIDE_HEALTHCHECK_LOGS` | `true` | `scripts/dev/run-next-playwright.mjs` | Αποσιωπά τον θόρυβο του healthcheck στο stdout του Playwright. |
| `OMNIROUTE_PLAYWRIGHT_SKIP_BUILD` | `0` | `scripts/dev/run-next-playwright.mjs` | Παραλείπει το production build του Next.js πριν την εκκίνηση του Playwright (βελτιστοποίηση CI). |
| `OMNIROUTE_SKIP_UNINSTALL_HOOK` | `0` | `scripts/build/uninstall.mjs` | Παραλείπει το hook απεγκατάστασης του 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` | Το URL που το πλαίσιο smoke του Electron αναμένει να εξυπηρετεί η πακεταρισμένη εφαρμογή. |
| `ELECTRON_SMOKE_TIMEOUT_MS` | `45000` | `scripts/dev/smoke-electron-packaged.mjs` | Συνολικό timeout (ms) πριν το πλαίσιο smoke εγκαταλείψει. |
| `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` | _(προσωρινός κατάλογος)_ | `scripts/dev/smoke-electron-packaged.mjs` | Κατάλογος δεδομένων για την εκτέλεση smoke του Electron. |
| `ELECTRON_SMOKE_KEEP_DATA` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | Ορίστε `1` για να διατηρηθεί ο κατάλογος δεδομένων smoke μετά την εκτέλεση. |
| `ELECTRON_SMOKE_STREAM_LOGS` | `0` | `scripts/dev/smoke-electron-packaged.mjs` | Ορίστε `1` για ροή των αρχείων καταγραφής του Electron στο stdout κατά την εκτέλεση. |
| `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. |
### Pipeline μετάφρασης τεκμηρίωσης
Χρησιμοποιείται από το `scripts/i18n/run-translation.mjs` (η εντολή `npm run i18n:run`).
Και οι έξι μεταβλητές δεν έχουν οριστεί από προεπιλογή — ορίστε τες στο `.env` μόνο σε μηχανήματα
που πρέπει να μπορούν να εκτελούν τον μεταφραστή της τεκμηρίωσης.
| Μεταβλητή | Προεπιλογή | Αρχείο πηγής | Περιγραφή |
| ---------------------------------------- | --------------- | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_TRANSLATION_API_URL` | _(μη ορισμένο)_ | `scripts/i18n/run-translation.mjs` | Βασικό URL συμβατό με OpenAI για το backend μετάφρασης. |
| `OMNIROUTE_TRANSLATION_API_KEY` | _(μη ορισμένο)_ | `scripts/i18n/run-translation.mjs` | Token Bearer για το backend μετάφρασης (δεν καταγράφεται ποτέ). |
| `OMNIROUTE_TRANSLATION_MODEL` | _(μη ορισμένο)_ | `scripts/i18n/run-translation.mjs` | Αναγνωριστικό μοντέλου, π.χ. `gpt-4o-mini` ή `cx/gpt-5.4-mini`. |
| `OMNIROUTE_TRANSLATION_FALLBACK_MODELS` | _(μη ορισμένο)_ | `scripts/i18n/lib/translate-backend.mjs` | Προαιρετική αλυσίδα μοντέλων διαχωρισμένη με κόμματα, που δοκιμάζεται με τη σειρά όταν το κύριο μοντέλο αποτυγχάνει (όριο 429, 401/402, 5xx, χρονικό όριο, δίκτυο)· ένα εσφαλμένο αίτημα (400/413/422) δεν επαναλαμβάνεται αλλού. |
| `OMNIROUTE_TRANSLATION_TIMEOUT_MS` | `60000` | `scripts/i18n/run-translation.mjs` | Χρονικό όριο ανά αίτημα σε χιλιοστά του δευτερολέπτου. |
| `OMNIROUTE_TRANSLATION_REASONING_EFFORT` | _(μη ορισμένο)_ | `scripts/i18n/lib/translate-backend.mjs` | Προαιρετικός έλεγχος συλλογισμού, αποστέλλεται ως έχει στο backend όταν έχει οριστεί. |
| `OMNIROUTE_TRANSLATION_CONCURRENCY` | `4` | `scripts/i18n/run-translation.mjs` | Παράλληλα αιτήματα μετάφρασης κατά την εκτέλεση σε πολλαπλά αρχεία / locales. |
---
## 27. Ροή Radar (Αυτο-φιλοξενία)
Προαιρετικό πρόσθετο που ελέγχεται από τη σημαία δυνατότητας RADAR_ENABLED (απενεργοποιημένη από προεπιλογή — μια σημαία δυνατότητας που ενεργοποιείται μέσω των Ρυθμίσεων/της ΒΔ και όχι μέσω μεταβλητής περιβάλλοντος· βλ.
[docs/frameworks/RADAR.md](../frameworks/RADAR.md#flag-radar_enabled-default-off)).
Οι πρώτες τέσσερις μεταβλητές παρακάτω αποτελούν προαιρετικές παρακάμψεις για μια αυτο-φιλοξενούμενη ή διακλαδισμένη ροή και για τις ροές κλειδιών υποστηρικτών. Η πέμπτη, `RADAR_ADMIN_URL`, είναι ένας ξεχωριστός σύνδεσμος χωρίς προεπιλεγμένη τιμή προς τον ιδιωτικό πίνακα λειτουργιών του κατόχου. Ανατρέξτε στο [docs/frameworks/RADAR.md](../frameworks/RADAR.md) για την πλήρη τεκμηρίωση της λειτουργικής μονάδας και την
[ολοκληρωμένη ακολουθία ενεργοποίησης και καθοδηγούμενης ρύθμισης](../frameworks/RADAR.md#end-to-end-activation-and-guided-setup).
Το γενικό πρόγραμμα ανάγνωσης ανακοινώσεων της Αρχικής σελίδας/του Αρχείου αλλαγών δεν ρυθμίζεται μέσω μεταβλητής περιβάλλοντος και δεν εξαρτάται από τη σημαία δυνατότητας RADAR_ENABLED. Διαβάζει μόνο μέσω GET το δημόσιο URL `news.json` του αποθετηρίου, το οποίο δηλώνεται στο `src/shared/utils/releaseNotes.ts`· τα αναγνωριστικά απόρριψης παραμένουν στον τοπικό χώρο αποθήκευσης του προγράμματος περιήγησης.
| Μεταβλητή | Προεπιλογή | Αρχείο προέλευσης | Περιγραφή |
| ----------------------------- | -------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `RADAR_FEED_URL` | `https://radar.omniroute.online` | `src/lib/radar/{sync,referralsSync,offersSync,intelSync}.ts` | Βασικό URL που χρησιμοποιείται από τις ξεχωριστά υπογεγραμμένες ροές καταλόγου, παραπομπών, προσφορών υποστηρικτών και Intel. Παρακάμψτε το ώστε να παραπέμπει σε μια αυτο-φιλοξενούμενη ή διακλαδισμένη υπηρεσία. |
| `RADAR_FEED_PUBKEY` | _(καρφιτσωμένο προεπιλεγμένο κλειδί)_ | `src/lib/radar/pinnedKeys.ts` | Δημόσιο κλειδί Ed25519 (SPKI DER με κωδικοποίηση base64 ή PEM) που χρησιμοποιείται για την επαλήθευση των υπογραφών ροής από μια προσαρμοσμένη ροή. |
| `RADAR_CONTRIBUTOR_CLAIM_URL` | `https://radar.omniroute.online/auth/github` | `src/lib/radar/links.ts` | URL που ανοίγει το κουμπί «Είμαι συνεισφέρων» του πίνακα εργαλείων (ροή διεκδίκησης κλειδιού υποστηρικτή μέσω GitHub OAuth). |
| `RADAR_SUPPORTER_PLANS_URL` | `https://radar.omniroute.online/planos` | `src/lib/radar/links.ts` | URL που ανοίγει το κουμπί «Υποστήριξη του έργου» του πίνακα εργαλείων (σελίδα πληρωμής/προγραμμάτων). |
| `RADAR_ADMIN_URL` | _(μη ορισμένο)_ | `src/lib/radar/links.ts` | Ιδιωτικός σύνδεσμος πίνακα λειτουργιών αποκλειστικά για τον κάτοχο. Απαιτείται HTTPS, εκτός από προώθηση SSH βρόχου επιστροφής μέσω HTTP· οι μη ορισμένες ή μη έγκυρες τιμές δεν δημιουργούν στοιχείο πλοήγησης. |
---
## Έλεγχος: Καταργημένες / Ανενεργές μεταβλητές
Οι ακόλουθες μεταβλητές εμφανίζονταν σε προηγούμενες εκδόσεις του `.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 χρησιμοποιεί OAuth, όχι εκτελέσιμο αρχείο CLI). |
| `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 — τα διαπιστευτήρια προέρχονται από τον Πίνακα ελέγχου / `data/provider-credentials.json` / την κρυπτογραφημένη βάση δεδομένων. |
| `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` | Καταργήθηκε μαζί με άλλα αχρησιμοποίητα προσχέδια κλειδιών API παρόχων στην v3.8.0. |
### Διορθώσεις προεπιλεγμένων τιμών
| Μεταβλητή | Παλιά τιμή στο `.env.example` | Πραγματική προεπιλογή κώδικα | Διόρθωση |
| ------------------------- | ----------------------------- | ---------------------------- | --------------------------------------------------------------------- |
| `APP_LOG_RETENTION_DAYS` | `90` | `7` | ✅ Αφαιρέθηκε η παραπλανητική τιμή· τεκμηριώθηκε το `7` ως προεπιλογή |
| `CALL_LOG_RETENTION_DAYS` | `90` | `7` | ✅ Αφαιρέθηκε η παραπλανητική τιμή· τεκμηριώθηκε το `7` ως προεπιλογή |
### Επαναδημιουργία ρυθμίσεων OpenCode (εργαλείο ειδικού σκοπού)
Χρησιμοποιείται από το `scripts/ad-hoc/regen-opencode-config.ts` για την επαναδημιουργία ενός `opencode.json`
με ακριβείς τιμές `limit.context` και `limit.output` που ανακτώνται από το εκτελούμενο
στιγμιότυπο OmniRoute. Καμία από αυτές δεν απαιτείται για την κανονική λειτουργία — το script
αποτελεί αποκλειστικά εργαλείο για προγραμματιστές.
| Μεταβλητή | Προεπιλογή | Αρχείο προέλευσης | Περιγραφή |
| ------------------ | ------------------------ | ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_URL` | `http://localhost:20128` | `scripts/ad-hoc/regen-opencode-config.ts` | Βασικό URL του στιγμιοτύπου OmniRoute στο οποίο υποβάλλεται ερώτημα για το `/v1/models`. |
| `OMNIROUTE_KEY` | _(δεν έχει οριστεί)_ | `scripts/ad-hoc/regen-opencode-config.ts` | Κλειδί API για έλεγχο ταυτότητας στο τελικό σημείο `/v1/models` του OmniRoute. Αν δεν έχει οριστεί, χρησιμοποιείται το `OPENCODE_API_KEY`. |
| `OPENCODE_API_KEY` | _(δεν έχει οριστεί)_ | `scripts/ad-hoc/regen-opencode-config.ts` | Κλειδί API τύπου OpenCode (`sk-...`) που εγγράφεται στο αναδημιουργημένο `opencode.json`. Αν δεν έχει οριστεί, χρησιμοποιείται το `OMNIROUTE_KEY`. |
### Πλαίσιο δοκιμών αξιολόγησης συμπίεσης εκτός σύνδεσης (εργαλεία ad hoc)
Χρησιμοποιείται από το `scripts/compression-eval/index.ts`, το CLI αξιολόγησης συμπίεσης εκτός σύνδεσης.
Δεν απαιτείται για την κανονική λειτουργία — προορίζεται μόνο για εργαλεία προγραμματιστών.
| Μεταβλητή | Προεπιλογή | Αρχείο προέλευσης | Περιγραφή |
| ---------------------------- | ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_EVAL_CREDENTIALS` | `{}` (κενό) | `scripts/compression-eval/index.ts` | Διαπιστευτήρια JSON που παρέχονται από τον χειριστή για τον πάροχο που χρησιμοποιείται από το CLI αξιολόγησης συμπίεσης εκτός σύνδεσης (αναλύονται με `JSON.parse`). Αφήστε το χωρίς τιμή για δοκιμαστική εκτέλεση. |
### Συνεδρίες προγράμματος περιήγησης VNC
Χρησιμοποιούνται από το `src/lib/vncSession/manifest.ts` για τη διαμόρφωση συνεδριών Chromium χωρίς γραφικό περιβάλλον, βασισμένων στο Docker, για παρόχους αυτοματοποίησης προγράμματος περιήγησης. Όλες είναι προαιρετικές — οι προεπιλογές εμφανίζονται παρακάτω.
| Μεταβλητή | Προεπιλογή | Αρχείο προέλευσης | Περιγραφή |
| ------------------------------------- | ------------------------------ | ------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
| `OMNIROUTE_DOCKER_BIN` | `docker` | `src/lib/vncSession/manifest.ts` | Διαδρομή προς το εκτελέσιμο αρχείο Docker που χρησιμοποιείται για την εκκίνηση κοντέινερ VNC. |
| `OMNIROUTE_VNC_IMAGE` | `omniroute-vnc-chromium:local` | `src/lib/vncSession/manifest.ts` | Εικόνα Docker για το κοντέινερ VNC Chromium. |
| `OMNIROUTE_VNC_CHROMIUM_ARGS` | _(ενσωματωμένες σημαίες)_ | `src/lib/vncSession/manifest.ts` | Πρόσθετα ορίσματα CLI του Chromium που μεταβιβάζονται στο πρόγραμμα περιήγησης μέσα στο κοντέινερ. |
| `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` | Χρονικό όριο αδράνειας (ms) πριν από τη συλλογή μιας συνεδρίας VNC. |
| `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` | Ορίστε την τιμή σε `false` για να παραλείψετε την ανάκτηση στατιστικών ανά πάροχο από το OpenRouter για τον εμπλουτισμό του καταλόγου. |
| `OPENROUTER_PROVIDER_STATS_TTL_MS` | `3600000` | TTL της κρυφής μνήμης (ms) για τα ανακτημένα στατιστικά παρόχων OpenRouter. |
### Ενσωματωμένη σύνδεση Redis
| Μεταβλητή | Προεπιλογή | Περιγραφή |
| --------------------------- | ----------- | -------------------------------------------------------------------------------------------- |
| `REDIS_BIND_HOST` | `127.0.0.1` | Διεύθυνση σύνδεσης για την ενσωματωμένη υπηρεσία Redis. |
| `REDIS_PORT` | `6379` | Θύρα για την ενσωματωμένη υπηρεσία Redis. |
| `OMNIROUTE_REDIS_BIND_HOST` | – | Παράκαμψη με εμβέλεια OmniRoute για τη διεύθυνση σύνδεσης της ενσωματωμένης υπηρεσίας Redis. |
---
## 24. Προσθήκες της έκδοσης v3.8.50
Αυτές οι ρυθμίσεις εισήχθησαν μετά το προηγούμενο στιγμιότυπο της σύμβασης περιβάλλοντος.
| Μεταβλητή | Προεπιλογή | Αρχείο πηγής | Περιγραφή |
| ------------------------------------------- | -------------------------- | ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `OMNIROUTE_CHAT_ADMISSION_QUEUE_MS` | `2000` | `src/shared/middleware/chatBodyAdmission.ts` | Μέγιστη αναμονή για θέση εισδοχής βαριάς συνομιλίας πριν από μια επαναλήψιμη απάντηση `503`· μια σύντομη οριοθετημένη αναμονή σειριοποιεί τις εκρήξεις agent αντί για ένα άμεσο `503`. Το `0` επαναφέρει την άμεση απόρριψη. |
| `OMNIROUTE_CHAT_ADMISSION_MAX_QUEUED_BYTES` | `4194304` (4 MB) | `src/shared/middleware/chatBodyAdmission.ts` | Προϋπολογισμός bytes σε ουρά για την αναμονή εισδοχής: οριοθετεί τα συνολικά bytes σώματος που αποθηκεύονται προσωρινά και παρακρατούνται σε ολόκληρη τη διεργασία, ώστε η αναμονή να μην μπορεί να διογκώσει τον σωρό (#4380). Οι αναμονές πέρα από τον προϋπολογισμό λαμβάνουν αμέσως επαναλήψιμη απάντηση `503`. |
| `OMNIROUTE_CHAT_VIRTUAL_TTL_MS` | `60000` (60 s) | `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` | Διατηρεί φρέσκια την κατάσταση IMS και κινδύνου του προγράμματος περιήγησης μέσω συνεδριών Chrome CDP με εμβέλεια λογαριασμού· ορίστε `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` | Λειτουργία true-headless μόνο για αποσφαλμάτωση· το 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` | Token του BotFather που ενεργοποιεί το εισερχόμενο webhook και υπογράφει τα `initData` του Mini App. |
| `TELEGRAM_WEBHOOK_SECRET` | _(δεν έχει οριστεί)_ | `src/lib/telegram/config.ts` | Κοινόχρηστο μυστικό που καταχωρείται μέσω `setWebhook` και επαληθεύεται ως προς την κεφαλίδα `X-Telegram-Bot-Api-Secret-Token` σε κάθε παράδοση webhook. Απαιτείται για τη διαδρομή webhook· αν δεν έχει οριστεί, οι παραδόσεις webhook απορρίπτονται με 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` | Παράκαμψη του βασικού URL του Bot API για διακομιστές μεσολάβησης ή αυτοφιλοξενούμενους διακομιστές Bot API. |
| `TELEGRAM_WEBHOOK_TIMEOUT_MS` | `60000` | `src/lib/telegram/config.ts` | Χρονικό όριο σε χιλιοστά του δευτερολέπτου για εξερχόμενες κλήσεις του Bot API. |
| `OMNIROUTE_OPTIONAL_PACK_TAR` | `1` (ενεργοποιημένη) | `scripts/build/optionalPackStaging.mjs` | Ορίστε `0` για να παραλείπεται η δημιουργία αρχείων `.tar.gz` κατά τη σταδιοποίηση προαιρετικών πακέτων ML/προγράμματος περιήγησης για το αυτόνομο δέντρο του Electron (οι κατάλογοι πακέτων και το `optional-packs.index.json` εξακολουθούν να παράγονται). Χρησιμοποιείται από τη ροή εργασίας της επιτραπέζιας έκδοσης για τη μείωση του μεγέθους μεταφόρτωσης των artifacts. |
| `GROK_SUBSCRIPTION_IMAGES_ENABLED` | `false` | `open-sse/config/imageRegistry.ts` | Ενεργοποιεί την καταχώριση των διαδρομών εικόνων της συνδρομής xAI· απενεργοποιημένη από προεπιλογή, ώστε η διαδρομή εικόνων με κλειδί API να παραμένει αμετάβλητη. |
| `OMNIROUTE_API_KEY_COOLDOWN_MS` | `60000` | `open-sse/services/apiKeyRotator.ts` | Περίοδος αναμονής ανά κλειδί σε χιλιοστά του δευτερολέπτου όταν μια απάντηση `429` δεν περιέχει χρησιμοποιήσιμη υπόδειξη `Retry-After`. |
| `OMNIROUTE_ESTIMATOR_CALIBRATION` | ενεργοποιημένη | `open-sse/services/estimatorCalibration.ts` | Ορίστε την σε `off`, `0` ή `false` για απενεργοποίηση της καταγραφής και εφαρμογής της βαθμονόμησης του εκτιμητή στη μνήμη. |
| `NEXT_MANUAL_SIG_HANDLE` | _(εσωτερική)_ | `scripts/dev/standalone-server-ws.mjs` | Εσωτερική παράκαμψη του χειριστή σημάτων του αυτόνομου διακομιστή· κανονικά ορίζεται και εκκαθαρίζεται από τον εκκινητή αντί να διαμορφώνεται από τους χειριστές. |
### ChatGPT Web (Codex)
Καθολικές προεπιλογές για το headless πρόγραμμα περιήγησης και την εξερχόμενη σήραγγα εργαλείων. Οι τιμές σύνδεσης που ορίζονται στον πίνακα ελέγχου έχουν προτεραιότητα.
| Μεταβλητή | Προεπιλογή | Αρχείο πηγαίου κώδικα | Περιγραφή |
| --------------------------------------- | ---------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CHATGPT_WEB_CODEX_CHROME_PATH` | _(αυτόματος εντοπισμός)_ | `open-sse/executors/chatgpt-web-codex.ts` | Ρητή διαδρομή Chrome/Chromium για λειτουργία με npm, systemd και PM2. |
| `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 χρησιμοποιεί το sidecar στη θύρα `9223`. |
| `CHATGPT_WEB_CODEX_USE_CDP_PROFILE` | _(μη ορισμένο — απενεργοποιημένο)_ | `open-sse/vendor/codex-chatgpt-web/persistent-cdp-context.ts` | Ορίστε σε `1` (με διαμορφωμένο τελικό σημείο CDP) για επαναχρησιμοποίηση της υπάρχουσας σελίδας ChatGPT του εξωτερικά διαχειριζόμενου, συνδεδεμένου προφίλ προγράμματος περιήγησης, αντί για απομονωμένο περιβάλλον ανά γύρο· επίσης περιορίζει τις ταυτόχρονες καρτέλες ChatGPT σε 1. Απενεργοποιημένο από προεπιλογή. Δείτε [επίμονο προφίλ CDP](../guides/CHATGPT-WEB-PERSISTENT-CDP.md). |
| `CDP_PROXY_TOKEN` | _(μη ορισμένο)_ | `docker/chatgpt-web-codex-browser/cdp-proxy.mjs` | Εφόσον οριστεί, κάθε αίτημα προς το sidecar του διαμεσολαβητή 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` | Καθολικό αναγνωριστικό σήραγγας OpenAI για τοπικούς γύρους εργαλείων Codex. |
| `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` | Ακριβές όνομα του νέου προσαρμοσμένου συνδέσμου ChatGPT που δημιουργείται για τη γέφυρα MCP. |
| `CODEX_CHATGPT_WEB_HOME` | `/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
Καταναλωτής SSE μεγάλης διάρκειας που αντικατοπτρίζει τις εργασίες του hub OmniConductor στον τοπικό A2A TaskManager (`src/lib/conductor/`). Προαιρετικό — η γέφυρα εκκινεί μόνο όταν έχει οριστεί το `CONDUCTOR_HUB_URL`. Μόνο στην πλευρά του διακομιστή: το διακριτικό του hub δεν πρέπει ποτέ να φτάσει στο πρόγραμμα περιήγησης.
| Μεταβλητή | Προεπιλογή | Αρχείο Πηγής | Περιγραφή |
| ------------------------------ | ----------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `CONDUCTOR_HUB_URL` | _(κενό)_ | `src/lib/conductor/boot.ts` | Βασικό URL του hub OmniConductor (π.χ. `http://127.0.0.1:7910`). Χωρίς ορισμό = η γέφυρα είναι απενεργοποιημένη. |
| `CONDUCTOR_HUB_TOKEN` | _(κενό)_ | `src/lib/conductor/boot.ts` | Διαπιστευτήριο hub για τη ροή SSE — εκδώστε έναν peer τύπου `spokesperson` στο hub (`POST /v1/peers`, διαχειριστής). |
| `CONDUCTOR_ORCHESTRATOR_TOKEN` | _(κενό)_ | `src/lib/conductor/hubProxy.ts` | Διαπιστευτήριο για την εισερχόμενη ανάθεση εργασιών A2A→hub (`POST /v1/tasks`)· επιστρέφει στο `CONDUCTOR_HUB_TOKEN` όταν δεν έχει οριστεί. |
| `CONDUCTOR_SPOKESPERSON_URL` | `http://127.0.0.1:7920` | `src/lib/conductor/faroProxy.ts` | Βασικό URL της υπηρεσίας spokesperson (Faro) πίσω από τον μεσολαβητή συνομιλίας του πίνακα ελέγχου (`/api/conductor/ask`). |
### Χρονοπρογραμματισμός με επίγνωση ποσόστωσης
Χρησιμοποιείται από τα `open-sse/services/combo.ts` και `src/lib/quota/quotaScheduler.ts` για ελέγχους προϋπολογισμού token πριν από το αίτημα. Προαιρετικό — η προεπιλεγμένη συμπεριφορά δρομολόγησης παραμένει αμετάβλητη όταν δεν έχει οριστεί.
| Μεταβλητή | Προεπιλογή | Αρχείο Πηγής | Περιγραφή |
| ---------------------------------- | ---------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `OMNIROUTE_QUOTA_AWARE_ROUTING` | `0` | `open-sse/services/combo.ts` | Όταν `1`, παραλείπονται οι συνδέσεις των οποίων ο προϋπολογισμός token ανά παράθυρο (`rateLimitOverrides.tpm`, πίνακας `provider_quota_state`) δεν επαρκεί για το εκτιμώμενο κόστος του αιτήματος πριν από την αποστολή. Fail-open όταν δεν έχει διαμορφωθεί προϋπολογισμός. |
| `OMNIROUTE_ESTIMATOR_CALIBRATION` | _(ενεργό)_ | `open-sse/services/estimatorCalibration.ts` | Βαθμονόμηση ανάδρασης του εκτιμητή token του φρουρού πλαισίου (#14931): ανά (πάροχος, μοντέλο, παρουσία εργαλείων) EMA του `usage.prompt_tokens` / εκτίμηση, περιορισμένο στο 0.15–2.0, μόνο στη μνήμη. Οι τιμές `off`, `0` ή `false` απενεργοποιούν την καταγραφή και την εφαρμογή. |
| `GROK_SUBSCRIPTION_IMAGES_ENABLED` | `false` | `open-sse/config/imageRegistry.ts` | Καταχωρεί τις διαδρομές εικόνας `xai-oauth` (`xao`) και `grok-cli`. Σημαία χαρακτηριστικού του πίνακα ελέγχου με το ίδιο όνομα· μια παράκαμψη στη βάση δεδομένων υπερισχύει αυτής της τιμής. |