SubLaneSubLane

Codex サブスクリプションとゲートウェイ

SubLane ガイド: コーデックスのサブスクリプションとゲートウェイ。

個人キーを準備したら、以下でクライアントを構成します。お持ちでない場合は完了してください 最初のリクエスト または、管理者にメンバーのログインを依頼してください。

クライアント構成

個人用の API キーを作成します API キー。インスタンスオリジンプラスを使用する /v1 をベース URL として使用します。によって返されるモデル ID を構成します GET /v1/models.

セット SUBLANE_API_KEY クライアントプロセス環境で。次の設定をユーザーレベルにマージします。 ~/.codex/config.toml、一致する既存の値を置き換えます。

Client configuration · 1
model = "<model-id-from-your-account>"
model_provider = "sublane"

[model_providers.sublane]
name = "SubLane"
base_url = "http://127.0.0.1:8080/v1"
env_key = "SUBLANE_API_KEY"
wire_api = "responses"
requires_openai_auth = false
supports_websockets = true

ネットワーク デプロイメントには、インスタンスの実際の URL を HTTPS とともに使用します。 HTTP/SSE トランスポートの場合、設定します supports_websockets = false。 Codex CLI とデスクトップは、意図されたユーザーレベルの設定を読み取る必要があります。すでに実行されているデスクトップ アプリは、別の端末でエクスポートされた環境変数を自動的に継承しません。キーが利用可能な環境で再起動してください。

API キー ページでは、シークレットを埋め込んだり保持したりせずに、構成スニペットが提供されます。オプションも提供しています CC Switch インポート これは、明示的な準備の後、選択したキーをローカルにインストールされたアプリケーションに渡します。 CC Switch は独自の Codex 認証ファイル構成を生成します。上記の手動スニペットの環境変数または WebSocket 設定は保持されません。公式を見る 高度な構成 そして 認証 クライアントの構成と資格情報のストレージに関するガイダンス。

アカウント カタログはキャッシュされ、再起動しても存続します。検出、プールの集約、およびモデル対応アカウントの選択については、「」で説明されています。 モデルカタログ.

セットアップ後: メッセージを送信して応答を確認し、続行します。 日常使い。以下のアカウント、クォータ、およびプロトコルの詳細は、後で参照するためのものです。

アカウントを追加する

管理者としてサインインして開きます アカウントを選択してください アカウントを追加。メンバーは、サブスクリプション管理エンドポイントまたは認証情報にアクセスできません。

  • ブラウザの認証: アカウントに名前を付け、認証を開始し、OpenAI リンクを開きます。サインインしたら、完全にコピーします http://localhost:1455/auth/callback?... ブラウザのアドレスバーからアドレスを取得し、SubLane に貼り付けます。この時点でローカルホスト接続エラーが発生することが予想されます: SubLane は意図的に別のコールバック リスナーを開きません。この手動返却フローは、ローカルおよびリモートの展開で機能します。
  • auth.json をインポートします。 Codex サブスクリプション認証情報ファイルを選択するか、その JSON を貼り付けます。両方の CLI がネストされている tokens 構造とフラット Codex トークン形式が受け入れられます。公式の API キーは拒否されます。 SubLane ローカル クライアント ディレクトリは決してスキャンしません。管理者によって明示的に送信されたコンテンツのみが読み取られます。インポートされたエンドポイント/プロキシ設定は破棄されます。

アカウントの認証/インポートにより、モデルの検出が自動的に開始されます。使用 接続を確認する アカウントのモデル カタログを更新して保持するか、開く モデル それを検査するために。インポートされた認証情報が表示されます 未検証 成功するまで。アカウント メニューには、有効化/無効化、再認証、および削除が用意されています。再認証では、同じアップストリーム アカウント ID を保持する必要があります。アカウントを削除すると、保存されている認証情報が SubLane から削除されます。 ChatGPT ログイン自体は取り消されません。

Codex モデル検出は、インスタンスの有効なクライアント バージョンをカタログ クエリおよびリクエスト ヘッダーで送信します。管理者は次の場所で設定できます。 管理 → システム設定: 明示的なバージョンは、最後に同期された公式安定版リリースよりも優先されます。 0.155.1 組み込みのフォールバックとして。自動リリースチェックはデフォルトで 6 時間ごとに行われます。これにより、Codex をインストールしたり、埋め込まれた SDK を更新したりせずに、プロトコルのメタデータが変更されます。見る システム設定.

上流のカタログはそのバージョンに依存します。古いバージョンでは、非表示のモデルまたは部分的に表示されているカタログのみで HTTP 200 が返され、空または不完全なカタログが生成されることがあります。 /v1/models 可視性フィルタリング後のリスト。永続化されたカタログには実際の検出バージョンが含まれるため、有効なバージョンを変更すると、タイムスタンプが最新のままであっても、次のカタログ読み取りまたはモデル要求で更新がトリガーされます。プールのアクセス許可を変更しても、この互換性の問題は解決されません。

OAuth の試行では、PKCE、256 ビットのランダム状態、10 分間の有効期限、管理者のブラウザ セッションごとに 1 つのアクティブな試行、および最大 8 つの保留中の試行が使用されます。コールバックは、それを開始したセッションにバインドされ、コードを交換する前に消費されます。フォームを閉じるとキャンセルが要求されます。 expiry は、接続が失われた後のフォールバックです。保留中 OAuth 状態はメモリ内にのみ保持されます。

サブスクリプションの使用法

アカウント画面には、有効な Codex アカウントのクォータウィンドウ、残量、リセットまでの時間、観測時刻と、報告された追加モデル制限が表示されます。カード数は別項目で、不明な数と明示的な 0 は区別します。一覧と任意の使用はリセットカードを参照してください。欠落情報は不明のままです。更新失敗時は旧スナップショットと警告を残します。リセット時刻への到達だけでは回復を確認できないため、使用状況を更新してください。

使用状況アダプターの読み取り https://chatgpt.com/backend-api/wham/usage そして別個の https://chatgpt.com/backend-api/wham/rate-limit-reset-credits エンドポイント、一致する 公式 Codex バックエンド クライアント。どちらのリクエストも、選択したアカウントの資格情報、既存のリフレッシュ/再試行所有者、制限されたゲートウェイ許可、共有の 20 秒の期限、および応答ごとに 128 KiB の制限を使用します。カードのリセット詳細要求が失敗するか、カウントが省略された場合でも、クォータは利用可能なままであり、使用状況応答からの有効なカウントは保持されます。正規化されたクォータ フィールドとカウントのみが返されます。未加工のアップストリーム メタデータ、カード ID、および認証情報は除外されます。このバックエンド コントラクトは、SubLane とは独立して進化する可能性があります。

統合スキーマは、アカウントごとに 1 つの制限された正規化されたクォータとリセットカードのスナップショットを SQLite に保存します。スナップショットには、最後に成功した観察時刻と、プロセスの再起動後の存続時間が含まれます。アカウントの削除は、そのスナップショットにカスケードされます。このプロセスは最大 100 個のスナップショット エントリをメモリ内に保持し、それらを SQLite から遅延リロードします。このテーブルには、認証情報や生のプロバイダー応答は保存されません。

GET /api/accounts/{id}/usage 最大 2 分間 (または、それより早い場合は、次のリセットが報告されるまで) 新しいスナップショットを返します。期限切れのスナップショットはすぐに返されます。 stale そして refreshing バックグラウンド更新の実行中にフラグを立てます。スナップショットを使用しない最初のフェッチは結果を待ちます。 POST /api/accounts/{id}/usage/refresh 5 秒間のクールダウンを守りながら、鮮度をバイパスして共有更新を待ちます。どちらのルートでも、有効な管理者セッションが必要です。 POST には、既存のorigin/JSON チェックも必要です。

同じアカウントの同時呼び出し者は、1 つのアップストリーム操作を共有します。更新では、設定されたワークスペース操作容量(既定 128、SUBLANE_GATEWAY_CAPACITY)と 45 秒の全体期限が使用され、個々のブラウザーの切断が発生しても存続し、プロセスのシャットダウン中にキャンセル/待機されます。更新が失敗すると、以前の値とタイムスタンプが保持され、古い値としてマークされ、30 秒間バックオフされます (または、より長い有効なアップストリーム再試行後、最大 1 時間)。アドミッション飽和では、5 秒の再試行遅延が使用されます。キャッシュ ヒットでもアカウントの存在と有効化がチェックされます。一時的な障害/バックオフ状態はプロセスローカルです。最後に成功したスナップショットは永続的です。

ブラウザーは 1 分間のクエリの最新期間を保持します。更新がアクティブな間のみローカル スナップショット エンドポイントを 1 秒に 1 回ポーリングし、完了またはネットワーク エラーが発生すると停止します。ページはアイドル状態の間、プロバイダーを定期的にポーリングしません。 株式の割当て 設定されたトークンまたは内部 USD 予算を使用し、報告されたリクエストの使用量を直接請求します。観測タイムスタンプと応答サーバー時間は分離されているため、復元されたスナップショットによってリセット カウントダウンが再開されることはありません。無効化されたアカウントは照会されません。モデル トラフィックは、待機することなく共有クォータ キャッシュもウォームします。新たにメインリミットが枯渇すると、アカウントは新しい選択から除外されます。バインドされた会話では、クォータ固有の拒否が返されます。アップストリームの使用制限は、メンバーのリソース許容量ではなく、サブスクリプションを表します。見る クォータを意識した選択.

リセットカード

ワークスペース管理者は、有効で再認証が不要な Codex アカウントのリセットカードを確認・使用できます。メンバーには管理権限がありません。定時使用とクォータ枯渇時の使用は既定で無効です。一覧の表示・更新ではカードを消費しません。

設定と使用

  1. アカウント画面の Codex アカウントカードからリセットカード設定を開き、一覧、利用可能数、観測時刻を確認します。不明な数と 0 は異なります。
  2. 定時使用、クォータ枯渇時の使用、または両方を有効にします。1 回限りなら将来の日付と時刻、毎日なら時刻、毎週なら曜日と時刻を指定し、表示されたインスタンスのタイムゾーンを確認します。
  3. 共通の 1 日上限(1~100 枚、既定 1 枚)を設定して保存します。保存完了と、定時使用の場合は次回実行時刻を確認します。
  4. 手動で使用する場合は先に変更を保存し、今すぐ 1 枚使用する操作を選びます。各試行は最大 1 枚です。結果は実行履歴で確認できます。設定を開くだけでは引き換えません。

一覧と有効期限の優先順位

一覧には名称、状態、取得時刻、有効期限が表示されます。利用可能、引き換え中、使用済み、期限切れ、不明、未対応の種類を区別し、生のカード ID は表示しません。次に使用するカードの表示は自動選択の説明で、手動選択機能ではありません。結果が未確定の間は表示しません。利用可能数が正でも、条件を満たすカードがあるとは限りません。

手動・定時・枯渇時の新しい試行は一覧を読み直し、credit_id を明示します。対応する利用可能な未期限切れカードのうち、期限が最も近いものを優先し、期限なしを最後にします。同じ期限なら取得が古い順、続いて安定した ID 順です。適格なカードがない場合や一覧を確認できない場合はスキップし、上流の既定選択には戻りません。初回の読み込み失敗と空一覧は別に表示します。更新失敗時は警告と前回の一覧を残すので、カード更新で再試行してください。

スケジュールと制限

枯渇時の判定はバックグラウンドで約 1 分ごとに行い、新鮮なクォータ情報、既知の正のカード数、メインクォータの明示的な利用拒否が必要です。100% 表示、不明な情報、ネットワークエラーだけでは実行しません。手動・定時使用にも新鮮な情報と既知の正のカード数が必要です。

すべてのモードでインスタンスの現地日付に基づく 1 日上限を共有し、成功・未確定の試行が枠を使います。無効・再認証が必要なアカウントはスキップします。5 分を超えて遅れた予定は補完しません。夏時間で存在しない時刻はスキップし、重複する時間帯は現地日付ごとに 1 回だけ実行します。タイムゾーン変更後は将来の予定を再計算します。ブラウザーを閉じても続行します。デモでは自動実行も引き換えも行いません。

結果と復旧

状況対処
詳細を取得できない・適格なカードがない一覧を更新し、状態と期限を確認します。選択を確認できなければ消費しません。
クォータが不明・取得不可使用状況を更新し、接続や認証を修復します。
1 日上限に到達次の現地日付まで待つか、必要性を確認して上限を変更・保存します。
結果が未確定未確定結果の確認操作を使います。確定まで新しい試行は停止します。

適格性とリセット対象のウィンドウはプロバイダーが決定します。POST /backend-api/wham/rate-limit-reset-credits/consume の認識済み結果は reset、already_redeemed、nothing_to_reset、no_credit です。成功後はクォータとカード数を更新しますが、他のゲートウェイ制限は解除せず、すべての制限解除を保証しません。

送信前に redeem_request_id と選択したカード ID を永続化します。タイムアウトや未知の応答は未確定のまま保持し、確認時は一覧や期限が変わっても同じ値を再送します。数の変化だけでは成功を証明できません。旧バージョンの未確定リクエストは元の credit_id 省略を維持します。確定後は選択 ID を消去し、クォータスナップショットや公開実行履歴・監査出力には含めません。認証情報、生の応答、プロバイダーのプロフィール情報も記録しません。アカウント削除で設定と履歴も削除します。

管理者用ブラウザー API は、設定・履歴の GET /api/accounts/{id}/resets、正規化一覧の GET /api/accounts/{id}/resets/cards、保存の PUT /api/accounts/{id}/resets、使用・確認の POST /api/accounts/{id}/resets/consume または POST /api/accounts/{id}/resets/retry です。ブラウザーセッションとワークスペース権限を使用し、ゲートウェイ API キーではアクセスできません。一覧取得は認証情報・プロキシ・ライフサイクルの検査を再利用し、プロフィール識別子、アバター URL、生の応答を除外します。内部契約は変更される可能性があり、合成テストだけでは実アカウントの適格性や実際の引き換えを検証できません。

設定変更と成功した手動操作は監査に、自動実行の結果は件数を制限した実行履歴に記録します。

認証情報の保存と更新

統合スキーマは、ワークスペースをスコープとしたサブスクリプション アカウントと、制限されたアカウント アフィニティ レコードを作成します。アクセス、リフレッシュ、ID トークンは、AES-256-GCM とアカウントにバインドされた認証データで暗号化されます。インスタンスはプライベート 32 バイトを作成します credentials.key ファイルをデータベースの隣に置きます。キーはセットアップ パスワードではないため、手動で入力する必要はありません。

データベースをバックアップし、 credentials.key インスタンスを停止した後、一緒に実行します。既存のアカウント データベースは、キーが欠落している、無効である、または一致しない状態では起動しません。アクセスを回復するためにキーを交換しないでください。暗号化により、データベースのみのコピー内の資格情報の内容が保護されます。データベースとキーの両方にアクセスすると、復号化が可能になります。

SubLane は唯一のリフレッシュ所有者です。管理者の変更に応じて資格情報の更新をシリアル化し、ローテーションされたトークンをリクエストに発行する前に保持します。有効期限が近づいたトークンは、使用前に更新されます。アップストリーム 401 では、同じアカウントで 1 回のリフレッシュと 1 回の再試行が許可されます。古いトークンを同時に拒否すると、すでに更新された資格情報が再利用されます。古い処理中の結果によって、後の更新や再認証を無効にすることはできません。

ゲートウェイ契約

すべてのゲートウェイ ルートには、ブラウザーの Cookie とは関係なく、SubLane ベアラー キーが必要です。

ルート行動
GET /v1/modelsプール内の永続化されたアカウント カタログとそのポリシーから重複排除されたネイティブ モデル ID を返します。
POST /v1/responsesResponses JSON または SSE 要求された stream 設定
POST /v1/responses/compact非ストリーミング Codex 圧縮
GET /v1/responses WebSocket アップグレードありResponses ターン、ローカルプリウォーム、増分入力再構築、およびコンパクトなトランスクリプト置換
POST /v1/chat/completionsSDK 選択したプロバイダー プロトコルとの間の変換

HTTP リクエストには完全な入力が含まれている必要があります。 HTTP previous_response_id Codex HTTP バックエンドはステートレスであるため、コンテキストをサイレントに失う代わりに拒否されます。 WebSocket 継続では、制限された接続ローカル履歴を使用します。不明な継続 ID の場合は、完全なトランスクリプトの入力が必要です。 WebSocket ターンごとに、キーとメンバーの有効化が再チェックされます。取り消されたキーは、既存の接続で新しいターンを開始できません。

アカウント アフィニティの範囲は、メンバー、プール、クライアントのセッション/プロンプト キャッシュ キーに限定され、24 時間のアクティビティの間保持され、バインディングの上限は 4,096 です。ネイティブ リクエストは、プロバイダー間で 1 つのバインディングを使用します。明示的なレガシープレフィックスリクエストはプロバイダー固有のバインディングを保持します。新しいセッションは、アカウントごとの同時実行性とクールダウンを考慮して、プール内で要求されたモデルをレポートする適格なアカウント全体に分散されます。セッションレスリクエストは、アフィニティを作成せずに個別に選択します。アップストリーム ID を切り替えるのではなく、アカウントが無効になったり削除されたりすると、既存のセッションは失敗します。意図的なモデル変更の場合、元のアカウントが新しいモデルを提供できない場合、完全なポータブル履歴によりサポート アカウントを選択できます。プロバイダーの継続は固定されたままになります。見る モデルルーティング。他のアカウントを意図的に変更した後、会話を再開してください。リクエストを再試行しても、リクエストが別のアカウントに自動的に移動されることはありません。

ワークスペースごとの既定値は操作容量 128、WebSocket 接続 8 件、リクエストとターンの総期限 30 分、推論応答ヘッダー待機 5 分です。待機中のリクエストと共有メタデータ処理も容量に含みます。リクエストと再構築した文脈の上限は 128 MiB、応答とイベントは各 8 MiB、本文読み取りは 30 秒、共有モデル検出は 45 秒です。これらは性能保証ではありません。設定はデプロイ、受付とクールダウンは実行時の動作を参照してください。 メンバー制限はチーム管理を参照してください。

プロバイダーの資格情報、ブラウザーの Cookie、任意のクライアント ヘッダー、および生のプロバイダー エラー本文はメンバーに転送されません。クライアントベアラーキーは、選択したアップストリーム資格情報に置き換えられます。アプリケーションは、プロンプト、応答、アクセス トークン、リフレッシュ トークン、または OAuth コールバック URL をログに記録しません。

検証境界

自動テストでは、一時データベース、合成認証情報、およびローカルの偽のアップストリームを使用します。これらは、OAuth 所有権/有効期限/リプレイ、暗号化とキーの不一致、更新シリアル化、不変 ID、アカウント アフィニティ、ロール/所有権の分離、ストリーミング キャンセル、SSE 完了修復、およびターン間の WebSocket 取り消しをカバーします。

オプトイン統合テストは、新しい子プロセス ホーム、継承された認証情報なし、およびローカル合成モデル応答を使用して、インストールされた Codex CLI を実行します。

Verification boundary · 2
SUBLANE_TEST_CODEX=1 go test ./internal/server -run TestCodexCLIProtocol -count=1 -v

Codex CLI 0.152.1 は、合成アップストリームに対して HTTP/SSE および WebSocket モードの両方に合格しました。実際のサブスクリプションの承認とライブ モデルのリクエストには、明示的に承認されたテスト アカウントが必要です。実際のデスクトップ アプリケーションはまだ検証されていません。共有構成とプロトコルのテストだけでは、ライブ デスクトップの互換性は確立されません。

v7 アップグレード前、ローカル macOS arm64 プレビュー (CLIProxyAPI v6.10.9、Go 1.26.0、運用バイナリ、1 つの暗号化された合成アカウント) は、2026 年 9 月 19 日の約 12 分間のアイドル後に 23,376 KiB RSS (約 22.8 MiB) を測定しました。これは単なる観察です。実際のモデル、同時実行性、ペイロード サイズ、およびプラットフォーム変更メモリ使用量。 Docker Compose 構成はローカルで検証されましたが、Docker デーモンはローカル イメージ ビルドに使用できませんでした。

実行参照

SubLane は CLIProxyAPI v8.0.35 のパブリック エグゼキュータとトランスレータを背後で使用します internal/upstream。 SubLane は、認可、暗号化された資格情報ストレージ、更新、アカウント選択、およびパブリック ゲートウェイを所有します。 SDK は、ライブ資格情報なし、no-op ウォッチャー、ブロックされたループバック ルート、自動更新が無効になっているプラ​​イベート エグゼキューター レジストリとして実行されます。見る 建築 実行境界については、 プロバイダーのセットアップ プロバイダーの接続手順については、このガイドの承認とクォータの詳細は Codex について説明しています。