用户确认“验证后合并发版”。下方“合并前真实上游复测”一节保留为当轮状态。本次未部署或访问任何服务器。
- PR #18 以 squash 合并为
02d19ceefacc7a98cb527bd9453cc87758fad836,合并提交的源码树与 CI 全绿的分支头34b34b8一致。附注标签v0.2.14指向该提交。 - 标签 CI 9 项任务全部通过(含 v0.2.13 → v0.2.14 热升级联测、最新 CPA 候选联测与发布),
main推送 CI 同样通过。 - 公开 Release 已设为 Latest,共 11 个资产。下载全部资产,SHA-256 与 GitHub 记录的 digest 逐个一致,
checksums.txt与各.zip.sha256逐行一致;四平台包与独立页面包BUILD.json版本均为 0.2.14、来源提交均为02d19ce且工作区干净,两个 Linux 包glibc_minimum为 2.28。 tests/cpa_store_install.py在隔离 Windows CPA v8.0.23 与 v8.0.59 中均通过:匿名公开源发现、选择 v0.2.14 Release、校验安装、重启加载并报告 0.2.14。
凭证仅保存在仓库外的临时文件(仅当前用户可读),验收结束后删除。测试 CPA 经日本出口代理(香港出口下 Claude 模型返回 403,见下节)。以正式包内动态库(SHA-256 e0519cfa…f895e3)运行兼容探测,在 CPA v8.0.23 与 v8.0.59 上各 10 次请求、全部 200,宿主 /status 报告 0.2.14:
- sonnet-5-5
(none):原生 Messages 首次与再次、Chat 客户端、重启后流式均记录thinking_off_unsupported:adaptive_low、reasoning_to=low,回复无推理内容。v8.0.59 由宿主剥离后缀再注入等级,插件仍正确改写,补上了付费模型在 v8.0.59 上未复测的空缺(仅限这两个 Claude 模型)。 - sonnet-5-5 强制工具
tool/any/Chatrequired、重启后流式:均记录forced_tool_choice_unsupported:auto,模型调用read_file且参数正确(Chat 客户端 1 个tool_calls)。 - haiku-5-5
(none)与强制工具:无调整。重启后统计 10/10 成功、均有用量。
使用 PR #18 head dbb2fc4 在 WSL 交叉编译的 Windows 动态库(版本号仍为 0.2.13,源码与发版仅差版本号和文档),宿主 CPA v8.0.23;凭证只放在仓库外的临时文件中,用后删除。
- 出口导致的 403:首次复测时两款 Claude 模型均返回 403
permission_error「The provider refused this request. The refused request wasn't charged.」,不经插件直连上游也一样;同一时间gpt-5.6-sol、deepseek-v4-pro返回 200,账户额度正常(5 小时窗口几乎未用)。当时本机出口为香港(Cloudflarecolo=HKG,IPv4/IPv6 相同)。只让测试 CPA 经日本出口的代理后,同一密钥的 Claude 请求恢复 200。插件对该 403 不做兼容调整(符合设计);CPA v8.0.23 把它当作凭证故障,同模型随后返回 503auth_unavailable。部署说明已加入排查提示。 - 上游报错原文(直连):
thinking.type=disabled→ 400「To turn thinking off on this model, send "thinking": {"type": "between_tools"} instead of {"type": "disabled"}…」;tool_choice为tool/any→ 400「tool_choice: type "tool" and "any" are not supported for this model.」(CommandCode 把上游错误 JSON 作为字符串放在message中)。两者均命中现有匹配规则,无需修改。auto返回 200 并调用工具;haiku-5-5 接受强制工具。 - 兼容探测(经插件,10 次请求全部 200):
- sonnet
(none)首次:日志adjustments=[thinking_off_unsupported:adaptive_low]、reasoning_to=low,返回纯文本;第二次直接改写(1.7 s,首次含被拒请求 2.7 s);Chat 客户端同样改写,回复无推理内容。 - sonnet 强制工具
tool首次、any、Chat 客户端required:均记录forced_tool_choice_unsupported:auto,模型调用了read_file且参数正确。 - haiku
(none)与强制工具:无调整,reasoning_to=none。 - 重启 CPA 后的流式请求:两项都在输出前重试成功,流式 200;统计 10/10 成功且均有用量。
- sonnet
- 验收脚本
commandcode_live.py --generate --tools --thinking --thinking-off --max-tokens 2048 --max-requests 7:haiku-5-5 7/7 PASS(无调整,4,052 tokens);sonnet-5-5 7/7 PASS(工具调用 1 次forced_tool_choice_unsupported:auto、关闭思考 1 次thinking_off_unsupported:adaptive_low,2,379 tokens);两者 CPA 用量计数与插件统计一致。
升版本号后的本地验证:Windows go test/go vet/gofmt、WSL Linux go test -race、Node 32 项、Prettier、CPAMP 页面校验 6 项通过;在固定基线源码上重建并内嵌 0.2.14 页面,WSL 交叉编译的 Windows 动态库在 CPA v8.0.23 与 v8.0.59 上跑完 9 项宿主联测(含 v0.2.13 正式包 → 新库热升级),18/18 通过。
尚未验证:付费模型在 CPA v8.0.59 上的复测(宿主剥离后缀后注入等级,插件映射路径相同);sonnet-5-5 低强度下“不思考”只是抽样观察,不作保证。
针对下方付费验收发现的三个问题:
model(none)与 sonnet-5-5:插件识别上游“改用between_tools”的 400,改为自适应思考 +effort=low重试一次,日志adjustments记录thinking_off_unsupported:adaptive_low,reasoning_to记为low。依据:实测自适应低强度下 sonnet-5-5 对简单题不思考(见下方思考等级表);between_tools被 CommandCode 校验拒绝,无法使用。- 强制工具选择与 sonnet-5-5:识别
tool_choice“not supported” 的 400,改为auto(保留工具列表与disable_parallel_tool_use)重试一次,记录forced_tool_choice_unsupported:auto。依据:实测auto在明确要求时会调用该工具。 - 两项只作用于 Messages 协议模型和上述上游 400;重试在任何输出之前,统计计为一次请求。重试被接受后本进程内记住该模型,后续请求直接改写;重启或改
base_url后重新探测;重试仍失败时不记住。 - 默认超时:
timeout_seconds默认改为 1800(grok-4.7 实测 658 秒)。已保存过设置的实例仍使用settings.json中的值,需手动修改;未做自动迁移,以免覆盖用户有意设置的 600。 - 验收脚本:
commandcode_live.py的 thinking 用例改用计数题 +effort=high,新增--thinking-off与--request-timeout,逐请求记录兼容调整。
本地验证(Windows Go 1.27.2 + WSL Linux):新增 8 个 Go 单元测试覆盖重试、记住与重启遗忘、失败不记住、其他错误不重试、两项同时发生(流式)、Chat 协议不受影响和默认超时;go test -race ./...(WSL Linux)、go vet、gofmt、Node 32 项、Prettier 检查通过。cpa_round2.py 新增模拟 sonnet-5-5 拒绝的端到端用例。WSL 交叉编译的 Windows 动态库在 CPA v8.0.23 与 v8.0.59 上跑完 9 项宿主联测(含 v0.2.12 → 新库热升级),18/18 通过;新用例中 5 次客户端请求对应 2 次上游拒绝与重试,统计与 CPA 用量队列均计 5 次。真实上游复测见上节。
用户授权使用付费模型、预算不设上限。全部使用 v0.2.13 正式 Windows 动态库,宿主以 CPA v8.0.23 为主;凭证仍只放在仓库外的临时文件中,用后删除。账户为 GOAT 套餐,本轮最后一次请求触发 5 小时用量上限(429),随即停止付费请求。超出预期的消耗主要来自长上下文用例:填充文本实际为 57 万(Claude)/31 万(GPT)tokens,远大于预估。
GOAT 套餐可用:claude-sonnet-5-5、claude-haiku-5-5、gpt-5.6-sol、deepseek/deepseek-v4-pro、moonshotai/Kimi-K3、zai-org/GLM-5.2、Qwen/Qwen3.7-Max、xai/grok-4.7。其余被测的 Claude 4.x/Opus/Sonnet 5、GPT-5.4/5.5/6、Gemini 等返回 403 MODEL_NOT_IN_PLAN。上游模型目录不提供思考能力字段。
同一道计数题,流式请求,每档 2 次(model(level) 后缀经 v8.0.23 原样交给插件,插件日志 reasoning_to 与请求等级一致):
| 模型 | low | medium | high | 结论 |
|---|---|---|---|---|
| deepseek-v4-pro | 推理 777/630 tokens | — | 4,803/4,512 | 等级明显生效(约 6~7 倍) |
| gpt-5.6-sol | 449/374 | 498/439 | 509/604 | 随等级小幅上升(均值 412/469/557) |
| claude-sonnet-5-5 | 不思考,正文写推导 | 不思考 | 先思考后作答 | 等级改变是否思考;上游不报告思考 tokens,思考内容为空(仅签名) |
| claude-haiku-5-5 | 2 次中 1 次思考 | — | 均思考 | 同上 |
v8.0.59 上免费模型 beam:free 的复核见下方 v0.2.13 发版记录;付费模型在 v8.0.59 上未单独复测(宿主剥离后缀后注入等级,插件映射路径与 v8.0.23 相同)。
claude-haiku-5-5:原生 Messages 非流式/流式、强制工具调用与结果回传、图片传输均通过。claude-sonnet-5-5:原生 Messages、图片通过;强制工具选择不受支持,tool_choice为tool/any时上游返回 400 “not supported for this model”,auto正常调用工具。- 思考签名回放:两模型对需要推理的题目返回带签名(2,164/3,188 字符)的空内容思考块;原样回放后的后续请求 200(非流式与流式);篡改签名后上游返回 400,说明签名经插件完整往返且确由上游校验。
tests/commandcode_live.py --thinking对两模型均失败:用例使用“Reply only OK.”,自适应思考模型对简单问题不思考,不产生思考块;--tools对 sonnet-5-5 失败于强制工具选择。这是验收脚本假设与新模型不符,不是插件故障,脚本待调整。model(none):插件把关闭思考映射为thinking.type=disabled。claude-haiku-5-5接受;claude-sonnet-5-5的上游拒绝disabled并提示改用between_tools,而 CommandCode 的请求校验又拒绝between_tools(对所有模型均返回 “Invalid input at thinking”)。因此经 CommandCode 无法关闭 sonnet-5-5 的思考,该后缀返回 400;请求后未见凭证冷却。不传thinking时 sonnet-5-5/haiku-5-5 默认会思考。
流式请求,高等级(max_tokens 32000;长上下文用例 8000)。“首字节”为插件记录的首段上游数据时间:
| 用例 | 首字节 | 首个正文 | 最大段间间隔 | 总时长 |
|---|---|---|---|---|
| sonnet-5-5 难题 | 14.8 s | 14.8 s | 0.1 s | 18.3 s |
| haiku-5-5 难题 | 17.3 s | 17.3 s | 0.02 s | 17.3 s |
| gpt-5.6-sol 难题 | 11.8 s | 11.8 s | 0.2 s | 12.0 s |
| deepseek-v4-pro 难题 | 2.0 s | 105.8 s | 0.2 s | 105.9 s |
| Kimi-K3 难题 | 1.6 s | 94.7 s | 0.4 s | 94.7 s |
| GLM-5.2 难题 | 1.6 s | 133.7 s | 0.2 s | 133.8 s |
| Qwen3.7-Max 难题 | 1.9 s | 140.9 s | 3.1 s | 141.0 s |
| grok-4.7 难题 | 2.7 s | 658.1 s | 58.5 s | 658.1 s |
| sonnet-5-5 57 万 tokens 上下文 | 24.6 s | 24.7 s | 0.05 s | 25.1 s |
| gpt-5.6-sol 31 万 tokens 上下文 | 13.5 s | 13.6 s | 0.2 s | 13.8 s |
- Claude 与 GPT 在思考期间不向客户端发送任何数据(Claude 连
message_start都在思考结束后才到),首字节等于全部思考时间;DeepSeek/Kimi/GLM/Qwen/Grok 约 2 秒内开始流式输出推理内容。 grok-4.7高等级难题用时 658 秒,超过默认timeout_seconds: 600,在默认配置下会被整体超时截断为 504;其输出中出现过 58 秒无数据的间隔。- 据此,启用停滞保护时建议首字节 ≥120 秒、流空闲 ≥120 秒;长推理(尤其 grok-4.7)应把
timeout_seconds提高到 1200~1800。两项停滞保护仍默认关闭。
真实 Claude Code 2.1.316 以隔离配置目录接入隔离 CPA(模拟上游,不消耗额度),在 v8.0.23 与 v8.0.59 上各运行一次 -p 普通请求和 /context:每个宿主上两条命令合计发出 24 次 POST /v1/messages/count_tokens,全部收到插件本地 404,未访问上游;两条命令均以 success 结束,/v1/messages 正常 200,凭证未冷却。
internal/bridge/ui/console.js、console.css 原为长行手写压缩风格(JS 266 行、最长 1,709 字符;CSS 16 行、最长 4,024 字符),改为 Prettier 3.7.4 格式化的源码(JS 1,574 行、CSS 1,854 行),配置见 .prettierrc.json。
- 等价性:
prettier --debug-check通过;另用 acorn 独立比较语法树,除去空语句与属性键引号写法后 JS 完全一致;postcss 比较 1,428 个 CSS 节点,仅 11 处为引号、属性选择器引号和小数前导零写法差异。 - 未加压缩步骤:格式化后两文件共增加 16,842 B,控制台页面约增 17 KB,动态库从 16,232,403 B 增至 16,249,299 B(本机未裁剪符号的构建,约 0.1%)。控制台经 CPA 管理接口在本机或内网提供且不缓存;在四平台构建(含 manylinux 容器)中加入 Node 压缩工具会让发布内容与测试源码不同并增加构建依赖,收益不足以抵消,因此按原样内嵌。
- 测试:三个 Node 测试文件改为用
between()按唯一标记切片,标记缺失或重复时直接失败(原先indexOf返回 -1 时会静默截取错误片段)。Node 31 项、Gogo test ./internal/... ./cmd/...通过;CI 测试任务新增prettier --check。 - 宿主与浏览器:新 Windows 动态库在实际 CPA v8.0.23 与 v8.0.59 上 18/18 通过(含以 v0.2.12 正式包为前一版本的热升级)。
console_preview.py普通场景中登录并切换五个页面,无全局错误,设置页显示首字节/流空闲超时字段;与格式化前的 v0.2.13 构建逐页截图对比(1265×712),设置页 0 像素差异,其余四页差异仅为夹具时间戳和一次登录提示气泡。
用户已确认合并 PR #16 并发版,并提供真实凭证用于验收。下方“未发布源码”一节保留为当轮验证时的状态。本次未部署或访问任何服务器。
- PR #16 以 squash 合并为
dfd0af2d3f237e3b9beb0e9b9ebe54a5ca2f24ec,合并提交的源码树与 CI 全绿的分支头791b055一致。附注标签v0.2.13指向该提交。 - 标签 CI 9 项任务全部通过,含两个 Linux 架构在 glibc 2.28 用户态内的加载与宿主联测、最新 CPA 候选 v8.0.59 联测及发布。
main推送 CI 同样通过。 - 公开 Release 已设为 Latest,共 11 个资产。匿名下载全部资产,大小与 SHA-256 逐个匹配 GitHub 记录的 digest;
scripts/checksums.py --include-cpamp --max-glibc 2.28通过,重新生成的清单与发布的checksums.txt逐行一致。四平台包与独立页面包版本均为 0.2.13、来源提交均为dfd0af2、兼容基线均为 CPA v8.0.23。 - 发布的 Linux 包
BUILD.json:amd64glibc_minimum2.28/glibc_symbol_version_max2.3.2,arm64 为 2.28/2.17,与objdump -T实测一致。发布的 amd64.so在本机 manylinux_2_28 容器(glibc 2.28)中dlopen成功,并以 Linux CPA v8.0.23 通过cpa_e2e.py、cpa_count_tokens.py、cpa_thinking_suffix.py。 - 发布的 darwin dylib 为
LC_BUILD_VERSIONminos 14.0/SDK 15.5,与 v0.2.12 相同。 tests/cpa_store_install.py在隔离 Windows CPA v8.0.23 与 v8.0.59 中均通过:匿名公开源发现、选择 v0.2.13 Release、校验安装、重启加载并报告 0.2.13。
凭证仅保存在仓库外的临时文件(仅当前用户可读),验收结束后已删除;报告与运行数据中经检查不含该 key。账户套餐 individual-goat,公开目录 96 个模型。为不消耗额度,生成请求只使用目录中的免费模型 reflection/beam:free,共 10 次真实请求、约 1.7k tokens。
tests/commandcode_live.py只读检查通过(身份、额度 2 个窗口、目录刷新,key 不出现在凭证列表)。- 同脚本
--generate --tools在 CPA v8.0.23 上 6/6 通过:Chat/Responses 的流式与非流式、工具调用与结果回传;共 596 tokens,插件统计与 CPA 用量队列一致。 - 思考后缀:在 v8.0.23 与 v8.0.59 上各发送
beam:free(low)、beam:free(high)流式请求,均为 200,插件日志的reasoning_from/reasoning_to分别为 low/high,请求后凭证无 unavailable。上游返回的推理 tokens 为 174/231(v8.0.23)与 232/188(v8.0.59),与等级不成单调关系:插件按等级转发已确认,该免费模型是否按等级调整推理深度无法据此判断,付费推理模型未测。 - 超时参考:上述 4 次短问答流式请求,插件记录的首字节 1.8~3.4 秒,客户端观测的最大段间间隔 0.05~0.52 秒。仅代表免费模型的短请求,不足以确定长推理或大上下文模型的合适阈值,因此两项超时保持默认关闭。
- count_tokens 的真实客户端行为(如 Claude Code 收到 404 后的处理)仍未验证:插件对该路径不访问上游,需要真实客户端联测。
使用 v0.2.11 正式 Windows 包(SHA-256 与包内清单一致)与 v0.2.13 正式包,在同一 CPA 进程内复现:
- CPA v8.0.23:v0.2.11 下
cool-model(high)返回 404,随后不带后缀的请求返回 503,凭证显示 unavailable、约 12 小时后重试。热升级到 v0.2.13 后凭证显示恢复 active,但带与不带后缀的请求仍返回 503auth_unavailable(错误信息保留升级前的上游错误);重启 CPA 后立即恢复 200。结论:插件热升级不清除宿主已记录的模型冷却,需要重启 CPA。已写入 DEPLOYMENT 与发布说明。 - CPA v8.0.59:宿主剥离后缀,v0.2.11 下后缀请求即为 200,不产生冷却;升级前后均为 200。
本轮只使用本地模拟上游,未进行真实模型生成,未访问或修改任何部署服务器。CPA 发布门槛仍为 v8.0.23;compatibility.json 未改动。包含 PR #14(Antigravity 额度回归纳入发布门槛)与 PR #16。
- v0.2.12 的 Linux 动态库在 runner 自带的 glibc 上构建:amd64 与 arm64 发布包
objdump -T的最高符号版本均为 GLIBC_2.34(另含 2.32),而固定的 CPA v8.0.23 Linux 版本身只需 glibc 2.3.2,因此插件把 CPA 原本支持的 glibc 2.28–2.33 主机(如 RHEL/AlmaLinux 8、Debian 11)挡在外面。 - Linux 改在按 digest 固定的
manylinux_2_28镜像(2026.11.06-1)中构建。新库 amd64 最高符号版本为 GLIBC_2.3.2,arm64 为 GLIBC_2.17;构建步骤在超过 2.28 时失败,BUILD.json记录glibc_minimum: "2.28"与实际glibc_symbol_version_max,checksums.py --max-glibc 2.28在两处发布校验中拒绝超标的包(test_cpamp_panel_validation.py新增拒绝用例)。 - 本机 manylinux_2_28 容器(glibc 2.28)中运行 Linux CPA v8.0.23:v0.2.12 动态库
dlopen失败(缺 GLIBC_2.34),新库加载成功,并通过cpa_e2e.py、cpa_count_tokens.py、cpa_thinking_suffix.py。CI 新增 “Load and run on glibc 2.28” 步骤,amd64 与 arm64 各在 glibc 2.28 用户态内完整运行上述三项;rebase 前 PR #16 的 CI(run 42362813526、42371142936)全部通过。
本机合成测量(90 天 × 2 模型的用量桶,共 21,768 个):
- 用量数据缩进 JSON 为 9,823,672 B,改为紧凑 JSON 后为 7,450,959 B,单次编码约 24 ms。
- 持续请求时,旧逻辑每次变更都重写整个文件,折合约 39.29 MB/s;新逻辑按文件大小把重写间隔限制在 250 ms~10 s(按 1 MiB/s 折算),该规模下间隔约 7.1 s、约 1.05 MB/s,约降为 1/37.5。
- 1,000 条最近请求记录从 988,002 B 降为 788,001 B,持续写入从约 3.92 MB/s 降为约 1.05 MB/s。
- 插件关闭时仍强制立即写出全部待写文件(
flushRuntimeFiles(true)),写入仍为原子替换;热升级联测确认记账数据在升级后保留。persistence_rate_test.go覆盖间隔计算、大文件节流与紧凑 JSON。
- 新增
first_byte_timeout_seconds与stream_idle_timeout_seconds,默认 0(关闭,保持旧行为),启用时取值 5~1800 秒;超时分别以 504upstream_first_byte_timeout/upstream_stream_idle_timeout结束并记入失败计数。 upstream_timeouts_test.go5 项通过。cpa_reliability.py新增“上游先回首字节后停止输出”的故障用例:使用 v0.2.12 动态库时因新设置被拒绝(400)而失败,使用新库通过。- 浏览器实测设置页可保存两个字段并回读 90/120;
config.example.yaml已补充说明。
- Windows Go 1.26
go vet ./internal/... ./cmd/...、gofmt -l与go test ./internal/... ./cmd/... -count=1通过;Node 31 项通过;test_cpamp_panel_validation.py在 WSL 下 6 项通过。 - Windows amd64 动态库(版本 0.2.13,WSL 交叉编译,晚于最后一次源码修改)在实际 Windows CPA v8.0.23 与 v8.0.59 上各运行 9 项,共 18/18 通过:
cpa_e2e.py、cpa_native_management.py、cpa_reliability.py、cpa_diagnostics.py、cpa_round2.py、cpa_count_tokens.py、cpa_thinking_suffix.py、cpa_hot_reload.py,以及以 v0.2.12 正式 Windows 包为前一版本的cpa_hot_reload.py --previous-archive(同一 CPA 进程内 0.2.12 → 0.2.13)。CI 热升级联测的前一版本同步改为 v0.2.12。
- 真实上游下两项超时的合适取值(默认关闭)、思考后缀等级效果与 count_tokens 客户端行为;插件热升级是否清除宿主已记录的冷却。——发版后已部分验证,见上方发版记录。
- 真实 RHEL/AlmaLinux 8 等 glibc 2.28 主机上的部署(目前仅容器与 CI 验证)。
用户已确认合并 PR #15 并发版。下方“未发布源码”一节保留为当轮验证时的状态;真实上游验收仍未完成,本次未部署或访问任何服务器。
- PR #15 以 squash 合并为
257b070cecdb5cc3819591942aac15280600cf9c,合并提交的源码树与 CI 全绿的分支头ab3d07e一致。附注标签v0.2.12指向该提交。 - 标签 CI 9 项任务全部通过:CPA v8.0.23 基线、四平台构建与宿主联测(含新增 count_tokens/思考后缀联测,macOS 在
macos-15构建)、CPAMP、最新 CPA 候选 v8.0.59 全套 8 项联测、统一校验及发布。main推送 CI 同样通过。 - 公开 Release 已设为 Latest,共 11 个资产。匿名下载全部资产,大小与 SHA-256 逐个匹配 GitHub 记录的 digest;
scripts/checksums.py --include-cpamp通过,重新生成的清单与发布的checksums.txt逐行一致(Windows 本地写入为 CRLF,仅按行比较)。四平台包与独立页面包版本均为 0.2.12、来源提交均为257b070、兼容基线均为 CPA v8.0.23,内嵌页面摘要一致。 - 发布的 darwin dylib 为
LC_BUILD_VERSIONminos 14.0/SDK 15.5,最低系统与 v0.2.11 相同。 main的registry.json已为 0.2.12。tests/cpa_store_install.py在隔离 Windows CPA v8.0.23 与 v8.0.59 中均通过:匿名公开源发现、选择 v0.2.12 Release、校验安装、重启加载并报告 0.2.12。- 仍待验证:真实上游下的思考后缀等级效果与 count_tokens 客户端行为;插件热升级是否清除宿主已记录的冷却。
本轮只使用本地模拟上游,未进行真实模型生成,未访问或修改任何部署服务器。CPA 发布门槛仍为 v8.0.23;compatibility.json 未改动。
- count_tokens:v0.2.11 对
/v1/messages/count_tokens返回 501。在 Windows CPA v8.0.23 上复现:宿主把 501 当作凭证故障冷却凭证,随后同模型的/v1/messages返回 503auth_unavailable(CLIProxyAPI #7271,上游修复1c53721)。 - 思考后缀:v8.0.23 把
mock-chat(high)原样交给插件,v0.2.11 返回 404,宿主随即把凭证标为 unavailable,未带后缀的同模型请求也变为 503。实测约 12 小时后宿主才重试;重启 CPA 立即恢复。插件热升级本身是否清除宿主已记录的冷却未验证。 - v8.0.59(上游
c9af529)由宿主剥离后缀,但 v0.2.11 以原始请求体重建原生 Messages 请求时丢失后缀等级;宿主注入的reasoning_effort=auto在 Chat 模型上原样发往上游,在 Anthropic 模型上返回 400unsupported Anthropic reasoning effort。 - 新增
tests/cpa_thinking_suffix.py使用修复前动态库在 v8.0.23 与 v8.0.59 上均失败,确认该测试能识别上述问题。
- Windows Go 1.26
go vet ./internal/... ./cmd/...、gofmt -l与go test ./internal/... ./cmd/... -count=1通过,包括新增的 count_tokens 与思考后缀单元测试;Node 31 项通过;test_cpamp_panel_validation.py在 WSL Python 3.10 下 6 项通过(Windows 商店版 Python 的python.exe无法被shutil.copyfile读取,该用例在本机 Windows 上属于环境错误,非代码失败)。 - Windows amd64 动态库(WSL 交叉编译,晚于最后一次源码修改)在实际 Windows CPA v8.0.23 与 v8.0.59 上各运行 9 项,共 18/18 通过:
cpa_e2e.py(25 个请求)、cpa_native_management.py、cpa_reliability.py、cpa_diagnostics.py、cpa_round2.py(13 次模拟请求,真实请求 0)、cpa_count_tokens.py(两类模型各 3 轮 count_tokens 均为 404、随后 Messages 均为 200)、cpa_thinking_suffix.py(Chat/Responses/原生 Messages、流式与请求体覆盖,事后无冷却)、cpa_hot_reload.py,以及以 v0.2.11 正式 Windows 包(SHA-256 与发布 checksums 一致)为前一版本的cpa_hot_reload.py --previous-archive,确认同一 CPA 进程内 0.2.11 → 0.2.12 热升级。 tests/cpa_store_install.py在隔离 Windows CPA v8.0.59 中通过:匿名公开源发现、Release 选包、校验安装、重启加载。当时main的registry.json仍为 0.2.11,因此该次按 0.2.11 断言,验证的是 v8.0.59 宿主的商店安装路径,不代表 v0.2.12 资产已发布。
- GitHub 已于 2026-11-02 停用
macos-14runner;PR #14 的 macOS 任务即因The configuration 'macos-14-arm64-us-default' is not supported被取消。darwin-arm64 改用macos-15,并以MACOSX_DEPLOYMENT_TARGET=14.0保持与 v0.2.11 相同的最低系统(v0.2.11 发布包 dylib 的LC_BUILD_VERSION为 minos 14.0/SDK 14.5),构建后用otool -l校验。macOS 构建只能在 CI 验证,本机未运行。 - 新增每周定时运行;最新 CPA 候选任务加跑原生管理、第二轮协议、count_tokens、思考后缀与热重载,定时运行时候选失败会使工作流失败。热升级联测的前一版本改为 v0.2.11。
- PR #15 首次 CI 中,候选任务(v8.0.59)的 e2e/可靠性/诊断通过,
cpa_native_management.py因该任务未构建本地 OAuth 辅助程序dist/commandcodebridge-login而报FileNotFoundError(测试环境缺失,非插件行为)。已在候选任务中构建该程序,并改为逐项运行全部联测、汇总失败后再退出,避免前一项失败掩盖后续结果。
- 四平台 CI(尤其
macos-15与 Linux ARM64 上的新增联测)——已在 PR 与标签 CI 中通过,见上方发版记录。 - 真实上游下的思考后缀等级效果与 count_tokens 客户端行为。
用户已授权合并 PR #12 并发版。发布任务新增标签与源码版本、同一来源提交、四平台及 CPAMP 页面一致性检查;仅在协议测试、构建和校验通过后发布 11 个资产。实际发布状态以 Release 和对应标签 CI 为准。下方“未发布”描述保留为当轮验证时的历史状态,不代表真实上游验收已经完成。本次不部署目标服务。
- PR #12 已合并,标签
v0.2.10指向71ce1a11bf8bf6491e5acf1786bc481a1969adcd。标签 CI 的 9 项任务全部通过,包括 CPA v8.0.23、四平台宿主联测、CPAMP、候选兼容、统一校验及发布。 - 公开 Release 已设为 Latest。匿名下载全部 11 个资产,逐个匹配 GitHub SHA-256;再运行
scripts/checksums.py --include-cpamp,四平台与独立页面包版本、来源提交、兼容基线及内嵌页面摘要一致。统一清单内容核验通过(Windows 本地重写产生的 CRLF 仅按行比较,保留下载原件)。 registry.json更新至 0.2.10,安装与升级文档同步;真实上游、身份共享、实际 200% zoom 与登录后官网参照仍待验证,未部署目标服务。
- 按已核实的 CommandCode 公开概览/详情截图及当前登录页调整导航、字阶、中性按钮、近直角区域和明暗主题;凭据诊断折叠,模型加入组合搜索/筛选及手机列表,模型/日志统一右侧详情,设置按任务分区。完整来源、差异及精选图片见 第三轮核对。系统字体回退,无远程字体依赖,不声称加载了 Geist 或逐像素复刻当前登录后的 Studio。
- Node 31 项通过,保留管理鉴权、证据来源/转义/延迟隔离,增加模型原索引筛选、白名单长错误、日志失败缓存、可见触发按钮焦点恢复、关闭窗口不抢新 modal 焦点、目录与测试的身份隔离、确认窗口外部关闭取消、待写/恢复结构化渲染。
- Windows Go 1.26
go test ./internal/... ./cmd/... -count=1与go vet ./internal/... ./cmd/...通过;最终 Windows amd64 动态库编译通过。实际 Windows CPA 8.0.23 加载本轮 UI,cpa_diagnostics.py与cpa_round2.py通过;后者模拟端走完有上限的 13 次协议/工具/图片传输/thinking 重放/ZDR 请求头检查,真实请求为 0。最终 UI 另验证退出清空日志、详情、目录与测试输出及重新登录。 - 五页 × 1280×900/390×844 × 明暗主题,共 20 组/40 张 before/after。最终 after 已重采,CSS 视口、编码像素、源码/动态库 SHA-256、图像哈希及最终根宽度记录在 截图清单。六张精选随仓库,其余本机
dist/round3/为忽略产物。20 个最终视图根无横向溢出。 - 浏览器另验 375px/1440px、Tab/Shift+Tab 循环、Esc/返回焦点、嵌套编辑取消、空数据/单凭据/20 凭据与 100 长模型名、导入及模拟直测。实际损坏统计文件后显示检查点恢复缺口;旧额度保持原始采集时间,未知 cap 不画比例,8400 字符错误转义且不溢出。持续待写由 Node 渲染用例覆盖,未宣称浏览器已注入该故障。插件 console errors 0。
- CSS 变量对比度计算:普通正文最低 4.80:1,状态正文最低 4.93:1,必要控件边界最低 4.12:1;保留减少动态效果规则。640×450 等效 200% CSS 重排五页无溢出;实际浏览器 200% zoom 未验证,当前浏览器能力与快捷键未成功改变缩放。
- CPAMP 未改源码/面板;使用 dbf61dd 实际 Windows 宿主核对原生额度、停用状态、最近请求、授权入口及五页 iframe。未勾记住凭证时未自动复用宿主登录,单独 Bearer 管理认证通过,已修正认证方式标签。没有点击真实官网授权。没有把本轮未重跑的 CPAMP 前端组件/生产构建记录为已通过。
- 真实 Claude/图片语义/thinking/ZDR/身份共享继续待验证;v0.2.10 未发布、未部署。 当前登录后的官网参照和实际 200% zoom 是单列的后续证据缺口。
用户明确选择:先完成本地实现,真实验收标为待验证。 第二轮没有调用真实模型,没有发布/部署;第三轮 UI 后续交付见本文顶部。
GET /models/evidence?credential_id=...和模型页选择器:模型观察绑定密钥/更新时间、代理、上游、ZDR、账户及完整模型配置。插件直测、CPA 请求分别展示;24 小时过期,旧无作用域记录不充当新证据;证据随保留日志截断而丢失。普通 403 不推断套餐拒绝,仅明确MODEL_NOT_IN_PLAN标为不在套餐,429 为临时限流,局部失败不使整张凭证失效。- 日志新增客户端/上游协议及 ZDR 请求标记。实际 CPA 会把
SourceFormat改为翻译后的插件输入,因此优先使用原始request_path识别 Responses;本地 13 请求验收对照了该字段。 - 独立变更标记保留 250ms 批量写入;额度更新只写
usage.json。每分钟检查点、格式清单、单文件损坏隔离与恢复警告;无检查点只重建该观察文件,设置/未知格式仍失败。缺失主文件可恢复检查点,部分 JSON 解码不会污染恢复值。 - 分层统计保持累计总量,近期分钟/历史 UTC 日;默认不删除日总量,非零保留天数需明确确认。查询重叠整日时返回精度提示。首次迁移、清空均保留副本;清空前检查点被移走,关闭刷盘与 epoch 回归保留。
- 采样保留缓存、错误退避、请求合并和 3 并发,周期增加 0–20% 正抖动。真实个人/组织与同账号多 key 身份未核实,因此没有跨凭据合并查询。
- Windows Go 1.26 本地测试/vet、WSL Linux race/vet 通过;Linux amd64
.so和 Windows amd64.dll构建通过。新增作用域、过期、403/429 分类、恢复/损坏/设置拒绝、缺失主文件、独立写入、检查点节流、清空失败和迁移副本回归。 - Node 管理登录/诊断/模型证据共 19 项通过:切换凭据和身份的较晚响应被丢弃、转义、来源区分、模型 403 不退出管理登录。Python/JavaScript 语法检查通过。
- Windows CPA 8.0.23 实际加载动态库运行
tests/cpa_round2.py:明确套餐拒绝、普通 403、429 再试恢复、单模型不污染凭据、多凭据隔离、换 key/换映射失效、重启恢复;损坏请求文件隔离并恢复检查点、缺检查点的额度文件单独重建、清空统计后重启不回流。 - 扩展后的真实验收脚本本身在 loopback 模拟端走完 13 次 Chat/Responses/Messages 流与非流、双协议工具往返、Messages 图片传输、thinking 签名返回/重放;逐条实际响应、插件统计、CPA usage queue 的 token 对账通过,模拟端实际收到 13 个
X-Cmd-Zdr: 1请求头。 - 原有
cpa_e2e.py的 25 次协议模拟调用、cpa_reliability.py异常/取消/超时/重启/用量对账,以及第一轮cpa_diagnostics.py均继续通过。
实际访问动态库内嵌控制台,使用两张虚构本地凭据。1280px 桌面及 375/390px 手机、明暗主题已验证:凭据证据隔离、模型 403 错误留在测试窗口且保持管理登录、保留天数确认/取消、默认永久保留保存、刷盘状态、退出登录清空模型证据。新增证据列最初在窄屏被挤成逐字竖排,已修正为可聚焦、带提示的横向滚动表格;页面整体宽度与视口一致,证据和操作列可横向查看,浏览器运行错误 0。
截图位于本机忽略目录 dist/round2/screenshots/:models-desktop.png、models-mobile-390-dark.png、models-mobile-dark.png、settings-desktop.png、settings-mobile-light.png。仅包含虚构测试数据;临时浏览器与服务已清理。旧版纯额度刷盘会把空日志序列化为 null,已增加兼容回归,不把它误报为历史损坏。
同一次 Windows Go 运行,90 天 × 2 模型 × 每分钟一条请求;固定 259,200 请求、每条 100 输入/20 输出 tokens。只对统计内存结构进行压缩前后对照,不调用上游。测量前两次 GC 排除上次 JSON 缓冲池暂留;不是生产负载与整进程内存承诺。
| 指标 | 压缩前 | 压缩后 |
|---|---|---|
| 统计桶 | 259,200 | 21,768 |
| JSON 字节 | 77,241,601 | 6,492,669 |
| 序列化耗时 | 473.612ms | 43.071ms |
| JSON 解码耗时 | 883.126ms | 100.392ms |
| 40 次统计查询 P95 | 90.065ms | 5.033ms |
| GC 后 Go HeapAlloc | 66,310,272B | 5,730,944B |
| 累计请求数 | 259,200 | 259,200 |
压缩耗时 129.314ms;JSON 缩减约 91.6%。这是可重复合成结构测量,解码耗时不是完整 CPA 启动时间。运行:BRIDGE_MEASURE=1 go test ./internal/bridge -run TestRuntimeScaleMeasurement -v -count=1。
原生 CPA + 固定模拟 SSE、每轮 32 请求、1,000 条日志缓冲的短样本对照:
| 并发 | 第一轮 requests/s / P95 | 第二轮 requests/s / P95 |
|---|---|---|
| 1 | 14.09 / 71.85ms | 14.41 / 84.68ms |
| 8 | 100.67 / 91.57ms | 104.99 / 76.43ms |
两轮均使用同机 Windows CPA v8.0.23 与相同夹具。样本小、有模拟分片等待,单并发 P95 本次变慢,多并发本次变快,不能据此宣称吞吐优化或真实推理变快。分类写入由确定性测试核实:一次纯额度变更,原逻辑写三文件,当前只写一个;检查点首次写入会额外写一次,后续一分钟内不重复刷新。无新增 SQLite/WAL 依赖。
| 组合 | 本轮状态 |
|---|---|
| Claude Messages 流/非流、工具往返 | 模拟通过;真实待验证 |
| 图片语义理解 | 本地只验证传输;真实待验证 |
| thinking 签名返回/重放 | 模拟通过;真实模型/权限待验证 |
| ZDR 参数正确发送 | 模拟端实际请求头已验证 |
| ZDR 上游接受/服务端保留策略 | 真实待验证/策略需官方依据 |
| 个人/组织身份、同账号多 key 额度与冷却归属 | 真实待验证;当前不合并采样 |
脚本支持无网络 --dry-run、最多 20 次请求/每次 8192 输出 tokens、仓库外凭据、脱敏报告和 token 对账;默认不生成。报告不含原始响应、thinking 签名或账户 ID。请求数和输出 token 上限不能直接等同费用金额。
- 新增
/diagnostics、/diagnostics/summary和/compatibility管理接口;默认只读,不发模型生成或写入探测快照。凭证保存单独返回saved与registration,会话重新分配返回host_confirmed。 - Go 回归覆盖正常/缺失/重复/旧 routing ID、启停未同步、变更待加载、宿主查询失败、文件回退未知、脱敏摘要及三类证据。CPA 的 live 文件登记也使用
source=file,以auth_index和运行 ID 区分磁盘回退;相同内容再次保存不使确认永久等待。 - Windows Go 1.26.0 全部
./internal/... ./cmd/...测试、vet 通过;最终源码在 WSL Linux 通过go test -race ./internal/... ./cmd/... -count=1和 vet,Linux amd64.so、Windows amd64.dll构建通过。 - Node 15 项管理登录与诊断回归通过,覆盖输出转义、较晚响应不能覆盖新结果、切换身份/退出登录后丢弃旧结果、401 拒绝立即清理诊断;JavaScript/Python 语法及
git diff --check通过。 - 兼容检查覆盖匹配/旧页面、支持/旧/明确不支持/类型错误的后端声明;远程目标与 HTTP 重定向不探测,不转发管理密钥。页面、后端和浏览器缓存分别报告,缺少依据时保持未知。
- CPAMP
dbf61dd适配重复应用及--check通过;TypeScript 检查、生产单文件构建、五个相关前端文件共 40 项通过。最终 Manager 后端go test ./internal/service/quotasnapshot ./internal/http/controller/health -run TestCommandCode -count=1通过,覆盖名单变更与 GET 能力/POST 405。
- Windows CPA v8.0.23 使用最终动态库通过
tests/cpa_diagnostics.py:保存、三类证据隔离、停用/启用、会话重新分配、相同内容保存、重启、脱敏摘要;移除临时夹具文件后插件仍保留凭证、宿主登记缺失,客户端返回 503 且插件无新增执行日志,恢复文件后登记和请求恢复。 - 最终
tests/cpa_hot_reload.py验证 0.2.9 → 0.2.10 同进程热升级、配置即时生效/无效配置回滚,凭证、模型、记账与请求继续保留。此轮原生协议 25 次模拟请求、异常恢复、OAuth 接收器及页面安装/备份/幂等套件亦通过;均使用本机隔离目录和虚构凭证。 - 浏览器访问最终动态库实际内嵌控制台:诊断/兼容重试、三类来源说明、脱敏摘要复制、插件直测范围提示、退出登录清除诊断通过。1280px 桌面及 375/390px 手机、明暗主题检查未见横向溢出或运行错误(console errors 0)。
- 截图保存在本机忽略目录
dist/round1/screenshots/:credentials-desktop.jpg、compatibility-desktop.jpg、compatibility-mobile-light.jpg、credentials-mobile-dark.jpg、compatibility-mobile-dark.jpg;是虚构测试数据,不是目标部署。
- 安装包清单增加共享兼容基线;临时四平台清单夹具验证一致基线通过、缺失或不一致基线被拒绝,未生成发行包。CI 保留固定 v8.0.23 门槛,新增不阻断发布的较新 CPA 候选兼容报告。该工作流尚未在远端运行,本轮不声称最新 CPA 或四平台发行验证通过。
- 本地 CPAMP 使用已有源码归档与依赖完成测试和页面构建,页面手动嵌入用于联测;嵌套源码归档不能作为发行来源证明,正式打包需要独立上游 Git checkout、来源提交及统一校验。
- v0.2.10 未发布、未更新 registry、未部署目标服务;本轮没有真实模型请求。已有真实免费模型/账户结果见历史章节,不代表 Claude、图片、ZDR 等真实验收已完成。
- 第三轮已在 NEXT_STEPS.md 明确安排:继续参照 CommandCode 官网控制台的美术风格和页面设计,另做逐页面视觉对照与响应式验收。
- 服务端将额度观察与账户标识哈希写入
data_dir/usage.json,复用异步原子落盘和关闭前最终刷新;重启后按密钥/代理/上游指纹恢复。管理接口返回脱敏额度和每个凭证最近十次实际请求,排除本地冷却跳过与旧密钥记录。 - 前端打开凭证工作区时恢复服务端缓存,页面可见时每 30 秒同步最近请求与额度,切回页面立即同步。文件更新时间变化保留额度;管理连接、凭证索引与服务端密钥版本隔离旧数据。刷新失败保留原始采集时间,读到同一旧快照不会清除失败状态。
- Go 1.26.0:Windows 全部项目测试和
go vet通过;WSL Linux 的go test -race ./internal/... ./cmd/... -count=1、go vet ./internal/... ./cmd/...通过。新增重启恢复、密钥替换、超过 24 小时的最近记录、本地跳过排除与手动刷新错误退避回归。 - CPAMP 七个相关测试文件共 121 项通过,覆盖页面重载、30 秒轮询及卸载清理、最近请求更新、网络失败保留、管理登录隔离、密钥更换、原始观察时间与旧快照失败标记;TypeScript 检查和单文件生产构建通过。适配脚本重复应用与兼容检查通过。
- 已生成并内嵌匹配的新页面,Linux amd64 动态库构建通过;发行 CI 另验证四平台原生宿主、0.2.8 → 0.2.9 热升级和统一校验。生效需同步更新插件动态库和 CPAMP 页面,并持久化插件
data_dir;本轮发布不自动部署目标服务。
- 按用户提供的官方 Pricing & Limits 核实当前 Go 10、GOAT 70、Pro 80、Max 10× 150、Max 20× 300 credits。对照官方 npm
command-code@1.81.0的getPlanTotalCredits:individual-pro是旧版 30,individual-pro-v1为新版 80;individual-max为 150,individual-ultra为 300。显示名统一为 Go、GOAT、Pro、Max,计算保留原始 ID,真实上游月 cap/比例优先。 - 月百分比仅使用
monthly_credits,购买/免费 credits 不混入;列表、详情、状态汇总和周期快照共享规则。实际 GOAT 月余额61.0826068507显示61.083 / 70 credits、剩余87%。 - 两个相关前端测试文件共 15 项通过,覆盖各套餐、旧 Pro、新 Pro、Max 两档、真实 cap 优先、缺失余额、部分失败和原生历史/快照;TypeScript 检查与单文件生产构建通过。
- Chromium 连接实际接口和部署后页面,验证表格/卡片的月额度标题及进度条与 5h 高度相同、中间边框为 0;390px 深色卡片不溢出。额度详情和概览均显示 87%,月历史采用真实 10/02–11/02 订阅周期,历史与快照读写返回 200,浏览器 runtime errors 为 0。
- 已备份并原子热替换现有外部页面,Manager Server PID 保持不变;公网根路径重定向到
/management.html,页面校验值与本地一致:cabcf28c8191c45d6b3f30ac5b2a03b6eabb924c1fe589e409f8103792c42928。本次未发付费模型请求。 - 上述为发布前的页面现场验证。v0.2.8 发行构建从当前适配源码生成并内嵌页面;旧 v0.2.7 包内仍是旧页面,应升级插件后再使用「更新原生面板」。
- 核对上游
bin/install-cpamp.sh:官方默认安装目录为${HOME}/cpa-manager-plus,活动 runtime 标记写入run.sh,配置位于 runtime 二进制目录;直接运行原生包由程序默认读取二进制旁config.json。 - 插件内置 gzip 压缩的同版本 CPAMP 页面,添加目录/配置/页面路径配置项、控制台安装和检查按钮。Linux 优先探测实际进程及必要的路径环境;否则查默认目录与活动 runtime,多实例不猜测选择。
- Go race/vet 与安装回归通过:修改路径持久化、配置其他字段保留、原文件私有备份、幂等重复安装、非法路径/符号链接拒绝、并发修改拒绝、写入失败回滚、实际 HTTP 内容检查。
- 本地真实 CPA v8.0.23 与官方 CPAMP v1.14.0 Linux 二进制隔离联测通过:运行实例探测、内置页面安装、配置备份、首次重启后 HTTP 字节一致,已有
PANEL_PATH的文件替换可立即生效。使用虚构密钥,不访问目标服务的私有数据。 - CI 先构建 pinned CPAMP 页面,再嵌入四平台插件;统一校验要求所有原生包的内置页面摘要与独立前端包一致,并随原生包附 CPAMP 许可证。
- 重新核对官方 CLI 1.79.2 的
handleBrowserCallback/handleLegacyJsonCallback:mode=redirect使用表单 POST,legacy 使用 JSON POST;凭证不在地址栏中。v0.2.3 的纯 URL 复制方案基于错误假设,先前模拟 URL 通过不能证明官网流程可用。 - 新增浏览器电脑本地接收器,监听
127.0.0.1:45879,接收官方表单/JSON POST,再生成供 CPAMP 管理 POST 提交的复制结果。表单完成页 303 跳转只带 state;结果不写日志或文件,十分钟后清除,进程最多运行十五分钟。 - 本地 Go race/vet 通过;接收器覆盖表单/JSON、CORS/PNA、state/有效期/重复字段/重放、拒绝、DNS rebinding 和裸 GET。真实 Linux CPA v8.0.23 验证「官方表单格式 → 实际本地接收器 → 受保护管理接口 → CPA 凭证保存及重启恢复」,使用虚构凭证和本地上游。
- CPAMP 五个相关测试文件共 27 项通过,类型检查及单文件生产构建通过;原生卡片显示接收器说明、「认证结果」输入框和「打开本地接收器」入口。额度组件和真实字段规则保持原有实现。
- 只读检查目标
https://cpa.gdp.pw/management.html,仍缺少原生额度与回调标记。用户确认 Manager Server 直接运行二进制;补充启动环境PANEL_PATH、文件权限、内置页面回退行为与实际 HTTP 内容检查脚本。 - 发布产物包含四平台接收器与页面检查脚本,CI 在四平台运行本地接收器到 CPA 的联测并验证包内校验。真实官网登录与目标面板安装仍由用户现场验收,未修改目标服务。
- Linux amd64 的真实 CPA v8.0.23 加载插件:
commandcode-auth-url成功、pending 轮询、受保护手动完成、官方 redirect 形状回调、CPA 保存 auth-dir、重启加载均通过;未使用真实账号或付费请求。 /quota/providers正确发现 CommandCode;/quota/fetch返回套餐、45 credits 总余额、40 credits 月余额、10 credits 本期月用量、5 小时 60% 和周 70% 余量。上游未提供月 cap 时不产生月百分比。- Go race / vet、原有 25 次原生协议生成、异常恢复套件通过;新增登录有效期、state 重放、拒绝、无效 key 脱敏、公开地址、额度失败/部分失败与未知字段回归。
- 11 项浏览器管理登录存储测试通过,新增登录页脚本语法检查通过。
- CPAMP 源码基线
dbf61ddf438f399558722df3467355c42af9005d的原生卡片、列表与详情页补丁已完成 TypeScript 类型检查、生产单文件构建;11 项卡片、OAuth URL 及原有详情/API 回归测试通过。 - 浏览器登录隔离 CPA 面板,实测原生列表刷新返回 pro、45/40 credits、5 小时 60%、周 70%、真实重置日期和「月上限未知」;切换卡片视图复用本次观察。修正列表刷新按钮嵌入详情触发按钮的问题。详情额度组件已通过测试;浏览器连接恢复被安全策略拦截,未完成详情页截图验证。
- 发布前复核已修复 Windows CI 原生测试退出码未检查,以及套餐名缺失时缓存套餐被发布为新观察的问题;补充缺少 planId 的上游回归。四个平台和面板的发布构建由 GitHub Actions 执行,统一校验五个安装包及来源提交。
- 此轮未部署目标 CPAMP,未完成真实 CommandCode 网站授权。当前 CPAMP 需要前端补丁才能显示插件额度,不能把 CPA 额度接口已实现等同于线上面板已更新。
- 参考指定官方用量页公开的工作台组件、CSS 变量和 SVG 图标;未认证访问返回登录页,未读取用户的官方账户数据。
- Chromium 使用当前源码内嵌的 HTML/CSS/JS 与本地虚构 API 数据,验证登录/刷新恢复、健康度、月额度、账号切换/编辑/停用状态、日志展开/搜索/筛选、主题、模型别名/导入、设置保存和自定义统计时间。
- 5 个页面在 11 种宽度(375–1440px)完成 55 组检查,页面无横向溢出或脚本错误;桌面侧栏收起、手机导航抽屉及 Escape 关闭通过。
node --check internal/bridge/ui/console.js、10 个登录适配测试通过;查看明暗主题、概览、用量、日志和手机截图后调整数字排版。- 本轮仅调整 UI 资源。本机 WSL 调用无响应,已取消本轮动态库重编译;下节原生宿主与 Go 验证结果属于上一轮功能实现,不代表本次布局已重新完成原生宿主联测。
- Go 竞态测试与
go vet通过;新增健康状态、同账号模型冷却、旧密钥记录隔离、默认别名和月度字段解析回归场景。 - 10 个 CPA/CPAMP 登录适配测试通过,控制台脚本语法检查通过。
- WSL Linux amd64 的 CPA v8.0.23 加载本轮本地动态库,完成 25 次模拟成功请求及 401/403 场景;确认新别名、真实字段月消耗、健康状态及内嵌 CSS/JS/SVG 资源。
- 异常恢复套件通过:429/别名/同账号冷却、503 换号、SSE 中断、超时、取消、重启持久化和记账。
- Chromium 验证控制台登录、3 类凭证状态、月额度显示、日志展开与失败筛选、官方图标、别名自动填写/自定义保留、明暗主题及 390px 手机布局,无脚本错误或页面横向溢出。
- 新增月窗口与健康度的本轮运行使用虚构 key 和本地模拟上游;真实账户字段参考此前脱敏响应,未进行付费生成。
- 2026-10-11 创建私有仓库
Gaoshou101/CommandCodeBridge。 - 初始提交:
9a43db5,版本 0.1.0,C ABI 1 / RPC schema 6。 - 基线通过 Go 竞态检查、go vet、10 个登录适配测试,以及 Linux/Windows CPA v8.0.23 的 25 次成功模拟请求和 401/403 场景。
- 初次 GitHub Actions:运行
38102314575全部成功,完成 Linux amd64/arm64、Windows amd64、macOS arm64 构建。此轮 ARM64/macOS 只构建,尚未在该轮运行宿主联测。 - 后续 CI 38103638587 全部成功:Go 竞态检查、go vet、10 个登录测试,及 Linux amd64/arm64、Windows amd64、macOS arm64 的 CPA v8.0.23 原生宿主集成与异常恢复测试。四个平台均已完成实际宿主加载与调用。
- 四平台 ZIP 的 SHA256、
BUILD.json动态库校验、干净构建状态及来源提交已核验;此轮两个 Linux 包的 glibc 最低要求均为 2.34。正式发布使用主分支 CI 产物,并再次核对版本及来源提交。
- 只读身份、余额、套餐、5 小时/周窗口、到期时间及请求数已验证;公开模型目录返回 87 个模型。
- 真实用量汇总字段为
totalCount。插件已修正,并兼容较旧的totalRequests;匿名字段样本位于internal/bridge/testdata/account-summary.json。 - 当前验证账户套餐为
individual-goat;GPT-5.4 Mini 和 Claude Haiku 4.5 返回明确的MODEL_NOT_IN_PLAN,目录可见不能视为账号可用。 - 免费模型
inclusionai/ling-3.1-flash:free已在 Windows CPA v8.0.23 完成 6 次真实请求:Chat/Responses 流与非流,以及工具调用和结果回传。共 864 tokens,插件与 CPA 的实际 usage 一致。 - Claude 原生 Messages、思考签名、图片和 ZDR 的真实验证仍待具备对应权限/能力的模型;已有模拟覆盖不代表真实验证。
- 免费模型曾触发 429;后续联测应遵守上游冷却,避免快速重复启动整套生成测试。
- 本机 Python 使用现有 Windows 系统代理,隔离 CPA 需明确设置全局代理。真实测试脚本提供
--system-proxy,将该设置仅应用于测试 CPA。 - 真实 key 和原始账户响应保存在仓库之外,源码与模拟夹具不含该 key。
tests/cpa_reliability.py 通过实际动态库和官方 CPA 宿主验证:
- 429 / Retry-After、同模型别名共享冷却、同账号多 key 共享冷却、到期恢复。
- 503 在多个凭据间切换;不完整 SSE 的非流式错误与流式中途错误。
- 请求超时与客户端取消后释放上游连接。
- 会话重新分配、停用和备注在宿主重启后保留。
- 模型映射、日志与统计在重启后恢复,恢复后的请求正常记账。
所有异常测试使用本地模拟上游和虚构凭据。
CPA 的失败队列按上游尝试记录;503 换号可能产生多条失败记录。新增断言按实际尝试数核对,未报告 usage 的失败不得虚构 tokens。
原实现每次记录都在服务锁内序列化并写入日志/统计 JSON。当前实现:
- 单个写入任务每 250ms 合并一次变更,无逐请求写入队列。
- 在锁内取得快照,序列化和磁盘写入在服务锁外完成。
- 写入失败保留待写状态并重试,管理状态返回
storage_error与storage_pending。 - 正常卸载先等待活动请求完成,再执行最终刷盘。
- 统计清空与磁盘快照串行,旧快照不能覆盖清空结果;旧请求的日志保留,计数按统计 epoch 处理。
正常刷新间隔为 250ms;强制结束进程或断电可能丢失尚未写入的记录。磁盘故障时不能保证这一时间窗口,错误状态会保留。双 JSON 文件不是跨文件事务。
WSL Linux amd64,Go 1.27.2,i5-12600KF,完整保留缓存,每组 1 秒:
| 日志保留量 | 原实现 | 批量写入 |
|---|---|---|
| 1,000 | 2.820ms/op,约 2.10MB 分配/op | 0.522µs/op,约 1.15KB 分配/op |
| 10,000 | 22.853ms/op,约 17.78MB 分配/op | 0.769µs/op,约 1.79KB 分配/op |
这是前台记录调用的开销;新实现将序列化与 IO 转移至后台,不能将此倍率直接当作端到端吞吐提升。
tests/cpa_benchmark.py --requests 64,同一机器、默认保留 1,000 条,模拟 SSE 固定分片延迟,监听队列 128:
| 并发 | 原请求/秒 | 新请求/秒 | 原 P95 | 新 P95 | 原磁盘写入 | 新磁盘写入 |
|---|---|---|---|---|---|---|
| 1 | 18.42 | 20.04 | 57.34ms | 50.87ms | 39.54MB | 8.66MB |
| 8 | 98.62 | 138.68 | 100.22ms | 60.52ms | 39.54MB | 1.86MB |
| 32 | 130.95 | 212.41 | 281.01ms | 182.21ms | 39.54MB | 1.25MB |
短时模拟结果用于比较两种持久化方案,不代表真实 CommandCode 的速度或生产环境容量。
go test -race ./...
go vet ./...
node --test tests/cpa-auth.test.cjs
CPA_BINARY=/path/to/cli-proxy-api python3 tests/cpa_e2e.py
CPA_BINARY=/path/to/cli-proxy-api python3 tests/cpa_native_management.py
CPA_BINARY=/path/to/cli-proxy-api python3 tests/cpa_reliability.py
CPA_BINARY=/path/to/cli-proxy-api python3 tests/cpa_benchmark.py --requests 64
go test ./internal/bridge -run '^$' -bench BenchmarkRecordAtRetention -benchmemWindows 设置 BRIDGE_LIBRARY 为实际 .dll;macOS 设置为 .dylib。真实测试默认只读,必须显式提供仓库外的凭据文件;--generate 才启用少量真实请求,永不进入 CI。
- 原生额度前端 28 项回归、TypeScript 检查与单文件生产构建通过;浏览器验证左侧 5h / 周额度、右侧月额度布局,含月比例未知状态、深浅主题及 375px 无横向溢出。
- Go race、vet 与 11 项登录适配测试通过。
- 在隔离 Linux CPA v8.0.23 中,控制台保存设置即生效;无效值被拒绝且磁盘及运行设置保持原值;宿主配置 PATCH 触发
plugin.reconfigure,保留已保存的请求设置与模型。 - 使用已发布 v0.2.6 动态库启动,发布新版本化文件并切换至本地 v0.2.7,CPA PID 未变;版本确认后凭证、模型、已记录日志和请求统计保留,新请求继续成功。未调用真实模型。
- 真实 CPAMP v1.14.0 的配置文件模式和环境变量模式均通过:首次启用外部面板需要重启一次,随后 JSON
panelPath和环境变量PANEL_PATH原路径更新均即时返回新页面,Manager PID 未变、其他配置保持原值。 - 上述测试只操作本机临时夹具;未部署或重启目标服务器。
目标 CPAMP https://cpa.gdp.pw/ 页面可访问,当前页面要求 Manager Server 管理员密钥,它与 CPA Management Key 不同。服务器部署与重启由用户维护。
- 通过用户指定的 1Password RSA SSH 密钥只读核实实际进程、环境中的路径设置、凭证元数据和原生 Provider 登记。CPAMP v1.13.1 的环境变量模式没有默认
config.json;已安装 v0.2.5 因强制读取此文件误报「未找到同机 CPAMP」。 - 公网与两处本机面板返回相同 SHA256,均缺少 CommandCode 原生额度/回调组件。已确认原生凭证与 Provider 存在,不能将显示缺失归因于凭证不存在。
- 本地新增进程夹具覆盖缺失配置、仅数据库路径时阻止不安全的配置创建、已有 PANEL_PATH、配置损坏、准备期间快照变化、新文件原子无覆盖创建、写入失败回滚与匿名 HTTP 页面诊断。Go race、vet、JavaScript 语法和 diff 格式检查通过。
- 使用真实 CPA v8.0.23 与校验过官方安装包的 CPAMP v1.13.1/v1.14.0,在本机隔离临时目录中通过
tests/cpamp_native_panel.py --environment-only:只读探测不创建配置;安装创建最小配置;临时 Manager 重启后返回与内置页面字节相同的原生面板;已有 PANEL_PATH 更新无需重启。v1.14.0 既有配置文件模式也通过。 - 服务器二进制复制因 SSH 超时未完成;版本复现使用官方 v1.13.1 Release,不声称与现场自定义二进制完全相同。本次未重启线上服务、未修改远端文件,修复随 v0.2.6 发布,线上部署由维护者安排。详情见部署诊断。
- 2026-10-11 按用户要求将仓库改为公开,匿名读取仓库、latest Release 和
checksums.txt通过。 - CPA v8.0.23 要求 ZIP 名称为
<插件ID>_<版本>_<GOOS>_<GOARCH>.zip,且 Release 必须含统一checksums.txt。v0.1.0 新增四平台兼容命名别名,与原发布 ZIP 字节一致;九个新增资产的 GitHub SHA256 与本地值一致。 - 提供公开
registry.json,通过plugins.store-sources加入自定义插件源。当前未登记至官方商店。 - CI 38113046358 通过四平台构建/宿主联测及统一校验文件生成。
tests/cpa_store_install.py在隔离 Windows CPA v8.0.23 中通过:公开源发现、匿名 Release 获取、选包、校验安装、配置登记、重启后加载和插件状态确认。测试移除 GitHub Token 环境设置,仅使用虚构 CPA 管理密钥,未发模型请求。- GitHub 安装器只写入动态库;目标主机的持久化目录、CPAMP 代理及真实凭据仍由用户安装后验收。
- 更正:此版本只模拟 URL 查询参数回调,未覆盖官网实际 POST 正文。地址栏复制方案不完整,已由 v0.2.4 的本地接收器补齐。
- 用户截图确认官网拒绝远程公开域名 callback;官方 CLI 1.79.2 使用 loopback
/callback和mode=redirect。 - 对照 CPAMP Codex/Claude 的原生回调提交与当前 CPA
oauth_callback.go:通用接口只读取code/state/error,不会交付 CommandCode 的apiKey。新面板复用原生卡片、请求作用域和状态轮询,经插件管理 POST 提交完整 URL 与当前 state。 - 本地 Go race/vet、原生 CPA v8.0.23 登录/额度/协议/异常恢复测试通过。远程提交验证管理鉴权、错误 state、重复提交、取消、凭证重启持久化和日志脱敏。前端新增原生卡片交互与接口回归测试。
- 自动化使用虚构凭证与本地上游,不访问用户账户,不修改目标 CPAMP。用户真实官网授权及现场代理验收待升级后测试。