BooCode wrapper tools for the 4 new MCP tools added to the codecontext sidecar (Go side committed separately at /opt/forks/codecontext). - get_blast_radius: reverse-edge BFS — "what breaks if I change this?" - get_hot_files: most-imported files by incoming edge count - get_routes: Fastify/Express route extraction via tree-sitter AST - get_middleware: middleware detection via import + registration patterns Wrappers follow the existing codecontext pattern: Zod input → callCodecontext → ToolDef export. Registered in ALL_TOOLS (alpha-sorted). All 4 are read-only. codecontext sidecar rebuilt from commit b19e646 with the 4 new Go handlers (2130 lines, 29 tests). Reviewer fixes applied: defer RUnlock on Tier 2 handlers, extractObjectProperty delegates to extractStringValue for template-literal route paths. 363/363 server tests passing. No schema changes, no frontend changes. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
import { z } from 'zod';
|
|
import type { ToolDef } from '../../tools.js';
|
|
import { callCodecontext, type CodecontextResponse } from '../../codecontext_client.js';
|
|
|
|
export const GetHotFilesInput = z.object({
|
|
limit: z.number().int().min(1).max(100).optional(),
|
|
});
|
|
export type GetHotFilesInputT = z.infer<typeof GetHotFilesInput>;
|
|
|
|
const DESCRIPTION =
|
|
'Returns the most-imported files in the project, ranked by incoming import count. ' +
|
|
'Hot files are high-risk change targets — many other files depend on them. ' +
|
|
'Use to identify core modules and assess refactoring risk.';
|
|
|
|
export async function executeGetHotFiles(
|
|
input: GetHotFilesInputT,
|
|
projectPath: string,
|
|
fetcher: typeof fetch = fetch,
|
|
): Promise<CodecontextResponse> {
|
|
return callCodecontext(
|
|
{ toolName: 'get_hot_files', args: input.limit != null ? { limit: input.limit } : {}, projectPath },
|
|
fetcher,
|
|
);
|
|
}
|
|
|
|
export const getHotFiles: ToolDef<GetHotFilesInputT> = {
|
|
name: 'get_hot_files',
|
|
description: DESCRIPTION,
|
|
inputSchema: GetHotFilesInput,
|
|
jsonSchema: {
|
|
type: 'function',
|
|
function: {
|
|
name: 'get_hot_files',
|
|
description: DESCRIPTION,
|
|
parameters: {
|
|
type: 'object',
|
|
properties: {
|
|
limit: {
|
|
type: 'number',
|
|
description: 'Maximum number of files to return (default 20, max 100).',
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
},
|
|
async execute(input, projectRoot) {
|
|
return await executeGetHotFiles(input, projectRoot);
|
|
},
|
|
};
|