import type { ExtensionAPI } from "@earendil-works/pi-coding-agent"; import type { AftConfig } from "./config.js"; import { type PiHarness } from "./harness.js"; import type { PluginContext } from "./types.js"; export interface PiToolSurface { /** Whether AFT replaces host-native tool names instead of registering aft_ alternatives. */ hoistBuiltinTools: boolean; hoistBash: boolean; hoistPowershell: boolean; hoistRead: boolean; hoistWrite: boolean; hoistEdit: boolean; hoistGrep: boolean; restrictToProjectRoot: boolean; outline: boolean; zoom: boolean; semantic: boolean; inspect: boolean; navigate: boolean; conflicts: boolean; importTool: boolean; safety: boolean; delete: boolean; move: boolean; astSearch: boolean; astReplace: boolean; } /** Return Pi's enabled built-in PowerShell state when its live registry is readable. */ export declare function piPowerShellEnabledFromHost(pi: ExtensionAPI): boolean | undefined; /** * Select the hashline schema only when both the edit and tagged-read slots survive. * * Only a tagged AFT read mints the `[path#TAG]` snapshots a hashline patch * addresses, so an edit slot on its own is not a usable hashline surface: the * host keeps serving its own untagged read and the agent has nothing to patch * against. Mirrors `openCodeHashlineEffective` and the core's * `RegistrationRequest::effective`. */ export declare function piHashlineEffective(config: AftConfig, surface: Pick): boolean; /** One `hashline_downgraded` warning describing why the hashline arm was refused. */ export interface PiHashlineDowngradeWarning { code: "hashline_downgraded"; reason: "edit_not_registered" | "tagged_read_unavailable"; } /** * Classify a requested-but-refused hashline surface for the warning channel. * * The read slot is reported first for the same reason the core reports it * first: a session can keep a working `edit` tool beside an untagged host read, * and the "I never got a hashline" symptom then points at the wrong tool. */ export declare function piHashlineDowngrade(config: AftConfig, surface: Pick): PiHashlineDowngradeWarning | null; /** Resolve the feature predicates used by Pi's production registration path. */ export declare function resolvePiToolSurface(config: AftConfig, pi?: ExtensionAPI): PiToolSurface; /** * Wrap an ExtensionAPI instance so every `pi.registerTool` call flows through the * shared registration funnel with harness-aware loadMode and guidance folding. */ export declare function bindToolRegistrationFunnel(pi: ExtensionAPI, ctx: PluginContext, harness?: PiHarness): ExtensionAPI; /** * Invoke every Pi tool registration branch for the resolved production surface. * Commands, prompt hints, and lifecycle hooks intentionally remain outside this * function because they are not entries in the agent-facing tool registry. */ export declare function registerPiToolSurface(pi: ExtensionAPI, ctx: PluginContext, surface: PiToolSurface, harness?: PiHarness): void; //# sourceMappingURL=tool-registration.d.ts.map