/**
 * sdk-permission-mapping — pure projections from `cc:*` scope + Biscuit
 * tool list onto the SDK's runtime permission envelope.
 *
 * Two surfaces:
 *  - `scopeToSdkPermissions(scope)` mirrors the JWT-only path used in
 *    `mapScopesToSdkPermissions` but takes a SINGLE scope value (handier
 *    for code paths that already know the resolved scope).
 *  - `capabilityToSdkPermissions(scope, tools)` returns the INTERSECTION
 *    of the static scope projection and the agent's dynamic Biscuit tool
 *    allowlist. Tools that don't grant MCP capability remove `mcp:*`
 *    permissions; an empty tool list strips MCP entirely regardless of
 *    scope.
 *
 * Both functions are PURE (no IO, no globals). The empty-tools case is
 * called out explicitly so a misconfigured agent token cannot quietly
 * inherit the scope's full surface.
 */
export type CcScope = "cc:read" | "cc:execute" | "cc:admin";
export type FileIoMode = "off" | "read-only" | "sandboxed-tmp";
export type BashMode = "off" | "restricted";
/**
 * Permission envelope produced by this module. Distinct from the
 * `SdkPermissions` shape in `permissions/sdk-permissions.ts`: that one is
 * tightly coupled to the SDK loop, this one is a stable shape for hosts
 * computing intersections (no readonly arrays — caller may freeze).
 */
export interface SdkPermissions {
    bash: BashMode;
    fileIo: FileIoMode;
    mcp: string[];
}
/** Project a single `cc:*` scope onto SdkPermissions. Pure. */
export declare function scopeToSdkPermissions(scope: CcScope): SdkPermissions;
/**
 * Compute the INTERSECTION of `scopeToSdkPermissions(scope)` and the
 * agent's tool allowlist. Tools that don't unlock MCP scopes do not
 * grant MCP. An empty tool list strips MCP entirely.
 */
export declare function capabilityToSdkPermissions(scope: CcScope, tools: readonly string[]): SdkPermissions;
//# sourceMappingURL=sdk-permission-mapping.d.ts.map