/**
 * PrepareTask's LSP phase, verbatim from the driver: the manager fold (spec > deps), the
 * LSP tool mount over the per-task env with its git-ignore filter and the leg's read face, the diagnostics lane behind its
 * four preconditions (a manager whose sessions feed a registry, write-capable hands, not opted out), the run-scoped
 * registry key, and the edit nudge (raw path → the SAME resolution the tool leg uses → registry reset +
 * session didChange through the read face). No manager, or no read face (a hands-less leg; the manifest still reports the
 * seat, `mounted: false`), ⇒ nothing mounts and both lane seats are undefined. The interface is the dependency list the
 * segment had implicitly.
 *
 * SYNCHRONOUS FUNCTION, SYNCHRONOUS CALL: the stretch has no await, so the phase adds no yield between the
 * fork-governance note before it and the memory trio's occupancy read after it (a stretch
 * with no await is extracted as a sync function — an `async` wrapper would open a microtask window).
 * Read-stability of the host handles for the call: {@link RunInternals} (`@contract prepare.deps-read-stable`).
 */
import type { ExecutionEnv } from "../../internal/harness.js";
import { type LspListedWithholding, type LspReadFace } from "../lsp.js";
import type { LspDiagnosticsRegistry } from "../lsp-diagnostics.js";
import type { RunnerDeps, TaskSpec } from "../types.js";
import { RosterBuilder } from "../tool-roster.js";
export interface PrepareLspInput {
    /** borrowed-readonly — the REBOUND spec. Read: `lspManager` (the per-task manager, outranks the deployment's),
     *  `lspDiagnostics` (the lane's opt-out), `handsReadOnly` (a read-only run has no lane). Never mutated. */
    spec: Pick<TaskSpec, "lspManager" | "lspDiagnostics" | "handsReadOnly">;
    /** borrowed-readonly — the deployment's manager seat (read only when the spec carries none). */
    deps: Pick<RunnerDeps, "lspManager">;
    /** borrowed-readonly — the run's resolved env: the tool's in-env server and git-ignore filter, and the
     *  session lookup the nudge performs. */
    executionEnv: ExecutionEnv;
    /** borrowed-readonly — the SETTLED task root: the tool's git-ignore root. */
    taskRootFinal: string;
    /** borrowed-readonly — the leg's read face (the hands phase's root, read roots, deny table, containment face, tracked
     *  cwd and file read station admission), present exactly when hands mounted: LSP mounts only under it, and the tool,
     *  the nudge and the diagnostics lane read every file through it. */
    readFace: LspReadFace | undefined;
    /** borrowed-readonly — the acquired session id: the run's key into the deployment-shared registry. */
    sessionId: string;
    /** borrowed-mutable — the run's roster builder (identity is the contract). Writer here: ONE mount (the LSP tool)
     *  when a manager and a read face exist. */
    roster: RosterBuilder;
    /** borrowed-mutable — the env-hand membership set the read-posture observer projects; writer here: `add("LSP")`
     *  on the mount. */
    envHandToolNames: Set<string>;
}
export interface PrepareLspResult {
    /** borrowed-readonly — the manager's diagnostics registry when the lane is live, else undefined (the
     *  registry is a DEPLOYMENT object shared by every task; this run reads and resets it under its own key). */
    lspDiagnostics: LspDiagnosticsRegistry | undefined;
    /** owned — the edit nudge (raw path in), or undefined when the lane is not live. */
    nudgeLspOnEdit: ((rawPath: string) => void) | undefined;
    /** owned — the files of a drain the read face withholds (`lspListedWithheld`: every view, fail-closed; kept files
     *  absent), or undefined when the lane is not live. */
    withheldDiagnosticsOf: ((uris: readonly string[]) => Promise<ReadonlyMap<string, LspListedWithholding>>) | undefined;
    /** borrowed-readonly — the run's registry key (= the session id): one run per session, released at the terminal. */
    lspRunIdent: string;
    /** Did a MANAGER seat resolve? The manifest's LSP-section presence condition, from the ONE fold that decided the mount. */ managerWired: boolean;
}
/** The M8 phase body — prepareTask's LSP stretch, verbatim (see the module header). */
export declare function prepareLsp(input: PrepareLspInput): PrepareLspResult;
