服务器与运行时配置
服务器设置控制本地代理如何监听、如何保护远程流量、如何管理资源,以及 如何在提供方请求周围运行辅助功能。
| 字段 | 类型 | 默认值 | 含义 |
|---|---|---|---|
port |
number |
10100 |
代理监听端口。 |
hostname? |
string |
"127.0.0.1" |
绑定地址。非回环绑定需要 OPENCODEX_API_AUTH_TOKEN。 |
proxy? |
string |
— | 出站 HTTP(S) 或 SOCKS5 代理 URL(socks5://host:port),或 ${ENV_VAR}。HTTP URL 仅在未设置时写入 HTTP_PROXY / HTTPS_PROXY。SOCKS5 URL 使用内置的真实 SOCKS5 隧道,也会写入 ALL_PROXY(ocx start --socks5);并清除本进程继承的 HTTP(S)_PROXY。回环地址始终保留在 NO_PROXY 中。 |
emptyCompletionRetry? |
boolean |
false |
显式启用:当 Responses turn 既无文本也无工具调用时,使用相同请求重试一次,包括流在终止事件之前结束的情况。重试可能产生费用。OCX_EMPTY_COMPLETION_RETRY=0 可在不修改配置的情况下禁用;combo 与 routed-compaction turn 不参与。 |
dropCodexSafetyBuffering? |
boolean |
false |
从 Codex Responses 透传响应中移除 Codex safety-buffering 提示:x-codex-safety-buffering-enabled / x-codex-safety-buffering-faster-model 响应头、类型为 safety_buffering 的 response.metadata SSE 事件,以及其他 SSE 事件中的 safety_buffering 字段。Codex TUI 会将这些提示显示为“使用更快模型重试”的提示框,其默认操作会把会话切换到较弱的模型。其他 x-codex-* 响应头和其他所有 SSE 事件内容均保持不变,但会移除该字段。默认关闭。 |
stallTimeoutSec? |
number |
300(public)/ 禁用(local) |
上游无有效进展(Responses 和原生 Chat)多少秒后切断流。未设置时本地上游(loopback、private、.local/.lan 名称)默认禁用,公网上游默认 300 秒;正值对两者生效(最小 1 秒);0 全面禁用静默 watchdog。对于把 canonical ChatGPT SSE 折叠为非流式 JSON 的 Responses 请求,即使 watchdog 已禁用,仍保留独立的 15 分钟整轮上限。/v1/responses/compact 的挂起响应体读取共享此预算,但即使本地上游也默认 300 秒;显式值(含 0)优先。 |
connectTimeoutMs? |
number |
200000(public)/ 禁用(local) |
从发出请求到上游返回首个响应头的每次尝试截止时间(DNS/TCP/TLS 及等待响应头);它在正文生成之前结束,与管理正文流的 stallTimeoutSec 无关。未设置时本地上游(loopback、private、.local/.lan 名称)默认禁用,公网上游默认 200 秒;正值对两者生效;0(或任意非正值)全面禁用该响应头截止时间。禁用后,本地模型在大提示上可花费数分钟进行 prompt prefill,而首个响应头时钟不会切断健康的请求。 |
shutdownTimeoutMs? |
number |
5000 |
优雅停机截止时间,超过后会中止仍在进行中的请求。 |
websockets? |
boolean |
false |
声明并允许面向客户端的 Responses WebSocket 路径。设为 false 时客户端使用 HTTP/SSE;它不会禁用符合条件的 canonical ChatGPT 上游 WS 优化。 |
corsAllowOrigins? |
string[] |
[] |
CORS 额外允许的精确 origin。loopback origin 始终允许;支持 chrome-extension://<扩展 ID> 等基于 authority 的浏览器扩展 origin,* 不是通配符。Firefox 和 Safari 会(每次安装/启动浏览器时)重新生成扩展 UUID,origin 变化后请更新该条目。 |
apiKeys? |
OcxApiKey[] |
[] |
生成的 ocx_… 数据平面准入凭据(用于非回环绑定)。它们不授权管理 API;管理访问使用管理 API 参考中说明的独立凭据。由仪表板管理。 |
storageCleanupPolicy? |
StorageCleanupPolicy |
disabled | 可选启用的归档会话清理策略。不会被隐式启用。 |
appOwnedMemoryBudgetMb? |
number |
256 |
可逐出应用自有日志、缓存、blob 和续传载荷的内存上限,单位 MiB。范围 64–4096;不是 RSS 上限。 |
metricsExport.enabled? |
boolean |
false |
在经过认证的 GET /api/metrics 上启用进程本地的请求聚合指标。需要重启;禁用时该路径返回 404,且不会启动任何导出活动。 |
serviceHealthRecovery.enabled? |
boolean |
false |
后台服务的可选恢复:一个小型守护进程探测 /healthz,当代理进程仍存活但在连续探测中约一分钟毫无响应时将其终止,由服务管理器(任务计划程序、launchd、systemd、WinSW)重新启动。仅受管服务子进程会启动它;卡住进程持有的请求不会重放。每小时最多 3 次。需要重启。自动恢复需要数字绑定地址(或默认的 localhost/通配符映射);不监控 DNS 绑定名称。记录的地址或端口发生更改时会停止监控。 |
codexAutoStart? |
boolean |
true |
允许 Codex shim 在启动 Codex 之前运行 ocx ensure。设为 false 会让 ensure 变成无操作。 |
codexShimAutoRestore? |
boolean |
true |
在完成外部 Codex 更新并覆盖安装的 shim 之后恢复该 shim。环境退出开关:OPENCODEX_CODEX_SHIM_AUTO_RESTORE=0。 |
nativeMainRefresh? |
"codex" | "opencodex" |
auto | 选择由谁刷新 CODEX_HOME 中的原生主 ChatGPT 登录。密钥环应答只对本次查询有效:缺失或被扣留的令牌使本次凭据准备失败;后续查询即使返回相同令牌也可以使用。不保留永久拒绝状态,已取得令牌的请求可继续完成。文件凭据行为保持不变。包括自动选择在内的完整行为见英文 Server fields。 |
syncResumeHistory? |
boolean |
true |
可逆的 Codex App 历史兼容性。原始元数据会被备份,并由 ocx stop / ocx restore 恢复。 |
shadowCallIntercept? |
{ enabled?: boolean; model?: string; sourceModels?: string[] } |
off | 将识别出的 Codex 辅助/影子调用重定向到选定模型,并保留为请求配置的推理强度。默认源前缀为 gpt-6-luna, gpt-5.6-luna;0.144.x 及更早客户端使用 gpt-5.4-mini,可通过 sourceModels 恢复。 |
webSearchSidecar? |
OcxWebSearchSidecarConfig |
在可用时启用 | Web 搜索侧车选项。 |
visionSidecar? |
OcxVisionSidecarConfig |
在可用时启用 | 图像描述侧车选项。 |
images? |
OcxImagesConfig |
自动选择 OpenAI | 用于 Codex image_gen 的独立 Images 转发选项。 |
如果较旧的开发版本在尚未提供备份支持之前修改过了 resume-history 元数据,请运行
ocx recover-history --legacy-openai --yes 强制使用原生提供方恢复。
此命令会重标所有包含用户消息的 opencodex 行,其中包括正常的专用提供方历史记录;执行前请查看生命周期参考中的完整范围警告。
原生 Chat 的超时与完成状态
Section titled “原生 Chat 的超时与完成状态”原生 Chat 等待上游输出时也使用 stallTimeoutSec。非空文本、推理、拒绝内容、工具更新和完成事件会重置等待额度;保活注释、仅角色事件和单独的用量信息不会。等待慢客户端读取期间暂停计时。超时产生 upstream_stall_timeout:流式请求收到错误事件,非流式请求返回 HTTP 502。在终态结果到达前取消请求会返回取消错误,而不会把部分答案当作成功。非流式 Chat 支持 LF、CRLF 及多行 data 的 SSE 格式。
默认的 127.0.0.1 绑定仅限回环地址。像 0.0.0.0 这样的非回环地址需要
在 /api/* 和数据平面上都启用令牌认证。启动前先导出令牌:
export OPENCODEX_API_AUTH_TOKEN="your-secret-token"ocx start如果没有这个变量,代理会拒绝远程绑定。对于后台服务,请在运行
ocx service install 之前导出它,这样 launchd、systemd 或 Task Scheduler 都能接收到。客户端应发送:
x-opencodex-api-key: your-secret-token| 端点 | Authorization: Bearer |
x-opencodex-api-key |
x-api-key |
|---|---|---|---|
/v1/responses |
不接受 | 必需 | 不接受 |
/v1/chat/completions |
不接受 | 必需 | 不接受 |
/v1/messages |
接受 | 接受 | 接受 |
/v1/messages/count_tokens |
接受 | 接受 | 接受 |
/v1/models |
接受 | 接受 | 接受 |
Responses 和 Chat Completions 会保留 Authorization,以便将来可能支持 Codex Direct 透传,因此这里只接受专用的准入头。仪表板生成的 apiKeys 可以在启动后替换
环境令牌;候选项按常量时间比较。
Messages 和 count_tokens 为兼容路由客户端仍接受三种准入形式。但在非回环绑定上,原生 Anthropic 透传只通过
x-opencodex-api-key 接受代理准入,并把 Authorization 和 x-api-key 保留给 Anthropic
凭据。放入这些提供方请求头的代理准入密钥会在转发前被移除。
SSH 端口转发
Section titled “SSH 端口转发”远程使用并不要求远程绑定。保持回环绑定并将其转发即可:
ssh -L 20100:localhost:10100 you@remote任意本地端口都可以。Host 解析为 localhost、127.0.0.1 或 ::1 的请求无论端口是多少都仍然算回环,因此 http://localhost:20100/v1 可以正常工作。在客户端中把这个 base URL 设为目标地址;
ocx 只会把默认的本地 127.0.0.1 地址写入已管理的客户端配置。
提供方 OAuth 回调监听在固定的远程端口上。请在远程机器上登录,或者也把那个端口转发出来:
ssh -L 20100:localhost:10100 -L 1455:localhost:1455 you@remotestorageCleanupPolicy 默认禁用。启用后,它会在 startup、daily、weekly 或
manual 时运行,前提是归档字节数超过 trigger.archivedBytesOver。它会从最旧的归档开始,直到达到
target.reduceToBytes 或 target.removeOldestPercent。mode 默认为 quarantine;只有在明确选择破坏性操作时才使用
permanent。该策略会持久化 lastRun 和 nextRun。可在 Storage 页面配置,或通过 GET/PUT /api/storage/cleanup-policy 配置;使用
POST /api/storage/cleanup-policy/run 触发手动运行。
Claude Code (claudeCode)
Section titled “Claude Code (claudeCode)”这些设置控制 /v1/messages、/v1/messages/count_tokens、ocx claude 启动器,以及 Claude 仪表板页面。
| 键 | 类型 | 默认值 | 说明 |
|---|---|---|---|
claudeCode.bodyStallSec? |
number |
90 |
在读取挂起期间,原生透传正文的不活动预算,单位秒,而不是总时长。最小值为 1;精确的 0 会禁用。 |
claudeCode.bodyMaxBytes? |
number |
67108864 |
流式和缓冲响应的原生透传正文累计上限。精确的 0 会禁用。 |
claudeCode.authMode? |
"proxy" | "subscription" |
auto | 启动流程如何处理 ANTHROPIC_AUTH_TOKEN。auto 会在每次启动时自动检测认证;显式值不会被覆盖。 |
claudeCode.authModeMigratedAt? |
string |
unset | 内部的一次性升级标记。不要手动设置。 |
claudeCode.subagentEffort? |
"low" | "medium" | "high" | "xhigh" | "max" |
inherit | 写入生成的 ~/.claude/agents/ocx-*.md 的努力级别;与 Codex 指引和代理上限相互独立。需通过 ocx claude 重新启动以重新生成。 |
自动认证会在找到已保存的 Claude 认证时选择 subscription,在未找到时选择 proxy;如果检测结果不明确,则会选择 subscription 并给出警告。参见 Claude Code 认证模式。
Codex 会为标题、提交信息等任务使用较小的辅助模型。启用
shadowCallIntercept 后,可将识别出的源模型前缀重定向到另一个已配置模型。替换后仍会保留为请求配置的推理强度。只有当客户端使用不同的辅助 ID 时,才设置 sourceModels。
裸模型 ID 与 sourceModels 匹配的请求可以被拦截,但 x-codex-turn-metadata 同时包含 request_kind: "turn" 和 thread_source: "user" 的用户轮次保留所选模型。连接标头 x-openai-subagent: collab_spawn(HTTP 请求或 WebSocket 握手) 或元数据中的 subagent_kind: "thread_spawn" 标记的子代理也保留模型。WebSocket 的轮次元数据仅依据每帧的 client_metadata["x-codex-turn-metadata"],不使用握手中的轮次元数据来分类后续帧。元数据缺失或格式错误时保留原有拦截行为。辅助调用也可能带有 request_kind: "turn",因此仅凭该字段不能豁免。这些规则适用于具体模型和 combo 目标。
{ "shadowCallIntercept": { "enabled": true, "model": "gpt-5.5", "sourceModels": ["gpt-6-luna", "gpt-5.6-luna"] }}目标不可用时
Section titled “目标不可用时”替换目标是操作者选定的唯一目的地,因此无法再解析的目标会让辅助调用失败,而不是把它发到别处。当目标的提供方被禁用或删除,或其组合已不存在时,被拦截的请求会在向上游发送任何内容之前返回 409 和错误代码 intercept_target_unavailable。请求日志记录同一代码。请求不会透传给原生辅助模型,也不会回退到默认提供方,因为两者都会在你未选择的情况下改变目的地、凭据和费用。组合或路由配置档目标仍会在自身成员之间故障转移。像 provider/model 这样的限定目标,如果其提供方部分未指向任何已配置项,也按同样方式处理,设置 API 会拒绝保存。通过默认提供方解析的不带前缀的模型 ID 仍然有效。
禁用(带 disabled: true 的 PATCH /api/providers?name=<provider>)或删除目标所解析到的提供方仍会成功;响应会加入 dependentShadowIntercept: { model, enabled },仪表板会显示警告。重新启用该提供方或选择其他目标即可恢复拦截。
images (OcxImagesConfig)
Section titled “images (OcxImagesConfig)”| 字段 | 类型 | 默认值 | 含义 |
|---|---|---|---|
provider? |
string |
自动选择 OpenAI | 用于 /v1/images/generations 和 /v1/images/edits 的显式自定义 API key openai-responses 提供方。注册表管理的 id 会被拒绝。 |
timeoutMs? |
number |
300000 |
单次独立 Images 请求的整请求超时。 |
如果提供方缺失、被禁用、不兼容,或者没有可用密钥,显式选择就会失败并关闭;它绝不会回退到另一个付费上游。该端点必须实现 Codex 期望的 OpenAI Images API 路径和响应形状。
webSearchSidecar (OcxWebSearchSidecarConfig)
Section titled “webSearchSidecar (OcxWebSearchSidecarConfig)”| 字段 | 类型 | 默认值 | 含义 |
|---|---|---|---|
enabled? |
boolean |
在可用时启用 | 总开关。为 false 时,OpenCodex 停止拦截 web_search,并且 Codex 集成会把 web_search = "disabled" 写入 ~/.codex/config.toml。 |
backend? |
"openai" | "anthropic" | "xai" | "gemini" | "exa" |
openai |
显式配置优先;省略时始终使用 openai。anthropic 和 xai 仅在显式配置时运行;gemini 和 exa 在 executor 发布前仍为保留值。 |
model? |
string |
依后端而定 | OpenAI 使用 gpt-5.6-luna,Anthropic 使用 claude-sonnet-5,xAI 使用 grok-4.6。旧的显式 gpt-5.4-mini 会在启动时迁移。 |
exaApiKey? |
string |
无 | exa 后端的操作员密钥。仅可写入:管理读取绝不会返回已存储的值。 |
xSearch? |
object |
省略 | xAI 专用的托管 x_search opt-in:enabled、互斥的 allowedXHandles / excludedXHandles 数组(最多 20 项),以及 ISO fromDate / toDate(YYYY-MM-DD)。 |
reasoning? |
string |
low |
侧车努力级别。minimal 与 web search 不兼容,会被拒绝。 |
maxSearchesPerTurn? |
number |
3 |
每个主模型轮次允许的实际搜索次数。 |
routedModelStallTimeoutMs? |
number |
200000 |
仅限配置文件的 routed-model 原始正文不活动截止时间。整数范围 1–2147483647;每个非空数据块都会重置它。 |
timeoutMs? |
number |
60000 |
单次托管搜索的截止时间。 |
OpenAI 后端要求已登录 ChatGPT,并启用了 ChatGPT forward 提供方。来自 Claude 的入站
routed 重放会把主 ChatGPT 认证注入内部请求。Anthropic 后端使用的是来自已启用 Anthropic OAuth 提供方的当前保存凭据。如果显式选择了 Anthropic 后端但没有可用账户,则会失败并关闭,而不会回退。Anthropic 执行器使用其原生的 web_search_20250305 工具。xAI 后端要求有可用的已存储 Grok OAuth 账户,使用托管 web_search,并在 xSearch.enabled 为 true 时添加托管 x_search。格式错误的 xSearch 管理输入会返回 400;格式错误的持久化块会在规划期间失败并关闭。gemini 和 exa 通道绝不会因凭据发现或回退而激活;操作员必须显式选择它们。exaApiKey 可在写入时接受,但会从管理响应中省略。
搜索由四个时钟共同约束:基础 stallTimeoutSec、connectTimeoutMs、routed-model 不活动超时,以及
托管搜索超时。有效的桥接看门狗是最大值再加 30 秒。routed stall 是不活动保护,而不是总生成截止时间。
visionSidecar (OcxVisionSidecarConfig)
Section titled “visionSidecar (OcxVisionSidecarConfig)”| 字段 | 类型 | 默认值 | 含义 |
|---|---|---|---|
enabled? |
boolean |
在可用时启用 | 图像描述总开关。 |
backend? |
"openai" | "anthropic" |
auto | 显式值优先;未设置时优先使用可用的已保存 Anthropic OAuth 凭据,否则使用 openai。 |
model? |
string |
依后端而定 | OpenAI 使用 gpt-5.6-luna,Anthropic 使用 claude-sonnet-5。 |
reasoning? |
"low" | "medium" | "high" | "xhigh" | "max" |
"low" |
OpenAI Responses 推理强度;Anthropic 会忽略该项。 |
maxDescriptionsPerTurn? |
number |
8 |
每个主轮次允许的新增描述缓存未命中次数。0 会禁用调用;无效值会使用默认值。 |
timeoutMs? |
number |
45000 |
侧车获取超时。整数 1–2147483647。 |
支持的等级受上游提供方能力与所选模型公布的推理阶梯限制。Vision 只会对发送给其提供方 noVisionModels 中模型的图像生效。OpenAI 具有与 search 相同的登录/forward 要求;显式选择的 Anthropic 在没有可用凭据时会失败并关闭。成功的 data: 描述会使用一个受限缓存,其键由后端、模型、detail、图像字节以及规范化消息上下文组成;OpenAI 的键还会额外包含推理强度(Anthropic 键不含)。命中和同轮重复不会消耗限额。远程 https: 图像以及失败或空的描述不会被缓存。
Anthropic OAuth 侧车会复用 opencodex 现有的 Claude Code OAuth 指纹。请对目标账户和负载进行 soak 测试。
Remote Hub 密钥与默认值
Section titled “Remote Hub 密钥与默认值”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 额度网络诊断
Section titled “Codex 额度网络诊断”主 Codex 账户行中的 quotaRefresh 描述额度查询结果,并不代表剩余额度或模型访问权限。读取缓存或未执行查询时,该字段可能省略。查询使用正在运行的代理服务的环境,而不是当前终端的环境。未设置 proxy 时保留现有环境;"auto" 在启动时读取 Windows 或 macOS 静态 HTTP/HTTPS 设置;macOS 上若有继承代理则跳过读取。macOS 将有效的 *.<domain> 转为 .<domain>:*.local 使 foo.local 和裸域名 local 直连,但不匹配 xlocal。精确的 169.254/16、169.254.0.0/16、fe80::/10 网段会跳过并给出诊断,因此链路本地 IP 地址使用代理。IP 地址和 * 仍可用;其他 CIDR、通配形式和简单主机名例外会在修改环境前拒绝自动发现。不自动处理 PAC/WPAD、仅 SOCKS 的设置或运行中的更改。TUN 测试成功并不能单独证明 HTTP 代理路径正常。命令和状态说明见英文网络诊断章节。
dropCodexSafetyBuffering: 不会改变供应商安全策略或拒绝响应。原生 WebSocket codex.response.metadata.headers 和 /responses/compact 不在过滤范围内。
Forced Claude Code subagent model
Section titled “Forced Claude Code subagent model”The Subagents page offers Force all subagents onto one model, off by default. Select an exposed roster-style id, such as combo/tev-auto, then enable the switch. The roster is offered first; unavailable saved roster entries cannot be force targets.
ocx agent subagents force combo/tev-auto sets claudeCode.subagentModelForce; ocx agent subagents force - clears it. ocx agent status reports the setting. GET /api/subagent-models returns force, forceAvailable, and forceStatus; PUT accepts { "force": "combo/tev-auto" } or { "force": null } without changing the roster. Omitting force leaves it unchanged. Invalid or unexposed targets are rejected on write; stale targets are reported and skipped at launch.
This takes effect on the next routed ocx claude launch, injecting CLAUDE_CODE_SUBAGENT_MODEL as an explicit proxy alias (with [1m] only for an authoritative million-token window; native Claude targets use a reversible native alias) and CLAUDE_CODE_SUBAGENT_MODEL_FORCE=1. Each nonempty shell-exported variable independently wins. Native launches inject neither variable; plain claude is not affected. No plugin files or settings.json are modified by this setting.
Claude Code 2.1.257 or newer is required for FORCE. Plugin and built-in agents (including Explore/Plan) and per-call model arguments are overridden. Forks and subagent skills with model: inherit keep the main conversation model. The main loop and Haiku/small-fast sidecars are unaffected. Existing roster files remain available.
The dashboard warns about old or unknown CLI versions, unavailable targets, and either variable already present in settings.json → env (which overrides launch env). Detection is read-only and server-local: it cannot inspect another launch shell, another machine, or project-local settings. An unknown result is not proof of force support.
历史池用量的连续性
Section titled “历史池用量的连续性”提供方池额度按路由选定的规范提供方计算,请求日志仍保留账户显示标签。
对于当前配置的每个提供方 P,读取余额时会自动将本安装的加盐池别名 h(pool, P) 绑定到 P,
相同别名下保留的历史余额也适用。独立的提供方额度不需要手动添加自映射,也不需要用盐值自行计算哈希。
其他历史标签,包括带账户序号的标签,不会自动绑定。对于已核实归属的历史,在 config.json 顶层配置
spendPoolAliases:键是本安装日志中的历史池加盐别名(32 位小写十六进制),值必须是已核实且当前已配置的提供方准确 ID,不得有首尾空格。
当前名称或账户排列顺序不能证明历史归属。请妥善保密保存日志和盐值。
自动绑定和显式映射都仅在读取时应用,不移动原始余额,也不把身份关联写入日志。 删除显式映射会使该历史重新成为归属未知;但如果别名属于当前配置的提供方自身,自动绑定仍然生效。 每份原始余额只计入所属组一次;仍未绑定的正余额则保守地计入每个候选池一次。 已配置提供方自己的池别名不能映射到另一个提供方;新增提供方时会重新验证。验证只读取现有盐值,不创建盐值。 无效映射保留原有额度并拒绝池准入。
休眠的未知历史只有在最后活动时间严格早于 spend.retentionDays 的截止时间后才过期。
容量压力不会提前删除正余额的未知历史。活动预留和 seed 即使为零令牌也会保留;
只有删除记录持久化后,准入计算才使用减少后的余额。
有适用额度的请求必须在每个目标/密钥首次发送前取得普通容量的预留。
重试沿用相同范围。L 是整个请求共享的物理发送次数上限,在请求开始时固定。
默认是 4 次,现有 OAuth 请求配置最多允许 18 次。所有物理发送共享这一有限上限。
是否执行额度限制、适用的根请求/身份/池令牌额度,以及 L,都在请求开始时确定。
配置变更仅影响变更后开始的请求。已经运行的请求在所有重试和后续发送中保留开始时的策略:
启用或降低额度不会收紧它,提高或删除额度也不会放宽它。以仅观察模式开始的请求会保持该模式直到结束。
最终结算等待报告完成;遗忘发送 ID 不会删除余额。无适用额度时保留原有仅观察行为,包括容量已满时省略记账。
Claude CLI、CodeBuddy 和 Qoder 将一次 CLI 调用计为一次发送,启动前仍必须取得普通预留;无法预留就拒绝启动。 CLI 内部重试和工具轮次不单独计入请求级发送次数上限,但费用按报告的实际使用量结算,包括超出初始估算的部分。
回滚至 2.80.0:契约 C
Section titled “回滚至 2.80.0:契约 C”新记录使用普通 v1 格式和 pool 别名。未经修改的 2.80.0 可以按自身的逐标签规则读取、压缩并执行保留策略。
请保留最新日志和盐值。降级后不保证规范提供方聚合,也不保证与从未升级、始终运行 2.80.0 的相同流量具有相同剩余额度。
再次升级时,当前配置提供方的自动绑定及显式映射应用于仍然保留的原始余额。不需要启动屏障或对账命令。
未发布实验版本的 pool-current / poolContinuity 历史不属于契约 C;原始余额作为未知历史保留到正常过期,
不会立即转换或删除。
完整但无效的记录(包括末行 null)会拒绝有额度限制的请求。压缩仍可保留有效余额,
当前进程的拒绝状态持续到重启并读取干净日志。写入中断的最后一行 JSON 沿用原有恢复规则。
详细边界及错误码见英文原文。
本地上游超时分类
Section titled “本地上游超时分类”该分类只决定超时策略,不授予网络访问权限。HTTP(S) 目标按名称或字面地址分类,不查询 DNS:精确的 localhost(不区分大小写,允许末尾句点)、0.0.0.0、IPv4 loopback(127/8)、RFC 1918 私有地址及 link-local(169.254/16)、IPv6 loopback、link-local(fe80::/10)、unique-local(fc00::/7)、IPv4-mapped 等价地址,以及 .local/.lan 名称属于本地。其他 DNS 名称即使解析到 loopback,也保留公开上游超时。无效目标、不支持的协议和 localhost.example 同样保留公开默认值。
关闭响应头时限仍保留客户端取消和外层整体时限。显式正值 stallTimeoutSec 仍限制本地响应体静默;本地 header/stall 都未设置时,响应头到达前没有自动时限。原生 Chat/Messages 本地 JSON 读取使用 stall 预算,公开 JSON 读取保留原有 max(connectTimeoutMs ?? 200000, 5000)。Compact 响应体即使本地也默认 300 秒。图像/搜索 sidecar 预算不变。
可选的 opencodeClientExport 包含 headerTimeoutMs、chunkTimeoutMs、timeoutMs,取正毫秒数或表示关闭的 false。省略时保留 OpenCode 默认值,无效字段不导出。设置在 V1 options 和 V2 settings 中对整个 provider 生效。参见慢速本地模型。

