/**
 * olam enter <world> — Open terminal into a world's Claude session.
 *
 * Two modes:
 *
 * 1. **Default** (no --start-claude): print the shell command the operator
 *    can run to attach an interactive terminal to the world. Optionally
 *    `--exec` runs that command in-process instead of printing it.
 *
 * 2. **--start-claude** (Phase C/C4): open a tmux session inside the world,
 *    pre-fill the Claude prompt with `--task <text>` if supplied, then
 *    attach. Task text is delivered to tmux's paste buffer via STDIN
 *    (`docker exec -i ... tmux load-buffer -`) and pasted with
 *    `tmux paste-buffer` — LITERAL bytes, no shell evaluation. T17
 *    mitigation. See {@link buildStartClaudeCommands} for the contract.
 */
import type { Command } from 'commander';
export interface StartClaudeStep {
    /** Human-readable description (operator-facing). */
    readonly description: string;
    /**
     * The shell command to execute.
     *
     * SECURITY INVARIANT: this string is composed from defensively-validated
     * identifiers (containerName, sessionName via {@link SAFE_IDENT}). It
     * NEVER includes user-supplied free-form text — the only free-form input
     * (`task`) rides via {@link stdin} and is delivered to tmux's
     * `load-buffer -` STDIN, not argv.
     */
    readonly command: string;
    /**
     * Optional STDIN payload. Set ONLY for the `tmux load-buffer -` step.
     * The contents are written to the tmux paste buffer LITERALLY, with
     * NO shell expansion. Shell metacharacters (`;`, `|`, `$(...)`, etc.)
     * appear in Claude's input verbatim.
     */
    readonly stdin?: string;
}
/**
 * Build the `olam enter --start-claude` command sequence.
 *
 * SECURITY INVARIANT (T17 mitigation, mirroring C4 spec):
 *
 * When `task` is supplied, the task text is delivered to tmux's paste-buffer
 * via STDIN of `docker exec -i <c> tmux load-buffer -`. It is NEVER passed
 * as a shell argument and NEVER interpolated into any command-line position.
 * `tmux paste-buffer` writes buffer contents literally — without shell
 * evaluation — so a `task` like `"Fix bug; rm -rf /tmp"` arrives in Claude's
 * prompt area as literal text. The user reviews then presses Enter manually
 * (no newline is appended by this builder).
 *
 * Mirrors the same trust class as `BootstrapStep` (bootstrap-runner.ts) and
 * `SupervisedRepo.start` (tmux-supervisor.ts). Do not change without
 * security review — replacing the stdin path with `tmux send-keys
 * "$task"` (or any shell-interpolated form) re-opens the T17 RCE.
 *
 * @throws Error if `containerName` or `sessionName` fail the defensive
 *   regex guard (these become unquoted argv tokens in the returned
 *   commands; metachar injection there bypasses the stdin contract).
 */
export declare function buildStartClaudeCommands(containerName: string, sessionName: string, task: string | undefined): StartClaudeStep[];
export declare function registerEnter(program: Command): void;
//# sourceMappingURL=enter.d.ts.map