- Added runId?: string to ExecEventBase type in exec-events.ts
- Added runId to all three emitExecEvent calls (exec.started, exec.output, exec.completed)
- Fixes Crabwalk mismatch where it expects exec.runId but Gateway sent context.runId
- runId is sourced from session.execEvents.context?.runId for backward compatibility
Resolves: Crabwalk exec nodes not displaying due to schema mismatch