/**
 * adopt-route.ts
 *
 * 为没有 BOTMUX_* 环境变量的"孤立" Claude 进程（即通过 /adopt 接管的外部 CLI）
 * 提供 askUserQuestion hook 的路由解析逻辑。
 *
 * 通过以下步骤确定目标 Lark 会话：
 *   1. 收集 hook 进程的祖先 PID 链
 *   2. 遍历在线 daemon，查询每个 daemon 是否有以某祖先 PID 启动的 adopt 会话
 *   3. 首个命中即返回路由信息
 */
/** 从 daemon 取回的 adopt 会话路由信息 */
export interface AdoptRoute {
    sessionId: string;
    chatId: string;
    larkAppId: string;
    rootMessageId: string;
}
/**
 * 沿进程祖先链向上收集 PID（不含 startPid 自己）。
 *
 * @param startPid    起始进程 PID（自身不包含在结果中）
 * @param readParent  注入式父 PID 读取函数（默认使用 /proc 或 ps）
 * @param maxDepth    最大深度，防止意外无限循环（默认 40）
 * @returns           祖先 PID 数组，从最近父进程到最远祖先
 */
export declare function getAncestorPids(startPid: number, readParent?: (pid: number) => number | null, maxDepth?: number): number[];
/**
 * 查询某个 daemon 是否有以指定 PID 启动的活跃 adopt 会话。
 *
 * GET http://127.0.0.1:<ipcPort>/api/adopt-session/<pid>
 *   200 → 解析 AdoptRoute；其它状态码或异常 → null（不抛）。
 * 超时：2 秒（AbortController）。
 */
export declare function queryAdoptSession(ipcPort: number, pid: number): Promise<AdoptRoute | null>;
/**
 * 通过祖先 PID 匹配在线 adopt 会话。
 *
 * **并发 + 全局 budget 封顶**：候选 = daemon 列表序 × 祖先链序（由近及远）逐个编号；
 * 全部并发查询（每请求各自带 2s 超时），整体不超过 `budgetMs`。命中按候选 index 取
 * 最小，保持确定性。
 *
 * 为何要全局 budget：runHook 在缺 BOTMUX_* 时同步 await 本函数，而全局 hook 会覆盖
 * 非 botmux 的 Claude 会话；若某 daemon still-online 但 IPC 不响应，顺序 await 会
 * `祖先数 × 2s × daemon 数` 线性叠加（可达几十秒），把真·非 botmux 的 ask 卡死。
 * 并发让总耗时收敛到单请求量级，budget 再封顶，保证快速 passthrough。
 *
 * @param deps.startPid      hook 进程自身的 PID
 * @param deps.listDaemons   列出在线 daemon（ipcPort）
 * @param deps.queryDaemon   查询某 daemon 是否有该 pid 的活跃 adopt 会话
 * @param deps.getAncestors  取祖先 PID（默认使用 getAncestorPids）
 * @param deps.budgetMs      整体耗时上限（默认 1500ms；可注入便于测试）
 */
export declare function resolveAdoptRoute(deps: {
    startPid: number;
    listDaemons: () => Array<{
        ipcPort: number;
    }>;
    queryDaemon: (ipcPort: number, pid: number) => Promise<AdoptRoute | null>;
    getAncestors?: (startPid: number) => number[];
    budgetMs?: number;
}): Promise<AdoptRoute | null>;
//# sourceMappingURL=adopt-route.d.ts.map