/**
 * 进程检测服务
 *
 * 用于检测孤儿进程（当 runtime-bridge 异常关闭后仍在运行的 Agent 进程）
 */
/**
 * 检测进程是否存活
 *
 * @param pid 进程 ID
 * @returns 是否存活
 */
export declare function isProcessRunning(pid: number): boolean;
/**
 * 进程信息
 */
export interface ProcessInfo {
    pid: number;
    command: string;
    cwd?: string;
    agentId?: string;
    startedAt?: string;
}
/**
 * 查找 Agent 相关的进程（Claude Code、OpenCode 等）
 *
 * @returns 匹配的进程列表
 */
export declare function findClaudeCodeProcesses(): ProcessInfo[];
/**
 * 根据 agentId 查找孤儿进程
 *
 * 检测策略（按优先级）：
 * 1. 通过命令行中的 agentId 直接匹配
 * 2. Windows: 通过 PowerShell 在命令行中模糊搜索 agentId
 * 3. Windows: 通过进程树搜索，覆盖 agentId 仅存在于祖先进程环境变量中的场景
 *
 * @param agentId Agent ID
 * @returns 进程信息或 undefined
 */
export declare function findOrphanProcessByAgentId(agentId: string): ProcessInfo | undefined;
/**
 * 通过工作目录路径查找孤儿进程
 *
 * 当 agentId 无法匹配到进程时，通过工作目录路径做宽泛搜索。
 * 适用于以下场景：
 * - runtime-bridge 重启后持久化会话丢失
 * - agentId 可能仅在祖先进程环境变量中，命令行搜索不到
 * - 进程树断链，无法通过祖先链匹配
 *
 * @param workspacePath 工作目录路径
 * @returns 匹配的进程信息或 undefined
 */
export declare function findOrphanProcessByWorkspace(workspacePath: string): ProcessInfo | undefined;
/**
 * 根据 PID 终止进程
 *
 * @param pid 进程 ID
 * @returns 是否成功
 */
export declare function terminateProcess(pid: number): boolean;
/**
 * 终止进程树（包括所有子进程）
 *
 * 跨平台实现：
 * - Windows: 使用 taskkill /T 终止整个进程树
 * - Unix: 递归获取所有子进程并逐个终止
 *
 * @param pid 进程 ID
 * @returns { terminated: 成功终止的进程数，failed: 失败的进程数 }
 */
export declare function terminateProcessTree(pid: number): {
    terminated: number;
    failed: number;
};
/**
 * 等待进程完全终止（轮询检测）
 *
 * @param pid 进程 ID
 * @param timeoutMs 超时时间（毫秒）
 * @returns 是否成功终止
 */
export declare function waitForProcessExit(pid: number, timeoutMs?: number): Promise<boolean>;
/**
 * 检测并收集所有孤儿进程信息
 * 用于 runtime-bridge 启动时恢复控制
 *
 * 改进策略：
 * 1. 检查持久化会话中的 PID 是否仍在运行（使用可靠的 isProcessRunning）
 * 2. PID 存活时，优先从进程列表匹配详细信息，匹配不到则用持久化信息构造
 * 3. 对于没有 PID 的会话，通过 agentId 搜索进程（包括环境变量搜索）
 *
 * @param persistedSessions 持久化的会话列表（包含 PID 信息）
 * @returns 孤儿进程列表
 */
export declare function detectOrphanProcesses(persistedSessions: Array<{
    agentId: string;
    pid?: number;
    workspacePath?: string;
    command?: string;
}>): Array<{
    agentId: string;
    process: ProcessInfo;
    sessionInfo: {
        workspacePath?: string;
        command?: string;
    };
}>;
/**
 * 进程健康状态
 */
export interface ProcessHealthStatus {
    pid: number;
    agentId: string;
    alive: boolean;
    cpu: number;
    memoryMB: number;
    status: 'healthy' | 'unresponsive' | 'high_cpu' | 'high_memory' | 'dead';
    lastUpdate: Date;
}
/**
 * 检测进程健康状态
 *
 * @param pid 进程 ID
 * @param agentId Agent ID
 * @returns 健康状态
 */
export declare function checkProcessHealth(pid: number, agentId: string): Promise<ProcessHealthStatus>;
/**
 * 批量检测会话健康状态
 *
 * @param sessions 持久化会话列表
 * @returns 健康状态列表
 */
export declare function checkAllSessionsHealth(sessions: Array<{
    agentId: string;
    pid?: number;
}>): Promise<Map<string, ProcessHealthStatus>>;
/**
 * 发现进程管理状态
 */
export type ProcessManagementStatus = 'managed' | 'orphan' | 'unknown';
/**
 * 发现的进程信息（含管理状态）
 */
export interface DiscoveredProcessInfo extends ProcessInfo {
    managementStatus: ProcessManagementStatus;
    sessionId?: string;
    isRunning: boolean;
    lastSeen?: string;
}
/**
 * 全局发现：扫描机器上所有 Agent 进程，并标注管理状态
 *
 * 返回三类进程：
 * - managed: 在注册表中且进程存活
 * - orphan: 进程存在但不在注册表中（脱离控制）
 * - unknown: 在注册表中但进程已死亡
 *
 * @param managedPids 已知被管理的 PID 集合（来自 ProcessRegistry）
 * @returns 发现的进程列表
 */
export declare function discoverAllProcesses(managedPids?: Set<number>, managedAgentIds?: Set<string>): DiscoveredProcessInfo[];
/**
 * 批量发现：扫描所有进程并补充注册表中缺失的进程状态
 *
 * @param registryExport 注册表导出的进程记录（含 agentId, pid）
 * @returns 完整的发现结果
 */
export declare function discoverAllProcessesFull(registryExport: Array<{
    agentId: string;
    pid: number;
}>): DiscoveredProcessInfo[];
//# sourceMappingURL=process-detector.d.ts.map