/**
 * 终端 API 路由
 *
 * 提供 SDK Agent 会话的启动、输入、调整大小和停止功能
 * 终端 UI 仅作为 SDK Agent 的消息输入/状态输出载体
 */
import { TextDecoder } from "node:util";
import { type AdapterSessionConfig, type ProviderEvent, type RuntimeStatusActionInfo } from "../adapter/index.js";
import type { PersistedSession } from "../types.js";
export declare const terminalRouter: import("express-serve-static-core").Router;
export interface SdkSessionEntry {
    agentId: string;
    workspacePath: string;
    sessionId: string;
    config: AdapterSessionConfig;
    providerId: string;
    seq: number;
    runtimeAccessToken?: string;
    currentRuntimeStatus?: string;
    currentRuntimeActionType?: string;
    currentRuntimeActionLabel?: string;
    currentRuntimeActionDetail?: string;
}
export declare const sdkSessions: Map<string, SdkSessionEntry>;
export declare function resolveStatusChangeUsage(actionInfo?: RuntimeStatusActionInfo): {
    inputTokens: number;
    outputTokens: number;
} | undefined;
export declare function buildAcodeCommandOutputPath(workspacePath: string, now?: Date): string;
export declare function countTerminalOutputLines(output: string): number;
export declare function formatCommandOutputSpilloverNotice(outputPath: string, lineLimit?: number): string;
export declare function formatCommandInactivityTimeoutNotice(timeoutMs?: number): string;
/**
 * 标准化终端输入：将前端回车符还原为 shell 可执行命令文本。
 */
export declare function normalizeTerminalCommandInput(value: unknown): string;
/**
 * 解析终端命令输出解码编码。
 * 主流程：优先使用环境变量覆盖 -> Windows 默认 GB18030 -> 其他平台默认 UTF-8。
 */
export declare function resolveTerminalOutputEncoding(platform?: NodeJS.Platform, env?: NodeJS.ProcessEnv): string;
/**
 * 创建终端输出流式解码器，避免多字节中文被 chunk 边界截断。
 */
export declare function createTerminalOutputDecoder(encoding?: string): TextDecoder;
/**
 * 解码终端输出 chunk；end=true 时刷新解码器内部剩余字节。
 */
export declare function decodeTerminalOutputChunk(decoder: TextDecoder, chunk?: Buffer, end?: boolean): string;
/**
 * 解析 cd 命令目标；返回 undefined 表示不是目录切换命令，null 表示仅查看当前目录。
 */
export declare function parseTerminalDirectoryChangeTarget(command: string): string | null | undefined;
/**
 * 解析 SDK 会话对外展示状态。
 * 主流程：优先使用 adapter 当前细粒度状态，其次使用路由内存记录的最近状态，最后才兼容旧会话回退 running。
 */
export declare function resolveSdkSessionDisplayStatus(adapterStatus?: string, currentRuntimeStatus?: string): string;
export interface PersistedSessionReuseDecision {
    reusable: boolean;
    reason: "active-pid" | "missing-pid" | "dead-pid" | "in-process-provider";
}
/**
 * Decide whether a persisted SDK session can be reused for a start request.
 * Main flow: require a live PID, then reject in-process providers whose adapter control channel cannot be restored.
 */
export declare function evaluatePersistedSessionReuse(session: Pick<PersistedSession, "pid"> & Partial<Pick<PersistedSession, "command">>, isPidRunning?: (pid: number) => boolean): PersistedSessionReuseDecision;
/**
 * 生成显示在终端输出流中的工作目录提示符。
 */
export declare function formatTerminalPrompt(currentDirectory: string): string;
export declare function buildRuntimeEnv(agentId: string, workspacePath: string | undefined, baseEnv: NodeJS.ProcessEnv, envOverrides?: Record<string, unknown>): Record<string, string>;
/**
 * 主流程：SDK 模式输入若只是 mini-term 剪贴板临时文件路径，则展开为文件内容再发给模型。
 * 具体实现：只处理整串匹配的绝对临时 paste 文件路径，避免影响显式 `type "path"` 等正常命令。
 */
export declare function resolveSdkInputMessage(input: unknown): Promise<string>;
export interface ClaudeCodeLaunchConfig {
    envOverrides: Record<string, string>;
    model?: string;
}
/**
 * 主流程：将已持久化的 ClaudeCode AI 配置合并到启动配置，再让请求级覆盖保持最高优先级。
 */
export declare function buildClaudeCodeLaunchConfig(savedClaudeConfig: {
    env?: Record<string, unknown>;
} | null | undefined, requestEnvOverrides?: Record<string, unknown>): ClaudeCodeLaunchConfig;
/**
 * 将 SDK 工具结束事件转换为时间线返回数据状态。
 * 主流程：格式化工具结果 -> 保留 MCP 专用展示 -> 其它工具按动作类型追加到对应时间线事件。
 */
export declare function buildToolResultTimelineActionInfo(event: ProviderEvent): RuntimeStatusActionInfo | undefined;
export declare function formatSdkOutputEvent(event: ProviderEvent): string | undefined;
/**
 * 主干流程：把 provider 事件转换为面板运行状态。
 *
 * text_delta 表示助手正在生成；thinking 表示推理/内部过程。
 * tool_use_start 表示正在执行工具；turn_complete 才表示真正空闲。
 */
export declare function resolveRuntimeStatusFromProviderEvent(event: ProviderEvent): {
    status: string;
    actionInfo?: RuntimeStatusActionInfo;
} | undefined;
export declare function resolveSdkProviderId(command?: string): string;
//# sourceMappingURL=terminal.d.ts.map