Public/Add-DClaudeEnvPassthrough.ps1

<#
.SYNOPSIS
    Adds environment variable passthrough patterns to dclaude settings.

.DESCRIPTION
    Appends one or more environment variable name patterns to the 'envPassthrough'
    array in the specified dclaude settings file. Patterns can be exact names
    (e.g. 'AZURE_DEVOPS_PAT') or globs (e.g. 'NUGET_*'). Duplicate patterns
    are skipped.

.PARAMETER Pattern
    One or more environment variable name patterns to add.

.PARAMETER Scope
    Target settings file: User, Project, or ProjectLocal.
    Defaults to ProjectLocal.

.EXAMPLE
    Add-DClaudeEnvPassthrough -Pattern 'NUGET_*', 'AZURE_DEVOPS_PAT'

    Adds two passthrough patterns to the project's settings.local.json.

.EXAMPLE
    Add-DClaudeEnvPassthrough -Pattern 'VSS_NUGET_*' -Scope User

    Adds a passthrough pattern to the user config.
#>

function Add-DClaudeEnvPassthrough {
    [CmdletBinding(SupportsShouldProcess)]
    param(
        [Parameter(Mandatory)]
        [string[]]$Pattern,

        [Parameter()]
        [ValidateSet('User', 'Project', 'ProjectLocal')]
        [string]$Scope = 'ProjectLocal'
    )

    $resolved = Resolve-SettingsScope -Scope $Scope
    if (-not $resolved) { return }

    $config = Read-SettingsFile -Directory $resolved.Directory -FileName $resolved.FileName
    if (-not $config) {
        $config = [PSCustomObject]@{}
    }

    $existing = if ($config.PSObject.Properties['envPassthrough'] -and $config.envPassthrough -is [array]) {
        , [array]$config.envPassthrough
    } else { , @() }

    $toAdd = @($Pattern | Where-Object { $_ -notin $existing })
    if ($toAdd.Count -eq 0) {
        Write-Verbose 'All patterns already present; nothing to add.'
        return
    }

    if ($PSCmdlet.ShouldProcess("$Scope config", "Add envPassthrough patterns: $($toAdd -join ', ')")) {
        $newList = $existing + $toAdd
        $config | Add-Member -MemberType NoteProperty -Name 'envPassthrough' -Value @($newList) -Force
        Save-SettingsFile -Directory $resolved.Directory -Config $config -FileName $resolved.FileName
    }
}