private/Invoke-WarpCli.ps1

function Invoke-WarpCli {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string[]]$Arguments,
        [switch]$RawOutput
    )

    $cmd = Get-Command 'warp-terminal' -ErrorAction SilentlyContinue
    if (-not $cmd) { throw 'warp-terminal not found in PATH.' }

    $args_ = [System.Collections.Generic.List[string]]::new()
    $args_.AddRange($Arguments)

    if (-not $RawOutput) {
        $args_.Add('--output-format')
        $args_.Add('json')
    }

    if ($env:WARP_API_KEY) {
        $args_.Add('--api-key')
        $args_.Add($env:WARP_API_KEY)
    }

    Write-Verbose "warp-terminal $($args_ -join ' ')"
    $raw = & warp-terminal @args_ 2>&1

    $exitCode = $LASTEXITCODE
    $stderr = ($raw | Where-Object { $_ -is [System.Management.Automation.ErrorRecord] }) -join "`n"
    $stdout = ($raw | Where-Object { $_ -isnot [System.Management.Automation.ErrorRecord] }) -join "`n"

    if ($exitCode -ne 0) {
        $msg = if ($stderr) { $stderr } else { $stdout }
        Write-Error "warp-terminal exited $exitCode`: $msg"
        return
    }

    if ($RawOutput) { return $stdout }

    if ([string]::IsNullOrWhiteSpace($stdout)) { return }

    try { $stdout | ConvertFrom-Json } catch { Write-Output $stdout }
}