search_seqtypes
Search animation sequence definitions in the seqtypes.txt file to quickly locate relevant data using a query term and pagination options.
Instructions
Search the seqtypes.txt file for animation sequence definitions.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination | |
| pageSize | No | Number of results per page | |
| query | Yes | The term to search for in the file |
Implementation Reference
- index.ts:346-348 (registration)Registration of the 'search_seqtypes' tool in getToolDefinitions(), listing it among other search tools with its description.name: "search_seqtypes", description: "Search the seqtypes.txt file for animation sequence definitions.", },
- index.ts:431-455 (handler)Handler logic in the CallToolRequestSchema switch statement. Maps 'search_seqtypes' to 'seqtypes.txt' and invokes the shared searchFile function with pagination.case "search_varptypes": case "search_varbittypes": case "search_iftypes": case "search_invtypes": case "search_loctypes": case "search_npctypes": case "search_objtypes": case "search_rowtypes": case "search_seqtypes": case "search_soundtypes": case "search_spottypes": case "search_spritetypes": case "search_tabletypes": const fileSearchArgs = getSchemaForTool(name).parse(args) as { query: string; page?: number; pageSize?: number }; const { query, page: filePage = 1, pageSize: filePageSize = 10 } = fileSearchArgs; const filename = `${name.replace('search_', '')}.txt`; const filePath = path.join(getDataDir(), filename); if (!fileExists(filename)) { return responseToString({ error: `${filename} not found in data directory` }); } const fileResults = await searchFile(filePath, query, filePage, filePageSize); return responseToString(fileResults);
- index.ts:52-56 (schema)FileSearchSchema: Zod schema used for input validation of search_* tools including search_seqtypes, as selected by getSchemaForTool when toolName.startsWith('search_').const FileSearchSchema = z.object({ query: z.string().describe("The term to search for in the file"), page: z.number().int().min(1).optional().default(1).describe("Page number for pagination"), pageSize: z.number().int().min(1).max(100).optional().default(10).describe("Number of results per page") });
- index.ts:102-168 (helper)searchFile helper function: Core implementation that performs case-insensitive search in the specified file (seqtypes.txt for this tool), supports pagination, formats results as ID-value pairs.async function searchFile(filePath: string, searchTerm: string, page: number = 1, pageSize: number = 10): Promise<any> { //replace spaces with underscores searchTerm = searchTerm.replace(" ", "_"); return new Promise((resolve, reject) => { if (!fs.existsSync(filePath)) { reject(new Error(`File not found: ${filePath}`)); return; } const results: {line: string, lineNumber: number}[] = []; const fileStream = fs.createReadStream(filePath); const rl = readline.createInterface({ input: fileStream, crlfDelay: Infinity }); let lineNumber = 0; rl.on('line', (line) => { lineNumber++; if (line.toLowerCase().includes(searchTerm.toLowerCase())) { results.push({ line, lineNumber }); } }); rl.on('close', () => { const totalResults = results.length; const totalPages = Math.ceil(totalResults / pageSize); const startIndex = (page - 1) * pageSize; const endIndex = startIndex + pageSize; const paginatedResults = results.slice(startIndex, endIndex); // Process the results to extract key-value pairs if possible const formattedResults = paginatedResults.map(result => { // Try to format as key-value pair (common for ID data files) const parts = result.line.split(/\s+/); if (parts.length >= 2) { const id = parts[0]; const value = parts.slice(1).join(' '); return { ...result, id, value, formatted: `${id}\t${value}` }; } return result; }); resolve({ results: formattedResults, pagination: { page, pageSize, totalResults, totalPages, hasNextPage: page < totalPages, hasPreviousPage: page > 1 } }); }); rl.on('error', (err) => { reject(err); }); }); }