// v1.12 Track B.2: codecontext wrapper — get_symbol_info. import { z } from 'zod'; import type { ToolDef } from '../../tools.js'; import { callCodecontext, type CodecontextResponse } from '../../codecontext_client.js'; export const GetSymbolInfoInput = z.object({ symbol_name: z.string().min(1), file_path: z.string().trim().optional(), framework_type: z.string().optional(), }); export type GetSymbolInfoInputT = z.infer; const DESCRIPTION = 'Returns detailed information about a named symbol: definition location, kind (function/class/method/etc.), and (when known) framework-specific context (React component, Vue store, Angular service, …). ' + 'Tree-sitter coverage: full for JS/Python/Java/Go/Rust/C++. TypeScript symbols are approximate (uses JS grammar). ' + 'PHP and SQL are not supported — fall back to grep for those.'; export async function executeGetSymbolInfo( input: GetSymbolInfoInputT, projectPath: string, fetcher: typeof fetch = fetch, ): Promise { const args: Record = { symbol_name: input.symbol_name }; if (input.file_path) args['file_path'] = input.file_path; if (input.framework_type) args['framework_type'] = input.framework_type; return callCodecontext({ toolName: 'get_symbol_info', args, projectPath }, fetcher); } export const getSymbolInfo: ToolDef = { name: 'get_symbol_info', description: DESCRIPTION, inputSchema: GetSymbolInfoInput, jsonSchema: { type: 'function', function: { name: 'get_symbol_info', description: DESCRIPTION, parameters: { type: 'object', properties: { symbol_name: { type: 'string', description: 'The symbol name to look up (case-sensitive).', }, file_path: { type: 'string', description: 'Narrow to a specific file when the symbol name is ambiguous.', }, framework_type: { type: 'string', description: 'Hint for framework-specific extraction (react|vue|svelte|django|fastapi|express|nest|…).', }, }, required: ['symbol_name'], additionalProperties: false, }, }, }, async execute(input, projectRoot) { return await executeGetSymbolInfo(input, projectRoot); }, };