Public/Set-DClaudeDefaultImageKey.ps1

<#
.SYNOPSIS
    Sets the default Docker image key for dclaude.

.DESCRIPTION
    Sets the 'defaultImageKey' property in the dclaude settings file for the
    specified scope. The image key must reference an image registered in the
    user config (~/.dclaude/settings.json) via Add-DClaudeImage.

.PARAMETER ImageKey
    Name of a registered image to use as default. Supports tab completion.

.PARAMETER Scope
    Target settings file: User (~/.dclaude/settings.json),
    Project (.dclaude/settings.json), or ProjectLocal (.dclaude/settings.local.json).
    Defaults to ProjectLocal.

.EXAMPLE
    Set-DClaudeDefaultImageKey -ImageKey 'pwsh'

    Sets the default image key to 'pwsh' in the project's settings.local.json.

.EXAMPLE
    Set-DClaudeDefaultImageKey -ImageKey 'dotnet' -Scope User

    Sets the default image key to 'dotnet' in the user config.
#>

function Set-DClaudeDefaultImageKey {
    [CmdletBinding(SupportsShouldProcess)]
    param(
        [Parameter(Mandatory)]
        [ArgumentCompleter({
            param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)
            try {
                $images = Get-DClaudeImage
                if (-not $images) { return }
                $images | Select-Object -ExpandProperty Name -Unique |
                    Where-Object { $_ -like "$wordToComplete*" } |
                    ForEach-Object {
                        [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
                    }
            }
            catch {}
        })]
        [string]$ImageKey,

        [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]@{}
    }

    if ($PSCmdlet.ShouldProcess("$Scope config", "Set defaultImageKey to '$ImageKey'")) {
        $config | Add-Member -MemberType NoteProperty -Name 'defaultImageKey' -Value $ImageKey -Force
        Save-SettingsFile -Directory $resolved.Directory -Config $config -FileName $resolved.FileName
    }
}