# src/cli/run/ — Non-Interactive Session Launcher **Generated:** 2026-02-24 ## OVERVIEW 37 files. Powers the `oh-my-opencode run ` command. Connects to OpenCode server, creates/resumes sessions, streams events, and polls for completion. ## EXECUTION FLOW ``` runner.ts 1. opencode-binary-resolver.ts → Find OpenCode binary 2. server-connection.ts → Connect to OpenCode server (start if needed) 3. agent-resolver.ts → Flag → env → config → Sisyphus 4. session-resolver.ts → Create new or resume existing session 5. events.ts → Stream SSE events from session 6. event-handlers.ts → Process each event type 7. poll-for-completion.ts → Wait for todos + background tasks done 8. on-complete-hook.ts → Execute user-defined completion hook ``` ## KEY FILES | File | Purpose | |------|---------| | `runner.ts` | Main orchestration — connects, resolves, runs, completes | | `server-connection.ts` | Start OpenCode server process, create SDK client | | `agent-resolver.ts` | Resolve agent: `--agent` flag → `OPENCODE_AGENT` env → config → Sisyphus | | `session-resolver.ts` | Create new session or resume via `--attach` / `--session-id` | | `events.ts` | SSE event stream subscription | | `event-handlers.ts` | Route events to handlers (message, tool, error, idle) | | `event-stream-processor.ts` | Process event stream with filtering and buffering | | `poll-for-completion.ts` | Poll session until todos complete + no background tasks | | `completion.ts` | Determine if session is truly done | | `continuation-state.ts` | Persist state for `run` continuation across invocations | | `output-renderer.ts` | Format session output for terminal | | `json-output.ts` | JSON output mode (`--json` flag) | | `types.ts` | `RunOptions`, `RunResult`, `RunContext`, event payload types | ## AGENT RESOLUTION PRIORITY ``` 1. --agent CLI flag 2. OPENCODE_AGENT environment variable 3. default_run_agent config 4. "sisyphus" (default) ``` ## COMPLETION DETECTION Poll-based with two conditions: 1. All todos marked completed (no pending/in_progress) 2. No running background tasks `on-complete-hook.ts` executes optional user command on completion (e.g., `--on-complete "notify-send done"`).