opencodex Claude Code 入站代理生产级加固:错误分类、EOF 熔断、空闲心跳与可观测性闭环(WP1–WP4)
【免费下载链接】opencodexUniversal provider proxy for OpenAI Codex Claude Code — use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code项目地址https://gitcode.com/gh_mirrors/ope/opencodex点击查看免费下载opencodex 通过同端口提供/v1/messagesAnthropic Messages API入站能力让 Claude Code 经ANTHROPIC_BASE_URL指向本地网关后即可路由到任意 LLM 提供商。本文基于开发日志 devlog/_fin/260711_claude_inbound/100_production_hardening.md 中的第四阶段生产加固记录Round 6WP1–WP4结合仓库源码逐项剖析协议一致性修复、错误分类表、EOF 熔断、空闲心跳、surface 可观测性标签与多语言文档闭环。读完本文你将掌握 opencodex 网关层在把非 Anthropic 上游的 Responses 流翻译成 Anthropic 流这一核心链路上如何做到 fail-closed、错误类型对齐官方分类、保活空闲连接以及如何在日志/CLI/文档侧追踪 Claude Code 流量。背景从入站落地到生产加固在 100 号文档之前Claude Code 入站能力已经历了研究000_plan.md、核心入站实现010_phase1_core_inbound.md、Tier-2 协议证据固定003_evidence.md等阶段。其核心架构是translate-and-replay把 Anthropic Messages 请求翻译成内部/v1/responses请求复用既有的路由、OAuth 刷新、账户池、密钥故障转移与 vision/web-search sidecar响应侧再由responsesSseToAnthropicSse把 Responses SSE 事件流逐帧翻译回 Anthropic 消息流src/claude/outbound.ts。100 号文档WP1–WP4是这一功能的生产级加固循环通过 Tier-2 官方文档platform.claude.com 的 errors/streaming/rate-limits/token-counting/handling-stop-reasons 页面与 CLIProxyAPI、LiteLLM 等网关项目的 issue 实证逐条评审入站代理与官方 Anthropic 线协议的偏差并给出 ADOPT/REJECT 结论随后落地为代码修复、可观测性标签与文档更新。WP1 — 差距清单与判定Gap list verdicts加固的第一步是盘点协议偏差。文档以一张评审表列出全部差距与判定这是整轮加固的依据原文结论如下差距Gap判定Verdict理由Rationale错误分类缺少 402/409/413/504ADOPT官方 errors 文档中的完整表格EOF 未带终止帧被当作 end_turnADOPTfail-closed静默截断是网关失败模式 #5CLIProxyAPI#2189Claude Code 需要可重试的error事件无空闲 SSE 心跳ADOPT合成 20sping 事件在任意位置、任意数量均合法保护 LB/NAT 与慢首字节Claude Code 并不强制要求#33949故间隔取保守值incomplete(content_filter)未映射ADOPT →refusal官方 stop_reason 列表包含 refusalstop_sequence恒为 nullREJECTResponses API 不暴露匹配到的 stop 字符串无事实来源count_tokens估算REJECT保留官方 count_tokens 本身也是估算LiteLLM 自带 tokenizer 兜底已在指南中说明/api/hello端点REJECT旧 CLI 连通性探测现行 Claude Code 无需它即可工作在线证据pause_turn/model_context_window_exceededREJECT路由路径上无上游信号可映射原生直通按原样转发surface 标签 GUI 过滤050 后续ADOPTWP3—这套判定把能修、值得修与没有事实来源、不值得伪造的差距清楚分开凡是官方协议有据可依的错误类型、截断语义、refusal、心跳一律 ADOPT凡是上游根本不提供信息源的stop_sequence、pause_turn 映射一律 REJECT——不发明上游不存在的事实是这轮加固的底层原则。WP2 — 协议一致性修复outbound.ts的实现WP2 的所有修复都落在 src/claude/outbound.ts 这一响应翻译器上对应四项改动。1. 错误分类表补齐402/409/504anthropicErrorType(status)是一个纯函数式状态码映射表是 WP2 的直接产物export function anthropicErrorType(status: number): string { switch (status) { case 400: return invalid_request_error; case 401: return authentication_error; case 402: return billing_error; case 403: return permission_error; case 404: return not_found_error; case 409: return conflict_error; case 413: return request_too_large; case 429: return rate_limit_error; case 504: return timeout_error; case 529: return overloaded_error; default: return status 500 ? api_error : invalid_request_error; } }对照源码可见src/claude/outbound.ts413 request_too_large在加固前已存在本次新增402 → billing_error、409 → conflict_error、504 → timeout_error与官方 errors 文档表格逐行对齐未知 5xx 收敛为api_error、未知 4xx 收敛为invalid_request_error。错误体统一由anthropicErrorBody/anthropicErrorResponse产出{type:error, error:{type,message}}信封与 003_evidence.md 固定的官方错误信封一致。2. EOF 无终止帧 → fail-closed翻译器读取上游 Responses SSE 流的循环结束reader.read()返回done时若此前从未收到response.completed/response.incomplete/response.failed等终止帧代码不再礼貌地当作end_turn结束而是抛出可重试的错误事件// EOF without a terminal frame is a TRUNCATION, not success (devlog 100: // gateways that close such streams politely hand Claude Code an empty/partial // turn with no retryable error — CLIProxyAPI#2189 failure pattern). Fail closed // with a mid-stream Anthropic error event so the client can retry. if (!cancelled) fail(502, upstream stream ended before a terminal frame (truncated response), true);见 src/claude/outbound.ts。这里的语义是静默截断是网关失败模式绝不能伪装成正常结束——否则 Claude Code 会拿到一个空/半截的回合且无任何可重试信号。fail-closed 后客户端收到 502api_error即可按策略重试。文档特别指出这与 openai-chat 适配器的 fail-closed 先例保持一致即网关对流被截断统一采取宁可报错、不可错报的策略。3.incomplete(content_filter)→refusalresponse.incomplete事件处理中incomplete_details.reason被分派为三种结局src/claude/outbound.tsmax_output_tokens→finish(max_tokens, usage)content_filter→finish(refusal, usage)本轮的映射修复其余原因 →fail(529, message, true)转成可重试的overloaded_error。refusal是官方 handling-stop-reasons 文档中列出的合法 stop_reason此前未映射意味着内容过滤命中会被错误地呈现为普通结束现在 Claude Code 能按官方语义识别。4. 空闲 keepalivepingIntervalMs默认 20s翻译器构造函数签名接收{ pingIntervalMs }默认20_000mssrc/claude/outbound.ts。行为要点仅在pingIntervalMs 0时启动setInterval定时器定时器触发条件流未终止!terminated且控制器背压允许desiredSize 0避免向已关闭或背压的流继续写入每个周期发出event: ping{type:ping}——按 003 号证据ping 在流中任意位置、任意数量均合法且属于纯传输层事件不会污染message_start → … → message_stop的语义框架定时器在finish/fail/cancel以及读取循环finally中一律clearInterval清理src/claude/outbound.ts保证无泄漏心跳不制造消息注释明确must not manufacture a message before a possible initial error即流开始前的 ping 不构成语义消息。设计动机远程部署场景中 LB/NAT 空闲超时会掐断慢首字节的长空闲连接20s 的保守间隔足以保活同时 Claude Code 并不要求特定心跳节奏claude-code issue #33949因此取较保守值以降低带宽开销。测试佐证WP2 的修复都有对应测试锁定在 tests/claude-integration/claude-outbound.test.tsEOF fail-closed构造无终止帧的流断言输出event: error且消息为upstream stream ended before a terminal frame (truncated response)refusal 映射incomplete(content_filter)的 fixture 断言message_delta.delta.stop_reason refusal心跳时序用 25ms 间隔 fixture 验证 idle ping 的触发与清理分类表逐状态断言anthropicErrorType(402) billing_error、anthropicErrorType(409) conflict_error等完整表格。WP3 — 可观测性surface: claude标签与 GUI 过滤WP3 的目标是让 Claude Code 入站流量在可观测性系统中可被识别与过滤由 worker Feynman 负责实现请求日志打标在 src/server/claude-messages.ts 中/v1/messages处理链将logCtx.surface claude写入 RequestLogContext/Entry桌面版另有claude-desktop变体见同文件 L733count_tokens原生直通路径同样携带该标签L1262。GUI Logs 过滤日志界面提供all | claude | codex分段筛选 带过滤的 virtualizer让用户一键只看某类表面流量。国际化过滤 UI 文案覆盖 x4 语言。请求日志测试对打标行为有对应测试覆盖。这一标签还透出到 CLI 层ocx observe usage与ocx usage命令均支持--surface all|codex|claude|grok参数src/cli/observe.ts、src/cli/registry.ts远程聚合侧也定义了同名的surface枚举src/remote/hub-usage.ts。也就是说从 GUI 日志页到 CLI 用量查询Claude 入站流量与既有 Codex 流量在同一条链路里可被无差别地识别、过滤与统计。WP4 — 文档闭环三语言 Claude Code 指南WP4 由 worker Ohm 负责将加固后的行为同步进用户文档确保代码改了、文档不撒谎。交付物是 Claude Code 指南的多语言版本如 docs-site/src/content/docs/guides/claude-code.md 及其 fr/ 等本地化副本新增四类内容Reasoning effort 一节说明自适应 wire 的思考强度映射Prompt caching 一节breakpoints / affinity / CLAUDE.md 相关说明Token 显示c/w缓存读写 token 的展示约定Production notes 一节错误分类表error taxonomy、Retry-After头处理、count_tokens为估算值的说明——这三者正是 WP1/WP2 落地行为的使用侧写照。文档构建全量通过55 页 clean说明新增内容与既有站点结构无缝衔接。GatesD— 质量闸门整个 WP1–WP4 循环以统一质量闸门收尾bun test2163 通过 / 0 失败tsc类型检查 cleanGUI 构建 clean文档构建 cleanWP2 WP3 WP4 的提交记录在claudecode分支上见 git log。这意味着协议修复、可观测性改动与文档更新是同一批提交、同一套闸门放行避免代码合了、文档欠着的常见漂移。总结一轮可复用的生产加固方法论从 100_production_hardening.md 可以看到生产级加固不是拍脑袋补丁而是一条可复用的闭环以 Tier-2 证据建差距清单WP1每条差距标注 ADOPT/REJECT 及理由官方文档有据可依才采纳无事实来源一律拒绝杜绝虚构协议行为以最小代码面落地修复WP2错误分类、EOF fail-closed、refusal 映射、空闲心跳全部集中在 src/claude/outbound.ts 一个翻译器内改动可审计以测试逐条锁定行为WP3 配套fail-closed、refusal、心跳时序、分类表各有 fixture以标签打通可观测性WP3surface:claude让流量在 GUI Logs、ocx usage --surface、远程聚合间一致可过滤以多语言文档同步语义WP4用户看到的错误、估算、缓存行为与代码实现完全一致。对于任何以翻译代理形态接入第三方客户端的网关项目这套证据先行 — 集中修复 — 测试锁定 — 标签观测 — 文档同步的加固循环都值得直接借鉴。赞分享【免费下载链接】opencodexUniversal provider proxy for OpenAI Codex Claude Code — use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code项目地址https://gitcode.com/gh_mirrors/ope/opencodex点击查看免费下载相关推荐如何快速上手swc-node10分钟从零开始配置TypeScript开发环境如何快速上手swc node10分钟从零开始配置TypeScript开发环境 swc node是一个无需node gyp和postinstall脚本的快速TyOpenUI可观测性实战在生产环境中追踪生成式UI错误OpenUI可观测性实战在生产环境中追踪生成式UI错误 OpenUI 可观测性OpenUI Observability是 OpenUIThe OpenOpenCodex 的 Claude Code CLI 上下文窗口、模型缓存与插槽注入加固实践OpenCodex 的 Claude Code CLI 上下文窗口、模型缓存与插槽注入加固实践 OpenCodex 作为 OpenAI Codex 与 Clau创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Cloudreve源码部署指南:从环境配置到HTTPS反向代理

Cloudreve源码部署指南:从环境配置到HTTPS反向代理

简介:这是一套基于Cloudreve的私人云盘源码,面向希望自建文件存储与共享服务的个人用户、小型团队及企业运维人员。它解决的是数据自主可控、文件集中备份与内网传输的需求,适合具备基础PHP环境搭建能力、想快速部署私有网盘的技术爱好者。压…

2026/9/23 20:24:42 阅读更多 →
RTL9303-CG Datasheet核心要点:电源树、SerDes配置与硬件调试

RTL9303-CG Datasheet核心要点:电源树、SerDes配置与硬件调试

简介:面向网络设备研发与嵌入式系统工程师,RTL9303-CG 数据手册是 Realtek 三层管理型 810G 端口交换控制器的完整参考文档,可用于 10GBE 交换机、数据中心与企业级网络硬件的设计、调试与维护,覆盖芯片选型、原理图设计到系统调试…

2026/9/24 20:54:36 阅读更多 →
SSM化妆品配方工艺管理系统实战:强事务+非标字段+国产数据库适配

SSM化妆品配方工艺管理系统实战:强事务+非标字段+国产数据库适配

简介:本资源是一套面向计算机专业本科生与毕业设计学习者的高分SSM框架实战项目,聚焦化妆品配方及工艺管理系统的全流程开发实践。项目完整覆盖需求分析、数据库设计、前后端功能实现与论文撰写,特别适合Java Web技术栈入门到进阶的学习者用于…

2026/9/23 20:24:41 阅读更多 →

最新新闻

边缘计算控制器到底值不值?算清数据搬运费、时延与安全三笔账

边缘计算控制器到底值不值?算清数据搬运费、时延与安全三笔账

这几年跑工业现场,被问得最多的一个问题是:边缘计算控制器到底是不是厂商在炒概念?我每次都不急着给答案,而是先让对方把传统方案的三笔账算一算。算完账,大多数人都沉默了——原来自己一直在为数据的搬运费、等待费&a…

2026/9/24 23:02:55 阅读更多 →
六年Intel Mac免费换新M5?售后置换逻辑与老用户升级指南

六年Intel Mac免费换新M5?售后置换逻辑与老用户升级指南

1. 从一台六年前的Intel Mac说起:这件事为什么能引爆讨论先把事情本身说清楚。一台2019年前后入手的Intel芯片Mac,用了六年,按常理早就过了标准保修期,甚至已经进入"维修成本接近残值"的阶段。这种机器一旦出问题&#…

2026/9/24 23:02:54 阅读更多 →
学生成绩学分制管理系统设计与实现:从业务规则到数据库落地

学生成绩学分制管理系统设计与实现:从业务规则到数据库落地

第一次拿到“学生成绩学分制管理系统的设计与实现”这个题目,很多同学的判断是:这不就是一个带登录的增删改查吗?先建几张表、写个接口、套个前端模板,能跑就完事了。但你要真抱着这个心态去做,开题答辩大概率没问题&a…

2026/9/24 23:02:54 阅读更多 →
开发Android手机安全管家:权限审计与RSA+AES数据加密实战

开发Android手机安全管家:权限审计与RSA+AES数据加密实战

1. 研究思路:为什么需要一套“手机安全管家”智能手机早已不只是通讯工具了。微信里躺着工作群消息,相册里存着身份证照片,备忘录里记着银行卡号,甚至很多人的支付类App还开着免密小额支付。换句话说,手机就是数字身份…

2026/9/24 23:02:54 阅读更多 →
Zblog响应式主题开发实战:从免费主题定制到性能优化

Zblog响应式主题开发实战:从免费主题定制到性能优化

1. 项目概述与选型分析1.1 为什么在众多博客程序里选了Zblog做个人博客这件事,最难的其实不是写作,而是选一套顺手、够轻、不折腾的程序。我这些年玩过WordPress、Typecho、Hexo,最后长期留在Zblog上,原因很简单:PHP程…

2026/9/24 23:02:54 阅读更多 →
电化学原位FTIR实战指南:ATR原理、界面信号捕获与谱图解析

电化学原位FTIR实战指南:ATR原理、界面信号捕获与谱图解析

1. 为什么FTIR不是“拍张红外照片”那么简单?——电化学场景下你必须懂的底层逻辑傅里叶红外光谱(FTIR)在电化学表征中常被当作“标配工具”,但很多人拿到谱图后第一反应是:这峰在哪?怎么跟文献对不上&…

2026/9/24 23:01:53 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →