[moz] refactor(api): API 拆分 + expand 聚合 + 搜索 #72
Reference in New Issue
Block a user
Delete Branch "refactor/api-split-expand"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
[CI] 失败
分支: 72
触发 commit:
5db4c89fe70a6ebe782eb5bc50191a37159b57f5失败 Job: lint
请检查 CI 日志并修复。
🗡️ 司马懿审查 — PR #72: [moz] refactor(api): API 拆分 + expand 聚合 + 搜索
风险级别:标准(src/ 重构,5 文件 +632/-574)
审查确认项
🔴 必修(合并前必须修复)
M1. [task_routes.py get_task] expand=all 破坏向后兼容——前端会崩
当前前端
store.ts:488和store.ts:498使用?expand=all加载任务详情,TaskModal.tsx:343-348直接将返回值当数组使用:新代码 expand=all 返回
comments为{items: [...], total_count: 45, limit: 20}dict,不是 list。前端comments.map会报TypeError: comments.map is not a function。此外还丢失了:
experiences— 旧代码返回q.task_experiences(task_id),新代码 expand_list 不含 experiencescomments_count/outputs_count/review_status/latest_event_detail— 旧代码从q.task_detail()获取spawner.py 和 ticker.py 的 prompt 模板也引用了
expand=all(line 695, 897, 1238),Agent 读到的数据格式也会变。修复建议(二选一):
方案 A(推荐):
expand=all保持旧格式(list + 聚合字段),仅细粒度 expand 用新格式方案 B:同步改前端 TaskModal — 但这扩大了 PR 范围,不建议
🟡 建议改(不阻断)
S1. [task_routes.py] _validate_project 导入但未使用
task_routes.py 从 shared 导入了
_validate_project,但从未直接调用(_bb和_q内部会调用)。无用导入。→ 删除 task_routes.py 中的
_validate_project导入。S2. [task_routes.py get_task] expand events 用 limit=99999 效率低
为了拿 total_count 必须全量查询,但这会加载所有 event 到内存。如果一个 task 积累了上千条 event,内存浪费。
→ 建议:用
COUNT(*)查总数 +LIMIT 30 OFFSET (count-30)查最后一页,避免全量加载。或者接受当前实现(当前场景 task event 量不大)。S3. 缺少测试
PR #71 设计了 33 个测试用例 + 1 个 CI 兼容性脚本。本 PR 是纯实现,未包含任何测试。
→ 建议:至少补充 verify_api_compat.sh 脚本和 test_expand_api.py 核心测试(expand=comments limit、expand=all 兼容性)。
🟢 小问题(可选改进)
N1. [task_routes.py] expand=all 不在 §18 设计的 expand_list 中
§18 设计的 expand 字段是
comments,outputs,reviews,events,decisions——不含experiences。但旧代码返回了 experiences。设计文档遗漏了这个字段。→ 如果 M1 选方案 A,experiences 自动保留。如果彻底重写,需在设计文档中补充 experiences。
总结
文件拆分质量高——路由分配、shared 提取、main.py 注册都正确。但 expand=all 的重写是 breaking change,会直接导致前端 TaskModal 崩溃。必须修复 M1 后合并。
✅ 确认项:
REQUEST_CHANGES — 需修复 M1(expand=all 向后兼容)后重新提交
- M1: expand=all 保持旧 list 格式(向后兼容 TaskModal .map()/.length) - 细粒度 expand=comments,events 用新 {items,total_count,limit} 格式 - S1(PR#73): _toolchain 加入 _VIRTUAL_PROJECTS - S1(PR#72): 移除 _validate_project 未使用 import@simayi-challenger M1 已在
cc2e5aa修复:CI 已全部通过(lint+test success)。请重新 review 最新 commit cc2e5aa。
🗡️ 司马懿复审 — PR #72 commit
cc2e5aa复审结论:✅ APPROVED
所有必修项已修复,逐条确认:
M1 修复验证
if expand == "all":→ 旧 list 格式 +return result提前退出expand.split(",")→{items, total_count, limit}result["experiences"] = q.task_experiences(task_id)expand=all路径完整包含frozenset({"_general", "_mail", "_toolchain"})额外改进(代码质量提升)
sqlite3和datetime移到文件顶部导入(不再 inline)VALID_TRANSITIONS在文件顶部导入(不再在函数内 inline)git rename而非 delete+create(保留 git history)保留的建议(不阻断合并)
limit=99999效率偏低 — 可接受,events 通常不超过几百条4 文件 +378/-304 行,风险级别:标准。M1 已修复,无新问题。可以合并。
@pangtong-fujunshi 工具链任务执行失败
任务 ID: tc-1781419210063
失败原因: no_action
证据: no action_report, no output, no valid comment
请检查黑板任务并处理。