import type { PermissionMode } from "../../../../runtime/ports/permission-contracts.js";
import type { SandboxPlatform } from "./platform.js";
/** 网络出站策略:allow=放开;deny=禁非回环出站(细粒度留后)。 */
export type NetPolicy = "allow" | "deny";
/**
 * Host 在每次 exec 前注入的沙箱上下文(权限单一真相的快照)。
 * undefined 表示 host 不启用沙箱(由调用方决定)。
 */
export interface SandboxConfig {
    mode: PermissionMode;
    /** active workdir(pathService.getActiveWorkdir()),恒为可写根。 */
    workdir: string;
    /** 已批准/持久 allow 的目录(rule-engine.getAllowedWriteDirectories())。 */
    allowedDirs: string[];
    /** 工具记账可写目录(taskOutputDir + snapshot 目录),恒可写。 */
    bookkeepingDirs: string[];
    /** 沙箱内 cwd/snapshot 临时目录(可写;= sandboxTmpDir)。 */
    tmpDir: string;
    /** Linux landlock helper 路径(null=不可用→降级)。 */
    helperPath: string | null;
    /** sandbox-exec 是否可用(macOS;由 host 探测)。 */
    sandboxExecAvailable: boolean;
    netPolicy: NetPolicy;
}
/** decideSandbox 的输出:是否包裹 + 最终 spawn 的 bin/args。 */
export interface SandboxDecision {
    /** 是否实际包裹(false=降级,直接用原 bin/args)。 */
    wrapped: boolean;
    bin: string;
    args: string[];
    /** 传给 provider.buildExecCommand 的 useSandbox。 */
    useSandbox: boolean;
    /** 包裹时的可写临时目录(cwdFile 落点);未包裹=undefined。 */
    sandboxTmpDir?: string;
    /** 决策原因(日志/可观测;降级时写 warn)。 */
    reason: string;
}
/** decideSandbox 的纯输入(平台/可用性显式传入以便跨平台单测)。 */
export interface DecideSandboxInput {
    platform: SandboxPlatform;
    config: SandboxConfig;
    /** 原始 spawn 目标。 */
    bin: string;
    args: string[];
    /** 派生好的可写根(deriveWritableRoots 结果)。 */
    writableRoots: string[];
}
