/**
 * Posts task-agent status updates back to the originating chat channel.
 *
 * Subscribes to `ptyService.onSessionEvent` and turns the most useful
 * lifecycle events into a small number of human-readable messages so the
 * user is not left staring at silence while a CREATE_TASK runs in the
 * background. Deliberately quiet — never spams per-tool, never edits, just
 * one heartbeat after a long stretch of work plus a final result.
 *
 * UX contract:
 *   - skip immediately after spawn (the action's own ack already covered it)
 *   - one heartbeat per session, only if the agent is still working after
 *     {@link HEARTBEAT_AFTER_MS}
 *   - one final message on `task_complete` containing the agent's URL line
 *     when present, or a short fallback otherwise
 *   - one error message on `error`
 *
 * Lives in eliza (not in the shared plugin) because routing back to a
 * specific chat target is deployment-specific — other deployments may not
 * have a discord channel id to write to.
 */
import type { IAgentRuntime } from "@elizaos/core";
/**
 * Install the streamer once per runtime. Idempotent — repeat calls are no-ops.
 * Returns silently if the PTY service does not expose the event API (e.g.
 * tests, mocked services).
 */
export declare function installTaskProgressStreamer(runtime: IAgentRuntime, ptyService: unknown): void;
/**
 * Split `text` into chunks no larger than `max` characters, preferring to
 * break at paragraph boundaries (\n\n), then line boundaries (\n), then
 * word boundaries (space). Discord's hard limit per message is 2000 chars —
 * callers should pass 1900 or lower to leave headroom for formatting.
 *
 * Exported for tests.
 */
export declare function chunkForDiscord(text: string, max: number): string[];
//# sourceMappingURL=task-progress-streamer.d.ts.map