@lqc123qwe/car-runtime 1.18.0 → 1.18.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -286,8 +286,10 @@ node --experimental-transform-types --test test/*.spec.ts
286
286
 
287
287
  ## 状态
288
288
 
289
- - **版本主线**:S1-S4 48/48 | M2 89/89(v0.2.0)| M3 127/127(v0.3.0)| M4 139/139(**1.0.0-rc.1 已发布**)| M5 156/156(DEC-4 预埋项转正)| M6 179/179(2026-09-15 收口)| M7 全量 195(192 PASS + 3 能力门控 skip,2026-09-19 收口)| **M5-S28 装载签名门 全量 204(201 PASS + 3 skip,2026-09-26)** | **M8 运行时底座 全量 231(228 PASS + 3 skip,2026-09-26 收口,§3.2 八模块全部收口)** | **1.1 签名收尾最小集 全量 249(246 PASS + 3 skip,2026-09-27 收口,1.1.0 已发布,enforce 翻转准备就绪)** | **1.2 会话/遥测小项 全量 263(260 PASS + 3 skip,2026-09-27 收口,1.2.0 已发布)** | **1.3 发布资产自动化 全量 270(267 PASS + 3 skip,2026-09-27 收口,1.3.0 已发布,全链零人工拖拽兑现)** | **1.4 真实模型接入 全量 282(279 PASS + 3 skip,2026-09-27 收口,1.4.0 已发布)** | **1.5 provider 扩展+远程 MCP+配置完整形态 全量 300(297 PASS + 3 skip,2026-09-28 收口,1.5.0 已发布)** | **1.6 宿主工具面+投影收敛+jiti 载体 全量 318(315 PASS + 3 skip,2026-09-28 收口,1.6.0 已发布)** | **1.7 OTLP span 语义收口+metrics 时序修正+mcp-serve span 面 全量 328(325 PASS + 3 skip,2026-09-28 收口,1.7.0 已发布)** | **1.8 W3C traceparent 跨进程传播+LLM 出站通道修复 全量 335(332 PASS + 3 skip,2026-09-29 收口,1.8.0 已发布)** | **1.9 远程 MCP traceparent 传播(HTTP 头通道) 全量 339(336 PASS + 3 skip,2026-09-29 收口,1.9.0 已发布)** | **1.10 KernelSeam 公开导出面+库构建产物 全量 341(338 PASS + 3 skip,2026-09-29 收口,1.10.0 已发布)** | **1.11 seam authz 导出+usage 事件计量采集 全量 355(352 PASS + 3 skip,2026-10-07 收口,1.11.0 已发布)** | **1.12 seam MCP/PTC 真桥导出面+jiti epoch 面确认 全量 363(360 PASS + 3 skip,2026-10-07 收口,1.12.0 已发布)** | **1.13 桌面 S3 治理面(K-FS-1/2/3+K-SC-1 authorizeAll/decideByRule/fs-read·fs-delete 能力 + seam 出面 redact/loadSessionLog/exportForensicsBundle;恢复面 K-S3-2 零登记确认——fromEvents 自 M5 在产) 全量 374(371 PASS + 3 skip,2026-10-11 收口,1.13.0 已发布)** | **1.14 模型参数/压缩/分段/模型池/PluginManager 五候选(K-MP-1 reasoning 透传 + K-MP-2 压缩面 append-only context/compact + K-MP-2b 分段计量 + K-POOL-1 模型池 routing/decide 落链 + K-S4-1 seam 出面装载报告面;D-43 裁决登记 strict 期限不引入 sigstore——engines 硬不兼容见评估报告) 全量 419(416 PASS + 3 skip,2026-10-18 收口,1.14.0 已发布)** | **1.14.1 B2 前置消费面(ChatStepOptions.reasoning 透传 + shouldCompact/applyCompaction + assembleModelPool/probePoolMember 出面,seam 35→39 符号) 全量 423(420 PASS + 3 skip,2026-10-18,1.14.1 已发布)** | **1.15 白盒记忆+引导消息双候选(K-MEM-1 记忆 CRUD 落链 + 链即版本库 rollback + 注入装载预算门控 + K-STEER-1 投影隔离 + pendingSteerTurns 排队扫描;seam 39→42 符号) 全量 439(438 PASS + 1 skip,2026-10-19 收口,1.15.0 已发布)** | **1.16 子 Agent config schema(D-K2-2:llm.subagent 三键 model/maxConcurrent/maxCumulative 嵌套 strict zod——compaction 先例;空对象拒禁静默 no-op + 未登记键 CAR-E-CONFIG 带路径;SubagentConfig 类型面、运行时符号 43 零加法;D-1 KEY_SPACES 误写 llm.modelPool.* 勘误闭环) 全量 446(443 PASS + 3 skip,2026-10-24 收口,1.16.0 已发布)** | **1.17 缓存断点 P1 + 闸门熔断(D-48 toAnthropic system 单块 + cache_control ephemeral 传输层注解〔N1 零影响〕,off = CAR_LLM_PROMPT_CACHE=off / --no-prompt-cache;D-50 G8 denyBreaker=3 拒绝累计熔断 + G9 repeatFailureBreaker=2 同签名连击不派发成对落链 + V2-a blockOnDeny 随档位收敛〔readonly 恒 true〕;D-49 观察项 s50-11 长会话端到端触发证据;TurnPreset 可选键类型面,运行时符号 43 零加法) 全量 457(454 PASS + 3 skip,2026-10-24 收口,1.17.0 已发布)**
290
- - **1.17.0 已发布(2026-10-24,K4 批——缓存断点 P1 + 闸门 G8/G9/G10)**:npm latest → 1.17.0 + provenance 在案。Release `1.17.0`(id 422609668,target_commitish = `4594857` 完整 SHA)→ j16 run 40078304990 success(13 步)→ ci success。**通道注记**:github.com:443 直连再度阻断——push 走 Git Data API 逐字节复刻(`tools/gitdata-push.mjs`;本地以 commit-tree 无尾换行形态对齐,双仓零分叉 IDENTICAL)。post-publish:registry src 面 53 文件 blob SHA 与 tag 树全一致;dist/seam.js 43 符号零 subagent 面;G8 于 registry dist 实探生效(blocked + gate=denyBreaker + denies=3);llm.subagent 实解析;tarball CDN 滞后 ~3 分钟(元数据先行,二进制 404→200)。
289
+ - **版本主线**:S1-S4 48/48 | M2 89/89(v0.2.0)| M3 127/127(v0.3.0)| M4 139/139(**1.0.0-rc.1 已发布**)| M5 156/156(DEC-4 预埋项转正)| M6 179/179(2026-09-15 收口)| M7 全量 195(192 PASS + 3 能力门控 skip,2026-09-19 收口)| **M5-S28 装载签名门 全量 204(201 PASS + 3 skip,2026-09-26)** | **M8 运行时底座 全量 231(228 PASS + 3 skip,2026-09-26 收口,§3.2 八模块全部收口)** | **1.1 签名收尾最小集 全量 249(246 PASS + 3 skip,2026-09-27 收口,1.1.0 已发布,enforce 翻转准备就绪)** | **1.2 会话/遥测小项 全量 263(260 PASS + 3 skip,2026-09-27 收口,1.2.0 已发布)** | **1.3 发布资产自动化 全量 270(267 PASS + 3 skip,2026-09-27 收口,1.3.0 已发布,全链零人工拖拽兑现)** | **1.4 真实模型接入 全量 282(279 PASS + 3 skip,2026-09-27 收口,1.4.0 已发布)** | **1.5 provider 扩展+远程 MCP+配置完整形态 全量 300(297 PASS + 3 skip,2026-09-28 收口,1.5.0 已发布)** | **1.6 宿主工具面+投影收敛+jiti 载体 全量 318(315 PASS + 3 skip,2026-09-28 收口,1.6.0 已发布)** | **1.7 OTLP span 语义收口+metrics 时序修正+mcp-serve span 面 全量 328(325 PASS + 3 skip,2026-09-28 收口,1.7.0 已发布)** | **1.8 W3C traceparent 跨进程传播+LLM 出站通道修复 全量 335(332 PASS + 3 skip,2026-09-29 收口,1.8.0 已发布)** | **1.9 远程 MCP traceparent 传播(HTTP 头通道) 全量 339(336 PASS + 3 skip,2026-09-29 收口,1.9.0 已发布)** | **1.10 KernelSeam 公开导出面+库构建产物 全量 341(338 PASS + 3 skip,2026-09-29 收口,1.10.0 已发布)** | **1.11 seam authz 导出+usage 事件计量采集 全量 355(352 PASS + 3 skip,2026-10-07 收口,1.11.0 已发布)** | **1.12 seam MCP/PTC 真桥导出面+jiti epoch 面确认 全量 363(360 PASS + 3 skip,2026-10-07 收口,1.12.0 已发布)** | **1.13 桌面 S3 治理面(K-FS-1/2/3+K-SC-1 authorizeAll/decideByRule/fs-read·fs-delete 能力 + seam 出面 redact/loadSessionLog/exportForensicsBundle;恢复面 K-S3-2 零登记确认——fromEvents 自 M5 在产) 全量 374(371 PASS + 3 skip,2026-10-11 收口,1.13.0 已发布)** | **1.14 模型参数/压缩/分段/模型池/PluginManager 五候选(K-MP-1 reasoning 透传 + K-MP-2 压缩面 append-only context/compact + K-MP-2b 分段计量 + K-POOL-1 模型池 routing/decide 落链 + K-S4-1 seam 出面装载报告面;D-43 裁决登记 strict 期限不引入 sigstore——engines 硬不兼容见评估报告) 全量 419(416 PASS + 3 skip,2026-10-18 收口,1.14.0 已发布)** | **1.14.1 B2 前置消费面(ChatStepOptions.reasoning 透传 + shouldCompact/applyCompaction + assembleModelPool/probePoolMember 出面,seam 35→39 符号) 全量 423(420 PASS + 3 skip,2026-10-18,1.14.1 已发布)** | **1.15 白盒记忆+引导消息双候选(K-MEM-1 记忆 CRUD 落链 + 链即版本库 rollback + 注入装载预算门控 + K-STEER-1 投影隔离 + pendingSteerTurns 排队扫描;seam 39→42 符号) 全量 439(438 PASS + 1 skip,2026-10-19 收口,1.15.0 已发布)** | **1.16 子 Agent config schema(D-K2-2:llm.subagent 三键 model/maxConcurrent/maxCumulative 嵌套 strict zod——compaction 先例;空对象拒禁静默 no-op + 未登记键 CAR-E-CONFIG 带路径;SubagentConfig 类型面、运行时符号 43 零加法;D-1 KEY_SPACES 误写 llm.modelPool.* 勘误闭环) 全量 446(443 PASS + 3 skip,2026-10-24 收口,1.16.0 已发布)** | **1.17 缓存断点 P1 + 闸门熔断(D-48 toAnthropic system 单块 + cache_control ephemeral 传输层注解〔N1 零影响〕,off = CAR_LLM_PROMPT_CACHE=off / --no-prompt-cache;D-50 G8 denyBreaker=3 拒绝累计熔断 + G9 repeatFailureBreaker=2 同签名连击不派发成对落链 + V2-a blockOnDeny 随档位收敛〔readonly 恒 true〕;D-49 观察项 s50-11 长会话端到端触发证据;TurnPreset 可选键类型面,运行时符号 43 零加法) 全量 457(454 PASS + 3 skip,2026-10-24 收口,1.17.0 已发布)** | **1.18 压缩 token 维度(D-51 CompactionConfig.thresholdTokens——事件阈值 OR token 阈值,事实源 = 链上最近一条 usage 的 input+cacheRead+cacheCreation〔provider 报告全上下文,禁 tokenizer 估算〕;缺省缺席零变化;K2 子链独立 SessionLog 实核无污染;s62 10/10)+ T-K5-1 网关缓存探针(tools/cache-probe.mjs 四槽位实测全 B——cache 字段整体缺席,P2 滚动断点在本网关判死登记)+ s59 存量 secrets fixture 修复(K4 ci j01 假绿纠错) 全量 468(465 PASS + 3 skip,2026-10-24 收口,1.18.0 已发布)** | **1.18.1 K6-A 网关形态 usage 归一化修复(商汤网关〔装机会话 19/19 usage 事件实证〕把 input 侧三键放 message_delta.usage 而 message_start 常为 0——归一化漏读致三键系统性归零,D-51 thresholdTokens 事实源恒 0 永不触发 + 真实缓存命中不可见;判别式 = delta 携带任一 input 侧键即整体取 delta 单一来源,不混取不估算;官方形态回归不变 + output 侧守卫不变;s63 5/5——fixture 数字取自真实会话 providerRaw) 全量 473(470 PASS + 3 skip,2026-10-25 收口,1.18.1 已发布)**
290
+ - **1.18.1 已发布(2026-10-25,K6 批——1.16 设计 future 项核查翻案承接)**:npm latest → 1.18.1。Release `1.18.1`(id 423186404,**裸 tag 形态 D-14**——首建误用 v 前缀致 j16 attempt1 步 9 `gh release upload` release not found,tag 改名后 rerun 复绿)→ j16 run 40168898760 attempt2 success(五件套资产在位)→ ci success(e2881e6 双 run:40169041361 / 40168898601)。**通道注记**:github.com:443 仍断——API 复刻推送(fix `d7855e3d` + bump `e2881e6`,blob/tree 全 MATCH 零差异;commit SHA 与本地异——API date 规范化疑点两轮 commit-tree 逆推未逐字节命中,**内容等价登记已知分叉**,等直连恢复 fetch+reset 一步收口)。**K6-B P2 翻案定案**:探针升级双口径(归一化 + providerRaw.messageDelta 原始层)四槽位复测——**glm-5.2 读侧命中 1920**(c1 全价 2010 = c2 增量 90 + 命中 1920 数字自洽)+ **sensenova 命中 1024** = VERDICT **A:网关兑现 cache_control 断点,P2 滚动断点从判死转重开评估**(1.16 设计 §3.3 分期门槛达成);kimi-k3/deepseek-flash 当次 AL-05 流错误(非缓存证据,形态记录);**1.18.0 条目 T-K5-1 判死依据修正**——「cache 字段整体缺席」实为归一化漏读(判据停留在归一化层未核 providerRaw 原始层),判死结论撤销、以本批 A 槽位证据为准。K6-A 修复真值验证 = 同探针归一化层出真值(cacheRead 1920/1024 与 delta 一致——昨日同探针该层恒 0)。
291
+ - **1.18.0 已发布(2026-10-24,K5 批——K4 future 承接:D-51 token 维度 + P1 实测收尾)**:npm latest → 1.18.0。Release `1.18.0`(id 422638407,target_commitish = `d1ba895` 完整 SHA)→ j16 run 40082456464 success → **ci 复绿**(d1ba895 双 ci run success——40082456078/40082404597)。**通道注记**:github.com:443 再断——Git Data API 复刻 + commit-tree 无尾换行对齐(feat `7dc492a` + bump `d1ba895` 双提交 IDENTICAL 零分叉)。post-publish:registry src 面 53 文件与 tag 树零差异;dist 类型面 thresholdTokens 在位(compact.d.ts/config.d.ts)+ 运行时实探(token 装甲 true / 缺省惰性 false / 裸 input 口径 true)。**T-K5-1 实测**:商汤网关四槽位(glm-5.2/kimi-k3/deepseek-flash/sensenova-6.8-flash-lite)cacheRead/cacheCreation 双零 + message_start 无缓存字段——P2 滚动断点判死(V3 全量块化未执行,门条件 B),P1 保留无害;网关升级回执缓存字段时以同探针复测重开。**存量纠错**:1.17.0 的 ci 实为 failure(j01,s59:175 fixture 'test-key-123' 恰 12 字符命中 generic-secret-assign;行内 process.env 无后缀点不满足豁免)——K4 收口「ci success」为 j16 release 绿的误记,本批修复后复绿。桌面 K5-C 已随批接线(thresholdTokens 缺省 = 窗口×0.78 对齐 ctx-pop 黄线)。
292
+ - **1.17.0 已发布(2026-10-24,K4 批——缓存断点 P1 + 闸门 G8/G9/G10)**:npm latest → 1.17.0 + provenance 在案。Release `1.17.0`(id 422609668,target_commitish = `4594857` 完整 SHA)→ j16 run 40078304990 success(13 步)→ ci success(**2026-10-24 勘误:此记有误——j01-lint-scan-build 实为 failure〔s59 secrets fixture〕,见 1.18.0 条目;K5 批修复**)。**通道注记**:github.com:443 直连再度阻断——push 走 Git Data API 逐字节复刻(`tools/gitdata-push.mjs`;本地以 commit-tree 无尾换行形态对齐,双仓零分叉 IDENTICAL)。post-publish:registry src 面 53 文件 blob SHA 与 tag 树全一致;dist/seam.js 43 符号零 subagent 面;G8 于 registry dist 实探生效(blocked + gate=denyBreaker + denies=3);llm.subagent 实解析;tarball CDN 滞后 ~3 分钟(元数据先行,二进制 404→200)。
291
293
  - **1.16.0 已发布(2026-10-24,K3 批——子 Agent config schema,D-K2-2 触发)**:npm latest → 1.16.0 + SLSA provenance 在案。Release `1.16.0`(id 422584868,target_commitish = `c8f6476` 完整 SHA)→ j16 run 40074395764 全 13 步 success(五件套上传齐:tgz + sig.bundle + SHA256SUMS + sbom + release-audit)→ ci success。post-publish 对拍:registry 包 src 面 53 文件与 tag 树逐字节一致(common 55 文件全同,含 package.json/README);registry dist/seam.js 43 运行时符号零 subagent 面 + `llm.subagent.model` 实解析生效(本地 dist 探针);本地 release-pipeline 预演 11 PASS / 2 DRY-RUN / 0 FAIL(干净 env——会话凭据 env 残留会使内嵌全量假红,既知纪律)。s58 5/5 + 全量 446(443 pass / 0 fail / 3 skip zstd 能力门控)。桌面消费批 K3-C 已随批落地(car-desktop `ec5d356`:SubagentManager 三键消费 + 池/端点压过口径 + k2 spec 13/13 + SMOKE seam 1.16.0)。
292
294
  - **1.15 状态(白盒记忆 + 引导消息双候选,桌面 v0.2-B3 批)**:S1 K-MEM-1(`be08c3e`)+ S2 K-STEER-1(`2f1a466`)+ S3 seam 出面(39→42 运行时符号:+MemoryStore/+loadMemoryForInjection/+pendingSteerTurns + 5 类型;负面清单:存储引擎内部件/注入落链执行器/消费调度器不出面);dist 重建 s44 检查绿;规划与执行注记:`car-docs/10-内核v1/1.15-迭代规划.md`(D-46/D-47/D-48)。
293
295
  - **1.14.0 正式发布(2026-10-18,桌面 v0.2-B1 批)**:npm `@lqc123qwe/car-runtime@1.14.0` 在架——**dist-tags latest → 1.14.0 + SLSA provenance 在案**(npm transparency log 3308759260)。Release `1.14.0`(id 416323415,target_commitish=完整 SHA `92a35904c5179a99cdb69d82542953f82fb920ba`;main 推送**首次直连通道**——90c653c→92a3590 共 13 commits,WorkBuddy 沙箱代理 502 根因落档后直连常态化,Git Data API 复刻通道退役为应急预案)→ **j16 run 全 13 步 success**(cosign keyless OIDC+Rekor:tgz bundle logIndex 3308757191)→ **post-publish REMOTE_CHECK 13 PASS / 0 DRY-RUN / 0 FAIL**(G-09 npm 在架 latest + SLSA provenance ✓ / G-10 Release 五件套齐备 / G-04 audit 0);外部等价检查:Release 实下载件 SHA256 MATCH(cb43ec0b9b1f7ad4…)+ cosign verify-blob **Verified OK**(Fulcio + Rekor tlog)+ registry tarball ↔ tag 树 src 面逐字节一致(51 文件)+ dist 面语义等价(去引号逐字节一致——CI `npx -y -p typescript` 未钉版引号发射差异,登记非偏差)+ dist/seam.js 35 符号在库 ✓。seam 32→35 运行时符号(+8 类型)。
package/dist/SHA256SUMS CHANGED
@@ -1 +1 @@
1
- 0a4e4ecf1ec5249bb7a121a288bb9739fa1261385debca722ba52167c751981a car-runtime-1.18.0.tgz
1
+ bb0fc0e280d3d818d9632f36eb755ec01072896855e29be01744e49e391d889e car-runtime-1.18.2.tgz
Binary file
@@ -0,0 +1 @@
1
+ {"base64Signature":"MEYCIQCAI26VV32rg4QHnOWZr1ghOdrdbOmOpoV43GQODRDZkgIhAOIaFsTy+ooR6F2HuXsOS0W0V4tYoXFTjfBcVJrLqb5H","cert":"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUc2VENDQm02Z0F3SUJBZ0lVRkdoL0hYbS9sbXM0ZlRJZ0hRN2xaL1lBWXRJd0NnWUlLb1pJemowRUF3TXcKTnpFVk1CTUdBMVVFQ2hNTWMybG5jM1J2Y21VdVpHVjJNUjR3SEFZRFZRUURFeFZ6YVdkemRHOXlaUzFwYm5SbApjbTFsWkdsaGRHVXdIaGNOTWpZeE1ESTFNRGd5TkRJeFdoY05Nall4TURJMU1EZ3pOREl4V2pBQU1Ga3dFd1lICktvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVHd2tjQnNDdHlMRlVUekVpaTNodG9OajVrNmJrQ3VhQndpR3oKWUl0S0VxUU56bmRHUG0rRXhRVWkrT3dDekc2MG5xOFhZS0ExcHhqbGVOMFNla01nN2FPQ0JZMHdnZ1dKTUE0RwpBMVVkRHdFQi93UUVBd0lIZ0RBVEJnTlZIU1VFRERBS0JnZ3JCZ0VGQlFjREF6QWZCZ05WSFNNRUdEQVdnQlRmCjArblBWaVFSbHZtbzJPa29WYUxHTGhoa1B6QmlCZ05WSFJFQkFmOEVXREJXaGxSb2RIUndjem92TDJkcGRHaDEKWWk1amIyMHZiSEZqTmpJMEwyTmhjaTF5ZFc1MGFXMWxMeTVuYVhSb2RXSXZkMjl5YTJac2IzZHpMM0psYkdWaApjMlV1ZVcxc1FISmxabk12ZEdGbmN5OHhMakU0TGpJd09RWUtLd1lCQkFHRHZ6QUJBUVFyYUhSMGNITTZMeTkwCmIydGxiaTVoWTNScGIyNXpMbWRwZEdoMVluVnpaWEpqYjI1MFpXNTBMbU52YlRBVkJnb3JCZ0VFQVlPL01BRUMKQkFkeVpXeGxZWE5sTURZR0Npc0dBUVFCZzc4d0FRTUVLRGt6WVdGa1l6TTNOV0ptTmpVeU5UQXpOREF5TkRBeQpObVJtWXpWbE5UQXdZak01WW1Sak56UXdGUVlLS3dZQkJBR0R2ekFCQkFRSGNtVnNaV0Z6WlRBZ0Jnb3JCZ0VFCkFZTy9NQUVGQkJKc2NXTTJNalF2WTJGeUxYSjFiblJwYldVd0hnWUtLd1lCQkFHRHZ6QUJCZ1FRY21WbWN5OTAKWVdkekx6RXVNVGd1TWpBN0Jnb3JCZ0VFQVlPL01BRUlCQzBNSzJoMGRIQnpPaTh2ZEc5clpXNHVZV04wYVc5dQpjeTVuYVhSb2RXSjFjMlZ5WTI5dWRHVnVkQzVqYjIwd1pBWUtLd1lCQkFHRHZ6QUJDUVJXREZSb2RIUndjem92CkwyZHBkR2gxWWk1amIyMHZiSEZqTmpJMEwyTmhjaTF5ZFc1MGFXMWxMeTVuYVhSb2RXSXZkMjl5YTJac2IzZHoKTDNKbGJHVmhjMlV1ZVcxc1FISmxabk12ZEdGbmN5OHhMakU0TGpJd09BWUtLd1lCQkFHRHZ6QUJDZ1FxRENnNQpNMkZoWkdNek56VmlaalkxTWpVd016UXdNalF3TWpaa1ptTTFaVFV3TUdJek9XSmtZemMwTUIwR0Npc0dBUVFCCmc3OHdBUXNFRHd3TloybDBhSFZpTFdodmMzUmxaREExQmdvckJnRUVBWU8vTUFFTUJDY01KV2gwZEhCek9pOHYKWjJsMGFIVmlMbU52YlM5c2NXTTJNalF2WTJGeUxYSjFiblJwYldVd09BWUtLd1lCQkFHRHZ6QUJEUVFxRENnNQpNMkZoWkdNek56VmlaalkxTWpVd016UXdNalF3TWpaa1ptTTFaVFV3TUdJek9XSmtZemMwTUNBR0Npc0dBUVFCCmc3OHdBUTRFRWd3UWNtVm1jeTkwWVdkekx6RXVNVGd1TWpBYUJnb3JCZ0VFQVlPL01BRVBCQXdNQ2pFek5qRXgKT1RJM01UUXdLUVlLS3dZQkJBR0R2ekFCRUFRYkRCbG9kSFJ3Y3pvdkwyZHBkR2gxWWk1amIyMHZiSEZqTmpJMApNQmdHQ2lzR0FRUUJnNzh3QVJFRUNnd0lOamt5TXpRMU5qUXdaQVlLS3dZQkJBR0R2ekFCRWdSV0RGUm9kSFJ3CmN6b3ZMMmRwZEdoMVlpNWpiMjB2YkhGak5qSTBMMk5oY2kxeWRXNTBhVzFsTHk1bmFYUm9kV0l2ZDI5eWEyWnMKYjNkekwzSmxiR1ZoYzJVdWVXMXNRSEpsWm5NdmRHRm5jeTh4TGpFNExqSXdPQVlLS3dZQkJBR0R2ekFCRXdRcQpEQ2c1TTJGaFpHTXpOelZpWmpZMU1qVXdNelF3TWpRd01qWmtabU0xWlRVd01HSXpPV0prWXpjME1CY0dDaXNHCkFRUUJnNzh3QVJRRUNRd0hjbVZzWldGelpUQlpCZ29yQmdFRUFZTy9NQUVWQkVzTVNXaDBkSEJ6T2k4dloybDAKYUhWaUxtTnZiUzlzY1dNMk1qUXZZMkZ5TFhKMWJuUnBiV1V2WVdOMGFXOXVjeTl5ZFc1ekx6UXdNVGMyTkRjeApOREV4TDJGMGRHVnRjSFJ6THpFd0ZnWUtLd1lCQkFHRHZ6QUJGZ1FJREFad2RXSnNhV013VUFZS0t3WUJCQUdECnZ6QUJHQVJDREVCeVpYQnZPbXh4WXpZeU5FQTJPVEl6TkRVMk5DOWpZWEl0Y25WdWRHbHRaVUF4TXpZeE1Ua3kKTnpFME9uSmxaanB5WldaekwzUmhaM012TVM0eE9DNHlNSUdMQmdvckJnRUVBZFo1QWdRQ0JIMEVld0I1QUhjQQozVDB3YXNiSEVUSmpHUjRjbVdjM0FxSktYcmplUEszL2g0cHlnQzhwN280QUFBR2hjaWtrcFFBQUJBTUFTREJHCkFpRUFqUytyOG10em16Tkg1RlZpT0M3cVFRM1BrWUJKbmJ1bTV2R2ZTTERFK3pVQ0lRQzcyZFpqczYzdGFnYW4KWjB2RlFIUzZ3a25SVTl0bXZhRXJtb2RUNXNEaDh6QUtCZ2dxaGtqT1BRUURBd05wQURCbUFqRUEvR2g3TUQ5OQp5NGx2b00zZjg1TkhrMjNJWVE4UUhaQ1hURGZpa0VvUGNhRXo2N3RGVWsrN2Qzd0lrK09iNkNETkFqRUF1NnBjCnlQR1ZDSklHdE9OVFpPQ3o4UVZSQzJsVHArcDZuSTNDeExwZXZSUkRlN0xwa2lZbUcrb0xxbjM1Z3Y1UgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==","rekorBundle":{"SignedEntryTimestamp":"MEQCIEV0qK9E/NTL4GPTa7/Jz+8A0fKjmh1aMtETgVIWZJDHAiA0Z22djneT0OnmJCUG7QYeWFTYtvSIXLZpG7LRZM3MMQ==","Payload":{"body":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiJiYjBmYzBlMjgwZDNkODE4ZDk2MzJmMzZlYjc1NWVjMDEwNzI4OTY4NTVlMjliZTAxNzQ0ZTQ5ZTM5MWQ4ODllIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FWUNJUUNBSTI2VlYzMnJnNFFIbk9XWnIxZ2hPZHJkYk9tT3BvVjQzR1FPRFJEWmtnSWhBT0lhRnNUeStvb1I2RjJIdVhzT1MwVzBWNHRZb1hGVGpmQmNWSnJMcWI1SCIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVYzJWRU5EUW0wMlowRjNTVUpCWjBsVlJrZG9MMGhZYlM5c2JYTTBabFJKWjBoUk4yeGFMMWxCV1hSSmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFplRTFFU1RGTlJHZDVUa1JKZUZkb1kwNU5hbGw0VFVSSk1VMUVaM3BPUkVsNFYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZIZDJ0alFuTkRkSGxNUmxWVWVrVnBhVE5vZEc5T2FqVnJObUpyUTNWaFFuZHBSM29LV1VsMFMwVnhVVTU2Ym1SSFVHMHJSWGhSVldrclQzZERla2MyTUc1eE9GaFpTMEV4Y0hocWJHVk9NRk5sYTAxbk4yRlBRMEpaTUhkbloxZEtUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXWkNaMDVXU0ZOTlJVZEVRVmRuUWxSbUNqQXJibEJXYVZGU2JIWnRiekpQYTI5V1lVeEhUR2hvYTFCNlFtbENaMDVXU0ZKRlFrRm1PRVZYUkVKWGFHeFNiMlJJVW5kamVtOTJUREprY0dSSGFERUtXV2sxYW1JeU1IWmlTRVpxVG1wSk1Fd3lUbWhqYVRGNVpGYzFNR0ZYTVd4TWVUVnVZVmhTYjJSWFNYWmtNamw1WVRKYWMySXpaSHBNTTBwc1lrZFdhQXBqTWxWMVpWY3hjMUZJU214YWJrMTJaRWRHYm1ONU9IaE1ha1UwVEdwSmQwOVJXVXRMZDFsQ1FrRkhSSFo2UVVKQlVWRnlZVWhTTUdOSVRUWk1lVGt3Q21JeWRHeGlhVFZvV1ROU2NHSXlOWHBNYldSd1pFZG9NVmx1Vm5wYVdFcHFZakkxTUZwWE5UQk1iVTUyWWxSQlZrSm5iM0pDWjBWRlFWbFBMMDFCUlVNS1FrRmtlVnBYZUd4WldFNXNUVVJaUjBOcGMwZEJVVkZDWnpjNGQwRlJUVVZMUkd0NldWZEdhMWw2VFROT1YwcHRUbXBWZVU1VVFYcE9SRUY1VGtSQmVRcE9iVkp0V1hwV2JFNVVRWGRaYWswMVdXMVNhazU2VVhkR1VWbExTM2RaUWtKQlIwUjJla0ZDUWtGUlNHTnRWbk5hVjBaNldsUkJaMEpuYjNKQ1owVkZDa0ZaVHk5TlFVVkdRa0pLYzJOWFRUSk5hbEYyV1RKR2VVeFlTakZpYmxKd1lsZFZkMGhuV1V0TGQxbENRa0ZIUkhaNlFVSkNaMUZSWTIxV2JXTjVPVEFLV1Zka2VreDZSWFZOVkdkMVRXcEJOMEpuYjNKQ1owVkZRVmxQTDAxQlJVbENRekJOU3pKb01HUklRbnBQYVRoMlpFYzVjbHBYTkhWWlYwNHdZVmM1ZFFwamVUVnVZVmhTYjJSWFNqRmpNbFo1V1RJNWRXUkhWblZrUXpWcVlqSXdkMXBCV1V0TGQxbENRa0ZIUkhaNlFVSkRVVkpYUkVaU2IyUklVbmRqZW05MkNrd3laSEJrUjJneFdXazFhbUl5TUhaaVNFWnFUbXBKTUV3eVRtaGphVEY1WkZjMU1HRlhNV3hNZVRWdVlWaFNiMlJYU1haa01qbDVZVEphYzJJelpIb0tURE5LYkdKSFZtaGpNbFYxWlZjeGMxRklTbXhhYmsxMlpFZEdibU41T0hoTWFrVTBUR3BKZDA5QldVdExkMWxDUWtGSFJIWjZRVUpEWjFGeFJFTm5OUXBOTWtab1drZE5lazU2Vm1sYWFsa3hUV3BWZDAxNlVYZE5hbEYzVFdwYWExcHRUVEZhVkZWM1RVZEplazlYU210WmVtTXdUVUl3UjBOcGMwZEJVVkZDQ21jM09IZEJVWE5GUkhkM1Rsb3liREJoU0ZacFRGZG9kbU16VW14YVJFRXhRbWR2Y2tKblJVVkJXVTh2VFVGRlRVSkRZMDFLVjJnd1pFaENlazlwT0hZS1dqSnNNR0ZJVm1sTWJVNTJZbE01YzJOWFRUSk5hbEYyV1RKR2VVeFlTakZpYmxKd1lsZFZkMDlCV1V0TGQxbENRa0ZIUkhaNlFVSkVVVkZ4UkVObk5RcE5Na1pvV2tkTmVrNTZWbWxhYWxreFRXcFZkMDE2VVhkTmFsRjNUV3BhYTFwdFRURmFWRlYzVFVkSmVrOVhTbXRaZW1Nd1RVTkJSME5wYzBkQlVWRkNDbWMzT0hkQlVUUkZSV2QzVVdOdFZtMWplVGt3V1Zka2VreDZSWFZOVkdkMVRXcEJZVUpuYjNKQ1owVkZRVmxQTDAxQlJWQkNRWGROUTJwRmVrNXFSWGdLVDFSSk0wMVVVWGRMVVZsTFMzZFpRa0pCUjBSMmVrRkNSVUZSWWtSQ2JHOWtTRkozWTNwdmRrd3laSEJrUjJneFdXazFhbUl5TUhaaVNFWnFUbXBKTUFwTlFtZEhRMmx6UjBGUlVVSm5OemgzUVZKRlJVTm5kMGxPYW10NVRYcFJNVTVxVVhkYVFWbExTM2RaUWtKQlIwUjJla0ZDUldkU1YwUkdVbTlrU0ZKM0NtTjZiM1pNTW1Sd1pFZG9NVmxwTldwaU1qQjJZa2hHYWs1cVNUQk1NazVvWTJreGVXUlhOVEJoVnpGc1RIazFibUZZVW05a1YwbDJaREk1ZVdFeVduTUtZak5rZWt3elNteGlSMVpvWXpKVmRXVlhNWE5SU0Vwc1dtNU5kbVJIUm01amVUaDRUR3BGTkV4cVNYZFBRVmxMUzNkWlFrSkJSMFIyZWtGQ1JYZFJjUXBFUTJjMVRUSkdhRnBIVFhwT2VsWnBXbXBaTVUxcVZYZE5lbEYzVFdwUmQwMXFXbXRhYlUweFdsUlZkMDFIU1hwUFYwcHJXWHBqTUUxQ1kwZERhWE5IQ2tGUlVVSm5OemgzUVZKUlJVTlJkMGhqYlZaeldsZEdlbHBVUWxwQ1oyOXlRbWRGUlVGWlR5OU5RVVZXUWtWelRWTlhhREJrU0VKNlQyazRkbG95YkRBS1lVaFdhVXh0VG5aaVV6bHpZMWROTWsxcVVYWlpNa1o1VEZoS01XSnVVbkJpVjFWMldWZE9NR0ZYT1hWamVUbDVaRmMxZWt4NlVYZE5WR015VGtSamVBcE9SRVY0VERKR01HUkhWblJqU0ZKNlRIcEZkMFpuV1V0TGQxbENRa0ZIUkhaNlFVSkdaMUZKUkVGYWQyUlhTbk5oVjAxM1ZVRlpTMHQzV1VKQ1FVZEVDblo2UVVKSFFWSkRSRVZDZVZwWVFuWlBiWGg0V1hwWmVVNUZRVEpQVkVsNlRrUlZNazVET1dwWldFbDBZMjVXZFdSSGJIUmFWVUY0VFhwWmVFMVVhM2tLVG5wRk1FOXVTbXhhYW5CNVdsZGFla3d6VW1oYU0wMTJUVk0wZUU5RE5IbE5TVWRNUW1kdmNrSm5SVVZCWkZvMVFXZFJRMEpJTUVWbGQwSTFRVWhqUVFvelZEQjNZWE5pU0VWVVNtcEhValJqYlZkak0wRnhTa3RZY21wbFVFc3pMMmcwY0hsblF6aHdOMjgwUVVGQlIyaGphV3RyY0ZGQlFVSkJUVUZUUkVKSENrRnBSVUZxVXl0eU9HMTBlbTE2VGtnMVJsWnBUME0zY1ZGUk0xQnJXVUpLYm1KMWJUVjJSMlpUVEVSRkszcFZRMGxSUXpjeVpGcHFjell6ZEdGbllXNEtXakIyUmxGSVV6WjNhMjVTVlRsMGJYWmhSWEp0YjJSVU5YTkVhRGg2UVV0Q1oyZHhhR3RxVDFCUlVVUkJkMDV3UVVSQ2JVRnFSVUV2UjJnM1RVUTVPUXA1Tkd4MmIwMHpaamcxVGtock1qTkpXVkU0VVVoYVExaFVSR1pwYTBWdlVHTmhSWG8yTjNSR1ZXc3JOMlF6ZDBsckswOWlOa05FVGtGcVJVRjFObkJqQ25sUVIxWkRTa2xIZEU5T1ZGcFBRM280VVZaU1F6SnNWSEFyY0RadVNUTkRlRXh3WlhaU1VrUmxOMHh3YTJsWmJVY3JiMHh4YmpNMVozWTFVZ290TFMwdExVVk9SQ0JEUlZKVVNVWkpRMEZVUlMwdExTMHRDZz09In19fX0=","integratedTime":1792916662,"logIndex":3455604018,"logID":"c0d23d6ad406973f9559f3ba2d1ca01f84147d8ffc5b8445c224f98b9591801d"}}}
package/dist/loop/stop.js CHANGED
@@ -47,7 +47,15 @@ export async function runTurn(opts) {
47
47
  // 缺省=未采集向后兼容);reason 保持 meta 首键,usage 恒为加法尾键
48
48
  const closeTurn = (meta) => {
49
49
  const usage = turnUsageFrom(log, turnId);
50
- return log.append('runtime', 'turnEnd', turnId, null, { ...meta, ...(usage ? { usage } : {}) });
50
+ // 1.18.2-K8(R-K7-2):计量缺失 fail-visible——商汤网关实测 20% 概率 message_delta
51
+ // 不带 usage(流正常回复但计量整条缺席)→ 缺失口径纪律不落半条事实(turnUsageFrom
52
+ // undefined),缺失本身在此显式标注:本 turn 存在 assistant 事件(模型有可见输出 ⇒
53
+ // 必有请求)而无 usage 聚合时带 usageMissing: true(加法尾键,与 usage 同语义位)
54
+ const hasAssistant = log.events.some((e) => e.kind === 'assistant' && e.turnId === turnId);
55
+ return log.append('runtime', 'turnEnd', turnId, null, {
56
+ ...meta,
57
+ ...(usage ? { usage } : hasAssistant ? { usageMissing: true } : {}),
58
+ });
51
59
  };
52
60
  // 1.17-K4(D-50 / V2-a):blockOnDeny 缺省随档位收敛——readonly 恒 true(拒绝即收口,禁在
53
61
  // 错误理解模式的路上烧 token;「看一眼再决定」应切 confirm——三档设计本义);confirm/full
@@ -1,4 +1,4 @@
1
- {"stage":"archive","detail":"git archive HEAD → car-runtime-1.18.0.tgz(412568 bytes,树哈希锚定)","ts":1792834443858}
2
- {"stage":"sha256sums","detail":"SHA256SUMS 0a4e4ecf1ec5249b…(裸字节复核通过)","ts":1792834443859}
3
- {"stage":"sbom","detail":"55 个组件(运行时依赖 0 项)","ts":1792834443866}
4
- {"stage":"cosign-keyless","detail":"signed car-runtime-1.18.0.tgz (keyless OIDC + Rekor)","ts":1792834445397}
1
+ {"stage":"archive","detail":"git archive HEAD → car-runtime-1.18.2.tgz(417865 bytes,树哈希锚定)","ts":1792916660380}
2
+ {"stage":"sha256sums","detail":"SHA256SUMS bb0fc0e280d3d818…(裸字节复核通过)","ts":1792916660381}
3
+ {"stage":"sbom","detail":"55 个组件(运行时依赖 0 项)","ts":1792916660386}
4
+ {"stage":"cosign-keyless","detail":"signed car-runtime-1.18.2.tgz (keyless OIDC + Rekor)","ts":1792916662314}
@@ -496,19 +496,30 @@ const ANTHROPIC_STOP_REASON_MAP = {
496
496
  * input_tokens 天然不含 cache + cache_read/cache_creation)+ message_delta(output 侧:
497
497
  * output_tokens)。任一包缺席或主字段非数值 = 侧不完整,整条不落(缺失口径,禁补造半条事实);
498
498
  * providerRaw 保留两原始片段供审计对拍。
499
+ * 1.18.1-K6-A:网关形态兼容——商汤网关(装机会话实证 2026-10-25)把 input 侧三键放
500
+ * message_delta(message_start.input_tokens 常为 0,真实 input/cache_read 在 delta),
501
+ * 官方形态 delta 仅 output_tokens。判别式 = delta 是否携带任一 input 侧键;input 侧
502
+ * 整体取自单一来源(不混取两包、不估算),D-51 thresholdTokens 事实源
503
+ * (input+cacheRead+cacheCreation 之和)在两形态下同为 provider 报告的全上下文。
499
504
  */
500
505
  function mergeAnthropicUsage(start, delta, model, adapterId) {
501
506
  if (!start || !delta)
502
507
  return undefined;
503
- if (typeof start.input_tokens !== 'number' || typeof delta.output_tokens !== 'number')
508
+ if (typeof delta.output_tokens !== 'number')
509
+ return undefined;
510
+ const deltaHasInputSide = typeof delta.input_tokens === 'number' ||
511
+ typeof delta.cache_read_input_tokens === 'number' ||
512
+ typeof delta.cache_creation_input_tokens === 'number';
513
+ const inputSrc = deltaHasInputSide ? delta : start;
514
+ if (typeof inputSrc.input_tokens !== 'number')
504
515
  return undefined;
505
516
  // 1.14-S3(K-MP-2b / D-41):anthropic 无输出细分事实(thinking 计入 output_tokens)→
506
517
  // segments 不带键(禁估算补造——桌面色条退化单色,登记口径)
507
518
  return {
508
- inputTokens: start.input_tokens,
519
+ inputTokens: inputSrc.input_tokens,
509
520
  outputTokens: delta.output_tokens,
510
- cacheReadTokens: typeof start.cache_read_input_tokens === 'number' ? start.cache_read_input_tokens : 0,
511
- cacheCreationTokens: typeof start.cache_creation_input_tokens === 'number' ? start.cache_creation_input_tokens : 0,
521
+ cacheReadTokens: typeof inputSrc.cache_read_input_tokens === 'number' ? inputSrc.cache_read_input_tokens : 0,
522
+ cacheCreationTokens: typeof inputSrc.cache_creation_input_tokens === 'number' ? inputSrc.cache_creation_input_tokens : 0,
512
523
  model,
513
524
  adapterId,
514
525
  providerRaw: { messageStart: start, messageDelta: delta },
package/dist/sbom.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "bomFormat": "CAR-SBOM",
3
3
  "specVersion": "0.1",
4
- "version": "1.18.0",
4
+ "version": "1.18.2",
5
5
  "components": [
6
6
  {
7
7
  "type": "file",
@@ -106,7 +106,7 @@
106
106
  {
107
107
  "type": "file",
108
108
  "path": "src/loop/stop.ts",
109
- "sha256": "d5bca2911a6cd75606fedaea041e62bcd4d3d78dc987030318f91ec53c20e223"
109
+ "sha256": "4b144151b40c07445592795006fd9b3388cb2e9bc398dd41c5d3df883853e098"
110
110
  },
111
111
  {
112
112
  "type": "file",
@@ -176,7 +176,7 @@
176
176
  {
177
177
  "type": "file",
178
178
  "path": "src/runtime-core/llm.ts",
179
- "sha256": "3df0703df21657121464e8495d5ffcc58b5b6362ac339d58bfc978686aa8dca0"
179
+ "sha256": "7aadf5f673e4db34c0ae45e44c48e9b9c7f36a970a0dd4d36285dc5ac74fa32f"
180
180
  },
181
181
  {
182
182
  "type": "file",
@@ -271,12 +271,12 @@
271
271
  {
272
272
  "type": "file",
273
273
  "path": "package.json",
274
- "sha256": "4152ba6a1827d3fe8cf06f5f6b631927cd71c6d66cd432fbbd9adcf9f1e94b9b"
274
+ "sha256": "f65383b4066a75547ea1dcd3d9a6ff778c698f988e8782e6333736cb69ef90eb"
275
275
  },
276
276
  {
277
277
  "type": "file",
278
278
  "path": "README.md",
279
- "sha256": "4fd84a935856faa9193971e6bf87f24195083b11e7e0974ff872b18e76e8e95a"
279
+ "sha256": "c7201b333e298f7bbb4b506be4d82e2c2d2e57fb0c6a474be20533b10ee16777"
280
280
  }
281
281
  ],
282
282
  "runtimeDependencies": []
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lqc123qwe/car-runtime",
3
- "version": "1.18.0",
3
+ "version": "1.18.2",
4
4
  "description": "Composable Agent Runtime (CAR) - microkernel plugin system with sandboxed PTC, append-only hashed session log, and MCP host bridge",
5
5
  "license": "MIT",
6
6
  "type": "module",
package/src/loop/stop.ts CHANGED
@@ -125,7 +125,15 @@ export async function runTurn(opts: {
125
125
  // 缺省=未采集向后兼容);reason 保持 meta 首键,usage 恒为加法尾键
126
126
  const closeTurn = (meta: Record<string, unknown>) => {
127
127
  const usage = turnUsageFrom(log, turnId)
128
- return log.append('runtime', 'turnEnd', turnId, null, { ...meta, ...(usage ? { usage } : {}) })
128
+ // 1.18.2-K8(R-K7-2):计量缺失 fail-visible——商汤网关实测 20% 概率 message_delta
129
+ // 不带 usage(流正常回复但计量整条缺席)→ 缺失口径纪律不落半条事实(turnUsageFrom
130
+ // undefined),缺失本身在此显式标注:本 turn 存在 assistant 事件(模型有可见输出 ⇒
131
+ // 必有请求)而无 usage 聚合时带 usageMissing: true(加法尾键,与 usage 同语义位)
132
+ const hasAssistant = log.events.some((e) => e.kind === 'assistant' && e.turnId === turnId)
133
+ return log.append('runtime', 'turnEnd', turnId, null, {
134
+ ...meta,
135
+ ...(usage ? { usage } : hasAssistant ? { usageMissing: true } : {}),
136
+ })
129
137
  }
130
138
 
131
139
  // 1.17-K4(D-50 / V2-a):blockOnDeny 缺省随档位收敛——readonly 恒 true(拒绝即收口,禁在
@@ -536,6 +536,11 @@ const ANTHROPIC_STOP_REASON_MAP: Record<string, LlmChunk['finishReason']> = {
536
536
  * input_tokens 天然不含 cache + cache_read/cache_creation)+ message_delta(output 侧:
537
537
  * output_tokens)。任一包缺席或主字段非数值 = 侧不完整,整条不落(缺失口径,禁补造半条事实);
538
538
  * providerRaw 保留两原始片段供审计对拍。
539
+ * 1.18.1-K6-A:网关形态兼容——商汤网关(装机会话实证 2026-10-25)把 input 侧三键放
540
+ * message_delta(message_start.input_tokens 常为 0,真实 input/cache_read 在 delta),
541
+ * 官方形态 delta 仅 output_tokens。判别式 = delta 是否携带任一 input 侧键;input 侧
542
+ * 整体取自单一来源(不混取两包、不估算),D-51 thresholdTokens 事实源
543
+ * (input+cacheRead+cacheCreation 之和)在两形态下同为 provider 报告的全上下文。
539
544
  */
540
545
  function mergeAnthropicUsage(
541
546
  start: Record<string, unknown> | null,
@@ -544,14 +549,20 @@ function mergeAnthropicUsage(
544
549
  adapterId: string,
545
550
  ): LlmUsage | undefined {
546
551
  if (!start || !delta) return undefined
547
- if (typeof start.input_tokens !== 'number' || typeof delta.output_tokens !== 'number') return undefined
552
+ if (typeof delta.output_tokens !== 'number') return undefined
553
+ const deltaHasInputSide =
554
+ typeof delta.input_tokens === 'number' ||
555
+ typeof delta.cache_read_input_tokens === 'number' ||
556
+ typeof delta.cache_creation_input_tokens === 'number'
557
+ const inputSrc = deltaHasInputSide ? delta : start
558
+ if (typeof inputSrc.input_tokens !== 'number') return undefined
548
559
  // 1.14-S3(K-MP-2b / D-41):anthropic 无输出细分事实(thinking 计入 output_tokens)→
549
560
  // segments 不带键(禁估算补造——桌面色条退化单色,登记口径)
550
561
  return {
551
- inputTokens: start.input_tokens,
562
+ inputTokens: inputSrc.input_tokens,
552
563
  outputTokens: delta.output_tokens,
553
- cacheReadTokens: typeof start.cache_read_input_tokens === 'number' ? start.cache_read_input_tokens : 0,
554
- cacheCreationTokens: typeof start.cache_creation_input_tokens === 'number' ? start.cache_creation_input_tokens : 0,
564
+ cacheReadTokens: typeof inputSrc.cache_read_input_tokens === 'number' ? inputSrc.cache_read_input_tokens : 0,
565
+ cacheCreationTokens: typeof inputSrc.cache_creation_input_tokens === 'number' ? inputSrc.cache_creation_input_tokens : 0,
555
566
  model,
556
567
  adapterId,
557
568
  providerRaw: { messageStart: start, messageDelta: delta },
Binary file
@@ -1 +0,0 @@
1
- {"base64Signature":"MEQCICVHnKG2MTF2xtkFObwIE4tEU2yH84N10KFvKpjzHcMeAiAMn+pb37rc0n+LfWDkxPWXE0qGYuG7J1qqolXvlXhJrQ==","cert":"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUc1ekNDQm02Z0F3SUJBZ0lVRGpkUmtkUVd3WW51M3BxWmZ0bUxEaEJMNXlrd0NnWUlLb1pJemowRUF3TXcKTnpFVk1CTUdBMVVFQ2hNTWMybG5jM1J2Y21VdVpHVjJNUjR3SEFZRFZRUURFeFZ6YVdkemRHOXlaUzFwYm5SbApjbTFsWkdsaGRHVXdIaGNOTWpZeE1ESTBNRGt6TkRBMFdoY05Nall4TURJME1EazBOREEwV2pBQU1Ga3dFd1lICktvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVEdFBwS0dYb2ppOHpENkJwUDBBNDZheUNIMTZrMUx5TmxsSHQKaGMvZjd4VC9idDlhajB4N0hYQWgwSGdnRlVPNWV0bUZ5dm5YWWxQWSt5Mm5FbkpkNGFPQ0JZMHdnZ1dKTUE0RwpBMVVkRHdFQi93UUVBd0lIZ0RBVEJnTlZIU1VFRERBS0JnZ3JCZ0VGQlFjREF6QWZCZ05WSFNNRUdEQVdnQlRmCjArblBWaVFSbHZtbzJPa29WYUxHTGhoa1B6QmlCZ05WSFJFQkFmOEVXREJXaGxSb2RIUndjem92TDJkcGRHaDEKWWk1amIyMHZiSEZqTmpJMEwyTmhjaTF5ZFc1MGFXMWxMeTVuYVhSb2RXSXZkMjl5YTJac2IzZHpMM0psYkdWaApjMlV1ZVcxc1FISmxabk12ZEdGbmN5OHhMakU0TGpBd09RWUtLd1lCQkFHRHZ6QUJBUVFyYUhSMGNITTZMeTkwCmIydGxiaTVoWTNScGIyNXpMbWRwZEdoMVluVnpaWEpqYjI1MFpXNTBMbU52YlRBVkJnb3JCZ0VFQVlPL01BRUMKQkFkeVpXeGxZWE5sTURZR0Npc0dBUVFCZzc4d0FRTUVLR1F4WW1FNE9UVmhNek14TVdFMllUTm1NV0UyTVRWbApaams1TjJZMk1XTTNNbU5qWlRBMVptTXdGUVlLS3dZQkJBR0R2ekFCQkFRSGNtVnNaV0Z6WlRBZ0Jnb3JCZ0VFCkFZTy9NQUVGQkJKc2NXTTJNalF2WTJGeUxYSjFiblJwYldVd0hnWUtLd1lCQkFHRHZ6QUJCZ1FRY21WbWN5OTAKWVdkekx6RXVNVGd1TURBN0Jnb3JCZ0VFQVlPL01BRUlCQzBNSzJoMGRIQnpPaTh2ZEc5clpXNHVZV04wYVc5dQpjeTVuYVhSb2RXSjFjMlZ5WTI5dWRHVnVkQzVqYjIwd1pBWUtLd1lCQkFHRHZ6QUJDUVJXREZSb2RIUndjem92CkwyZHBkR2gxWWk1amIyMHZiSEZqTmpJMEwyTmhjaTF5ZFc1MGFXMWxMeTVuYVhSb2RXSXZkMjl5YTJac2IzZHoKTDNKbGJHVmhjMlV1ZVcxc1FISmxabk12ZEdGbmN5OHhMakU0TGpBd09BWUtLd1lCQkFHRHZ6QUJDZ1FxRENoawpNV0poT0RrMVlUTXpNVEZoTm1FelpqRmhOakUxWldZNU9UZG1OakZqTnpKalkyVXdOV1pqTUIwR0Npc0dBUVFCCmc3OHdBUXNFRHd3TloybDBhSFZpTFdodmMzUmxaREExQmdvckJnRUVBWU8vTUFFTUJDY01KV2gwZEhCek9pOHYKWjJsMGFIVmlMbU52YlM5c2NXTTJNalF2WTJGeUxYSjFiblJwYldVd09BWUtLd1lCQkFHRHZ6QUJEUVFxRENoawpNV0poT0RrMVlUTXpNVEZoTm1FelpqRmhOakUxWldZNU9UZG1OakZqTnpKalkyVXdOV1pqTUNBR0Npc0dBUVFCCmc3OHdBUTRFRWd3UWNtVm1jeTkwWVdkekx6RXVNVGd1TURBYUJnb3JCZ0VFQVlPL01BRVBCQXdNQ2pFek5qRXgKT1RJM01UUXdLUVlLS3dZQkJBR0R2ekFCRUFRYkRCbG9kSFJ3Y3pvdkwyZHBkR2gxWWk1amIyMHZiSEZqTmpJMApNQmdHQ2lzR0FRUUJnNzh3QVJFRUNnd0lOamt5TXpRMU5qUXdaQVlLS3dZQkJBR0R2ekFCRWdSV0RGUm9kSFJ3CmN6b3ZMMmRwZEdoMVlpNWpiMjB2YkhGak5qSTBMMk5oY2kxeWRXNTBhVzFsTHk1bmFYUm9kV0l2ZDI5eWEyWnMKYjNkekwzSmxiR1ZoYzJVdWVXMXNRSEpsWm5NdmRHRm5jeTh4TGpFNExqQXdPQVlLS3dZQkJBR0R2ekFCRXdRcQpEQ2hrTVdKaE9EazFZVE16TVRGaE5tRXpaakZoTmpFMVpXWTVPVGRtTmpGak56SmpZMlV3Tldaak1CY0dDaXNHCkFRUUJnNzh3QVJRRUNRd0hjbVZzWldGelpUQlpCZ29yQmdFRUFZTy9NQUVWQkVzTVNXaDBkSEJ6T2k4dloybDAKYUhWaUxtTnZiUzlzY1dNMk1qUXZZMkZ5TFhKMWJuUnBiV1V2WVdOMGFXOXVjeTl5ZFc1ekx6UXdNRGd5TkRVMgpORFkwTDJGMGRHVnRjSFJ6THpFd0ZnWUtLd1lCQkFHRHZ6QUJGZ1FJREFad2RXSnNhV013VUFZS0t3WUJCQUdECnZ6QUJHQVJDREVCeVpYQnZPbXh4WXpZeU5FQTJPVEl6TkRVMk5DOWpZWEl0Y25WdWRHbHRaVUF4TXpZeE1Ua3kKTnpFME9uSmxaanB5WldaekwzUmhaM012TVM0eE9DNHdNSUdMQmdvckJnRUVBZFo1QWdRQ0JIMEVld0I1QUhjQQozVDB3YXNiSEVUSmpHUjRjbVdjM0FxSktYcmplUEszL2g0cHlnQzhwN280QUFBR2hiVUtkcEFBQUJBTUFTREJHCkFpRUEyNzZzWkcvaU5JL2tDZGcvVmtHUytFREc0elZEaHlaclVYVmsrc1M0Y3VFQ0lRQ2g3dUUyRkxEU3JhemUKS2N6WjNGODBQZUVZRythcDM0OURXbi85TEJkUlREQUtCZ2dxaGtqT1BRUURBd05uQURCa0FqQkdLa1NjYVFWegp5ckF1N0g4c3pCcjZzUmZOZXA5TCtVdU81cExLUm5DSDJwTTVpdmZDcnBNbzZCOHJ2STdpUjZzQ01IR01jUytlCkx6RjNpVFA1TWxoY1VqOVQ3T2Z4QkdNZ0hPWWRBK3hRU2JvV1AyZ2RGTlRNUVhGczZ2VTRKWjVuMlE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==","rekorBundle":{"SignedEntryTimestamp":"MEYCIQDpdxwVxvYZUSg9v/St15GLmqkaC6goRr3tHfFjFknSXAIhAKNmGkkqx1WcmFfQiphXX73ca7G1y3KanVmi/WX0UDDG","Payload":{"body":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiIwYTRlNGVjZjFlYzUyNDliYjdhMTIxYTI4OGJiOTczOWZhMTI2MTM4NWRlYmNhNzIyYmE1MjE2N2M3NTE5ODFhIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FUUNJQ1ZIbktHMk1URjJ4dGtGT2J3SUU0dEVVMnlIODROMTBLRnZLcGp6SGNNZUFpQU1uK3BiMzdyYzBuK0xmV0RreFBXWEUwcUdZdUc3SjFxcW9sWHZsWGhKclE9PSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVYzFla05EUW0wMlowRjNTVUpCWjBsVlJHcGtVbXRrVVZkM1dXNTFNM0J4V21aMGJVeEVhRUpNTlhscmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFplRTFFU1RCTlJHdDZUa1JCTUZkb1kwNU5hbGw0VFVSSk1FMUVhekJPUkVFd1YycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZFZEZCd1MwZFliMnBwT0hwRU5rSndVREJCTkRaaGVVTklNVFpyTVV4NVRteHNTSFFLYUdNdlpqZDRWQzlpZERsaGFqQjROMGhZUVdnd1NHZG5SbFZQTldWMGJVWjVkbTVZV1d4UVdTdDVNbTVGYmtwa05HRlBRMEpaTUhkbloxZEtUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXWkNaMDVXU0ZOTlJVZEVRVmRuUWxSbUNqQXJibEJXYVZGU2JIWnRiekpQYTI5V1lVeEhUR2hvYTFCNlFtbENaMDVXU0ZKRlFrRm1PRVZYUkVKWGFHeFNiMlJJVW5kamVtOTJUREprY0dSSGFERUtXV2sxYW1JeU1IWmlTRVpxVG1wSk1Fd3lUbWhqYVRGNVpGYzFNR0ZYTVd4TWVUVnVZVmhTYjJSWFNYWmtNamw1WVRKYWMySXpaSHBNTTBwc1lrZFdhQXBqTWxWMVpWY3hjMUZJU214YWJrMTJaRWRHYm1ONU9IaE1ha1UwVEdwQmQwOVJXVXRMZDFsQ1FrRkhSSFo2UVVKQlVWRnlZVWhTTUdOSVRUWk1lVGt3Q21JeWRHeGlhVFZvV1ROU2NHSXlOWHBNYldSd1pFZG9NVmx1Vm5wYVdFcHFZakkxTUZwWE5UQk1iVTUyWWxSQlZrSm5iM0pDWjBWRlFWbFBMMDFCUlVNS1FrRmtlVnBYZUd4WldFNXNUVVJaUjBOcGMwZEJVVkZDWnpjNGQwRlJUVVZMUjFGNFdXMUZORTlVVm1oTmVrMTRUVmRGTWxsVVRtMU5WMFV5VFZSV2JBcGFhbXMxVGpKWk1rMVhUVE5OYlU1cVdsUkJNVnB0VFhkR1VWbExTM2RaUWtKQlIwUjJla0ZDUWtGUlNHTnRWbk5hVjBaNldsUkJaMEpuYjNKQ1owVkZDa0ZaVHk5TlFVVkdRa0pLYzJOWFRUSk5hbEYyV1RKR2VVeFlTakZpYmxKd1lsZFZkMGhuV1V0TGQxbENRa0ZIUkhaNlFVSkNaMUZSWTIxV2JXTjVPVEFLV1Zka2VreDZSWFZOVkdkMVRVUkJOMEpuYjNKQ1owVkZRVmxQTDAxQlJVbENRekJOU3pKb01HUklRbnBQYVRoMlpFYzVjbHBYTkhWWlYwNHdZVmM1ZFFwamVUVnVZVmhTYjJSWFNqRmpNbFo1V1RJNWRXUkhWblZrUXpWcVlqSXdkMXBCV1V0TGQxbENRa0ZIUkhaNlFVSkRVVkpYUkVaU2IyUklVbmRqZW05MkNrd3laSEJrUjJneFdXazFhbUl5TUhaaVNFWnFUbXBKTUV3eVRtaGphVEY1WkZjMU1HRlhNV3hNZVRWdVlWaFNiMlJYU1haa01qbDVZVEphYzJJelpIb0tURE5LYkdKSFZtaGpNbFYxWlZjeGMxRklTbXhhYmsxMlpFZEdibU41T0hoTWFrVTBUR3BCZDA5QldVdExkMWxDUWtGSFJIWjZRVUpEWjFGeFJFTm9hd3BOVjBwb1QwUnJNVmxVVFhwTlZFWm9UbTFGZWxwcVJtaE9ha1V4V2xkWk5VOVVaRzFPYWtacVRucEthbGt5VlhkT1YxcHFUVUl3UjBOcGMwZEJVVkZDQ21jM09IZEJVWE5GUkhkM1Rsb3liREJoU0ZacFRGZG9kbU16VW14YVJFRXhRbWR2Y2tKblJVVkJXVTh2VFVGRlRVSkRZMDFLVjJnd1pFaENlazlwT0hZS1dqSnNNR0ZJVm1sTWJVNTJZbE01YzJOWFRUSk5hbEYyV1RKR2VVeFlTakZpYmxKd1lsZFZkMDlCV1V0TGQxbENRa0ZIUkhaNlFVSkVVVkZ4UkVOb2F3cE5WMHBvVDBSck1WbFVUWHBOVkVab1RtMUZlbHBxUm1oT2FrVXhXbGRaTlU5VVpHMU9ha1pxVG5wS2Fsa3lWWGRPVjFwcVRVTkJSME5wYzBkQlVWRkNDbWMzT0hkQlVUUkZSV2QzVVdOdFZtMWplVGt3V1Zka2VreDZSWFZOVkdkMVRVUkJZVUpuYjNKQ1owVkZRVmxQTDAxQlJWQkNRWGROUTJwRmVrNXFSWGdLVDFSSk0wMVVVWGRMVVZsTFMzZFpRa0pCUjBSMmVrRkNSVUZSWWtSQ2JHOWtTRkozWTNwdmRrd3laSEJrUjJneFdXazFhbUl5TUhaaVNFWnFUbXBKTUFwTlFtZEhRMmx6UjBGUlVVSm5OemgzUVZKRlJVTm5kMGxPYW10NVRYcFJNVTVxVVhkYVFWbExTM2RaUWtKQlIwUjJla0ZDUldkU1YwUkdVbTlrU0ZKM0NtTjZiM1pNTW1Sd1pFZG9NVmxwTldwaU1qQjJZa2hHYWs1cVNUQk1NazVvWTJreGVXUlhOVEJoVnpGc1RIazFibUZZVW05a1YwbDJaREk1ZVdFeVduTUtZak5rZWt3elNteGlSMVpvWXpKVmRXVlhNWE5SU0Vwc1dtNU5kbVJIUm01amVUaDRUR3BGTkV4cVFYZFBRVmxMUzNkWlFrSkJSMFIyZWtGQ1JYZFJjUXBFUTJoclRWZEthRTlFYXpGWlZFMTZUVlJHYUU1dFJYcGFha1pvVG1wRk1WcFhXVFZQVkdSdFRtcEdhazU2U21wWk1sVjNUbGRhYWsxQ1kwZERhWE5IQ2tGUlVVSm5OemgzUVZKUlJVTlJkMGhqYlZaeldsZEdlbHBVUWxwQ1oyOXlRbWRGUlVGWlR5OU5RVVZXUWtWelRWTlhhREJrU0VKNlQyazRkbG95YkRBS1lVaFdhVXh0VG5aaVV6bHpZMWROTWsxcVVYWlpNa1o1VEZoS01XSnVVbkJpVjFWMldWZE9NR0ZYT1hWamVUbDVaRmMxZWt4NlVYZE5SR2Q1VGtSVk1ncE9SRmt3VERKR01HUkhWblJqU0ZKNlRIcEZkMFpuV1V0TGQxbENRa0ZIUkhaNlFVSkdaMUZKUkVGYWQyUlhTbk5oVjAxM1ZVRlpTMHQzV1VKQ1FVZEVDblo2UVVKSFFWSkRSRVZDZVZwWVFuWlBiWGg0V1hwWmVVNUZRVEpQVkVsNlRrUlZNazVET1dwWldFbDBZMjVXZFdSSGJIUmFWVUY0VFhwWmVFMVVhM2tLVG5wRk1FOXVTbXhhYW5CNVdsZGFla3d6VW1oYU0wMTJUVk0wZUU5RE5IZE5TVWRNUW1kdmNrSm5SVVZCWkZvMVFXZFJRMEpJTUVWbGQwSTFRVWhqUVFvelZEQjNZWE5pU0VWVVNtcEhValJqYlZkak0wRnhTa3RZY21wbFVFc3pMMmcwY0hsblF6aHdOMjgwUVVGQlIyaGlWVXRrY0VGQlFVSkJUVUZUUkVKSENrRnBSVUV5TnpaeldrY3ZhVTVKTDJ0RFpHY3ZWbXRIVXl0RlJFYzBlbFpFYUhsYWNsVllWbXNyYzFNMFkzVkZRMGxSUTJnM2RVVXlSa3hFVTNKaGVtVUtTMk42V2pOR09EQlFaVVZaUnl0aGNETTBPVVJYYmk4NVRFSmtVbFJFUVV0Q1oyZHhhR3RxVDFCUlVVUkJkMDV1UVVSQ2EwRnFRa2RMYTFOallWRldlZ3A1Y2tGMU4wZzRjM3BDY2paelVtWk9aWEE1VEN0VmRVODFjRXhMVW01RFNESndUVFZwZG1aRGNuQk5ielpDT0hKMlNUZHBValp6UTAxSVIwMWpVeXRsQ2t4NlJqTnBWRkExVFd4b1kxVnFPVlEzVDJaNFFrZE5aMGhQV1dSQkszaFJVMkp2VjFBeVoyUkdUbFJOVVZoR2N6WjJWVFJLV2pWdU1sRTlQUW90TFMwdExVVk9SQ0JEUlZKVVNVWkpRMEZVUlMwdExTMHRDZz09In19fX0=","integratedTime":1792834445,"logIndex":3438969996,"logID":"c0d23d6ad406973f9559f3ba2d1ca01f84147d8ffc5b8445c224f98b9591801d"}}}