Private/Get-EnvironmentPassthroughArgs.ps1

function Get-EnvironmentPassthroughArgs {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string]$HostPath,

        [Parameter()]
        [string[]]$Patterns = @()
    )

    $dockerArgs = @()

    # Always pass through Claude Code variables
    $allPatterns = @('^ANTHROPIC_', '^CLAUDE_CODE_', '^CLOUD_ML_')

    # Convert user-specified patterns (e.g. 'NUGET_*', 'AZURE_DEVOPS_PAT') to regex
    foreach ($p in $Patterns) {
        if ($p -match '[*?]') {
            # Glob-style pattern — convert to regex
            $escaped = [regex]::Escape($p) -replace '\\[*]', '.*' -replace '\\[?]', '.'
            $allPatterns += "^${escaped}$"
        }
        else {
            # Exact name
            $allPatterns += "^$([regex]::Escape($p))$"
        }
    }

    $combinedRegex = ($allPatterns -join '|')

    foreach ($envVar in Get-ChildItem Env:) {
        if ($envVar.Name -match $combinedRegex) {
            $dockerArgs += '-e'
            $dockerArgs += $envVar.Name
        }
    }

    # Pass host path so the container can link conversation history for /resume
    $dockerArgs += '-e'
    $dockerArgs += "DCLAUDE_HOST_PATH=$HostPath"

    return $dockerArgs
}