Skip to main content
Glama
tasks.ts2.15 kB
/** * Tasks REST API 路由 */ import type { FastifyInstance } from 'fastify'; import type { ApiContext } from '../server.js'; export function registerTasksRoutes(fastify: FastifyInstance, ctx: ApiContext): void { const { cli } = ctx; /** * GET /api/changes/:id/tasks - 获取变更的任务列表 */ fastify.get('/changes/:id/tasks', async (request, reply) => { const { id } = request.params as { id: string }; const result = await cli.getTasks(id); return result; }); /** * PATCH /api/changes/:id/tasks/:taskId - 更新任务状态 */ fastify.patch('/changes/:id/tasks/:taskId', async (request, reply) => { const { id, taskId } = request.params as { id: string; taskId: string }; const { status } = request.body as { status: 'pending' | 'in_progress' | 'done' }; if (!status || !['pending', 'in_progress', 'done'].includes(status)) { return reply.status(400).send({ error: 'Invalid status' }); } const result = await cli.updateTaskStatus(id, taskId, status); if (result.success) { // 广播任务更新事件 ctx.broadcast('task:updated', { changeId: id, taskId, status }); return { success: true, taskId, status }; } else { return reply.status(400).send(result); } }); /** * GET /api/progress - 获取所有变更的进度汇总 */ fastify.get('/progress', async () => { const changes = await cli.listChanges(); const summaries = []; for (const change of changes) { const { progress } = await cli.getTasks(change.id); summaries.push({ changeId: change.id, title: change.title, progress, }); } // 计算总体进度 const totalTasks = summaries.reduce((sum, s) => sum + s.progress.total, 0); const completedTasks = summaries.reduce((sum, s) => sum + s.progress.completed, 0); const overallPercentage = totalTasks > 0 ? Math.round((completedTasks / totalTasks) * 100) : 0; return { summaries, overall: { total: totalTasks, completed: completedTasks, percentage: overallPercentage, }, }; }); }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Lumiaqian/openspec-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server