M8 第二批适配器实施验证记录(2026-09-29)
2026-10-06 Aider 0.86.2、Goose 1.53.0、Continue CLI 1.5.47、jcode 0.91.0 与 gajae-code 0.18.7、AtomCode 5.2.1、Crush 0.97.1、Junie 26.9.22、Xum 0.30.0 与 Roo 3.54.0 已补官方容器/本地模型 非空真实样本、独立核对与回归(Crush 仅成本;Junie 任务失败但已有七次调用; Xum 默认流缺用量,网关上游请求选项对照单列;Roo 缓存及取消尾调用覆盖缺口保留), 见 M8 容器样本。以下保留当时的当时基于文档和源码的实施记录。
范围:M8 扩展 Agent 覆盖(调研 A25–A48、 扩展矩阵)的文档级实施。 18 个新适配器目录(17 个解析 + Qoder 探针)+ 注册 + 设计要求检查;不提交、不推送、不部署。
本机环境与盘点
- Windows 11 x64;Node 22+;cwd 仓库根;全量命令
npm run verify。 - 本机盘点(2026-09-29,只读探测 home/APPDATA/LOCALAPPDATA):M8 产品均未安装;
仅
%LOCALAPPDATA%/Zed/threads/threads.db存在(threads 表 schema 与官方 迁移 SQL 一致、0 行——schema 核验结果,无真实用量样本)。 - 结论:全部按 M3 未安装产品先例交付基于文档或源码的实现(固定源码/官方分发物/ 固定版本的第三方解析器 + 合成测试数据),discover 在本机返回空(Zed 发现空库), 真实样本出现后升级验证。
实施前的产品资料核验
并行调研只读核验以下固定版本(详细字段依据入 research.md 与各适配器文件头):
| 产品 | 核验来源 | 等级 |
|---|---|---|
| Roo Code | RooCodeInc/Roo-Code b867ec9(已归档 2026-05) | official-source |
| Goose | aaif-goose/goose a701bb1 | official-source |
| Crush | charmbracelet/crush 1f3827b | official-source |
| jcode | 1jehuang/jcode 4f6bf8e(master) | official-source |
| gajae-code | Yeachan-Heo/gajae-code 7e54f9c | official-source |
| Command Code | npm [email protected] dist/cli.mjs 逐行 | official-distribution |
| Continue | continuedev/continue 5522c6f | official-source |
| AtomCode | atomgit e4215f7(GitHub 镜像同 SHA) | official-source |
| Zed | zed-industries/zed bd74733 + 本机 schema | official-source + local schema |
| Aider | Aider-AI/aider 5dc9490 | official-source |
| Amp/Grok/Junie/Kiro/Droid/Xum/Antigravity | tokscale 固定提交 1d9a939 | third-party-parser / 逆向 |
| Amazon Q | aws/amazon-q-developer-cli 15cc8f3 | official-source(没有本地 token 记录) |
| Codebuff | CodebuffAI/codebuff caec5fc | official-source(本地仅 credits,无 token 字段) |
| iFlow CLI | iflow-ai/iflow-cli 4642808(2026-04-17 停服) | official-docs(没有默认用量记录) |
| Qoder | docs.qoder.com + npm 1.1.64 解包 | path-verified / fields-unverified |
关键调研结论(禁止猜测下的是否实施的判断):
- Goose 有逐请求表:官方迁移 15 的
usage_ledger(Unix 秒 + 五桶 + cost_source), tokscale 未覆盖(其只见会话级);旧库按sessions.accumulated_*聚合读取。 - Crush token 列不是用量:官方源码证实
prompt_tokens/completion_tokens是 最近 step 上下文规模快照(SET 覆盖、摘要后重置);仅根会话cost累计 (子会话回卷 ⇒parent_session_id IS NULL过滤)⇒ cost-only 实施。 - Roo tokensIn 含缓存(官方三处核验依据),与既有 cline 适配器(dcf8c3c 四桶 互斥)存在字段定义差异:两适配器各按各自固定版本资料实现,分歧在 adapters.md 登记, 待双方真实样本复核。
- jcode 缓存字段定义按 provider 原样:openai input 含 cache(uncached 派生)、 anthropic 三列互斥、未知并列不派生;快照+journal 合并,崩溃窗口按消息 id upsert 保存。
- gajae usage 已官方归一化互斥桶(适用 map_pi_family 规则);五桶齐全才统计 (官方 stats parser 使用相同规则);message.timestamp 毫秒与条目 ISO 并存。
- Command Code inputTokens 含 cache(官方成本公式证实);有效路径=末条目回溯 parentId 链;fork 复制保留 id+timestamp ⇒ 跨文件去重键。
- Continue usage 仅 CLI 写入(会话累计真实 API 值);devdata.sqlite 是 tokenizer 估算不采纳;GUI 会话无字段。
- Zed 当时以累计用量统计,并核对 request 桶的覆盖规则(官方 thread.rs:2893 清零); 当时把 TokenUsage 序列化缺省的 0 视为已报告 0;仅 zed.dev provider;imported 跳过。
- Amazon Q / Codebuff 本地没有逐次 token 记录(官方源码证实:Q 的 API tokenUsage 在类型转换层被丢弃;Codebuff 本地仅 credits)⇒ 不实施 token 适配器,按边界排除(与 Warp/Cursor 同类)。
- iFlow 已停服且唯一用量输出是需启用的 OTel(归 M5 OTLP 要求),无适配器。
- Qoder 字段仍缺少可核验的资料(bundle schema 线索不作数)⇒ 探针级 fail-closed 接入。
实施(18 个适配器,全部独立目录 + 版本注册表 + V30)
desktop/src-tauri/crates/core/src/adapters/:
zed、aider、junie、xum、droid、amp、grok、roo、goose、crush、jcode、
gajae-code、commandcode、continue(模块 continuedev)、atomcode、kiro、
antigravity、qoder(探针)。全部注册进 built_in_adapters()。
要点(与矩阵边界一一对应):
- 估算路径全部不采纳:Kiro Auto 零计数/字节折算/窗口差额、Goose reasoning 差额、 Droid 转录分摊、Grok 累计差额/补偿、Continue devdata、Crush token 快照。
- 两种记录格式:Amp ledger(有 timestamp)为主、消息 usage 仅对账不推造时间; Kiro CLI turns 与 kiro-cli SQLite 分列(交叉重叠尚未核实,如实标注)。
- 会话级聚合(不虚构逐次):Zed(累计用量统计及 request 桶对账)、Xum、 Droid、Continue、AtomCode(round_count 合计作调用数)、Goose 旧库聚合读取。
- 新依赖:
zstd ^0.13(Zed threads.db zstd blob 有界解压,64 MiB 上限)。
测试与命令
cargo test -p llm-usage-core(cwd desktop/src-tauri):566 项全部通过 (lib 158 项含各适配器单元测试 + 集成测试全绿;含新增tests/m8_contract.rs19 项:17 个解析适配器设计要求检查 + Qoder 探针 fail-closed + V30 目录/注册表结构检查)。tests/adapter_layout_v30.rs的 AGENTS 清单扩展覆盖全部 M8 目录。npm run verify(cwd 仓库根)全部检查通过:markdownlint 150+ 文件 0 问题、 assets/脚本/前端逻辑/svelte-check(0 错误 0 警告)、cargo fmt + clippy (-D warnings)通过、Rust 全部测试通过、vite 8.3.1 构建成功。git diff --check通过;git status --short无临时产物(build/ 已 ignore)。
核验范围与剩余缺口
| 核验范围 | 适配器 |
|---|---|
| official-source(含分发物)+ 本机 schema | zed |
| official-source / official-distribution | roo、goose、crush、jcode、gajae、commandcode、continue、atomcode、aider |
| third-party-parser(tokscale 1d9a939) | amp、grok、junie、kiro、droid、xum |
| third-party-reverse-engineered(风险最高档) | antigravity(protobuf 布局逆向;1.1.18+ 无时间戳行 fail closed) |
| path-verified / fields-unverified | qoder(探针 fail closed) |
未完成/后置项:
- 真实数据验收全部后置:本机 18 个产品目录均无真实用量数据(Zed 空库); 真实脱敏测试数据 出现后逐产品升级为已验证并核对边界(对账、覆盖、时区)。
- Amazon Q、Codebuff、iFlow 不实施 token 适配器(没有本地记录或已停服), 状态见矩阵;Cursor/Warp/TRAE/Windsurf 维持排除/F1。
- Kiro 两种记录格式交叉对账、Roo vs Cline tokensIn 字段定义差异、Antigravity 1.1.18+ 时间戳布局:均待真实样本。
- 初轮只修改核心库与注册,未重跑浏览器回归与 Windows release 构建; 后续工作区复核已补跑浏览器回归,记录如下。release 构建仍随 M7 验收。
f6ede266590b37c14f424070b048ffd773f3ae9c 工作区复核(2026-09-29)
范围:审查该提交后的 74 个已暂存改动,并继续修复审查发现的问题;
工作区改动未提交、未推送。环境:Windows 11 x64,Node.js v24.21.0,
Cargo 1.98.0,仓库根执行 npm/Git,desktop/src-tauri 执行定向 Cargo 测试。
已确认并修复的边界:
- Zed 累计桶合计改为 checked 算术后,调用处仍按整数使用,导致核心库 无法编译;现在溢出时记录诊断并跳过该线程。
- Goose 旧库会话累计会增长,完整页后的游标必须从头复查;
Crush 累计成本使用
updated_at作为修订号,否则同 ID 的后续成本与 旧 Final 事件冲突。Zed、Kiro、Crush 超过 50,000 行时按页继续, 读到末页后复查可变行。 - jcode journal 达到单轮行数上限时按持久偏移续读,末页后重读以应用
会话级元数据;原实现每轮从头读,尾部永久不可达。同 ID 消息的
source_revision取快照/日志updated_at,不把消息完成时间误当修订时间; 同毫秒且内容冲突仍交给导入层标记冲突。 - Xum 版本只从完整 JSON 的顶层字段判定;截断头部按兼容回退。 Kiro 部分写入的 SQLite 魔数保持 Pending。共用文件头读取处理短读。
- 停用实例的统一扫描的停用检查、逐源计划到期过滤、实际扫描成败记录、 OTel 错误状态透传、SourceList 周名时区及来源列表字段索引按工作区差异核验。
回归:tests/m8_review_fixes.rs 覆盖跨页读取、累计更新、journal 续读与
同消息时间戳的更正、
停用来源、版本依据、坏桶诊断及单行故障;补充 Zed 溢出单测。
npm run verify(仓库根,退出码 0)通过文档 lint、资源检查、脚本/前端
测试、Svelte 检查、Rust 格式/Clippy/全量测试及 Web 构建;
npm run test:browser(仓库根,退出码 0)通过浏览器交互回归。
默认沙箱启动 Node 子进程报 spawnSync EPERM,按受控提权路径重跑
同一命令成功;该错误不作为产品失败的依据。
验收等级仍是文档级 + 合成数据:本轮没有新增 M8 产品的本机真实用量样本。
本机默认 Copilot 数据库路径本轮探测为不存在,不能把此前 36 行真实数据
核对结果当作本轮复测。前述真实样本、Kiro 两种记录格式交叉对账、Roo/Cline
字段定义差异和 Antigravity 1.1.18+ 时间戳布局仍按原缺口保留。
本轮还探测了 M2 默认目录:%USERPROFILE%/.claude、.gemini、.qwen
均不存在;这只说明当前 shell 下默认路径无样本,不能替代环境变量或手工根检查,
M2 真实样本 缺口仍保留。