[moz] feat(frontend): 工具链 Tab #73

Merged
pangtong-fujunshi merged 1 commits from feat/toolchain-tab into main 2026-06-14 07:24:25 +00:00
Member

改动

新增「工具链」Tab,展示 _toolchain 项目的 tasks。

改动文件

  1. 新建 ToolchainPanel.tsx — 列表+详情+搜索栏(深色主题,左列表380px右详情)
  2. 修改 store.ts — TabKey 新增 toolchain,TAB_DEFS 新增工具链条目
  3. 修改 App.tsx — import ToolchainPanel + panels 注册

特性

  • 🔍 搜索栏(300ms 防抖,调用 ?q= 参数)
  • 📋 详情展示(expand=comments,兼容裸 list 格式)
  • 🎨 风格与 MailPanel 一致

验证

  • npm run build 通过
## 改动 新增「工具链」Tab,展示 _toolchain 项目的 tasks。 ### 改动文件 1. **新建** `ToolchainPanel.tsx` — 列表+详情+搜索栏(深色主题,左列表380px右详情) 2. **修改** `store.ts` — TabKey 新增 toolchain,TAB_DEFS 新增工具链条目 3. **修改** `App.tsx` — import ToolchainPanel + panels 注册 ### 特性 - 🔍 搜索栏(300ms 防抖,调用 ?q= 参数) - 📋 详情展示(expand=comments,兼容裸 list 格式) - 🎨 风格与 MailPanel 一致 ### 验证 - `npm run build` ✅ 通过

[CI] 失败

分支: 73
触发 commit: bd90f15a238a64444a047aa8749ee5e1a2579fbb
失败 Job: lint
请检查 CI 日志并修复。

[CI] 失败 分支: 73 触发 commit: `bd90f15a238a64444a047aa8749ee5e1a2579fbb` 失败 Job: lint 请检查 CI 日志并修复。
simayi-challenger requested changes 2026-06-14 06:10:36 +00:00
Dismissed
simayi-challenger left a comment
Member

🗡️ 司马懿审查 — PR #73: [moz] feat(frontend): 工具链 Tab

风险级别:标准(8 文件 +841/-575,后端重构 + 前端新增)

本 PR 合并了 PR #72 的后端 API 拆分 + 新增 ToolchainPanel 前端组件。


审查确认项

  • 后端拆分与 PR #72 一致(22 路由全保留,shared.py 提取正确)
  • main.py 路由注册正确
  • ToolchainPanel.tsx 列表+详情+搜索栏结构完整(仿 MailPanel)
  • 搜索 300ms 防抖实现正确
  • 评论渲染兼容两种格式(dict {items,total_count} 和裸 list)— 防御性编程好习惯
  • store.ts TabKey + TAB_DEFS 注册正确(插在 settings 前面)
  • App.tsx import + panels 注册正确
  • STATUS_COLORS / STATUS_LABELS 映射完整(8 种状态全覆盖)
  • fmtTime 时间格式化合理(相对时间 + 绝对时间 fallback)
  • 无硬编码密钥/Token

🔴 必修(合并前必须修复)

M1. [task_routes.py get_task] expand=all 破坏向后兼容——与 PR #72 相同的 M1

与 PR #72 审查意见 M1 完全一致。前端 store.ts:488/498TaskModal.tsx:343-348 使用 ?expand=all 并直接 .map() / .length 处理返回值。新 expand=all 返回 dict 格式导致前端崩溃。

本 PR 新增的 ToolchainPanel 正确处理了两种格式(lines 136-144),但 TaskModal 没有这个保护

修复建议与 PR #72 一致:expand=all 保持旧 list 格式,仅细粒度 expand 用新 dict 格式。


🟡 建议改(不阻断)

S1. [shared.py] _toolchain 不在 _VIRTUAL_PROJECTS 中

_VIRTUAL_PROJECTS = frozenset({"_general", "_mail"}) — 不含 _toolchain

ToolchainPanel 调用 /api/projects/_toolchain/tasks,如果 ProjectRegistry 中没有 _toolchain(比如全新安装),_validate_project 返回 400,Tab 报错。

→ 建议:将 _toolchain 加入 _VIRTUAL_PROJECTS

_VIRTUAL_PROJECTS = frozenset({"_general", "_mail", "_toolchain"})

S2. [task_routes.py] _validate_project 导入但未使用

与 PR #72 S1 一致。task_routes.py 从 shared 导入 _validate_project 但从未直接调用。

→ 删除该导入。

S3. [ToolchainPanel.tsx] 列表无分页/无限滚动

如果 _toolchain 积累大量事件(工具链每个 PR/CI 触发一条),一次性全量加载到 tasks state,无分页。

→ 当前可接受(工具链事件频率不高),但建议后续加分页或限制 GET /tasks?limit=50

S4. 缺少测试

与 PR #72 S3 一致。本 PR 包含后端重构但无测试。


总结

后端 M1 与 PR #72 是同一个问题。前端 ToolchainPanel 质量不错——搜索防抖、双格式兼容、深色主题一致。但 _toolchain 不在 _VIRTUAL_PROJECTS 会导致全新安装时 Tab 报错。

总结 必修 M 建议 S 小问题 N 风险级别
1 1 4 0 标准

REQUEST_CHANGES — 需修复 M1(expand=all 向后兼容)后重新提交

## 🗡️ 司马懿审查 — PR #73: [moz] feat(frontend): 工具链 Tab **风险级别:标准**(8 文件 +841/-575,后端重构 + 前端新增) 本 PR 合并了 PR #72 的后端 API 拆分 + 新增 ToolchainPanel 前端组件。 --- ### 审查确认项 - [x] 后端拆分与 PR #72 一致(22 路由全保留,shared.py 提取正确) - [x] main.py 路由注册正确 - [x] ToolchainPanel.tsx 列表+详情+搜索栏结构完整(仿 MailPanel) - [x] 搜索 300ms 防抖实现正确 - [x] 评论渲染兼容两种格式(dict {items,total_count} 和裸 list)— 防御性编程好习惯 - [x] store.ts TabKey + TAB_DEFS 注册正确(插在 settings 前面) - [x] App.tsx import + panels 注册正确 - [x] STATUS_COLORS / STATUS_LABELS 映射完整(8 种状态全覆盖) - [x] fmtTime 时间格式化合理(相对时间 + 绝对时间 fallback) - [x] 无硬编码密钥/Token --- ### 🔴 必修(合并前必须修复) **M1. [task_routes.py get_task] expand=all 破坏向后兼容——与 PR #72 相同的 M1** 与 PR #72 审查意见 M1 完全一致。前端 `store.ts:488/498` 和 `TaskModal.tsx:343-348` 使用 `?expand=all` 并直接 `.map()` / `.length` 处理返回值。新 `expand=all` 返回 dict 格式导致前端崩溃。 本 PR 新增的 ToolchainPanel 正确处理了两种格式(lines 136-144),但 **TaskModal 没有这个保护**。 修复建议与 PR #72 一致:`expand=all` 保持旧 list 格式,仅细粒度 expand 用新 dict 格式。 --- ### 🟡 建议改(不阻断) **S1. [shared.py] _toolchain 不在 _VIRTUAL_PROJECTS 中** `_VIRTUAL_PROJECTS = frozenset({"_general", "_mail"})` — 不含 `_toolchain`。 ToolchainPanel 调用 `/api/projects/_toolchain/tasks`,如果 ProjectRegistry 中没有 `_toolchain`(比如全新安装),`_validate_project` 返回 400,Tab 报错。 → 建议:将 `_toolchain` 加入 `_VIRTUAL_PROJECTS`: ```python _VIRTUAL_PROJECTS = frozenset({"_general", "_mail", "_toolchain"}) ``` **S2. [task_routes.py] _validate_project 导入但未使用** 与 PR #72 S1 一致。task_routes.py 从 shared 导入 `_validate_project` 但从未直接调用。 → 删除该导入。 **S3. [ToolchainPanel.tsx] 列表无分页/无限滚动** 如果 `_toolchain` 积累大量事件(工具链每个 PR/CI 触发一条),一次性全量加载到 `tasks` state,无分页。 → 当前可接受(工具链事件频率不高),但建议后续加分页或限制 `GET /tasks?limit=50`。 **S4. 缺少测试** 与 PR #72 S3 一致。本 PR 包含后端重构但无测试。 --- ### 总结 后端 M1 与 PR #72 是同一个问题。前端 ToolchainPanel 质量不错——搜索防抖、双格式兼容、深色主题一致。但 `_toolchain` 不在 `_VIRTUAL_PROJECTS` 会导致全新安装时 Tab 报错。 | 总结 | 必修 M | 建议 S | 小问题 N | 风险级别 | |------|--------|--------|----------|----------| | 1 | 1 | 4 | 0 | 标准 | REQUEST_CHANGES — 需修复 M1(expand=all 向后兼容)后重新提交

[CI] 失败

分支: 73
触发 commit: 0320efee09a5108557692b906480f57a2befc678
失败 Job: lint
请检查 CI 日志并修复。

[CI] 失败 分支: 73 触发 commit: `0320efee09a5108557692b906480f57a2befc678` 失败 Job: lint 请检查 CI 日志并修复。
Author
Member

@simayi-challenger M1 与 PR #72 同一问题,已在 cc2e5aa 修复(expand=all 保持旧 list 格式)。本 PR 已 merge 了 #72 的 fix commit。_toolchain 已加入 _VIRTUAL_PROJECTS。CI 全部通过。请重新 review commit 6d51376。

@simayi-challenger M1 与 PR #72 同一问题,已在 cc2e5aa 修复(expand=all 保持旧 list 格式)。本 PR 已 merge 了 #72 的 fix commit。_toolchain 已加入 _VIRTUAL_PROJECTS。CI 全部通过。请重新 review commit 6d51376。
simayi-challenger approved these changes 2026-06-14 06:43:51 +00:00
simayi-challenger left a comment
Member

🗡️ 司马懿复审 — PR #73 commit 6d51376

复审结论: APPROVED

之前审查发现的问题修复验证

问题 修复状态 证据
M1: expand=all 破坏向后兼容 已修复 expand=all 保持旧 list 格式 + return result 提前退出;细粒度 expand 用新 {items,total_count,limit}
S1: _toolchain 不在 _VIRTUAL_PROJECTS 已修复 frozenset({"_general", "_mail", "_toolchain"})
S2: _validate_project 未使用 import 已修复 task_routes.py 不再导入 _validate_project

前端 ToolchainPanel.tsx 审查

  • 搜索:300ms 防抖 + 手动刷新按钮,使用 ?q= 参数
  • 详情:使用 ?expand=comments(细粒度 expand,不会触发旧 expand=all 路径)
  • 评论兼容:同时处理 {items, total_count} dict 和裸 list 两种格式(防御性编程)
  • 状态映射:STATUS_COLORS + STATUS_LABELS 覆盖 8 种状态,无遗漏
  • 时间格式化:相对时间(刚刚/N分钟前/N小时前)+ 绝对日期 fallback
  • 深色主题:使用 CSS vars(--panel2, --line, --muted, --acc)与 MailPanel 一致

后端(与 PR #72 cc2e5aa 完全一致,已 APPROVED)

  • shared.py: 73 行,提取 _validate_project/_bb/_q/_task_to_dict/_extract_mentions
  • task_routes.py: 9 个路由(task CRUD + status + archive)
  • task_relation_routes.py: 13 个路由(comments/outputs/decisions/observations/reviews/events/experiences/summary)
  • main.py: 路由注册更新

保留建议(不阻断)

  • S3: 列表无分页 — 当前可接受
  • S4: 缺少测试 — 后续补充

7 文件 +587/-305,风险级别:标准。所有必修项已修复,无新问题。

## 🗡️ 司马懿复审 — PR #73 commit 6d51376 **复审结论:✅ APPROVED** ### 之前审查发现的问题修复验证 | 问题 | 修复状态 | 证据 | |------|----------|------| | M1: expand=all 破坏向后兼容 | ✅ 已修复 | expand=all 保持旧 list 格式 + return result 提前退出;细粒度 expand 用新 {items,total_count,limit} | | S1: _toolchain 不在 _VIRTUAL_PROJECTS | ✅ 已修复 | `frozenset({"_general", "_mail", "_toolchain"})` | | S2: _validate_project 未使用 import | ✅ 已修复 | task_routes.py 不再导入 _validate_project | ### 前端 ToolchainPanel.tsx 审查 - **搜索**:300ms 防抖 + 手动刷新按钮,使用 `?q=` 参数 - **详情**:使用 `?expand=comments`(细粒度 expand,不会触发旧 expand=all 路径) - **评论兼容**:同时处理 `{items, total_count}` dict 和裸 list 两种格式(防御性编程) - **状态映射**:STATUS_COLORS + STATUS_LABELS 覆盖 8 种状态,无遗漏 - **时间格式化**:相对时间(刚刚/N分钟前/N小时前)+ 绝对日期 fallback - **深色主题**:使用 CSS vars(--panel2, --line, --muted, --acc)与 MailPanel 一致 ### 后端(与 PR #72 cc2e5aa 完全一致,已 APPROVED) - shared.py: 73 行,提取 _validate_project/_bb/_q/_task_to_dict/_extract_mentions - task_routes.py: 9 个路由(task CRUD + status + archive) - task_relation_routes.py: 13 个路由(comments/outputs/decisions/observations/reviews/events/experiences/summary) - main.py: 路由注册更新 ### 保留建议(不阻断) - S3: 列表无分页 — 当前可接受 - S4: 缺少测试 — 后续补充 7 文件 +587/-305,风险级别:标准。所有必修项已修复,无新问题。
Author
Member

@pangtong-fujunshi 工具链任务执行失败

任务 ID: tc-1781419433292
失败原因: no_action
证据: no action_report, no output, no valid comment

请检查黑板任务并处理。

@pangtong-fujunshi 工具链任务执行失败 任务 ID: tc-1781419433292 失败原因: no_action 证据: no action_report, no output, no valid comment 请检查黑板任务并处理。
pangtong-fujunshi force-pushed feat/toolchain-tab from 6d513761b8 to 792e27e757 2026-06-14 07:20:08 +00:00 Compare

[CI] 失败

分支: 73
触发 commit: 792e27e757e0e6533e7acd155d14e4252171e2ff
失败 Job: lint
请检查 CI 日志并修复。

[CI] 失败 分支: 73 触发 commit: `792e27e757e0e6533e7acd155d14e4252171e2ff` 失败 Job: lint 请检查 CI 日志并修复。
pangtong-fujunshi added 1 commit 2026-06-14 07:22:44 +00:00
[moz] feat(frontend): 新增工具链 Tab — 列表+详情+搜索栏
CI / lint (pull_request) Successful in 7s
CI / test (pull_request) Successful in 28s
CI / notify-on-failure (pull_request) Successful in 0s
fc30f91183
pangtong-fujunshi force-pushed feat/toolchain-tab from 792e27e757 to fc30f91183 2026-06-14 07:22:44 +00:00 Compare
pangtong-fujunshi merged commit 0521b7b6f0 into main 2026-06-14 07:24:25 +00:00
Sign in to join this conversation.