import { z } from 'zod'; import type { ToolDef } from '../../tools.js'; import { callCodecontext, type CodecontextResponse } from '../../codecontext_client.js'; export const GetRoutesInput = z.object({ framework: z.string().trim().optional(), }); export type GetRoutesInputT = z.infer; const DESCRIPTION = 'Extracts HTTP routes from the project via tree-sitter AST analysis. ' + 'Detects Fastify and Express route registrations (app.get, app.post, app.route, router.use, etc.) ' + 'with method, path, file, line number, and inferred tags (db, auth, cache). ' + 'Optional framework filter narrows to "fastify" or "express".'; export async function executeGetRoutes( input: GetRoutesInputT, projectPath: string, fetcher: typeof fetch = fetch, ): Promise { const args: Record = {}; if (input.framework) args.framework = input.framework; return callCodecontext({ toolName: 'get_routes', args, projectPath }, fetcher); } export const getRoutes: ToolDef = { name: 'get_routes', description: DESCRIPTION, inputSchema: GetRoutesInput, jsonSchema: { type: 'function', function: { name: 'get_routes', description: DESCRIPTION, parameters: { type: 'object', properties: { framework: { type: 'string', description: 'Filter to a specific framework: "fastify" or "express". Omit for all.', }, }, additionalProperties: false, }, }, }, async execute(input, projectRoot) { return await executeGetRoutes(input, projectRoot); }, };