import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import type { ToolContext } from "../tool-context.js"; /** Parse once per distinct set of file mtimes. */ export declare function cached(key: string, files: string[], build: () => T): T; /** Drop every cached parse (tests). */ export declare function clearIntrospectionCache(): void; export interface EnumEntry { name: string; value: number; comment?: string; } /** * Parse a C++ `enum class` body: bare entries count up from 0, an explicit * `= N` resets the counter, `Max` and `COUNT` sentinels are dropped, and a * trailing `///<` comment becomes the description. */ export declare function parseEnumClass(source: string, name: string): EnumEntry[]; export interface RegisteredApp { name: string; icon: string | null; priority: number | null; padLogic: string | null; source: string; } /** * Find REGISTER_APP / REGISTER_APP_PL / REGISTER_LVGL_APP_PAD registrations. * * The generator that builds app_registry_init.cpp scans the same way, so this * sees what the firmware will actually register — including the `_PL` variants * and apps that live in installed components, both of which the v9 * `list_apps_source` grep missed. */ export declare function parseRegisteredApps(source: string, file: string): RegisteredApp[]; export interface SettingsField { group: string; field: string; type: string; comment?: string; } /** Parse the nested structs of CrosspadSettings.hpp into group/field rows. */ export declare function parseSettings(source: string): SettingsField[]; /** * Register the static-introspection resources. Anything whose source files are * absent still registers and reports `available: false` with the path it looked * at — a resource that vanishes is harder to debug than one that explains * itself. */ export declare function registerIntrospectionResources(server: McpServer, _ctx: ToolContext): string[];