import { type DashboardRow } from './render-source.js'; export * from './render-source.js'; /** * Render the subscription sub-DAG rooted at `rootId` as an ASCII tree. * The root is the first line (no connector prefix); children are indented. * * Each line: ` [/] ctx [ ⚑]` * * Returns a multi-line string (no trailing newline). */ export declare function renderTree(rootId: string): string; /** * Render all canvas roots as a forest. A root is a node with no subscribers * (no one subscribes to it = it has no managers in the org chart). * * If there are no roots on the canvas, returns a placeholder string. */ export declare function renderForest(): string; /** One row per node visible in the sub-DAG of `rootId` (including root). */ export declare function dashboardRows(rootId: string): DashboardRow[]; /** * CHEAP boot builder — one row per node across the entire canvas, with only the * fields that need no per-node meta/telemetry/session read. Two db queries total: * `listNodes()` + `listFocuses()` (the focus set replaces per-node getFocusByNode * calls). See {@link dashboardRowFromNodeRow} for the per-row projection, and * {@link enrichRow}/{@link enrichRows}/{@link loadPreview} for the lazy fields. */ export declare function dashboardRowsAll(): DashboardRow[]; /** Fold the cheap-boot row's deferred fields in for ONE row: the full label * (meta.description → fullName), ctx tokens (telemetry.json), and ⚑ asks. One * meta read + one telemetry read + one ticket scan. Idempotent (no-op once enriched). * For a batch, prefer {@link enrichRows} — it scans each cwd's ticket inbox once. */ export declare function enrichRow(row: DashboardRow): DashboardRow; /** Batch {@link enrichRow}: enrich every not-yet-enriched row, scanning each * distinct cwd's ticket inbox exactly ONCE (via `ticketCountsForNodes`) instead * of per row. Use this for a whole viewport / the full forest; mutates each row in place. */ export declare function enrichRows(rows: DashboardRow[]): void; /** Load the SELECTED row's preview text: the spawn `goal` (initial-prompt.md) plus * the whole-conversation `prompts` and the `lastAssistant` reply — the latter two * folded into ONE session-file read (see {@link readSessionParts}). Mutates the row * in place; idempotent. Call only for the cursor row (and lazily/in-background to * warm the prompt super-search corpus), never on the boot path. */ export declare function loadPreview(row: DashboardRow): DashboardRow; /** {@link isStreaming} keyed by node id alone — hydrates the broker pid off the * db row. The exported "is this node actively generating right now?" guard so a * reap never nukes a node mid-first-turn before its output lands on disk. */ export declare function isNodeStreaming(nodeId: string): boolean;