fix(v2): 修复子代理丢失、后台误判与多实例覆盖,新增费用统计与设置菜单 - #25
Merged
Merged
Conversation
- 保留 tool part id,修复历史扫描看不到子代理的问题 - 合并 part/state 两级 metadata,后台子代理不再被误判为已完成 - 非后台条目完成但未收到 success 事件时,发现轮询触发补扫 - KVApi.update 原子合并写入,多 TUI 实例不再互相覆盖;无 update 时退回读改写 - 扫描/轮询恢复漏事件的条目,周期校正 idle 僵尸条目
- 标题栏总费用(2 位小数);/subagent-cost 列出条目费用(4 位小数,默认关) - /subagent-time、/subagent-tokens 开关耗时与 Token 显示(默认开) - /subagent-config 设置摘要;/subagent-sections 原生循环设置菜单 - /subagent-time-format:short(默认)/ decimal / clock / compact / seconds - i18n 四语言补齐新设置项
- 前台任务(无子会话 metadata)的工具完成事件不再被丢弃,条目即时收尾 - 后台任务缺少 metadata 仍交由扫描/轮询兜底 - 存在 running 条目时每约 30s 与历史对账一次
- host 的 session.model 为对象时提取 id,不再写入序列化垃圾 - 历史脏值视为缺失,scan/enrich 重新读取修复;无法修复时不再显示
- 只读读取宿主 opencode.db(bun:sqlite 动态加载,OPENCODE_DB/XDG_DATA_HOME 可定位) - 用父会话工具 part 的 state.metadata.sessionID 按 call id 回填子会话链接 - 从 session_v2 读取 agent/model/tokens/cost 与 time_idle/idle_outcome 终态 - 移除无链接 running 条目的时间阈值猜测;扫描/对账/用量轮询均走真实数据 - 新增 /subagent-db 开关、设置菜单项、4 语言文案与 tests/db-index.test.ts
Owner
- session_v2.model 是序列化 JSON 文本;modelIdOf 现在解析并取 id
- 适配层改用共享的 modelIdOf(去掉本地副本)
- validModel 拒绝以 "{" 开头的脏值,防旧 KV 数据回显
- 新增 JSON 形态的单元测试
Contributor
Author
|
感谢反馈!确认是本 PR 的本地库补充路径引入的问题,已在 原因: 修复:
验证: 麻烦再试一下;如果还有异常,截图给我,我继续跟进。 |
Owner
|
感谢你的修复,代码合并后,我会尽快发布新版本,感谢你的支持 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

修复
id,扫描对每个 part 都找不到 key(seen=N, booked=0),侧栏既不显示也不更新。→ 保留part.id;扫描同时把终态条目的 sessionId / tokens / cost / model 回填到已有条目。metadata为空壳({})时,扫描停在空壳上、读不到state.metadata里的子会话 ID,导致「后台任务保持运行」的判定失效——子代理还在跑,侧栏却已标成 done(运行时无 running 计数)。→ 新增partMetadata统一读取 part/state 两级并忽略空壳;适配层改为合并两级 metadata 后再双写 session_id/sessionId。KVApi.update原子读-改-写,并用合并规则(终态优先 + 字段并集,mergeSubEntries)落盘;宿主没有update时退回读-改-写。session.model是对象({ providerID, id }),旧代码String()后写入"[object Object]"。→ 统一modelIdOf提取 id;历史脏值会被重新读取修复,无法修复时不再显示。新增
$0.42,2 位小数);/subagent-cost可开关列表内条目费用(4 位小数,默认关;展开区始终显示)。/subagent-time、/subagent-tokens开关列表内耗时与 Token(默认开,行为与旧版一致)。/subagent-config设置摘要;/subagent-sections原生循环设置菜单(V2)。/subagent-time-format耗时格式:short(默认)/ decimal / clock / compact / seconds。/subagent-db或设置菜单可关):只读读取宿主opencode.db(可用OPENCODE_DB覆盖路径,遵循XDG_DATA_HOME,bun:sqlite动态加载):state.metadata.sessionID,按 call id 回填前台子代理缺失的子会话链接(session.tool.success事件流里 host 不带该字段);session_v2读取子会话的 agent / model / tokens / cost,并以time_idle/idle_outcome作为真实终态(interrupted视为取消);bun:sqlite不可用或结构不符时静默回退宿主 API,绝不影响面板其余功能。验证
npm run typecheck/npm run build/npm test:26 项测试全部通过。metadata.sessionID回填(示例call_00_ezBAm9vqjFCWRCjYpzeI2029→ses_f2f98c74cffefP04Np4yGiL7PL),model / tokens 与time_idle终态一致。npm test步骤。备注
short(45.32s / 112m35s)。/subagent-config与/subagent-sections为 V2 专属,其余命令 V1 均有对应)。