64 lines
2.3 KiB
TypeScript
64 lines
2.3 KiB
TypeScript
// 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().optional(),
|
|
framework_type: z.string().optional(),
|
|
});
|
|
export type GetSymbolInfoInputT = z.infer<typeof GetSymbolInfoInput>;
|
|
|
|
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<CodecontextResponse> {
|
|
const args: Record<string, unknown> = { 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<GetSymbolInfoInputT> = {
|
|
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);
|
|
},
|
|
};
|