diff --git a/devlog/_plan/260906_release_244_followups/070_quota_proxy.md b/devlog/_plan/260906_release_244_followups/070_quota_proxy.md index 36efb0ce14..c8d98e1373 100644 --- a/devlog/_plan/260906_release_244_followups/070_quota_proxy.md +++ b/devlog/_plan/260906_release_244_followups/070_quota_proxy.md @@ -15,3 +15,32 @@ Before: reporter's 2.43.0 output lacks newly landed quotaRefresh; system proxy m Fresh source and CI show diagnostic fields travel enum -> main-account cache -> snapshot -> CLI, with malformed/unrecognized extras dropped and null not converted to zero. Document unsupported PAC/SOCKS-only behavior according to actual code. Leave issue open if reporter evidence is still absent and record FIELD_VALIDATION_PENDING, rather than calling the underlying incident fixed. This evidence-limited investigation outcome satisfies this named investigation slice, not a false runtime fix. No outbound credentials or system configuration changes here. + +## Current-source documentation decision + +The reporter's latest correction still uses 2.43.0; the maintainer explicitly +keeps #3644 open until a build containing #3693 supplies categorized A/B evidence. +Current main-account fetch, identity-fenced snapshot and CLI projector confirm the +diagnostic contract. CLI account.ts declares the existing command used below. +No new runtime fix or field-validation result is available. + +Add an English Codex quota network diagnostics section to server.md and concise +translated sections in ko/ja/fr/ru/tr/zh-cn/zh-tw linking that canonical anchor. +Scope the field to the main Codex account row, not every stored Pool account. +Explain that quotaRefresh (not the quota numbers themselves) is diagnostic only, +that cached/no-attempt output can omit it, and null quota is not zero quota. +Show the real account-list command with a PowerShell projection that outputs only +quotaRefresh, never complete account records. Use the seven fixed status strings +and optional httpStatus only for http_error; no inference of entitlement failure. + +Keep user guidance about the service environment, unset proxy and startup-only +WinINET auto detection; omit internal function/file names from the guide. State +that PAC/WPAD/SOCKS-only and live changes are unsupported by this auto discovery. +Do not claim TUN as a fix. Keep FIELD_VALIDATION_PENDING and the issue's open state +in 071 outcome notes/PR description, rather than hard-coding transient issue status +into all eight evergreen user pages. No local network or account calls. + +Per owner steering, documentation CI runs asynchronously. c-quota-proxy remains +open under release convergence until its scoped checks and unchanged-runtime +source evidence are reconciled. Do not add implementation-mirroring tests for +this documentation-only outcome; existing quota/CLI/proxy tests cover the code. diff --git a/devlog/_plan/260906_release_244_followups/071_quota_proxy_outcome.md b/devlog/_plan/260906_release_244_followups/071_quota_proxy_outcome.md new file mode 100644 index 0000000000..144266fcce --- /dev/null +++ b/devlog/_plan/260906_release_244_followups/071_quota_proxy_outcome.md @@ -0,0 +1,20 @@ +# Windows quota investigation outcome + +FIELD_VALIDATION_PENDING. Issue #3644 remains open. The latest reporter correction +still concerns stable 2.43.0: TUN works, system proxy/rule mode without TUN returns +null plan/quota. The maintainer explicitly requested a categorized comparison from +a build containing #3693. No such current-build result is present. + +The existing #3693 diagnostic is on dev: main-account WHAM fetch outcome, identity- +fenced snapshot, and CLI projector preserve the fixed status vocabulary and optional +HTTP code. Null quota is not rewritten to zero. Current CLI declares +ocx account list openai --quota --refresh --json. Source inspection also confirms +service-start environment handling and static WinINET auto discovery. + +This unit adds canonical user guidance and seven translated links. It changes no +runtime retry, credentials, quota admission, proxy defaults or user configuration. +No live account/network probes or local suites/typecheck/build were run. Existing +quota/CLI/proxy regressions remain; documentation CI is submitted asynchronously. +The incident is not claimed fixed, and no reporter message is needed beyond the +already posted maintainer request. Final release reconciliation retains the open +field-validation status. diff --git a/docs-site/src/content/docs/fr/reference/configuration/server.md b/docs-site/src/content/docs/fr/reference/configuration/server.md index 207f8a4c08..27fd80b36a 100644 --- a/docs-site/src/content/docs/fr/reference/configuration/server.md +++ b/docs-site/src/content/docs/fr/reference/configuration/server.md @@ -258,3 +258,7 @@ compte et la charge de travail prévus. `runtimeRole` vaut `standalone` par défaut. Un hub utilise `hub.managementPublicOrigin`, `hub.managementIngress` limité au loopback (`enabled:false` si absent) et les identités exactes de `remoteGui.allowedTailscaleUsers` (liste vide si absente). La clé client reste dans `service-api-token`, jamais dans `config.json`; `service-api-token.prev` peut exister pendant une rotation. Les usages ne sont pas répliqués. `remoteGui.allowInsecureHttp` est un ancien no-op déprécié, conservé uniquement pour que les anciens fichiers passent encore le schéma strict. Supprimez-le de la configuration : les grants de pairing ne sont acceptés que sur loopback ou via HTTPS authentifié, et `true` ne réactive pas le pairing HTTP en clair. + +## Diagnostic réseau des quotas Codex + +Le champ `quotaRefresh` de la ligne du compte Codex principal décrit la récupération du quota, pas le quota restant ni les droits d’accès au modèle. Il peut être absent lorsque les données sont en cache ou qu’aucune récupération n’a eu lieu. La requête utilise l’environnement du service proxy en cours d’exécution, pas celui du terminal interactif. Sans `proxy`, l’environnement existant est conservé ; `"auto"` lit uniquement le proxy statique Windows au démarrage. PAC/WPAD, les paramètres SOCKS seuls et les changements à chaud ne sont pas pris en compte automatiquement. Un succès avec TUN ne valide pas à lui seul le chemin du proxy HTTP. Consultez [les commandes et les états en anglais](/reference/configuration/server/#codex-quota-network-diagnostics). diff --git a/docs-site/src/content/docs/ja/reference/configuration/server.md b/docs-site/src/content/docs/ja/reference/configuration/server.md index 86b6cbfa5f..b1dd316c7f 100644 --- a/docs-site/src/content/docs/ja/reference/configuration/server.md +++ b/docs-site/src/content/docs/ja/reference/configuration/server.md @@ -167,3 +167,7 @@ Anthropic OAuth サイドカーは、opencodex の既存のクロード コー `runtimeRole` の既定値は `standalone` です。hub は `hub.managementPublicOrigin`、loopback 限定の `hub.managementIngress`(未設定時 `enabled:false`)、正確な `remoteGui.allowedTailscaleUsers`(未設定時は空)を使います。クライアントキーは `config.json` ではなく `service-api-token` に保存され、更新中だけ `service-api-token.prev` が存在する場合があります。使用量はミラーリングされません。 `remoteGui.allowInsecureHttp` は、古い strict-schema 設定を読み込むためだけに残された非推奨の no-op です。設定から削除してください。pairing grant は loopback または認証済み HTTPS でのみ受け付けられ、この値を `true` にしても平文 HTTP pairing は再び有効になりません。 + +## Codex クォータのネットワーク診断 + +メイン Codex アカウント行の `quotaRefresh` はクォータ取得の診断情報であり、残量やモデルへのアクセス権を示すものではありません。キャッシュ利用時や取得を行わない場合は省略されることがあります。取得には操作中のシェルではなく、実行中のプロキシサービスの環境が使われます。`proxy` 未設定では既存の環境を維持し、`"auto"` は起動時に Windows の静的プロキシ設定だけを読みます。PAC/WPAD、SOCKS のみの設定、実行中の変更は自動反映されません。TUN での成功だけでは HTTP プロキシ経路の正常性は確認できません。[コマンドと状態の説明(英語)](/reference/configuration/server/#codex-quota-network-diagnostics)を参照してください。 diff --git a/docs-site/src/content/docs/ko/reference/configuration/server.md b/docs-site/src/content/docs/ko/reference/configuration/server.md index 879b9d40a6..1ccaa8851a 100644 --- a/docs-site/src/content/docs/ko/reference/configuration/server.md +++ b/docs-site/src/content/docs/ko/reference/configuration/server.md @@ -167,3 +167,7 @@ Anthropic OAuth 사이드카는 opencodex의 기존 Claude Code OAuth fingerprin `runtimeRole` 기본값은 `standalone`입니다. 허브는 `hub.managementPublicOrigin`, 로컬에만 열리는 `hub.managementIngress`(없으면 `enabled:false`), 정확한 `remoteGui.allowedTailscaleUsers`(없으면 빈 목록)를 사용합니다. 클라이언트 데이터 키는 `config.json`이 아니라 `service-api-token`에 저장되며 교체 중에는 `service-api-token.prev`가 잠시 생길 수 있습니다. 사용량 기록은 서로 복제하지 않습니다. `remoteGui.allowInsecureHttp`는 이전 strict-schema 설정을 계속 읽기 위해서만 남겨 둔 폐기된 no-op입니다. 설정에서 제거하세요. 페어링 grant는 loopback 또는 인증된 HTTPS에서만 허용되며, 이 값을 `true`로 설정해도 평문 HTTP 페어링은 다시 활성화되지 않습니다. + +## Codex 할당량 네트워크 진단 + +메인 Codex 계정 행의 `quotaRefresh`는 할당량 조회 결과를 분류하는 진단값입니다. 남은 할당량이나 모델 접근 권한을 뜻하지 않으며, 캐시를 쓰거나 조회하지 않았다면 생략될 수 있습니다. 요청은 명령을 입력한 터미널이 아니라 실행 중인 프록시 서비스의 환경을 따릅니다. `proxy`를 지정하지 않으면 기존 환경을 유지하고, `"auto"`는 시작할 때 Windows의 정적 프록시 설정만 읽습니다. PAC/WPAD, SOCKS 전용 설정과 실행 중 변경은 자동으로 반영하지 않습니다. TUN에서 성공했다고 HTTP 프록시 경로도 정상이라는 뜻은 아닙니다. 명령과 상태값은 [네트워크 진단(영문)](/reference/configuration/server/#codex-quota-network-diagnostics)에서 확인하세요. diff --git a/docs-site/src/content/docs/reference/configuration/server.md b/docs-site/src/content/docs/reference/configuration/server.md index 832817a205..b793f159c1 100644 --- a/docs-site/src/content/docs/reference/configuration/server.md +++ b/docs-site/src/content/docs/reference/configuration/server.md @@ -50,6 +50,56 @@ If an older development build changed resume-history metadata before backup supp It force-relabels every user-message `opencodex` row, including legitimate dedicated-provider history; review the full-scope warning in the lifecycle reference before running it. +## Codex quota network diagnostics + +The main Codex account row may include `quotaRefresh` when a quota fetch was +attempted. This describes that fetch, not remaining quota, model access or +permission to retry. Cached reads and rows without a fetch may omit it; absence +does not mean success. A `null` quota value means unavailable, not zero quota. + +To request fresh data and display only the diagnostic in PowerShell: + +```powershell +$quotaReport = ocx account list openai --quota --refresh --json | ConvertFrom-Json +$quotaReport.accounts | + ForEach-Object { if ($_.quotaRefresh) { $_.quotaRefresh } } | + ConvertTo-Json -Depth 3 +``` + +If no diagnostic is present, this projection produces no diagnostic object. Share +only these fields when comparing network modes, rather than the full account list. + +| `quotaRefresh.status` | Meaning | +| --- | --- | +| `ok` | The fetch completed and a quota object was parsed. | +| `not_reported` | The response contained no usable quota object. | +| `http_error` | The upstream returned an HTTP failure; `httpStatus` contains its status code. | +| `timeout` | The quota fetch timed out. | +| `network_error` | The request failed before a classified HTTP response. | +| `invalid_response` | The response was not a usable quota document. | +| `internal_error` | An internal refresh step failed. | + +Only `http_error` includes `httpStatus`. Other statuses do not imply HTTP 0 or an +account entitlement problem. + +### Which proxy path is used? + +The running proxy service fetches quota. It uses its own environment, not the +interactive shell that later runs `ocx account list`. Configure the service's +proxy setting or environment, then restart it; changing variables in another +terminal does not update an already running service. + +An unset `proxy` leaves inherited proxy variables unchanged. An explicit HTTP(S) +proxy URL fills `HTTP_PROXY` and `HTTPS_PROXY` only where they are unset. +`"proxy": "auto"` reads the Windows static WinINET proxy once at startup; existing +proxy environment variables take precedence. Auto discovery does not resolve +PAC/WPAD, SOCKS-only settings or live proxy changes. Use a supported static HTTP +proxy setting or an explicit HTTP(S) proxy URL when needed. + +Compare the diagnostic on the same machine and account under the two network +modes. A successful TUN test alone does not identify why the service's HTTP proxy +path failed, and does not establish a general fix. + ## Remote access The default `127.0.0.1` bind is loopback-only. A non-loopback address such as `0.0.0.0` requires diff --git a/docs-site/src/content/docs/ru/reference/configuration/server.md b/docs-site/src/content/docs/ru/reference/configuration/server.md index 306534a3e1..f8bc9f2a25 100644 --- a/docs-site/src/content/docs/ru/reference/configuration/server.md +++ b/docs-site/src/content/docs/ru/reference/configuration/server.md @@ -215,3 +215,7 @@ opencodex. Перед использованием прогоните soak-test `runtimeRole` по умолчанию равен `standalone`. Hub использует `hub.managementPublicOrigin`, loopback-only `hub.managementIngress` (`enabled:false`, если отсутствует) и точные `remoteGui.allowedTailscaleUsers` (пустой список, если отсутствует). Ключ клиента хранится в `service-api-token`, не в `config.json`; во время ротации может появиться `service-api-token.prev`. Статистика не зеркалируется. `remoteGui.allowInsecureHttp` — устаревший no-op, оставленный только для загрузки старых файлов со строгой схемой. Удалите его из конфигурации: pairing grants принимаются лишь через loopback или аутентифицированный HTTPS, а значение `true` не включает pairing по открытому HTTP. + +## Сетевая диагностика квоты Codex + +Поле `quotaRefresh` в строке основного аккаунта Codex описывает получение квоты, а не её остаток или право доступа к модели. Оно может отсутствовать при чтении кэша или если запрос не выполнялся. Используется окружение работающего прокси-сервиса, а не текущего терминала. Если `proxy` не задан, существующее окружение сохраняется; `"auto"` читает только статические настройки прокси Windows при запуске. PAC/WPAD, настройки только SOCKS и изменения во время работы автоматически не учитываются. Успех через TUN сам по себе не подтверждает исправность пути HTTP-прокси. См. [команды и состояния на английском](/reference/configuration/server/#codex-quota-network-diagnostics). diff --git a/docs-site/src/content/docs/tr/reference/configuration/server.md b/docs-site/src/content/docs/tr/reference/configuration/server.md index 47c6147904..3b6ee8a9f3 100644 --- a/docs-site/src/content/docs/tr/reference/configuration/server.md +++ b/docs-site/src/content/docs/tr/reference/configuration/server.md @@ -288,3 +288,7 @@ yeniden kullanır. Hedeflenen hesap ve iş yükünü kapsamlı bir şekilde test `runtimeRole` varsayılan olarak `standalone` değerindedir. Hub; `hub.managementPublicOrigin`, yalnız loopback `hub.managementIngress` (yokken `enabled:false`) ve tam `remoteGui.allowedTailscaleUsers` (yokken boş) kullanır. İstemci anahtarı `config.json` yerine `service-api-token` içinde kalır; döndürme sırasında `service-api-token.prev` geçici olarak bulunabilir. Kullanım kayıtları yansıtılmaz. `remoteGui.allowInsecureHttp`, yalnızca eski strict-schema yapılandırmalarının yüklenebilmesi için tutulan, kullanımdan kaldırılmış bir no-op'tur. Yapılandırmadan silin: pairing grant'leri yalnız loopback veya kimliği doğrulanmış HTTPS üzerinden kabul edilir ve `true` değeri düz HTTP pairing'i yeniden açmaz. + +## Codex kota ağı tanılaması + +Ana Codex hesabının satırındaki `quotaRefresh`, kalan kotayı veya model erişim yetkisini değil, kota sorgusunun sonucunu açıklar. Önbellek kullanıldığında ya da sorgu yapılmadığında alan bulunmayabilir. Sorgu, etkileşimli terminalin değil çalışan proxy servisinin ortamını kullanır. `proxy` ayarlanmazsa mevcut ortam korunur; `"auto"` yalnızca başlangıçta Windows’un statik proxy ayarlarını okur. PAC/WPAD, yalnızca SOCKS ayarları ve çalışma sırasındaki değişiklikler otomatik uygulanmaz. TUN ile başarı, HTTP proxy yolunun da çalıştığını tek başına göstermez. [Komutlar ve durumlar için İngilizce bölüme](/reference/configuration/server/#codex-quota-network-diagnostics) bakın. diff --git a/docs-site/src/content/docs/zh-cn/reference/configuration/server.md b/docs-site/src/content/docs/zh-cn/reference/configuration/server.md index bee7942398..211e141650 100644 --- a/docs-site/src/content/docs/zh-cn/reference/configuration/server.md +++ b/docs-site/src/content/docs/zh-cn/reference/configuration/server.md @@ -181,3 +181,7 @@ Anthropic OAuth 侧车会复用 opencodex 现有的 Claude Code OAuth 指纹。 `runtimeRole` 默认为 `standalone`。Hub 使用 `hub.managementPublicOrigin`、仅回环的 `hub.managementIngress`(缺省为 `enabled:false`)和准确的 `remoteGui.allowedTailscaleUsers`(缺省为空)。客户端密钥保存在 `service-api-token` 而不是 `config.json`;轮换期间可能暂时存在 `service-api-token.prev`。使用记录不会镜像。 `remoteGui.allowInsecureHttp` 是已弃用的 no-op,仅为让旧的严格 schema 配置继续加载而保留。请从配置中删除它:pairing grant 只接受 loopback 或已认证的 HTTPS;设为 `true` 也不会重新开放明文 HTTP pairing。 + +## Codex 额度网络诊断 + +主 Codex 账户行中的 `quotaRefresh` 描述额度查询结果,并不代表剩余额度或模型访问权限。读取缓存或未执行查询时,该字段可能省略。查询使用正在运行的代理服务的环境,而不是当前终端的环境。未设置 `proxy` 时保留现有环境;`"auto"` 只在启动时读取 Windows 静态代理设置,不自动处理 PAC/WPAD、仅 SOCKS 的设置或运行中的更改。TUN 测试成功并不能单独证明 HTTP 代理路径正常。命令和状态说明见[英文网络诊断章节](/reference/configuration/server/#codex-quota-network-diagnostics)。 diff --git a/docs-site/src/content/docs/zh-tw/reference/configuration/server.md b/docs-site/src/content/docs/zh-tw/reference/configuration/server.md index e85594740d..4649b51f97 100644 --- a/docs-site/src/content/docs/zh-tw/reference/configuration/server.md +++ b/docs-site/src/content/docs/zh-tw/reference/configuration/server.md @@ -201,3 +201,7 @@ Anthropic OAuth sidecar 重用 opencodex 既有的 Claude Code OAuth 指紋。 `runtimeRole` 預設為 `standalone`。Hub 使用 `hub.managementPublicOrigin`、僅限迴路的 `hub.managementIngress`(缺省為 `enabled:false`)與正確的 `remoteGui.allowedTailscaleUsers`(缺省為空)。用戶端金鑰保存在 `service-api-token` 而不是 `config.json`;輪替期間可能暫時存在 `service-api-token.prev`。用量不會鏡像。 `remoteGui.allowInsecureHttp` 是已棄用的 no-op,只為讓舊的 strict-schema 設定繼續載入而保留。請從設定移除:pairing grant 僅接受 loopback 或已驗證的 HTTPS;設為 `true` 也不會重新開放明文 HTTP pairing。 + +## Codex 配額網路診斷 + +主 Codex 帳戶列中的 `quotaRefresh` 描述配額查詢結果,並不代表剩餘配額或模型存取權限。讀取快取或未執行查詢時,這個欄位可能省略。查詢使用執行中代理服務的環境,而不是目前終端機的環境。未設定 `proxy` 時保留既有環境;`"auto"` 只在啟動時讀取 Windows 靜態代理設定,不會自動處理 PAC/WPAD、僅 SOCKS 的設定或執行中的變更。TUN 測試成功本身不能證明 HTTP 代理路徑正常。命令與狀態說明請見[英文網路診斷章節](/reference/configuration/server/#codex-quota-network-diagnostics)。