/** * The `tools` literal-access scan a screen's source goes through * (`server/checking/component-screen.ts`), plus the specifier set a capture * walk may leave uncaptured because the render venue answers it itself * (`@vendoai/vendo/actions` sync/capture.ts). */ /** The module specifiers the sandboxed render venue resolves for a ported * screen without a capture: React and its runtimes. */ export declare const IN_CLIENT_ALLOWED_MODULES: readonly ["react", "react-dom", "react-dom/client", "react/jsx-runtime", "react/jsx-dev-runtime"]; /** * Third-party packages the render venue resolves for a captured host component, * so a ported screen that imports them renders at all: * - `clsx` + `tailwind-merge`: the shadcn `lib/cn.ts` default, which almost * every registered component imports transitively. * - `zod`: hosts declare `props:` schemas next to the component, so the * component's own module imports zod (Vendo's documented registry pattern). * * Deliberately hard to grow: a charting or data library is large, a * version-compatibility hazard, and a host importing one still gets an honest * "cannot render" instead of a bundle nobody asked for. The venue answers with * OUR pinned copy, so a host on a different major can see behaviour that differs. */ export declare const IN_CLIENT_BUNDLED_PACKAGES: readonly ["clsx", "tailwind-merge", "zod"]; export declare const isPinnedPackage: (pin: string) => boolean; /** A module specifier the render venue can resolve at runtime — the question a * producer asks before shipping a captured closure. */ export declare const isIslandResolvableSpecifier: (specifier: string) => boolean; export interface IslandToolScan { /** Every literal `tools.a.b` member chain, in source order, deduplicated. */ paths: string[][]; /** Literal-member-access-only violations (computed access, aliasing). */ violations: string[]; } /** Scan island source for ambient `tools` usage. Literal member access only: * computed access and aliasing are violations (TASK §2); CALLED chains are * returned for manifest inference. An un-called chain in prose (JSX text like * "great tools.Buy now") is ignored; an un-called chain being assigned or * passed around is the aliasing violation. */ export declare function scanIslandTools(source: string): IslandToolScan; /** Resolve one literal member chain to a registry tool name. Tool names never * contain dots (TOOL_NAME_PATTERN), so `tools.clients.search` names the tool * `clients_search` and `tools.list_invoices` names it directly. */ export declare function resolveIslandToolName(path: readonly string[], known: ReadonlySet): string | null; //# sourceMappingURL=screen-tools-scan.d.ts.map