@koreanhole/opencodex 2.95.1 → 2.95.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,516 @@
1
+ <p align="center">
2
+ <img src="../assets/banner.png" alt="opencodex — один локальный шлюз для Codex, Claude Code, Claude Desktop, Grok Build и других инструментов" width="100%">
3
+ </p>
4
+
5
+ <h3 align="center">Один локальный шлюз для ваших инструментов программирования с ИИ и моделей.</h3>
6
+ <p align="center"><b>Используйте выбранные модели с Codex, Claude Code, Claude Desktop и Grok Build,<br>а OpenCode, Pi, Qoder, WorkBuddy, Kilo, Cline, T3 Code и другие подключайте через управляемые конфигурации.</b><br>
7
+ <a href="https://opencodex.me/ru/reference/client-support/">Все поддерживаемые инструменты →</a></p>
8
+
9
+ <p align="center">
10
+ <a href="https://x.com/claudeebum"><img src="https://img.shields.io/badge/%40claudeebum-000000?logo=x&logoColor=white" alt="Подписывайтесь на @claudeebum в X"></a>
11
+ <a href="https://www.npmjs.com/package/@koreanhole/opencodex"><img src="https://img.shields.io/npm/v/@koreanhole/opencodex?color=cb3837&label=npm&logo=npm" alt="версия npm"></a>
12
+ <a href="https://github.com/koreanhole/opencodex-cli/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/@koreanhole/opencodex?color=blue" alt="лицензия"></a>
13
+ <img src="https://img.shields.io/node/v/@koreanhole/opencodex?logo=node.js&label=node" alt="версия Node">
14
+ </p>
15
+
16
+ ```bash
17
+ npm install -g @koreanhole/opencodex
18
+ ocx start
19
+ ```
20
+
21
+ <p align="center">
22
+ <a href="https://github.com/lidge-jun/opencodex/releases/latest"><img src="https://img.shields.io/badge/macOS-.dmg-24292f?logo=apple&logoColor=white" alt="Скачать для macOS (.dmg)"></a>
23
+ <a href="https://github.com/lidge-jun/opencodex/releases/latest"><img src="https://img.shields.io/badge/Windows-.msi-24292f?logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0id2hpdGUiPjxwYXRoIGQ9Ik0zIDNoOC41djguNUgzem05LjUgMEgyMXY4LjVoLTguNXpNMyAxMi41aDguNVYyMUgzem05LjUgMEgyMVYyMWgtOC41eiIvPjwvc3ZnPg==" alt="Скачать для Windows (.msi)"></a>
24
+ <a href="https://github.com/lidge-jun/opencodex/releases/latest"><img src="https://img.shields.io/badge/Linux-.AppImage-24292f?logo=linux&logoColor=white" alt="Скачать для Linux (.AppImage)"></a>
25
+ <a href="https://github.com/lidge-jun/opencodex/releases/latest"><img src="https://img.shields.io/badge/Linux-.deb-24292f?logo=debian&logoColor=white" alt="Скачать для Linux (.deb)"></a>
26
+ </p>
27
+
28
+ <table>
29
+ <tr>
30
+ <td width="50%" valign="middle">
31
+
32
+ ### Claude Code на любой модели
33
+
34
+ Селектор — штатный Claude Code. Мозг за ним — нет.
35
+
36
+ </td>
37
+ <td width="50%">
38
+ <img src="../assets/claude-code-models.gif" alt="Claude Code работает на маршрутизированной модели через opencodex — в строке состояния активна gpt-5.6-luna-medium" width="100%">
39
+ </td>
40
+ </tr>
41
+ <tr>
42
+ <td width="50%" valign="middle">
43
+
44
+ ### Codex на любой модели
45
+
46
+ Выберите провайдера — и вперёд: тот же рабочий процесс, другой «мозг».
47
+
48
+ </td>
49
+ <td width="50%">
50
+ <img src="../assets/demo.gif" alt="Демонстрация opencodex — выполнение задачи в приложении Codex на маршрутизированной модели не от OpenAI" width="100%">
51
+ </td>
52
+ </tr>
53
+ <tr>
54
+ <td width="50%" valign="middle">
55
+
56
+ ### Claude Desktop на любой модели
57
+
58
+ Opus отвечает, затем передаёт задачу подагенту GPT-5.6 Sol.
59
+
60
+ </td>
61
+ <td width="50%">
62
+ <img src="../assets/claude-desktop-subagent.gif" alt="Claude Desktop отвечает как Claude Opus 4.8, затем запускает подагента GPT-5.6 Sol через opencodex" width="100%">
63
+ </td>
64
+ </tr>
65
+ <tr>
66
+ <td width="50%" valign="middle">
67
+
68
+ ### Grok Build на любой модели
69
+
70
+ Sol ведёт сессию и вызывает подагента Kimi K3.
71
+
72
+ </td>
73
+ <td width="50%">
74
+ <img src="../assets/grok-build-subagent.gif" alt="Grok Build запускает GPT-5.6 Sol через opencodex и вызывает подагента Kimi K3" width="100%">
75
+ </td>
76
+ </tr>
77
+ </table>
78
+
79
+ <p align="center">
80
+ <a href="../README.md">English</a> · <a href="README.fr.md">Français</a> · <a href="README.ko.md">한국어</a> · <a href="README.zh-CN.md">简体中文</a> · <a href="README.zh-TW.md">繁體中文</a> · <b>Русский</b> · <a href="README.ja.md">日本語</a> · <a href="README.tr.md">Türkçe</a> · 📖 <a href="https://opencodex.me/ru/"><b>Полная документация →</b></a>
81
+ </p>
82
+
83
+ opencodex — лёгкий локальный шлюз между вашими инструментами программирования и поставщиками моделей. Он принимает запросы API Responses, Chat Completions и Anthropic Messages и переводит их в протокол провайдера, передавая потоковые ответы, вызовы инструментов, рассуждения и изображения там, где это поддерживают клиент, модель и провайдер. Используйте Claude, Gemini, Grok, GLM, DeepSeek, Kimi, Qwen, Ollama и других провайдеров с Codex, Claude Code, Claude Desktop, Grok Build и инструментами со [страницы поддержки клиентов](https://opencodex.me/ru/reference/client-support/). Он также управляет **пулом аккаунтов ChatGPT** для аутентификации Codex: добавляйте аккаунты и обновляйте их квоты в панели; новые сеансы автоматически направляются на исправный аккаунт с наименьшим использованием, а существующие треды остаются привязаны к исходному аккаунту.
84
+
85
+ ## Быстрый старт
86
+
87
+ ### Личная установка (CLI)
88
+
89
+ ```bash
90
+ npm install -g @koreanhole/opencodex # Node 18+; рантайм Bun подключается автоматически
91
+ ocx start # прокси + панель управления на localhost:10100
92
+ ```
93
+
94
+ Чтобы запустить его в фоне, используйте `ocx service`.
95
+
96
+ Откройте **http://localhost:10100** и настройте всё в веб-панели: добавьте провайдеров
97
+ (40+ встроенных или любой OpenAI-совместимый endpoint), выберите модели, управляйте
98
+ аккаунтами. `ocx gui` в любой момент снова откроет панель.
99
+
100
+ ### Подключите свой инструмент
101
+
102
+ Подключите инструмент, которым вы уже пользуетесь:
103
+
104
+ | Инструмент | Как подключить |
105
+ |---|---|
106
+ | Codex | Включите переключатель Codex на странице **Connect** панели, затем запускайте `codex` как обычно. При локальном прослушивании встроенный провайдер Codex будет направлен на прокси. В терминале выполните `ocx init` до добавления провайдеров в панели и примите приглашение Codex. |
107
+ | Claude Code | Установив CLI `claude`, выполните `ocx claude`. Команда при необходимости запускает прокси и запускает через него Claude Code. |
108
+ | Claude Desktop | Выполните `ocx claude desktop`. При новой установке команда настраивает профиль шлюза для всего приложения; существующая настройка first-party сохраняется, а `ocx claude desktop apply --gateway` явно переключает режим. См. [руководство Claude Code](https://opencodex.me/ru/guides/claude-code/). После переключения полностью закройте и снова откройте Claude Desktop. |
109
+ | Grok Build | При локальном прослушивании и включённой интеграции Grok команда `ocx start` регистрирует модели, если существует `~/.grok`; выберите модель `ocx-*` в Grok Build. Об удалённой настройке см. [руководство Grok Build](https://opencodex.me/ru/guides/grok-build/). После добавления провайдеров перезапустите прокси (или выполните `ocx ensure`, если включён автозапуск Codex), чтобы обновить список. |
110
+ | Инструменты с управляемой интеграцией | Используйте страницу **Connect** панели или `ocx integration client enable --client <id>`. |
111
+ | Любой другой инструмент | Укажите пользовательский базовый URL, совместимый с OpenAI: `http://localhost:10100/v1`, либо базовый URL Anthropic: `http://localhost:10100`. |
112
+
113
+ На [странице поддержки клиентов](https://opencodex.me/ru/reference/client-support/) указаны способы подключения и протоколы каждого инструмента.
114
+
115
+ <details>
116
+ <summary><b>Настольное приложение (бета)</b></summary>
117
+
118
+ Настольное приложение — это тот же прокси и та же панель управления в нативном окне,
119
+ с иконкой в трее и встроенным `ocx`. Оно подключается к уже запущенному прокси либо
120
+ запускает встроенный, а панель остаётся на порту прокси (**http://localhost:10100**,
121
+ если вы не настроили другой). Выберите файл для своей платформы в
122
+ [последнем релизе](https://github.com/lidge-jun/opencodex/releases/latest):
123
+
124
+ | Платформа | Файл | Примечания |
125
+ |---|---|---|
126
+ | macOS 13+ (Apple Silicon и Intel) | `OpenCodex-<version>-macos.dmg` | Универсальная сборка, подписана Developer ID и нотариализована |
127
+ | Windows (x64) | `OpenCodex-<version>-windows-x64.msi` | Подпись кода через SignPath Foundation внедряется ([политика подписи кода](https://opencodex.me/ru/reference/code-signing/)); пока релиз не подписан, SmartScreen спросит один раз — выберите **Подробнее → Выполнить в любом случае** |
128
+ | Linux (x86_64) | `OpenCodex-<version>-linux-x86_64.AppImage` или `-linux-amd64.deb` | Для трея нужен рабочий стол с поддержкой AppIndicator |
129
+
130
+ Рядом с каждым файлом на странице релиза есть `.sha256`. На macOS 14+ приложение также
131
+ поставляется с расширением WidgetKit, которое показывает состояние прокси, расход за
132
+ сегодня и квоты провайдеров; модель снимков, которую оно отображает, находится в
133
+ [`app/`](../app) (`MenuBarCore`). Чтобы собрать приложение самостоятельно, выполните
134
+ `bun install && bun run build:gui` в корне репозитория, затем в `desktop/` выполните
135
+ `bun install && bun run prepare-sidecar && bun run prepare-widget && bun run build:local` на macOS
136
+ или `bun install && bun run prepare-sidecar && bun run build:local` на Windows и Linux (шаг с виджетом
137
+ работает только на macOS). В [руководстве по настольному приложению](https://opencodex.me/ru/guides/desktop-app/) и
138
+ [руководстве по приложению macOS в строке меню](https://opencodex.me/ru/guides/macos-menu-bar/)
139
+ описан первый запуск, а
140
+ [`AGENTS_INSTALL.md`](../AGENTS_INSTALL.md#where-things-are-installed) перечисляет всё, что записывается на диск.
141
+
142
+ </details>
143
+
144
+ ### Пул аккаунтов ChatGPT
145
+
146
+ opencodex также умеет управлять **пулом аккаунтов ChatGPT** для аутентификации Codex. Добавьте
147
+ несколько аккаунтов ChatGPT / Codex и обновляйте их квоты за 5 ч / неделю / 30 дней в панели.
148
+ При маршрутизации по квоте новые сессии могут использовать работоспособный аккаунт с наименьшим
149
+ использованием; round-robin и fill-first применяют свои политики. Существующие треды Codex
150
+ обычно сохраняют привязку к аккаунту, с которого начались, поэтому длинные сессии по SSH,
151
+ в tmux или с мобильного устройства не перескакивают между аккаунтами посреди разговора — но
152
+ повторная оценка квот, failover, исключение аккаунта, истечение привязки или восстановление
153
+ после 401/403 и 429 могут перепривязать их. Задайте аккаунтам порядок выбора, если один из
154
+ них — обычно вход Codex Desktop — должен использоваться только после того, как остальные
155
+ исчерпаны.
156
+
157
+ ### Спонсоры
158
+
159
+ Спонсоры позволяют поддерживать opencodex при каждом изменении вышестоящих протоколов. Интересно?
160
+ См. [SPONSORS.md](../SPONSORS.md).
161
+
162
+ <!-- sponsors:main — one banner, model developers only; empty until a Main sponsor signs -->
163
+
164
+ <!-- sponsors:standard — one row per sponsor, in order of signing -->
165
+ <table>
166
+ <tbody>
167
+ <tr>
168
+ <td width="180"><a href="https://www.orcarouter.ai/?utm_source=opencodex&utm_medium=readme"><img src="../assets/sponsors/orcarouter.png" alt="OrcaRouter" width="150"></a></td>
169
+ <td>Благодарим <a href="https://www.orcarouter.ai/?utm_source=opencodex&utm_medium=readme">OrcaRouter</a> за спонсорскую поддержку проекта! OrcaRouter — единый OpenAI-совместимый AI-шлюз для продакшена: адаптивная маршрутизация оценивает каждый промпт и отправляет его модели, которая проходит ваш порог, плюс автоматический failover, правила маршрутизации как код, цены провайдеров без наценки с кэшированием промптов, а также guardrails, файрвол агентов и журналы запросов на каждый вызов среди 200+ моделей. Выберите <code>OrcaRouter</code> в селекторе Add provider или выполните <code>ocx provider add orcarouter</code>; <code>orcarouter/auto</code> — адаптивный маршрутизатор.</td>
170
+ </tr>
171
+ <tr>
172
+ <td width="180"><a href="https://tokenlab.sh/r/OPENCODEX"><picture><source media="(prefers-color-scheme: dark)" srcset="../assets/sponsors/tokenlab-dark.png"><img src="../assets/sponsors/tokenlab-light.png" alt="TokenLab" width="150"></picture></a></td>
173
+ <td>Благодарим <a href="https://tokenlab.sh/r/OPENCODEX">TokenLab</a> за спонсорскую поддержку проекта! TokenLab даёт агентам для программирования один API-ключ для ведущих моделей с поддержкой форматов OpenAI Responses и Chat Completions, Anthropic Messages и нативного API Gemini, включая стриминг и вызов инструментов. Также доступны MCP-сервер и Skills для агентов, чтобы упростить интеграцию. Выберите режим доставки и платите по мере использования. Выберите <code>TokenLab</code> в селекторе Add provider или выполните <code>ocx provider add tokenlab</code>.<br><sub>TokenLab 为编程智能体提供统一的多模型 API,一枚 API Key 即可接入主流模型,支持 OpenAI Responses、Chat Completions、Anthropic Messages 和 Gemini 原生 API 格式,以及流式输出和工具调用。同时提供 MCP 服务器和 Agent Skills,方便接入现有工作流;交付模式可选,按量付费。</sub></td>
174
+ </tr>
175
+ </tbody>
176
+ </table>
177
+
178
+ ---
179
+
180
+ <details>
181
+ <summary>Docker Compose</summary>
182
+
183
+ Репозиторий поставляет сборку Compose с закреплённым дайджестом и без root. Сборка сама создаёт
184
+ и проверяет канонический манифест совместимости из выбранного снимка Git. Для локального клона
185
+ нужны Git и Docker Compose, для удалённого Git-контекста — Docker Compose. Ни одному варианту
186
+ не нужны Bun на хосте или подготовительный шаг. Один раз инициализируйте токен плоскости данных
187
+ через stdin и запустите хаб:
188
+
189
+ ```bash
190
+ git clone https://github.com/lidge-jun/opencodex.git
191
+ cd opencodex
192
+ docker compose build
193
+ openssl rand -hex 32 | docker compose run --rm -T hub bun run docker/bootstrap-token.ts
194
+ docker compose up -d
195
+ curl --fail --silent http://127.0.0.1:10100/healthz
196
+ curl --fail --silent http://127.0.0.1:10100/readyz
197
+ ```
198
+
199
+ Привязка по умолчанию — `127.0.0.1:10100`. Удалённый доступ требует явного
200
+ `OPENCODEX_BIND_ADDRESS=<LAN-or-Tailscale-IP> docker compose up -d`; `0.0.0.0` открывает
201
+ все интерфейсы хоста. Ограничьте доступ файрволом и аутентифицированным TLS/tailnet-фронтендом.
202
+ Сгенерированный JSON остаётся неотслеживаемым. В контекст сборки допускаются только `.git/index`
203
+ и `.git/HEAD` — инвентарь, который читает `git ls-files`, объёмом около 1 МБ вместо полного хранилища
204
+ объектов. Они видны только этапу манифеста, используемому при сборке, через монтирование только для
205
+ чтения, поэтому ни один `COPY` не включает `.git`. Манифест, ранее созданный на хосте, принимается
206
+ только после проверки; иначе сборка создаёт его сама. Сборка отклоняет устаревшие манифесты,
207
+ отсутствующие или несовпадающие файлы, лишние исходники
208
+ и символические ссылки. Она сверяет каждый записанный SHA-256 с контекстом сборки и скопированными
209
+ рантайм-файлами, включая `package.json`, `bun.lock` и явно включённый
210
+ `scripts/model-metadata.source.json`.
211
+
212
+ Для удалённого Git-контекста BuildKit должен сохранять метаданные Git. Этот фрагмент сборки Compose
213
+ выбирает удалённый снимок и передаёт требуемый встроенный аргумент:
214
+
215
+ ```yaml
216
+ services:
217
+ hub:
218
+ pull_policy: build
219
+ build:
220
+ context: https://github.com/lidge-jun/opencodex.git#main
221
+ dockerfile: Dockerfile
222
+ target: runtime
223
+ args:
224
+ BUILDKIT_CONTEXT_KEEP_GIT_DIR: "1"
225
+ ```
226
+
227
+ Токен и изменяемое состояние живут в именованном томе `ocx-state`; ни одно учётное данное не
228
+ попадает в образ, Compose-файл, окружение или аргументы оболочки. См.
229
+ [руководство по развёртыванию Remote Hub](https://opencodex.me/ru/guides/remote-hub/)
230
+ для настройки провайдеров, аутентифицированных проверок приёмки, удалённого управления и отката.
231
+
232
+ </details>
233
+
234
+ <details>
235
+ <summary>Установка из исходников (последний dev)</summary>
236
+
237
+ **macOS / Linux:**
238
+
239
+ ```bash
240
+ curl -fsSL https://bun.sh/install | bash
241
+ git clone -b dev https://github.com/lidge-jun/opencodex.git
242
+ cd opencodex && ~/.bun/bin/bun install
243
+ ~/.bun/bin/bun run build:gui
244
+ ~/.bun/bin/bun run src/cli/index.ts start
245
+ ```
246
+
247
+ **Windows (PowerShell):**
248
+
249
+ ```powershell
250
+ irm bun.sh/install.ps1 | iex
251
+ git clone -b dev https://github.com/lidge-jun/opencodex.git
252
+ cd opencodex; bun install
253
+ bun run build:gui
254
+ bun run src/cli/index.ts start
255
+ ```
256
+
257
+ Установка из исходников запускает последнюю ветку `dev`. Патчи владения памятью,
258
+ улучшения GC рантайма и ещё не опубликованные исправления доступны здесь раньше,
259
+ чем в npm-пакете.
260
+
261
+ </details>
262
+
263
+ <details>
264
+ <summary>Для агентов</summary>
265
+
266
+ ```bash
267
+ npm install -g @koreanhole/opencodex
268
+ ocx start # или `ocx service`
269
+ ocx init # интерактивная настройка: пишет ~/.opencodex/config.json и подключает Codex
270
+ ```
271
+
272
+ `ocx init` никогда не запускает прокси; запустите его сначала (или после — оба порядка
273
+ работают, но headless-команды вроде `ocx provider add` и `ocx combo set` обращаются к
274
+ **живому** прокси и завершаются с ненулевым кодом, если он недоступен). `ocx status` /
275
+ `ocx doctor` / `ocx health` показывают состояние запущенного процесса.
276
+
277
+ > **Агентам, которые устанавливают или запускают opencodex:** прочитайте
278
+ > [`AGENTS_INSTALL.md`](../AGENTS_INSTALL.md). Интерактивный `ocx start` может один раз
279
+ > спросить, ставить ли star этому репозиторию — это решение пользователя, никогда не агента.
280
+ > CLI подавляет подсказку в агентных запусках, а API отказывает с `403 agent_consent_required`.
281
+
282
+ </details>
283
+
284
+ ## Поддерживаемые платформы
285
+
286
+ | ОС | Статус | Менеджер служб | Настольное приложение (бета) |
287
+ |---|---|---|---|
288
+ | macOS (arm64 / x64) | Полная поддержка | launchd | Универсальный `.dmg` |
289
+ | Linux (x64 / arm64) | Полная поддержка | systemd (пользовательский unit) | `.AppImage` / `.deb` для x86_64 |
290
+ | Windows (x64) | Полная поддержка | Task Scheduler (скрыто) / опциональная нативная служба (`--native`, WinSW) | `.msi` для x64 |
291
+
292
+ Для установки CLI требуется [Node](https://nodejs.org) 18+; настольному приложению не нужны ни Node, ни Bun. Рантайм Bun добавляется автоматически при `npm install` —
293
+ отдельно устанавливать Bun не нужно, WSL на Windows тоже не нужен. Если npm заблокировал
294
+ скрипты установки встроенного рантайма, см. [документацию по установке](https://opencodex.me/ru/getting-started/installation/).
295
+
296
+ ## Основные возможности
297
+
298
+ - **Любая LLM в Codex, Claude Code, Claude Desktop и Grok Build** — 40+ провайдеров из
299
+ коробки, каждый со своим нативным UI.
300
+ - **Повторно используйте вход локального CLI** — `cline-cli/default` и `gemini-cli/default` делегируют работу установленному CLI с выполненным входом, а Codex сохраняет одобрение и выполнение инструментов.
301
+ - **Пул аккаунтов ChatGPT** — привязка тредов, автопереключение с учётом квот, кулдаун и
302
+ fail-closed обработка аутентификации.
303
+
304
+ > **Замечание о политике провайдеров:** пул аккаунтов нужен только для маршрутизации и
305
+ > операционной устойчивости; он не гарантирует защиты от лимитов провайдера, принудительных
306
+ > мер, блокировок и других действий в отношении аккаунтов. OpenCodex не одобряет использование
307
+ > дополнительных аккаунтов для обхода лимитов провайдера и совместное использование учётных
308
+ > данных между людьми. Вы отвечаете за соблюдение актуальных условий каждого провайдера. См.
309
+ > [руководство по пулу аккаунтов Codex Auth](https://opencodex.me/ru/guides/web-dashboard/)
310
+ > и [актуальные Terms of Use OpenAI](https://openai.com/policies/terms-of-use/).
311
+ - **Combos** — один виртуальный id модели с failover или взвешенным round-robin между
312
+ провайдерами. См. [руководство по combos](https://opencodex.me/ru/guides/combos/).
313
+ - **Подагенты на любой модели** — выводите маршрутизируемые модели в селектор подагентов Codex,
314
+ с управлением поверхностями v1/v2 и цепочками fallback. См.
315
+ [руководство по подагентам](https://opencodex.me/ru/guides/sub-agent-surface/).
316
+ <!-- sponsors:main-first-mention -->
317
+ - **Один вход — без API-ключа** — OAuth для xAI, Anthropic и Kimi; либо пробросьте
318
+ `codex login`, вставьте ключ или используйте ссылки `${ENV_VAR}`.
319
+ - **Сайдкары веб-поиска и зрения** — модели не от OpenAI получают настоящий веб-поиск и
320
+ понимание изображений через сайдкар поверх вашего входа ChatGPT.
321
+ - **Видно, что происходит** — панель показывает провайдеров, статус OAuth, выбор моделей и
322
+ живой журнал запросов с количеством токенов кэша.
323
+ - **Чистый выход без следов** — `ocx stop` возвращает Codex к исходной конфигурации.
324
+ - **Ограниченное владение памятью** — у каждого долгоживущего кэша, кольцевого буфера и
325
+ хранилища трансляции протокола есть конечный потолок, байтовый бюджет или активная
326
+ сверка. Ни один неограниченный `Map` или `Set` не переживает перезагрузку конфигурации.
327
+
328
+ <details>
329
+ <summary>Подробности владения памятью</summary>
330
+
331
+ OpenCodex отслеживает состояние, удерживаемое процессом, в категориях ниже. У каждой есть
332
+ документированная граница:
333
+
334
+ - **14 удерживаемых хранилищ** (журнал запросов, отладочные кольца, кэш изображений, кэш
335
+ моделей, vision-описания, cursor-блобы, продолжение responses и т. д.) учитываются
336
+ в байтах и вытесняются бюджетом памяти приложения (по умолчанию 256 MiB), кроме
337
+ хранилища native control replay: оно закреплено и не вытесняется.
338
+ - **4 наблюдаемых буфера** (аккумуляторы транслятора, хвосты image/OAuth/Grok)
339
+ мониторятся по байтовому давлению in-flight без вытеснения.
340
+ - **31 регистрация state-store** выполняет sweeps истечения (интервал 60 с) и сверку
341
+ поколений конфигурации, чтобы удалять устаревшие ключи провайдеров и аккаунтов.
342
+ - **Мемо пути и отпечатков** (метаданные рабочей области, усиленные идентификаторы,
343
+ соли установки, возможности mode-hint) используют LRU-потолки в порядке вставки
344
+ (8–128 записей).
345
+ - **Tombstone поколений кэша моделей** удаляются после сверки; глобальный инкремент
346
+ поколения не даёт устаревшим in-flight discovery снова заполнить удалённых провайдеров.
347
+ - **Дедупликация event-id в Lab** работает под блокировкой журнала с диска, без
348
+ процессного RAM-индекса.
349
+
350
+ Выполните `GET /api/system/memory` (с admin-токеном), чтобы посмотреть живые удержанные
351
+ байты, счётчики вытеснения и выборки watchdog.
352
+
353
+ </details>
354
+
355
+ ## Маршрутизация моделей
356
+
357
+ Обращайтесь к любому настроенному провайдеру и модели синтаксисом `provider/model`:
358
+
359
+ ```bash
360
+ codex -m "anthropic/claude-opus-5" "Разберите этот stack trace"
361
+ codex -m "google/gemini-3-pro" "Напишите unit-тесты для auth.ts"
362
+ codex -m "ollama/llama3" "Отрефакторьте эту функцию"
363
+ ```
364
+
365
+ Опустите префикс `provider/`, чтобы использовать провайдера по умолчанию или автоматически
366
+ подобрать его по шаблону имени модели. Id моделей провайдера, содержащие `/`,
367
+ отдаются с внутренними слэшами, заменёнными на `-`; исходная форма со всеми слэшами
368
+ тоже продолжает работать. Подробности: [документация по маршрутизации моделей](https://opencodex.me/ru/guides/model-routing/).
369
+
370
+ ### Маршрутизация JEV Auto (опционально)
371
+
372
+ TypeSafe JEV может выбирать первую модель и уровень рассуждения для явно включённого Combo, не меняя
373
+ обычный выбор модели и прямые маршруты. Добавьте ключ через `ocx login jev`, в
374
+ **Providers → TypeSafe JEV → Add API key** или через `TYPESAFE_API_KEY`/`JEV_API_KEY`. Затем откройте
375
+ **Models → Combos → Create JEV Auto**, выберите разрешённые целевые модели и отметьте, какие уровни
376
+ рассуждения JEV может выбрать для каждой цели. Если настройку не трогать, цель разрешает все уровни,
377
+ которые модель сейчас объявляет.
378
+
379
+ JEV вызывается только для `jev-auto` и только один раз на логический вызов модели. При отсутствии ключа,
380
+ сетевой ошибке или некорректном решении запрос уходит на первую доступную цель (fail-open); отмена
381
+ со стороны клиента по-прежнему отменяет запрос. Автотесты используют имитацию TypeSafe и не проверяют
382
+ настоящий аккаунт JEV.
383
+
384
+ Combo JEV может вместо этого обращаться к самостоятельно размещённой модели решений, например к
385
+ бесключевой `tev1` в Ollama: добавьте провайдера `jev-decision`, у которого `baseUrl` — полный адрес
386
+ `/v1/systemone`, и укажите его в `decisionProvider` Combo. Учётные данные TypeSafe туда никогда не
387
+ отправляются. Подробнее: [самостоятельно размещённая модель решений](https://opencodex.me/ru/guides/combos/).
388
+
389
+ ## Провайдеры и адаптеры
390
+
391
+ <!-- sponsors:main-first-mention -->
392
+ OpenAI (вход ChatGPT или API-ключ), Anthropic, Google Gemini, xAI, Kimi, Azure OpenAI, Ollama
393
+ (локально + Cloud), Cursor (экспериментально) и любой OpenAI-совместимый endpoint — плюс DeepSeek,
394
+ Groq, OpenRouter, OpenGateway, Together, Fireworks, Cerebras, Mistral, Hugging Face, NVIDIA NIM, MiniMax,
395
+ Qwen Cloud, Qoder Global и CN (официальный PAT + CLI), SiliconFlow и другие. Полный список: `ocx init` или
396
+ [документация по провайдерам](https://opencodex.me/ru/guides/providers/).
397
+
398
+ ## CLI
399
+
400
+ ```bash
401
+ ocx init # интерактивная настройка (пишет конфиг, подключает Codex, предлагает shim)
402
+ ocx start [--port 10100] [--socks5 [host:port] | --socks5-off] # SOCKS5 по умолчанию: socks5://127.0.0.1:10808
403
+ ocx stop # остановить + восстановить нативный Codex
404
+ ocx service [install|repair|restart|start|stop|status|uninstall|remove] # фоновая служба
405
+ ocx codex-shim install # запускать прокси по требованию при старте `codex`
406
+ ocx health [--json] # проверить немедленную живость прокси
407
+ ocx ready [--json] [--wait [--timeout <seconds>]] # проверить готовность после синхронизации
408
+ ocx status # работает ли прокси?
409
+ ocx gui # открыть веб-панель
410
+ ocx provider <...> # управлять провайдерами (list/add/edit/test/remove)
411
+ ocx account <...> # управлять аккаунтами ChatGPT и пулами API-ключей
412
+ ocx combo <...> # управлять combos с failover / round-robin
413
+ ocx v2 <...> # управление мультиагентными поверхностями v1/v2
414
+ ocx update [--tag preview] # обновить opencodex
415
+ ```
416
+
417
+ Если предпочтительный порт занят, запуск останавливается и сообщает, какой процесс его занимает, вместо перехода
418
+ на другой порт, поэтому второй прокси никогда не останется работать рядом с первым. Освободите порт или укажите
419
+ другой с помощью `--port`. Полный справочник: [документация CLI](https://opencodex.me/ru/reference/cli/).
420
+
421
+ ### Здоровье и готовность
422
+
423
+ `GET /healthz` сообщает о немедленной живости прокси. Неаутентифицированный endpoint `GET /readyz`
424
+ сообщает о готовности после синхронизации с очищенной JSON-идентичностью `{service, version, uptime, pid, port, status}`.
425
+ Он возвращает `200`, когда `status` равен `ready`; `pending` и терминальный `failed` возвращают `503` с
426
+ `Retry-After: 1`.
427
+
428
+ `ocx ready [--json] [--wait [--timeout <seconds>]]` по умолчанию выполняет один зонд. `--wait` опрашивает
429
+ до 45 секунд по умолчанию, но сразу завершается при терминальном `failed`;
430
+ `--timeout <seconds>` задаёт лимит 1–300 секунд, требует `--wait` и принимает только положительные целые. CLI `--json` выводит
431
+ `{ready, status, pid, port}`, где `status` — `ready`, `pending`, `failed` или `unreachable`.
432
+
433
+ | Код | Результат |
434
+ | --- | --- |
435
+ | `0` | Готов |
436
+ | `1` | Не готов: pending, failed, timeout или unreachable |
437
+ | `64` | Некорректные аргументы |
438
+
439
+ Старый прокси без `/readyz` закрывается как `unreachable` с кодом 1, тогда как `ocx health`
440
+ остаётся совместимым.
441
+
442
+ ### Автозапуск: служба или shim
443
+
444
+ Используйте **службу** (`ocx service`) для постоянно работающего прокси, который перезапускается
445
+ при сбое. Используйте **shim** (`ocx codex-shim install`) для лёгкого запуска по требованию без
446
+ фонового демона. Удаляйте их командами `ocx service uninstall` / `ocx codex-shim uninstall`.
447
+
448
+ ### Удаление
449
+
450
+ ```bash
451
+ ocx uninstall # остановить, удалить службу/shim, восстановить нативный Codex, очистить состояние
452
+ npm uninstall -g @koreanhole/opencodex
453
+ ```
454
+
455
+ ## Удалённый доступ
456
+
457
+ По умолчанию opencodex привязывается к `127.0.0.1` и не требует дополнительной аутентификации.
458
+ Привязка за пределами loopback (`"hostname": "0.0.0.0"`) **требует** bearer-токен — прокси
459
+ откажется запускаться без `OPENCODEX_API_AUTH_TOKEN`, и каждый клиентский запрос должен нести его
460
+ как `x-opencodex-api-key`. Подробности: [справочник по конфигурации](https://opencodex.me/ru/reference/configuration/).
461
+
462
+ ## Документация
463
+
464
+ Публичная документация — установка, провайдеры, маршрутизация, combos, подагенты, сайдкары,
465
+ интеграции и справочники CLI/конфигурации/management-API — собирается из [`docs-site/`](../docs-site) и
466
+ публикуется на **[opencodex.me](https://opencodex.me/ru/)**.
467
+
468
+ Заметки мейнтейнеров, служащие источником истины, находятся в [`structure/`](../structure),
469
+ настройка для контрибьюторов — в [`CONTRIBUTING.md`](../CONTRIBUTING.md), сообщения о проблемах
470
+ безопасности — в [`SECURITY.md`](../SECURITY.md).
471
+ Нераскрытые уязвимости сообщайте приватно через
472
+ [GitHub private vulnerability reporting](https://github.com/lidge-jun/opencodex/security/advisories/new),
473
+ а не публичный issue.
474
+ Эта форма — единственный технический канал, отдельного адреса для безопасности нет. Дальнейшее
475
+ обсуждение остаётся внутри приватного отчёта; в публичном issue допустима только координация, но
476
+ не детали уязвимости. Подтверждение получения отчёта — это ещё не разбор, и срок первого ответа
477
+ не обещан.
478
+
479
+ ## Разработка
480
+
481
+ Разработка из исходников требует CLI `bun` в вашем `PATH`. Опубликованный npm-пакет содержит свой рантайм Bun
482
+ для установленных команд `ocx`; скрипты пакета также могут находить Bun через эту встроенную зависимость.
483
+
484
+ ```bash
485
+ git clone https://github.com/lidge-jun/opencodex.git
486
+ cd opencodex
487
+ bun install
488
+ bun run typecheck
489
+ bun run test
490
+ ```
491
+
492
+ См. **[Contributing](../CONTRIBUTING.md)**.
493
+
494
+ Работа контрибьюторов, которая попала через перенос или реимплементацию мейнтейнером,
495
+ если коммит не называет исходного автора, записана в
496
+ **[CREDITS.md](../CREDITS.md)**.
497
+
498
+ ## Политика подписи кода (Code signing policy)
499
+
500
+ Исполняемые файлы для Windows переводятся на подпись Authenticode ([#7207](https://github.com/lidge-jun/opencodex/issues/7207)). Ход внедрения, проверка подписи и полная политика описаны в [руководстве по подписи кода Windows](https://opencodex.me/ru/reference/code-signing/).
501
+
502
+ Free code signing provided by [SignPath.io](https://about.signpath.io/), certificate by [SignPath Foundation](https://signpath.org/).
503
+
504
+ - Committers and reviewers: [lidge-jun](https://github.com/lidge-jun)
505
+ - Approvers: [lidge-jun](https://github.com/lidge-jun)
506
+ - Privacy: This program will not transfer any information to other networked systems unless specifically requested by the user or the person installing or operating it.
507
+
508
+ ## Отказ от ответственности
509
+
510
+ opencodex — независимый проект, поддерживаемый сообществом; он **не аффилирован с OpenAI, Anthropic или каким-либо другим провайдером и не одобрен ими**.
511
+
512
+ Некоторые провайдеры — в частности Anthropic (Claude) — могут приостанавливать или ограничивать аккаунты, которые направляют API-трафик через сторонние прокси. **Используйте на свой страх и риск (UAYOR).** Прежде чем подключать провайдера, изучите его Terms of Service и убедитесь, что доступ через прокси разрешён. Мейнтейнеры opencodex не несут ответственности за какие-либо действия вышестоящих провайдеров в отношении аккаунтов.
513
+
514
+ ## Лицензия
515
+
516
+ MIT