/** * Dashboard API — read-only thread route handlers: listing endpoints, single * thread lookup, running/heartbeat probes, log digests, and children. */ import { type RouteHandler, type RouteArgs } from "./types.js"; export declare const handleGetThreads: RouteHandler; export declare const handleGetRootThreads: RouteHandler; export declare const handleGetKeepAliveThreads: RouteHandler; export declare const handleGetArchivedThreads: RouteHandler; /** GET /api/threads/:threadId — get single thread */ export declare function handleGetThread(args: RouteArgs, threadId: number): boolean; /** GET /api/threads/:threadId/running — check if an agent process is alive for this thread */ export declare function handleGetThreadRunning(args: RouteArgs, threadId: number): boolean; /** GET /api/threads/:threadId/heartbeat — last MCP activity timestamp for stuck-process detection */ export declare function handleGetThreadHeartbeat(args: RouteArgs, threadId: number): boolean; /** * GET /api/threads/:threadId/logs — a readable digest of the agent's raw stdout. * * The render choice is OUTCOME-BASED, not agent-type-based: we attempt the Claude * stream-json parse and use its result only if it actually yielded turns. Claude * threads write machine stream-json that parses into turns → rendered tail-first. * Every other agent (copilot, codex, …) writes already-human-readable text that * parses to zero turns → passed through RAW (parsing it would blank it out). This * is self-correcting and does not depend on the thread_registry agentType label, * which is unreliable — root threads never persist it and default to "claude" * even when they are Copilot. Both paths return a single character window * (default 4000, Telegram-sized). Callers page deeper into history with ?offset=; * nextOffset/hasMore drive a "next chunk" button. */ export declare function handleGetThreadLogs(args: RouteArgs, threadId: number): boolean; /** GET /api/threads/:threadId/children — get children of a root */ export declare function handleGetThreadChildren(args: RouteArgs, rootThreadId: number): boolean; //# sourceMappingURL=threads-read.d.ts.map