mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-15 19:52:50 +03:00
Add native ChatGPT Web provider for Codex clients (#8949)
* Bypass proxy compaction for native Codex context
* Add native ChatGPT Web provider pipeline
* Add managed browser and tunnel deployment
* Add ChatGPT Web setup and doctor UI
* Document and test ChatGPT Web integration
* fix(security): register chatgpt-web-codex-doctor in LOCAL_ONLY_API_PATTERNS
The diagnostic route under /api/providers/{id}/chatgpt-web-codex-doctor
was not registered in the spawn-capable route guard. Adding it for
parity with the existing /login pattern.
Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
* fix(providers): route chatgpt-web-codex admin routes through a service boundary
The provider CRUD/doctor routes imported chatgpt-web-codex helpers
(finalizeValidatedChatGptWebCodexSecrets, encode/decodeChatGptWebCodexSecrets,
getChatGptWebCodexDoctorStatus) directly from open-sse/executors/**, which
no-restricted-imports (EXECUTOR_IMPORT_RESTRICTION) forbids for src/app/**
files — executor implementations must stay behind an open-sse handler or
service boundary.
Add open-sse/services/chatgptWebCodexAdmin.ts as a thin re-export boundary
(mirroring the existing tokenRefresh.ts re-export pattern) and import from
there instead. No behavior change.
Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
---------
Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
This commit is contained in:
94
docs/providers/CHATGPT_WEB_CODEX.md
Normal file
94
docs/providers/CHATGPT_WEB_CODEX.md
Normal file
@@ -0,0 +1,94 @@
|
||||
# ChatGPT Web (Codex)
|
||||
|
||||
`ChatGPT Web (Codex)` ist ein zusätzlicher Provider. Der bestehende Provider
|
||||
`ChatGPT Web (Plus/Pro)` bleibt für normale Chats, Bilder und dessen bisherige
|
||||
Tool-Emulation unverändert.
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
- ein vollständiger Cookie-Header einer angemeldeten ChatGPT-Sitzung;
|
||||
- Chrome oder Chromium bei npm-, systemd- und PM2-Installationen;
|
||||
- beim Docker-Profil `web` der interne Chromium-Dienst aus `docker-compose.yml`;
|
||||
- ein OpenAI-Tunnel und ein ChatGPT-Custom-Connector für lokale Codex-Tools.
|
||||
|
||||
Der Tunnel ist nur für Tool-Runden nötig. `pro` ist read-only und benötigt keinen
|
||||
lokalen Tool-Connector.
|
||||
|
||||
## Einrichtung in der Weboberfläche
|
||||
|
||||
1. Öffne den Provider `ChatGPT Web (Codex)` und füge eine Connection hinzu.
|
||||
2. Füge den vollständigen ChatGPT-Cookie, die Tunnel-ID, den Runtime-Key und den
|
||||
Namen des Custom Connectors ein.
|
||||
3. Starte die Prüfung. OmniRoute öffnet headless einen Temporary Chat und erkennt
|
||||
dabei auch, ob `pro` für das Konto verfügbar ist.
|
||||
4. Speichere die Connection. OmniRoute ersetzt den eingegebenen Cookie durch den
|
||||
geprüften Playwright-Storage-State und speichert ihn zusammen mit dem Runtime-Key
|
||||
über die verschlüsselte Credential-Abstraktion.
|
||||
|
||||
Der rohe Cookie wird nach erfolgreichem Speichern nicht zusätzlich aufbewahrt.
|
||||
Wenn die Sitzung abläuft, öffne die Connection, gib einen frischen vollständigen
|
||||
Cookie ein und prüfe sie erneut. Der Doctor-Status im Edit-Dialog zeigt Browser,
|
||||
Storage-State, Anmeldung, Temporary Chat, Tunnel, Connector und Tool-Roundtrip
|
||||
getrennt an.
|
||||
|
||||
## Modelle und Combos
|
||||
|
||||
Die festen Modelle sind:
|
||||
|
||||
- `chatgpt-web-codex/instant`
|
||||
- `chatgpt-web-codex/medium`
|
||||
- `chatgpt-web-codex/high`
|
||||
- `chatgpt-web-codex/extra-high`
|
||||
- `chatgpt-web-codex/pro`
|
||||
|
||||
Füge eines davon wie jedes andere Modell zu einer Combo hinzu. Die Codex-App
|
||||
sendet nur den Combo-Namen als `model` an den normalen Responses-Endpunkt
|
||||
`/v1/responses`. Es gibt keinen Sonderendpoint und keinen Codex-Modus-Schalter.
|
||||
|
||||
`pro` führt keine lokalen Tools aus. Ein erzwungenes Tool macht dieses Combo-Ziel
|
||||
inkompatibel; bei optionalen Tools läuft der Turn read-only und meldet diese
|
||||
Einschränkung als Commentary.
|
||||
|
||||
## Sicherheitsmodell
|
||||
|
||||
- Der native Pfad verlangt einen Responses-Request, einen erkannten Codex-Client
|
||||
sowie zusammenpassende Thread- und Turn-Identitäten.
|
||||
- Workspace, Sandbox, Approval-Policy und Toolkatalog stammen aus der nativen
|
||||
Codex-Hülle. Freier Prompttext ist dafür keine Autorität.
|
||||
- ChatGPT erhält pro Turn nur eine kurzlebige Capability. Der MCP-Broker akzeptiert
|
||||
ausschließlich Tools, die Codex in genau diesem Turn angeboten hat.
|
||||
- Das automatische Bestätigen von „Allow once“ gibt nur den Tool-Wunsch an Codex
|
||||
zurück. Codex allein entscheidet über Freigabe und Ausführung.
|
||||
- Vor dem ersten Output darf die Combo auf ein anderes kompatibles Ziel fallen.
|
||||
Danach bleiben Provider, Modell, Connection und Browserturn bis zum Abschluss
|
||||
gepinnt.
|
||||
- Cookies, Runtime-Keys, Storage-State und Capability-Tokens erscheinen nicht in
|
||||
Providerantworten oder Request-Logs.
|
||||
|
||||
## Headless VPS und Docker
|
||||
|
||||
Bei npm-, systemd- und PM2-Betrieb erkennt OmniRoute übliche Chrome- und
|
||||
Chromium-Pfade. Alternativ kann `CHATGPT_WEB_CODEX_CHROME_PATH` gesetzt werden.
|
||||
|
||||
Das Docker-Profil `web` startet `chatgpt-web-codex-browser` im internen
|
||||
Compose-Netz. Sein CDP-Port wird nicht auf dem Host veröffentlicht. Das geschützte
|
||||
Profilvolume bleibt getrennt vom OmniRoute-Datenvolume und der Browser erhält
|
||||
ausreichend Shared Memory. Der interne CDP-Proxy lauscht nur im Compose-Netz auf
|
||||
Port `9223`; Chrome selbst bleibt im Sidecar an Loopback gebunden.
|
||||
|
||||
Eine Supervisor-Lease unter `DATA_DIR` verhindert, dass mehrere OmniRoute-Prozesse
|
||||
denselben Tunnel- und Brokerzustand besitzen. Ein Konflikt erscheint im Doctor.
|
||||
|
||||
## Interaktive Wiederherstellung
|
||||
|
||||
Der normale Pfad ist vollständig headless. Wenn ChatGPT eine interaktive
|
||||
Anmeldung oder Challenge verlangt, kann die bestehende VNC-Browser-Infrastruktur
|
||||
als Recovery-Weg verwendet werden. Browser-UI und CDP dürfen dabei nur über
|
||||
Loopback, eine authentifizierte Managementverbindung oder einen SSH-Tunnel
|
||||
erreichbar sein; noVNC bleibt im normalen Betrieb deaktiviert.
|
||||
|
||||
## WebSocket-Fallback
|
||||
|
||||
Enthält eine Combo `ChatGPT Web (Codex)`, fordert die Responses-WebSocket-Brücke
|
||||
vor der Upstream-Verbindung den HTTP/SSE-Fallback an. Die eigentliche Übertragung
|
||||
erfolgt dann über `/v1/responses`.
|
||||
@@ -1461,3 +1461,15 @@ These settings were introduced after the previous environment-contract snapshot.
|
||||
| `TELEGRAM_DEFAULT_MODEL` | `auto/chat` | `src/lib/telegram/chatProxy.ts` | Model used for Telegram chat replies. |
|
||||
| `TELEGRAM_BOT_API_BASE` | `https://api.telegram.org` | `src/lib/telegram/config.ts` | Bot API base URL override for proxies or self-hosted Bot API servers. |
|
||||
| `TELEGRAM_WEBHOOK_TIMEOUT_MS` | `60000` | `src/lib/telegram/config.ts` | Timeout in milliseconds for outbound Bot API calls. |
|
||||
### ChatGPT Web (Codex)
|
||||
|
||||
Globale Defaults für den headless Browser und den ausgehenden Tool-Tunnel. Im Dashboard gesetzte Connection-Werte haben Vorrang.
|
||||
|
||||
| Variable | Default | Source File | Description |
|
||||
| ------------------------------------ | -------------------------------- | ------------------------------------------------ | --------------------------------------------------------------------------- |
|
||||
| `CHATGPT_WEB_CODEX_CHROME_PATH` | _(auto-detect)_ | `open-sse/executors/chatgpt-web-codex.ts` | Expliziter Chrome-/Chromium-Pfad für npm-, systemd- und PM2-Betrieb. |
|
||||
| `CHROME_PATH` | _(auto-detect)_ | `open-sse/executors/chatgpt-web-codex.ts` | Gemeinsamer Fallback für einen expliziten Chrome-/Chromium-Pfad. |
|
||||
| `CHATGPT_WEB_CODEX_CDP_URL` | _(unset)_ | `open-sse/executors/chatgpt-web-codex.ts` | Interner CDP-Endpunkt; Docker verwendet den Sidecar auf Port `9223`. |
|
||||
| `CHATGPT_WEB_CODEX_TUNNEL_ID` | _(unset)_ | `open-sse/executors/chatgpt-web-codex.ts` | Globale OpenAI-Tunnel-ID für lokale Codex-Tool-Runden. |
|
||||
| `CHATGPT_WEB_CODEX_RUNTIME_KEY` | _(unset)_ | `open-sse/executors/chatgpt-web-codex.ts` | Globaler Tunnel Runtime-Key; niemals in Logs ausgeben. |
|
||||
| `CHATGPT_WEB_CODEX_CONNECTOR_NAME` | _(unset)_ | `open-sse/executors/chatgpt-web-codex.ts` | Name des ChatGPT-Custom-Connectors für die MCP-Brücke. |
|
||||
|
||||
Reference in New Issue
Block a user