import type { Kernel } from "@telorun/kernel"; import type { Logger } from "./logger.js"; /** * Subscribe to ControllerLoading / ControllerLoaded / ControllerLoadFailed * events and render a minimal progress trail. By default a no-op when stdout * is not a TTY (so CI logs and the dockerised `telorun/telo` service stay * clean); pass `force: true` to render unconditionally so `--verbose` * captured logs include the lines too. * * The `⬇ ` line is opened by `ControllerWorkStarted` — emitted by the * sub-loader that is about to install, compile or fetch — so it appears * exactly when a wait begins and for the whole of it. A warm start enters no * such branch, emits no such event, and therefore prints nothing at any * point: there is no speculative line to take back. `ControllerLoaded` * overwrites the row in place via cursor-up + clear-line, so one wait shows as * one line that morphs from `⬇` to `✓`; when no work happened it prints a * plain `✓` for a source worth recording (`node_modules`, or anything under * `--verbose`) and nothing for `cache`/`local`. * * Concurrent loads each occupy their own line: each pending entry tracks * how many lines back from the cursor it lives, and incoming Loadings push * existing entries one further up. * * Stdout-as-TTY also gives us `moveCursor`/`clearLine`. On the `force` path * (e.g. piped `--verbose` capture), those methods are absent — we skip the * in-progress `⬇` line entirely (we'd never be able to rewrite it later) and * emit only the terminal `✓` / `✗` line at `Loaded` / `Failed`. That keeps * captured logs orphan-free at the cost of no in-progress feedback in piped * output. */ export declare function attachControllerProgress(kernel: Kernel, log: Logger, options?: { force?: boolean; }): void; //# sourceMappingURL=controller-progress.d.ts.map