Public/Get-TerminalPresentationCapability.ps1

function Invoke-TerminalCapabilityProbe {
    param(
        [Parameter(Mandatory)][scriptblock]$Operation,
        [AllowNull()]$Fallback
    )

    try { & $Operation } catch { $Fallback }
}

function Get-TerminalPresentationCapability {
    [CmdletBinding()]
    [OutputType([object])]
    param()

    $capability = [TerminalSlides.Schema.V1.TerminalCapability]::new()
    $capability.HostName = $Host.Name
    $capability.OS = [System.Runtime.InteropServices.RuntimeInformation]::OSDescription
    $capability.PSVersion = $PSVersionTable.PSVersion.ToString()
    $capability.Width = Invoke-TerminalCapabilityProbe -Operation { [Console]::WindowWidth } -Fallback 80
    $capability.Height = Invoke-TerminalCapabilityProbe -Operation { [Console]::WindowHeight } -Fallback 24
    $term = $env:TERM
    $colorterm = $env:COLORTERM
    $supportsVirtualTerminal = $null
    $supportsVirtualTerminal = Invoke-TerminalCapabilityProbe -Operation { $Host.UI.SupportsVirtualTerminal } -Fallback $null
    $capability.AnsiSupport = [bool]($IsWindows ? ($supportsVirtualTerminal ?? [bool]($env:WT_SESSION -or $env:TERM_PROGRAM)) : ($term -and $term -ne 'dumb'))
    $capability.TrueColorSupport = [bool]($colorterm -match 'truecolor|24bit' -or $env:WT_SESSION -or $env:TERM_PROGRAM -eq 'iTerm.app')
    $capability.Color256Support = [bool]($term -match '256' -or $capability.TrueColorSupport)
    $capability.UnicodeSupport = $OutputEncoding.WebName -match 'utf'
    $capability.IsRedirected = [Console]::IsOutputRedirected -or [Console]::IsInputRedirected
    $capability.Interactive = -not $capability.IsRedirected -and -not [Console]::IsErrorRedirected
    $capability.AlternateBuffer = $capability.AnsiSupport -and -not $capability.IsRedirected
    $capability.SixelSupport = [bool]($env:TERM -match 'xterm' -and $env:DECGRI)
    $capability.KittyGraphics = [bool]$env:KITTY_WINDOW_ID
    $capability.ITermImages = [bool]($env:TERM_PROGRAM -eq 'iTerm.app')
    $capability.EnvironmentVars = @{ TERM = $term; COLORTERM = $colorterm; WT_SESSION = $env:WT_SESSION; TERM_PROGRAM = $env:TERM_PROGRAM }
    return $capability
}