chore: upstream v0.1.37 へ追従し fork 独自変更を移植する - #3
Conversation
fork の d655f4c (#2) を upstream v0.1.37 へ移植。 Claude Code の Artifact ツールは field パラメータの JSON Schema に `^(?!__.*__$)[^\p{Cc}\p{Cf}\p{Zl}\p{Zp}"\\./[\]]{1,200}$` を持つ。 Responses API のスキーマ検証は `\p{...}` / `\P{...}` を受け付けず、 `Invalid schema for function 'Artifact': ... is not a 'regex'` で リクエスト全体を弾くため、プロキシは 502 を返してターンが失敗する (upstream issue raine#141 と同じ事象)。 read_tools は input_schema を無加工で parameters に転送していたので、 ツールスキーマのサブスキーマ位置だけを再帰的に走査してサポート外の pattern を落とす。enum / const / default / examples はインスタンス データを持ち、そこでの pattern キーは制約ではなく許容値そのものなので 立ち入らない。patternProperties のキーは正規表現だが、削除も再キーも スキーマの意味を保てないためそのまま転送する。 バージョンを 0.1.37-codex.1 とする。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Roy4wexpCM7KiEnkiMDMmv
fork の c2eefec を upstream v0.1.37 へ移植。 get_auth() は上流リクエストのたびに /usr/bin/security を起動して macOS Keychain を読んでいたため、並行リクエストが集中すると1リクエストにつき 1子プロセスが生まれ、プロセスのファイルディスクリプタ上限を使い切って (EMFILE) 偽の 401 で認証が失敗し、リスナーごと落ちることがあった。短い TTL のメモリキャッシュを置き、並行バーストを 1 回の keychain 読み取りに 畳み込む。自前のトークン更新時は write-through するため、更新直後の値は TTL に関係なく即座に見える。 あわせて CCP_CODEX_MAX_CONCURRENT (既定 8) を追加し、開始中の上流 リクエスト数を制限する。ChatGPT はサブスクリプションの過剰な並行接続を WebSocket ハンドシェイクの 401 で拒否するため、多数の並列エージェントが 共有プロキシに集中すると踏む。 upstream 側への適応: - refresh_lock はプロセス全体で共有する CODEX_REFRESH_LOCK を使う upstream の実装をそのまま残し、キャッシュ用フィールドのみ追加した。 - 並行数の permit は handle_messages から handle_messages_inner へ移した。 upstream が会話 identity 対応で本体をこちらへ集約したため。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Roy4wexpCM7KiEnkiMDMmv
fork の 639123f のうち CI 部分を upstream v0.1.37 へ移植。 release ジョブを既定の GITHUB_TOKEN (top-level の contents: write) に 向ける。upstream の RELEASE_TOKEN シークレットは fork には無い。 homebrew-tap 更新ジョブを削除する。raine の tap を更新するもので、この fork には関係しない。 バージョンの引き上げは移植済みのため、この移植では CI 部分のみ扱う。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Roy4wexpCM7KiEnkiMDMmv
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7c7e902d74
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
PR #3 のレビュー指摘 (P1/P2) の対応。どちらも fork が v0.1.17 の時点から 抱えていた既存の欠陥で、移植で新たに作ったものではない。 P1: 並行数の permit をストリームタスクが保持する ストリーミングでは live_stream_response が最初の意味のある出力で復帰し、 remaining_live_stream_response がまだ生きている上流接続を spawn した タスクへ移す。permit をハンドラのスコープに置いていたため最初のチャンク で解放され、CCP_CODEX_MAX_CONCURRENT を超える長時間ストリームが接続を 維持できてしまい、この limiter が防ぐはずの並行由来 401 を後続の ハンドシェイクが踏みうる状態だった。 permit を live_stream_response → live_stream_response_once → remaining_live_stream_response へ渡し、spawn したタスクへ move する。 リトライは permit を使い回すため、実際にストリームが始まったときだけ 消費する。 P2: キャッシュミス時の読み取りを直列化する cold または期限切れのキャッシュでは、並行リクエストが揃って cache_get() の None を観測してから誰も cache_store() に到達しておらず、各呼び出しが 独立に永続ストアを読んで macOS では /usr/bin/security を起動していた。 十分な規模のバーストでは、このキャッシュが防ぐはずの FD 枯渇を再現する。 ミス経路を single-flight ロックで保護し、ロック取得後にキャッシュを再確認 する。ロックはブロッキングなストア読み取りの周りだけで保持し、await を 跨がない。 いずれもテストを追加し、修正を外すと落ちることを確認済み。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Roy4wexpCM7KiEnkiMDMmv
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 41422bddfc
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
PR #3 のレビュー指摘 (P2) の対応。 CCP_CODEX_SERVER_COMPACTION=true で compact-boundary リクエストが来ると、 request_compaction が permit 取得より前に post_codex_for_owner を呼んで いた。全 permit が埋まっている状況でも compaction リクエストが上限の外で 開始でき、CCP_CODEX_MAX_CONCURRENT + 1 本の接続が成立して、この limiter が防ぐはずの並行由来の失敗を再現しうる状態だった。 permit の取得を compaction 分岐より前へ移し、以降の生成まで保持する。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Roy4wexpCM7KiEnkiMDMmv
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3bec337aad
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Follow-up メモレビューで挙がった 2 件は、いずれも opt-in API を有効にした場合のみ の問題のため、この PR(upstream 追従)のスコープ外として follow-up にする。リポジトリの issues が無効なため、ここに記録しておく。 既定構成( 1.
|
目的
fork を upstream v0.1.17 ベースから v0.1.37 へ追従させ、まだ upstream に無い fork 独自変更だけを移植する。
mainは upstream/main (v0.1.37) へ fast-forward 済みなので、この PR の差分は移植した 3 コミットだけになる。経緯
fork は v0.1.17 ベースのまま upstream から 121 コミット遅れていた(135 ファイル、+44,499 / -5,235)。fork 独自コミット 8 件を棚卸ししたところ、5 件は既に upstream へ取り込まれていた。
a6a1768+c25fee3gpt-6-astraea0d297kimi content-part / image 502c8161cdkimi system role + k39589673kimi tool call indextc_indexとして実装済み(s.tc_index == tc.index。fork のupstream_indexと同じ意味)gpt-6-astra/gpt-6-astra-fastが upstream 実装で解決されることは実機で確認済み。移植した 3 コミット
82d8a4dUnicode property escape の pattern 除去fork の #2 を移植。upstream 未対応(raine#141 が open)。
Claude Code の
Artifactツールが持つ^(?!__.*__$)[^\p{Cc}\p{Cf}\p{Zl}\p{Zp}"\\./[\]]{1,200}$を Responses API がis not a 'regex'で拒否し、リクエスト全体が失敗する問題。ツールスキーマのサブスキーマ位置だけを再帰し、サポート外のpatternを落とす。upstream の
read_toolsは fork と同一構造だったためrequest.rsは自動マージで通った。手当てはバージョン行のみ。0f63211auth のプロセス内キャッシュ + 上流並行数の制限upstream 未対応。
refresh_lockはリフレッシュ排他のみで認証情報のキャッシュは無く、Semaphore は transcription(4) / images(2) 専用でメインの Codex 経路は無制限。/usr/bin/security子プロセスが並行バーストで fd を枯渇させ(EMFILE)、偽の 401 とリスナー停止を起こす問題への短 TTL キャッシュCCP_CODEX_MAX_CONCURRENT(既定 8)。ChatGPT がサブスクリプションの過剰な並行接続を WS ハンドシェイクの 401 で拒否するためupstream 側への適応:
manager.rs: upstream のCODEX_REFRESH_LOCK(プロセス全体で共有)をそのまま残し、キャッシュ用フィールドのみ追加mod.rs: 並行数の permit をhandle_messagesからhandle_messages_innerへ移設(upstream が会話 identity 対応で本体をこちらへ集約したため)7c7e902fork 向け release CIRELEASE_TOKEN→ 既定のGITHUB_TOKEN、raine の tap を更新する job を削除。upstream はこの部分を v0.1.17 以降変えていないため、fork 版と完全一致する内容になった。検証
cargo test --lib869 passed(ベースライン v0.1.37 が 862、移植分 +7)cargo clippy --all-targets0 指摘、cargo fmt --checkクリーンgpt-6-astraで投げてend_turn正常応答claude-code-proxy modelsにgpt-6-astra/gpt-6-astra-fastが出ることを確認マージ後に必要な作業
v0.1.37-codex.1タグでリリース~/.local/bin/claude-code-proxyの差し替えと共有 proxy 再起動install.sh:12、bin/claude-codex-doctor:202のv0.1.17-codex.5)feat/gpt-6-astraの扱いを決める🤖 Generated with Claude Code
https://claude.ai/code/session_01Roy4wexpCM7KiEnkiMDMmv