Repository navigation
feat(subagent): add management and transcript inspection - #1484
Open
CATMIAOZHI wants to merge 5 commits into
Open
CATMIAOZHI wants to merge 5 commits into
CATMIAOZHI wants to merge 5 commits into
Conversation
This was referenced Nov 9, 2026
CATMIAOZHI
marked this pull request as ready for review
November 10, 2026 22:12
CATMIAOZHI
commented
Nov 11, 2026
CATMIAOZHI
left a comment
Collaborator
Author
There was a problem hiding this comment.
审计结论:❌ 请求修改
自审:本 PR 作者为 CATMIAOZHI(本人),本次为自审。
改动(本层提交 309f22967,105 文件,+6979/−1267;对 dev 全量 diff 为 241 文件,+23383/−2268,因本 PR 堆叠在 #1481、#1482、#1483 之上):为普通子代理补齐任务卡、管理列表与只读记录查看入口,含长过程分批加载、归档与名字复用、思考强度映射、浮窗只读边界、按会话+时间戳定位的记忆编辑、对话费用估算,以及 Room 21→24 迁移(父层 21→23,本层 23→24)。
审计范围说明:本次重点审计本层提交 309f22967 及全量 diff 中的数据库迁移链;父层 #1481、#1483 的内容由各自 PR 的审计覆盖(#1482 已有 COMMENT 复审记录)。
通过的检查:
- 目标分支为
dev,无合并冲突(mergeable_state: clean)。 - 只读边界完整:浮窗发送前按捕获到的目标会话校验
chatKind == SUBAGENT,命中则 toast 提示并拒绝发送,且目标取自发送时刻捕获的快照,不随后续界面切换改变;只读记录的发送/修改入口继续受限。 - 归档逻辑严密:
archiveOverflow归档时保护运行中、待收信、待取信、正在创建子任务、名字被预留的代理及整条子树;归档后名字可复用,但按 ID 寻址(target())时归档代理会明确报错而不会误指到同名新代理;归档时丢弃的提示词/信件/终稿有注释说明且其聊天记录本身保留。 - 迁移链自洽:21→23 建
subagent_runs表,23→24 追加externalOwnerType/externalOwnerId/modelRoundCount三列,与实体定义一致;回填按持久化运行 ID(agent.runId=subagent_runs.id)匹配、不按用户可改的任务标题;旧版备份 JSON 缺新字段时有默认值,导入不受影响;dev当前为 Room 21,与本栈的 21→23→24 衔接,无MIGRATION_21_22冲突。 - 协程与线程:新增的
catch (e: Exception)处基本都先 rethrowCancellationException;磁盘/数据库 IO 均在Dispatchers.IO/Default;runBlocking只出现在测试。 - 记忆编辑落点:
saveMemoryEdit在保存前校验当前会话 ==expectedChatId且被编消息仍在当前历史中,写回时重新绑定保存那一刻的会话;片段缺失时先报错、后不执行任何删除/写入。 - 费用估算诚实标注不完整:零用量、按次计费、Claude 相关、汇率估算都会置
incomplete,界面有"部分未知/暂不可用/正在估算"三态。 - 字符串中英双语对齐:本次新增 30 条 key,
values与values-en完全一致;新增代码中无硬编码用户可见文案(仅模型提示词与日志)。 - 测试:本层新增/改动 23 个测试文件(约 +1753 行),覆盖归档分段存储、思考强度映射、转录结构、费用估算、只读浮窗等;作者称 Windows 上
:app:testDebugUnitTest1944 项中 1935 通过、9 跳过、0 失败(本机未复跑)。
问题:
- [P1]
SubagentPresentationMigration(23→24)在 Room 迁移内直接读协作存储文件且无任何容错:migrateSchema调用CollaborationStore(context).load(),而load()在 manifest/树文件损坏、版本不支持时会抛IllegalArgumentException(require)或 JSON 解析异常。迁移抛异常 → Room 升级失败;本项目未配fallbackToDestructiveMigration,升级后应用打不开数据库。回填只是尽力而为的辅助数据(三列本身有默认值/可空),不应让它决定升级成败。建议用runCatching包住load(),失败时跳过回填、仅完成加列(可记一条日志)。 - [P1] 合并协调未完成,暂不能合:作者在 PR 正文明确写"Operit2 导入器对新数据库版本的支持尚需协调,解决前不能合并";且按项目规则,涉及 Room 迁移版本号与合并顺序的 PR 须经 owner(@AAswordman)确认。在导入器协调完成、owner 确认 21→24 版本顺序前,不应合并。
- [P2]
CollaborationModelParameters.overrideConfig对非法配置直接抛原始异常:thinkingConfigurations为空串或非法 JSON 时,explicitActions抛org.json.JSONException;模型不支持 reasoning 时抛IllegalArgumentException。调用链MultiServiceManager.acquireServiceForConfig→EnhancedAIService.getModelExecutionSnapshot沿途无 try/catch,异常会直接打断子代理的模型调用。建议在函数内把解析失败转为明确的配置错误(默认值为"[]",只有存量非法配置会触发)。 - [P2]
SubagentManagement中if (chosenFilter == null && runs.isNotEmpty()) chosenFilter = initialFilter在组合期间写 state;当前不会死循环(写一次后条件即不成立),但不规范,建议移到LaunchedEffect中。 - [P3]
MessageEditor.kt:304渲染 COLLABORATION part 时用memoryFragments.first { it.timestamp == part.sourceTimestamp };当前流程下 fragments 编辑中只做 map、时间戳不会消失,实际安全,但换firstOrNull+ 跳过可防未来重构引入组合期崩溃。 - [question] PR 状态与正文矛盾:正文称"仍保持 Draft",但 GitHub 上
draft=false、mergeable_state=clean,可直接合入。请确认是应转回 draft,还是更新正文。
后续可跟进(不阻塞):作者已在正文列出真机待验证清单(任务卡授权状态、主聊天与子代理往返、长过程分批展开、编辑保存、归档筛选和空列表提示),因数据库预览版本不兼容本轮未覆盖用户手机;Lint 未运行。
由 水晴喵的muse 审计
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.
feat(subagent): add management and transcript inspection
变更说明 / Description
为普通子代理提供任务卡、管理列表和只读记录查看入口,保留往返主聊天的位置,并改善长过程的加载与展示。只有归档任务时默认显示“已归档”,空切换列表显示明确提示。
背景与动机 / Context and motivation
该层补齐 V2 协作功能的用户界面:用户可以从主聊天查看子代理任务、工具细节和用量,再返回原位置。堆叠在 #1483 之上,目标为
dev,因此当前差异包含 #1481、#1482 和 #1483 的父层内容。父层合并后将重放本层,缩小差异。改动范围 / Changes
兼容性与风险 / Compatibility and risks
当前层包含 Room 23→24 迁移,为子代理记录保存外部归属及模型轮次数。迁移只修改数据库结构并创建待恢复检查点,不读取外部协作文件,避免损坏或缺失的文件阻断普通聊天数据库打开。服务初始化后独立恢复归属,仅按运行 ID 与子会话 ID 双重匹配填写空归属;更新和清除检查点在同一事务内完成。失败保留原文件与检查点并显示错误,修复存储后重启可重试;成功后不在后续冷启动重复读取归档。协作存储引入分段格式,保留旧版读取。
最新 dev 经 #1478 恢复为 Room 21。本分支已适配
ca968ce95,按 21→23→24 迁移,保留 group 并移除已撤回的文件夹依赖。维护者已在协调回复中确认本次改动不受此前对话树层级问题影响。PR 已转为 Ready,仍按父层依赖顺序审阅;该回复不代替数据库升级及备份导入验证。 不支持覆盖安装到旧文件夹预览版。普通聊天不加入 Orbit 自动唤醒、时间/关系信封、权限自动审核后台或自动记忆学习后台。本层也不提供普通聊天归档功能。
关联 Issue / Related issue
Refs #573。该讨论包含子代理和 Goal;本层只补齐普通子代理管理与查看体验,不自动关闭整个讨论。
#1380 要求普通会话归档,与本层子代理记录归档不同,不宣称修复该 issue。
验证方式 / Verification
:app:testDebugUnitTest成功,1944 项中 1935 通过、9 跳过,0 失败。:app:testDebugUnitTest,筛选SubagentOwnerRestorationTest、ChatFeatureMigrationTest、ChatHistoryManagerPersistenceTest、CollaborationStoreTest,19 项全部通过。覆盖纯结构迁移、损坏/缺失文件、失败后重试、身份匹配、已有归属保护、取消和跨 repository 的一次性恢复。证据 / Evidence
范围与验证说明:
docs/TODO/subagent-collaboration/01-parity.md、02-list-feedback.md、docs/TODO/subagent-owner-restoration/index.md。逻辑、性能、界面静态审计均通过;静态审计不代替真机体验。提交前补充任务卡、只读工具详情、长会话返回、归档筛选和空状态记录。
检查清单 / Checklist
dev/ The target branch isdevCandidate checks覆盖改动范围,并会处理技术失败项 / Candidate checks covers the change scope and technical failures will be addressed