AgentsView 的 Tau 会话测试夹具:脱敏契约、数据来源与解析器回归基线

发布时间:2026/9/17 22:46:48
AgentsView 的 Tau 会话测试夹具:脱敏契约、数据来源与解析器回归基线 AgentsView 的 Tau 会话测试夹具脱敏契约、数据来源与解析器回归基线【免费下载链接】agentsviewLocal-first session search, analytics, insights, and token use statistics for coding agents, supporting Claude Code, Codex, and more than 20 other agents.项目地址: https://gitcode.com/GitHub_Trending/ag/agentsview本文以 internal/parser/testdata/tau/README.md 这份夹具说明文档为核心讲清 AgentsView 为 Tau 解析器维护的测试夹具issue-session.jsonl的完整数据血缘它来自哪个真实问题工单的附件、脱敏时保留了什么与替换了什么、生产端源码为何要锁定到特定版本以及解析器与同步层的回归测试如何以它作为可复现的断言基线。读完本文你可以独立评估一个第三方 Agent 会话格式解析实现的测试可信度并掌握“来源锚定 脱敏契约 精确断言”这一夹具方法论。夹具是什么真实问题工单会话的脱敏副本Tau 夹具目录只有两个文件说明文档 README.md 和被测数据 issue-session.jsonl。README 明确说明这个 JSONL 文件是“附着于 issue #1634 的 Tau 会话的脱敏派生物sanitized derivative”。原始来源是两个公开附件index.jsonl元数据索引文件SHA256 为069e87052a6fb448f2588669ec6cd31c2456e7a8f7bdee15083d9308197cd3d1会话 transcriptda3907f3c98e4a8d90c03ae42870920c.jsonlSHA256 为f0d95655c08002655c7e727afe7249bebd8077c58ec017d76a703d785dddb3bd。README 同时给出一个重要的上游锚点生产该会话格式的 Tau 项目源码被固定pinned到修订版93bfc761b43e0a5a646b0e5ac808b3a15918e74d。也就是说夹具不只是“一份抓下来的数据”而是与一个可核验的上游版本绑定的证据链附件哈希保证原始材料可验证锁定修订版保证格式语义可对照源码复核。脱敏契约保留什么替换什么README 用两句话定义了脱敏契约这是整个夹具可信度的关键The fixture keeps the captured record count, IDs, parent links, timestamps, models, tool IDs, roles, and token values. It replaces local paths and names with example values. 夹具保留抓取时的记录数、ID、父子链接、时间戳、模型、工具 ID、角色和 token 数值仅把本地路径和姓名等替换为示例值。对照夹具首几行可以看到契约的实际执行{id:7f43089ed2b74b6797cc8fb13d5cac03,timestamp:1788585460.744412,type:session_info,created_at:1788585460.744413,cwd:/home/example/projects/sample-project} {id:cc86e83b54bb4fecb2b03aa0d44d54af,parent_id:7f43089ed2b74b6797cc8fb13d5cac03,timestamp:1788585460.744621,type:model_change,model:gpt-5.4,provider:openai} {id:c69d1af04f74486ea8931809aec04589,parent_id:e42f5df11a104700affeda0f99bc4c36,timestamp:1788585469.015809,type:message,message:{role:user,content:add ruff ty to pyproject.toml,timestamp:1788585468984}}可以看到cwd已被替换为/home/example/projects/sample-project这类示例路径而id、parent_id、带小数秒的外层时间戳、内层毫秒级timestamp、model、usage结构等解析器关心的全部字段都原样保留。这个“保留解析器依赖字段、替换隐私字段”的取舍直接决定了解析器测试能断言到什么粒度——后面会看到测试可以精确到 input token 总和是 7985。生产端锁定版本与“来源派生”测试用例README 最后一句区分了两类测试素材Branch, compaction, and cache-write cases in the parser tests are constructed from that source revision. They are source-derived fixtures, not live captures. 解析器测试中关于分支、压缩compaction与缓存写入的用例是从该锁定修订版构造的。它们是“来源派生夹具”不是真实抓取。这与仓库文档 docs/internal/session-format-sources.md 中 Tau 一节的记载一致该节同样引用了锁定修订版93bfc761...并列出上游的条目模型entries.py、消息模型messages.py、祖先树tree.py、持久化storage.py、路径与会话管理器paths.py、session_manager.py等源码位置作为格式语义的复核依据。该节还记录了用量映射的边界Tau 的cacheWrite已包含缓存创建的总量AgentsView 只计一次忽略cacheWrite1h、reasoning与存储的 cost 对象一个“生产端派生”的用例专门覆盖 25 个总缓存写入 token、其中 10 个属于一小时子集的场景。在 internal/parser/tau_test.go 中对应测试TestTauMapsCompactionThinkingErrorsAndUsage用一行内联 JSON 构造了该场景cacheWrite:25,cacheWrite1h:10,reasoning:99并断言ContextTokens 26即input1 cacheWrite25cacheWrite1h不重复计序列化后的TokenUsage中不包含cacheWrite1h与reasoning键。这种“从锁定源码修订版反推字段语义再用最小 JSON 固化断言”的做法避免了为每个边缘字段都依赖一整份真实会话。复现测试夹具如何成为精确断言的回归基线夹具的消费入口是 internal/parser/tau_issue1634_repro_test.go 中的TestTauIssue1634ArtifactReproductionL14-L46。它的流程是读取仓库内testdata/tau/issue-session.jsonl的原始字节通过ProviderFactoryByType(AgentType(tau))取 Tau 解析器工厂把文件复制进临时目录项目目录名故意取project.with-hyphen_and-dots覆盖文件名含连字符/点号/下划线的解析路径走与生产完全相同的DiscoverParse调用链而不是直接调用内部函数做一组精确数值断言断言项期望值含义result.Session.IDtau:issue-session会话 ID 由文件名派生并加tau:前缀len(dataLines(data))33夹具恰好 33 条记录与原始附件记录数一致Session.MessageCount14祖先链重放后的可见消息数Session.UserMessageCount4用户消息计数工具调用总数3ToolCalls汇总工具结果总数3ToolResults汇总input_tokens总和7985全部消息TokenUsage累加output_tokens总和588全部消息TokenUsage累加这张表就是 README 中“保留记录数、ID、父子链接、时间戳、模型、工具 ID、角色和 token 数值”这条脱敏契约的量化落地正因为 token 值未被脱敏测试才能对 7985/588 这样的精确和值做断言。任何解析器改动只要丢失消息、错选祖先链或漏映射某个 usage 字段这个测试都会立刻变红。夹具守护的解析行为活跃路径选择与读取校验夹具之所以选这条带有多次leaf重写的真实会话原始工单问题即围绕它展开是因为它正好覆盖了解析器 internal/parser/tau.go 的核心行为。活跃叶子与祖先链重放。Tau 的 transcript 是一棵id/parent_id树最新一条leaf条目的entry_id指向当前活跃路径的末端。selectTauEntries 从叶子沿parent_id回溯到根对三种异常分别报错或降级叶子目标 ID 缺失且无已选中条目报tau leaf target %q is missing选中链上出现重复 ID报tau entry ID %q is duplicated父子关系成环报tau ancestry cycle at entry %q叶子的parent_id指向不存在的 ID 但已选中部分条目在断点处截断保留已选路径。internal/parser/tau_test.go 中的TestTauSelectedAncestryErrors与TestTauSourceDerivedReplayAndMetadata把这些边界逐一固化包括“entry_id为 null 的显式空叶子会清空消息列表”这一语义。读取校验与资源约束。readTauEntries 按行流式读取逐条检查单行超过maxLineSize报错、非合法 UTF-8 报错、非法 JSON 报错、每轮循环检查context取消。对应的TestTauReadValidationAndFinalRecord、TestTauLineSizeLimit边界值maxLineSize可通过、maxLineSize1必失败与TestTauCancellation守护这些行为文件末尾无换行的最后一条记录也会被正确解析io.EOF分支处理。用量归一化。applyTauUsage 只取input、output、cacheRead、cacheWrite四个键映射为统一的input_tokens/output_tokens/cache_read_input_tokens/cache_creation_input_tokensJSON并据此累计ContextTokensinput cacheRead cacheWritetotalTokens、cost 对象等被忽略。TestTauUsageJSONIsStable断言零值 usage 的输出 JSON 键集合稳定保证下游数据库写入格式不被上游新增字段污染。角色取舍。按 docs/configuration.md 对 Tau 的支持说明用户手动执行的 shell 命令bashExecution角色以及custom、branchSummary、compactionSummary角色消息不展示而独立的branch_summary与compaction条目会渲染为分支摘要消息和压缩边界消息。internal/parser/tau.go 的decodeTauMessages中compaction被映射为带IsCompactBoundary标记的系统消息branch_summary被包装成“来自被返回分支的摘要”用户消息——这正是 README 所说 branch/compaction 用例的来源派生形态。从解析到同步force-replace 语义的端到端验证夹具的价值不止在解析层。internal/sync/tau_test.go 构造了同一会话文件被连续改写的场景把叶子从tr1前推到a2活跃路径变长再改成空叶子消息清空断言数据库中会话与消息随之强制替换。这与 tau_provider.go 中WithForceReplace()与Capabilities().Source.ForceReplaceOnParse CapabilitySupported的设置呼应因为 Tau transcript 的历史可能整段重放同步器不能增量追加只能整体替换。docs/internal/session-format-sources.md 的 Tau 节也据此说明“显式空叶子返回零消息结果缺失父节点使选中路径脱根”。真实部署下夹具对应的目录布局夹具模拟的是 Tau 的真实会话布局~/.tau/sessions/project/*.jsonl其中每个项目目录旁还有一个纯元数据的index.jsonl。tau_provider.go 的isTauSourcePath精确排除名为index.jsonl的文件只接受能通过isValidTauSessionID字符校验字母、数字、.、-、_的.jsonl文件名作为会话源对于特殊的default.jsonl会话 ID 会编码项目目录名与配置根目录的 SHA256 前 16 字节哈希避免不同根下的默认会话互相覆盖。用户可通过TAU_SESSIONS_DIR环境变量或配置项agents.tau.dirs指定其他会话根详见 docs/configuration.md 的 Tau 一节。小结一个夹具文件背后的测试方法论回看 internal/parser/testdata/tau/README.md 全文它实际上是一份压缩的“夹具治理规范”仓库围绕它形成了四层证据来源锚定附件 SHA256 上游锁定修订版93bfc761...保证数据与格式语义可追溯脱敏契约保留解析器依赖的全部结构化字段只替换路径与名称使精确数值断言成为可能基线复现TestTauIssue1634ArtifactReproduction以生产调用链 精确计数/和值断言锁定 33 条记录、14 条消息、7985/588 token 的基线internal/parser/tau_issue1634_repro_test.go边缘派生branch、compaction、cache-write 用例从锁定源码修订版构造最小 JSON与真实夹具解耦维护internal/parser/tau_test.go。对于维护第三方会话格式解析器的项目这套“真实样本脱敏 哈希锚定 精确断言 来源派生边缘用例”的组合是保证格式回归可复现且隐私安全的可行范式。相关实现文件索引路径职责internal/parser/testdata/tau/README.md夹具数据来源与脱敏契约说明internal/parser/testdata/tau/issue-session.jsonl33 条记录的脱敏会话夹具internal/parser/tau.go读取校验、祖先链选择、消息与 usage 解码internal/parser/tau_provider.go会话源发现、ID 派生与能力声明internal/parser/tau_issue1634_repro_test.go夹具精确断言复现测试internal/parser/tau_test.go祖先链/校验/usage 边缘用例internal/sync/tau_test.goforce-replace 同步行为验证docs/configuration.mdTau 会话目录布局与配置项docs/internal/session-format-sources.mdTau 格式语义与上游源码对照【免费下载链接】agentsviewLocal-first session search, analytics, insights, and token use statistics for coding agents, supporting Claude Code, Codex, and more than 20 other agents.项目地址: https://gitcode.com/GitHub_Trending/ag/agentsview创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考