Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
14 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion AGENTS_INSTALL.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ A host that has both a Task Scheduler entry and a WinSW service is in a conflict

### The CLI

`npm install -g --allow-scripts=bun @bitkyc08/opencodex` puts `ocx` on the PATH from npm's global prefix, and the
`npm install -g @bitkyc08/opencodex` puts `ocx` on the PATH from npm's global prefix, and the
Bun runtime it needs is bundled inside that package. There is no separate runtime to install and
no WSL layer on Windows.

Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ and connect OpenCode, Pi, Qoder, WorkBuddy, Kilo, Cline, T3 Code and more throug
</p>

```bash
npm install -g --allow-scripts=bun @bitkyc08/opencodex
npm install -g @bitkyc08/opencodex
ocx start
```

Expand Down Expand Up @@ -94,7 +94,7 @@ providers with Codex, Claude Code, Claude Desktop, Grok Build and the tools list
### Personal install (CLI)

```bash
npm install -g --allow-scripts=bun @bitkyc08/opencodex # Node 18+; the Bun runtime is bundled automatically
npm install -g @bitkyc08/opencodex # Node 18+; the Bun runtime is bundled automatically
ocx start # proxy + dashboard on localhost:10100
```

Expand Down Expand Up @@ -253,7 +253,7 @@ they reach the npm package.
<summary>For agents</summary>

```bash
npm install -g --allow-scripts=bun @bitkyc08/opencodex
npm install -g @bitkyc08/opencodex
ocx start # or `ocx service`
ocx init # interactive setup: writes ~/.opencodex/config.json and wires Codex
```
Expand Down
2 changes: 1 addition & 1 deletion bin/ocx.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,7 @@ async function runPackageManagerSelfUpdate(manager, child) {
const latestInvocation = managerInvocation(["view", `${PKG}@${selector}`, "version"]);
const installArgs = manager === "pnpm"
? ["add", "-g", "--allow-build=bun", `${PKG}@${selector}`]
: ["install", "-g", "--allow-scripts=bun", `${PKG}@${selector}`];
: ["install", "-g", `${PKG}@${selector}`];
const installInvocation = managerInvocation(installArgs);
if (!latestInvocation || !installInvocation) {
console.error(`opencodex: could not resolve ${manager} from a trusted absolute PATH entry; aborting before stopping the proxy.`);
Expand Down
6 changes: 3 additions & 3 deletions docs-site/src/components/Landing.astro
Original file line number Diff line number Diff line change
Expand Up @@ -165,14 +165,14 @@ const providers: { label: string; path?: string }[] = [
];

const quickstartMini = [
{ cmd: 'npm install -g --allow-scripts=bun @bitkyc08/opencodex', note: t('Install', '설치', '安装', 'Установка', 'インストール', '安裝', 'Kurulum') },
{ cmd: 'npm install -g @bitkyc08/opencodex', note: t('Install', '설치', '安装', 'Установка', 'インストール', '安裝', 'Kurulum') },
{ cmd: 'ocx init', note: t('Add a provider and connect Codex', '프로바이더 추가 후 Codex 연결', '添加提供商并连接 Codex', 'Добавьте провайдера и подключите Codex', 'プロバイダーを追加して Codex を接続', '新增供應商並連接 Codex', 'Sağlayıcı ekleyip Codex’i bağlayın') },
{ cmd: 'ocx start', note: t('Start the proxy', '프록시 시작', '启动代理', 'Запуск прокси', 'プロキシを起動', '啟動代理', "Proxy'yi başlatın") },
{ cmd: 'ocx claude', note: t('In another terminal: launch Claude Code through ocx', '다른 터미널에서: ocx를 거쳐 Claude Code 실행', '在另一个终端中:通过 ocx 启动 Claude Code', 'В другом терминале: запуск Claude Code через ocx', '別のターミナルで: ocx 経由で Claude Code を起動', '在另一個終端機中:透過 ocx 啟動 Claude Code', 'Başka bir terminalde: Claude Code’u ocx üzerinden başlatın') },
];

const quickstart = [
{ cmd: 'npm install -g --allow-scripts=bun @bitkyc08/opencodex', note: t('Install', '설치', '安装', 'Установка', 'インストール', '安裝', 'Kurulum') },
{ cmd: 'npm install -g @bitkyc08/opencodex', note: t('Install', '설치', '安装', 'Установка', 'インストール', '安裝', 'Kurulum') },
{ cmd: 'ocx init', note: t('Add a provider and connect Codex', '프로바이더 추가 후 Codex 연결', '添加提供商并连接 Codex', 'Добавьте провайдера и подключите Codex', 'プロバイダーを追加して Codex を接続', '新增供應商並連接 Codex', 'Sağlayıcı ekleyip Codex’i bağlayın') },
{ cmd: 'ocx start', note: t('Start the proxy', '프록시 시작', '启动代理', 'Запуск прокси', 'プロキシを起動', '啟動代理', "Proxy'yi başlatın") },
{ cmd: 'codex "Write a hello world in Rust"', note: t('Codex now routes through ocx', 'Codex가 ocx를 경유', 'Codex 现在经由 ocx 路由', 'Codex теперь работает через ocx', 'Codex は ocx 経由に', 'Codex 現在經由 ocx 路由', 'Codex artık ocx üzerinden yönlendirilir') },
Expand Down Expand Up @@ -344,7 +344,7 @@ const docsMap = [
</details>
<p class="lp-dl-foot">
{t('Prefer the terminal?', '터미널이 더 편하다면', '更喜欢终端?', 'Предпочитаете терминал?', 'ターミナル派ですか?', '偏好終端機?', 'Terminali mi tercih edersiniz?')}
<code>npm install -g --allow-scripts=bun @bitkyc08/opencodex</code>
<code>npm install -g @bitkyc08/opencodex</code>
<a href={`${prefix}getting-started/installation/`}>{t('Installation guide', '설치 가이드', '安装指南', 'Руководство по установке', 'インストールガイド', '安裝指南', 'Kurulum kılavuzu')}</a>
<a href="https://github.com/lidge-jun/opencodex/releases/latest">{t('All releases and checksums', '전체 릴리스와 체크섬', '所有版本与校验和', 'Все релизы и контрольные суммы', 'すべてのリリースとチェックサム', '所有版本與校驗碼', 'Tüm sürümler ve sağlama toplamları')}</a>
<a href={`${prefix}guides/desktop-app/`}>{t('Desktop app guide', '데스크톱 앱 가이드', '桌面应用指南', 'Руководство по приложению', 'デスクトップアプリガイド', '桌面應用程式指南', 'Masaüstü uygulaması kılavuzu')}</a>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ disponible pour une configuration interactive ; consultez le [tableau de bord w
Installez le package publié et confirmez que `ocx` est sur `PATH` :

```bash
npm install -g --allow-scripts=bun @bitkyc08/opencodex
npm install -g @bitkyc08/opencodex
ocx --version
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ ChatGPT lorsqu’un modèle routé en a besoin.
## Installer

```bash
npm install -g --allow-scripts=bun @bitkyc08/opencodex
npm install -g @bitkyc08/opencodex
```

:::note[npm a-t-il bloqué le script postinstall de bun ?]
Expand Down Expand Up @@ -52,7 +52,7 @@ les entrées du catalogue n’accordent aucun accès par elles-mêmes. N’utili
tester des versions opencodex non encore publiées :

```bash
npm install -g --allow-scripts=bun @bitkyc08/opencodex@preview
npm install -g @bitkyc08/opencodex@preview
ocx update --tag preview
```

Expand Down
9 changes: 3 additions & 6 deletions docs-site/src/content/docs/fr/guides/integrations.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,14 +150,11 @@ synchronisation, même si le document géré ne change pas.

Si le fichier change après votre examen, l'écriture est refusée car le plan est devenu obsolète. La boîte de
dialogue remplace l'ancien plan par le nouveau et vous demande de confirmer à nouveau ; elle ne relance jamais
l'écriture automatiquement. Si l'aperçu indique qu'aucun catalogue de modèles n'est encore chargé, la boîte de
dialogue reste ouverte et propose **Charger le catalogue et réessayer** : elle relit la liste des intégrations,
puis redemande le plan.
l'écriture automatiquement. Si l'aperçu est temporairement indisponible, rechargez normalement la page et
recommencez l'action.

Aside utilise le même flux d'aperçu et de confirmation pour un seul profil sélectionné à la fois. **Synchroniser
tous les profils** reste une action groupée distincte et n'est pas liée à un aperçu combiné unique. Un plan décrit le fichier d'un seul profil : la carte
de la Vue d'ensemble d'une intégration Aside en conflit propose donc **Choisir un profil**, et le bloc se
remplace depuis la page de ce profil.
tous les profils** reste une action groupée distincte et n'est pas liée à un aperçu combiné unique.

## À quoi s'attendre, en toute transparence

Expand Down
2 changes: 1 addition & 1 deletion docs-site/src/content/docs/fr/guides/web-dashboard.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ remplissage automatique. Le tableau de bord lui-même ne conserve le jeton qu'en
dans `localStorage` ni dans `sessionStorage` ; son enregistrement dépend entièrement du navigateur ou du
gestionnaire de mots de passe.

**Mémoriser cet appareil** est désactivé par défaut. Sur un tableau de bord HTTPS direct (ou en boucle locale), le serveur échange le jeton administrateur contre un cookie d’appareil HttpOnly, SameSite=Strict et une preuve distincte stockée dans le localStorage de ce site. Le cookie est Secure en HTTPS et limité à l’hôte. Ni le cookie ni la preuve ne sont le jeton administrateur, et aucun ne fonctionne seul. Les cookies sont partagés entre les ports d’un même nom d’hôte ; la preuve, limitée à l’origine, lie l’appareil mémorisé à l’origine de ce tableau de bord. Préférez tout de même un nom d’hôte dédié. Le jeton administrateur n’est jamais écrit dans localStorage ou sessionStorage. Si le stockage du navigateur est indisponible ou ne peut enregistrer la preuve, la mémorisation est signalée comme indisponible. Pour un tableau de bord autonome derrière un proxy inverse qui termine TLS, OpenCodex voit une requête HTTP simple et refuse donc la mémorisation pour cette adresse ; la fenêtre de connexion l’explique et désactive l’option, et la connexion sans mémorisation fonctionne toujours. Un écouteur de gestion Hub de confiance fait exception et peut toujours mémoriser les appareils.
**Mémoriser cet appareil** est désactivé par défaut. Sur un tableau de bord HTTPS direct (ou en boucle locale), le serveur échange le jeton administrateur contre un cookie d’appareil HttpOnly, SameSite=Strict et une preuve distincte stockée dans le localStorage de ce site. Le cookie est Secure en HTTPS et limité à l’hôte. Ni le cookie ni la preuve ne sont le jeton administrateur, et aucun ne fonctionne seul. Les cookies sont partagés entre les ports d’un même nom d’hôte ; la preuve, limitée à l’origine, lie l’appareil mémorisé à l’origine de ce tableau de bord. Préférez tout de même un nom d’hôte dédié. Le jeton administrateur n’est jamais écrit dans localStorage ou sessionStorage. Si le stockage du navigateur est indisponible ou ne peut enregistrer la preuve, la mémorisation est signalée comme indisponible. Derrière un proxy inverse qui termine TLS, OpenCodex voit une requête HTTP simple et refuse donc la mémorisation pour cette adresse ; la fenêtre de connexion l’explique et désactive l’option, et la connexion sans mémorisation fonctionne toujours.

Le fichier privé dashboard-sessions.json conserve les empreintes du cookie, de la preuve, du jeton administrateur et de l’identité du navigateur, l’origine du serveur et une expiration fixe de 30 jours. La relance de l’application Safari reprend une session courte tant que cet appareil reste autorisé. Les sessions mémorisées ne peuvent pas approuver les actions de consentement : étoile GitHub, consommation de crédits de réinitialisation, modification des couches de prompt, connexion Meta Muse, changements de compatibilité du bureau ou validation des quotas. Utilisez une nouvelle session locale ou appairée pour ces actions. Les tableaux de bord relayés, inter-origines ou HTTP distant ne prennent pas en charge la mémorisation. L’expiration, un changement d’identité du navigateur ou la rotation du jeton suivie d’un redémarrage imposent une nouvelle connexion.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,4 @@ Si vous essayez l’une de ces solutions avec une charge Windows réelle, veuill

L’installation et la réparation du service Windows ainsi que l’installation et l’actualisation du shim Codex vérifient que l’exécutable sélectionné peut créer puis supprimer un répertoire dans la racine de configuration OpenCodex. Ce contrôle de politique d’écriture ne corrige pas la mémoire. Un échec refuse l’opération avant tout arrêt, téléchargement, préparation ou écriture de jeton ou de lanceur. La réparation automatique du shim est différée avec des instructions et le démarrage continue. Les shims sains ou désactivés ne sont pas testés. Aucun autre runtime n’est recherché. Une première installation du planificateur enregistre sa tâche et revendique la racine de configuration avant ce contrôle ; en cas de refus, cet enregistrement est annulé et la racine revendiquée est conservée pour une nouvelle tentative.

> Le runtime Bun sélectionné ne peut pas créer puis supprimer un répertoire de configuration. La politique d’application Windows peut interdire les écritures depuis cet emplacement. Avant de lancer `ocx`, définissez `OPENCODEX_BUN_PATH` vers un exécutable Bun de confiance autorisé par votre politique, ou réinstallez avec `npm install -g --allow-scripts=bun @bitkyc08/opencodex`, puis réessayez. Aucun autre runtime n’a été sélectionné.
> Le runtime Bun sélectionné ne peut pas créer puis supprimer un répertoire de configuration. La politique d’application Windows peut interdire les écritures depuis cet emplacement. Avant de lancer `ocx`, définissez `OPENCODEX_BUN_PATH` vers un exécutable Bun de confiance autorisé par votre politique, ou réinstallez avec `npm install -g @bitkyc08/opencodex`, puis réessayez. Aucun autre runtime n’a été sélectionné.
2 changes: 1 addition & 1 deletion docs-site/src/content/docs/getting-started/for-agents.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ available for interactive configuration; see [Web Dashboard](/guides/web-dashboa
Install the published package and confirm that `ocx` is on `PATH`:

```bash
npm install -g --allow-scripts=bun @bitkyc08/opencodex
npm install -g @bitkyc08/opencodex
ocx --version
```

Expand Down
10 changes: 2 additions & 8 deletions docs-site/src/content/docs/getting-started/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ for one package invocation. That bypass does not repair the Desktop record, shim
## Install

```bash
npm install -g --allow-scripts=bun @bitkyc08/opencodex
npm install -g @bitkyc08/opencodex
```

With pnpm 10.4 or later:
Expand Down Expand Up @@ -70,12 +70,6 @@ npm install -g --allow-scripts=bun @bitkyc08/opencodex
# if the original install used sudo, keep using sudo:
sudo npm install -g --allow-scripts=bun @bitkyc08/opencodex
```

On Windows a running proxy keeps `node_modules\bun\bin` open, so a manual
`npm install -g` fails with `EBUSY`. `ocx update` stops the proxy and restarts the service itself;
for a manual reinstall, stop it first (`ocx stop`), install, then restart through the owning service
(`ocx service restart`) or `ocx start` when unmanaged. `ocx doctor` prints this sequence when it finds
a package install whose bundled runtime never unpacked.
:::

Verify both command aliases are on your `PATH`:
Expand Down Expand Up @@ -122,7 +116,7 @@ the catalog entries do not grant access by themselves. Use the preview channel o
unreleased opencodex builds:

```bash
npm install -g --allow-scripts=bun @bitkyc08/opencodex@preview
npm install -g @bitkyc08/opencodex@preview
ocx update --tag preview
```

Expand Down
2 changes: 1 addition & 1 deletion docs-site/src/content/docs/guides/codex-integration.md
Original file line number Diff line number Diff line change
Expand Up @@ -445,7 +445,7 @@ $CODEX_HOME/opencodex-catalog.json
$CODEX_HOME/models_cache.json
```

On macOS, opencodex checks the Codex app’s bundled CLI in `/Applications/ChatGPT.app` and then `~/Applications/ChatGPT.app` after explicit selections, shims, PATH, established installs, and the runnable bare `codex` fallback, requires the bundle’s XML `Info.plist` identity to be `com.openai.codex`, and never automatically replaces a runnable persisted selection with an app candidate. When no Codex CLI is found at all, the catalog probe behind `ocx connect status` readiness also tries those bundled locations, so a Child whose only Codex is the app’s bundled CLI reports its reasoning levels instead of `unverified`; every execution still passes the checks below.
On macOS, opencodex checks the Codex app’s bundled CLI in `/Applications/ChatGPT.app` and then `~/Applications/ChatGPT.app` after explicit selections, shims, PATH, established installs, and the runnable bare `codex` fallback, requires the bundle’s XML `Info.plist` identity to be `com.openai.codex`, and never automatically replaces a runnable persisted selection with an app candidate.

Execution checks also recognize `Codex.app` and `ChatGPT.app` at any location, including relocated
bundles, explicit `CODEX_CLI_PATH` or configured runtime commands, and symlink aliases. A recognized
Expand Down
Loading
Loading