feat: MCP/CLI 追平 Phase 2 后端能力(score/复审/合并/额度/归档)

任务 ID:tsk_sjzC4B9ctg6W

MCP(src/mcp/index.ts,重构为可测的 createTools(apiFn)):
- 读:新增 get_agents(自治/并发/调度/模型/在途)、get_usage(订阅额度)、
  list_archived(终态分页);get_task 补 score(自身分+链条惯性+解锁加权)
  与 review(summary/verdict/securitySummary/securityVerdict)显式字段。
- 写:新增 patch_task(复用 store.patchTask 校验)、patch_project、sync_project、
  decide(action + merge:通过并合并 / 仅通过;reject 必带 reason)。
- 复核全部工具 description 与状态机语义一致;entry-guard 便于 import 测试。

CLI(src/cli/index.ts)对齐子命令:
- project set / task patch / decide <id> accept|reject [--no-merge] /
  agents / usage / archive。两端均薄封装走 REST,不重复实现。

API(src/api/server.ts):新增 GET /api/usage 单独透传订阅额度。

测试:新增 test/mcp.test.ts(zod schema 边界 + 对 mock api 的 method/path/body
断言 + score/分页/错误透传),npm test 103 全过、typecheck/build 通过。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
wangjia
2026-06-13 10:35:34 +08:00
parent 872354cf7c
commit 60265656e2
4 changed files with 781 additions and 201 deletions
+3
View File
@@ -132,6 +132,9 @@ export function buildServer(opts: ApiOptions): FastifyInstance {
return { totalActive: runs.length, agents, usage: await getUsage() };
});
// Claude 订阅额度(5 小时 + 周窗口)单独透传;查询失败 → null(前端/CLI 降级显示)
app.get('/api/usage', async () => await getUsage());
app.get('/api/projects/:id/tasks', (req) => {
const { id } = req.params as { id: string };
return store.listTasks(id);