import type { ExtensionAPI } from "@earendil-works/pi-coding-agent"; import type { McpConfig, ServerEntry } from "./types.ts"; export declare function openUrl(pi: ExtensionAPI, url: string, browser?: string, signal?: AbortSignal): Promise; export declare function openPath(pi: ExtensionAPI, targetPath: string): Promise; export declare function parallelLimit(items: T[], limit: number, fn: (item: T) => Promise): Promise; export declare function getConfigPathFromArgv(): string | undefined; export declare function interpolateEnvVars(value: string): string; export declare function toStringRecord(value: unknown): Record | undefined; export declare function interpolateEnvRecord(values: Record | undefined): Record | undefined; /** Resolve a secret value, executing only a single leading `!` command marker. */ export declare function resolveCommandSecret(value: string, context: string): string; export declare function resolveCommandSecret(value: undefined, context: string): undefined; export declare function resolveCommandSecret(value: string | undefined, context: string): string | undefined; /** Resolve command markers in a configured record without mutating the input. */ export declare function resolveCommandSecretsRecord(values: Record | undefined, context: (key: string) => string): Record | undefined; export declare function resolveServerUrl(definition: Pick): string | undefined; export declare function resolveConfigPath(value: string | undefined): string | undefined; export declare function resolveBearerToken(definition: Pick): string | undefined; /** Remove OSC control strings, including payloads that have no terminator. */ export declare function stripOscSequences(text: string): string; export declare function sanitizeTerminalText(text: string): string; export declare function formatTerminalError(error: unknown): string; export declare function truncateAtWord(text: string, target: number): string; /** * Invoke an extension-owned callback from a detached boundary (timer, * EventEmitter, transport listener). Synchronous throws and async rejections * are routed to `report` instead of reaching Node's process-level error path. * Callers keep their own labeled reporter so diagnostics stay channel-specific. */ export declare function invokeContainedCallback(callback: ((...args: any[]) => unknown) | undefined, args: readonly unknown[], report: (error: unknown) => void): void; export declare function normalizeDirectToolInputSchema(schema: unknown): Record; export declare function formatAuthRequiredMessage(config: Pick, serverName: string, defaultMessage: string): string; export declare function formatMcpStatus(config: Pick, message: string): string | undefined; /** * Extract the adapter-owned UI stream mode from tool metadata. */ export declare function extractToolUiStreamMode(toolMeta: Record | undefined): "eager" | "stream-first" | undefined;