Skip to main content
Glama
phase-handler.ts2.93 kB
import type { Services } from '../services.js'; import type { AddPhaseInput, GetPhaseInput, GetPhasesInput, GetPhaseTreeInput, UpdatePhaseInput, UpdatePhaseStatusInput, MovePhaseInput, DeletePhaseInput, GetNextActionsInput, CompleteAndAdvanceInput, } from '../../domain/services/phase-service.js'; import { ToolError, createSuccessResponse, type ToolResult } from './types.js'; import { VALID_PHASE_FIELDS, METADATA_FIELDS, SUMMARY_FIELDS, COMPUTED_FIELDS, } from '../../domain/utils/field-filter.js'; interface PhaseArgs { action: string; [key: string]: unknown; } interface GetHistoryArgs { planId: string; phaseId: string; limit?: number; offset?: number; } interface DiffArgs { planId: string; phaseId: string; version1: number; version2: number; } export async function handlePhase(args: PhaseArgs, services: Services): Promise<ToolResult> { const { phaseService } = services; const { action } = args; let result: unknown; switch (action) { case 'add': result = await phaseService.addPhase(args as unknown as AddPhaseInput); break; case 'get': result = await phaseService.getPhase(args as unknown as GetPhaseInput); break; case 'get_many': result = await phaseService.getPhases(args as unknown as GetPhasesInput); break; case 'get_tree': result = await phaseService.getPhaseTree(args as unknown as GetPhaseTreeInput); break; case 'update': result = await phaseService.updatePhase(args as unknown as UpdatePhaseInput); break; case 'update_status': result = await phaseService.updatePhaseStatus(args as unknown as UpdatePhaseStatusInput); break; case 'move': result = await phaseService.movePhase(args as unknown as MovePhaseInput); break; case 'delete': result = await phaseService.deletePhase(args as unknown as DeletePhaseInput); break; case 'get_next_actions': result = await phaseService.getNextActions(args as unknown as GetNextActionsInput); break; case 'complete_and_advance': result = await phaseService.completeAndAdvance(args as unknown as CompleteAndAdvanceInput); break; case 'get_history': result = await phaseService.getHistory(args as unknown as GetHistoryArgs); break; case 'diff': result = await phaseService.diff(args as unknown as DiffArgs); break; case 'list_fields': // Introspection: return field metadata for phase entity result = { entity: 'phase', summary: SUMMARY_FIELDS.phase, all: Array.from(VALID_PHASE_FIELDS), metadata: METADATA_FIELDS, computed: COMPUTED_FIELDS, // Phases have computed fields: depth, path, childCount }; break; default: throw new ToolError('InvalidAction', `Unknown action for phase: ${action}`); } return createSuccessResponse(result); }

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/cppmyjob/cpp-mcp-planner'

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