private/Set-WtwAgentCtlProfile.ps1

function Ensure-WtwAgentCtlConfig {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [PSObject] $Config
    )

    if (-not ($Config.PSObject.Properties.Name -contains 'agentctl') -or -not $Config.agentctl) {
        $Config | Add-Member -NotePropertyName 'agentctl' -NotePropertyValue ([PSCustomObject]@{}) -Force
    }

    if (-not ($Config.agentctl.PSObject.Properties.Name -contains 'enabled')) {
        $Config.agentctl | Add-Member -NotePropertyName 'enabled' -NotePropertyValue $true -Force
    }
    if (-not ($Config.agentctl.PSObject.Properties.Name -contains 'defaultProfile') -or [string]::IsNullOrWhiteSpace($Config.agentctl.defaultProfile)) {
        $Config.agentctl | Add-Member -NotePropertyName 'defaultProfile' -NotePropertyValue 'team' -Force
    }
    if (-not ($Config.agentctl.PSObject.Properties.Name -contains 'repoProfiles') -or -not $Config.agentctl.repoProfiles) {
        $Config.agentctl | Add-Member -NotePropertyName 'repoProfiles' -NotePropertyValue ([PSCustomObject]@{}) -Force
    }

    return $Config
}

function Test-WtwAgentCtlProfileExists {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string] $Profile
    )

    $profilePath = Join-Path $HOME ".config/agent-profile/$Profile.md"
    return Test-Path $profilePath
}

function Get-WtwAgentCtlConfigForEdit {
    [CmdletBinding()]
    param()

    $config = Get-WtwConfig
    if (-not $config) {
        $config = New-WtwDefaultConfig
    }

    return Ensure-WtwAgentCtlConfig -Config $config
}

function Resolve-WtwAgentCtlRepoName {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string] $RepoName
    )

    $registry = Get-WtwRegistry
    if (-not $registry -or -not $registry.repos) {
        return $RepoName
    }

    foreach ($name in $registry.repos.PSObject.Properties.Name) {
        if ($name -eq $RepoName) {
            return $name
        }
        $repo = $registry.repos.$name
        if (Test-WtwAliasMatch $repo $RepoName) {
            return $name
        }
    }

    return $RepoName
}

function Set-WtwAgentCtlRepoProfile {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string] $RepoName,

        [Parameter(Mandatory)]
        [string] $Profile
    )

    $resolvedRepoName = Resolve-WtwAgentCtlRepoName -RepoName $RepoName
    $config = Get-WtwAgentCtlConfigForEdit
    if ($resolvedRepoName -ne $RepoName -and ($config.agentctl.repoProfiles.PSObject.Properties.Name -contains $RepoName)) {
        $config.agentctl.repoProfiles.PSObject.Properties.Remove($RepoName)
    }
    $config.agentctl.repoProfiles | Add-Member -NotePropertyName $resolvedRepoName -NotePropertyValue $Profile -Force
    Save-WtwConfig $config

    if ($resolvedRepoName -eq $RepoName) {
        Write-Host " agentctl profile for '$resolvedRepoName': $Profile" -ForegroundColor Green
    } else {
        Write-Host " agentctl profile for '$resolvedRepoName' ($RepoName): $Profile" -ForegroundColor Green
    }
    if (-not (Test-WtwAgentCtlProfileExists -Profile $Profile)) {
        Write-Warning "Profile '$Profile' was saved, but ~/.config/agent-profile/$Profile.md does not exist yet."
    }
}

function Set-WtwAgentCtlDefaultProfile {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string] $Profile
    )

    $config = Get-WtwAgentCtlConfigForEdit
    $config.agentctl.defaultProfile = $Profile
    Save-WtwConfig $config

    Write-Host " default agentctl profile: $Profile" -ForegroundColor Green
    if (-not (Test-WtwAgentCtlProfileExists -Profile $Profile)) {
        Write-Warning "Profile '$Profile' was saved, but ~/.config/agent-profile/$Profile.md does not exist yet."
    }
}

function Get-WtwAgentCtlProfileSetting {
    [CmdletBinding()]
    param(
        [string] $RepoName
    )

    $config = Get-WtwAgentCtlConfigForEdit

    if ($RepoName) {
        $resolvedRepoName = Resolve-WtwAgentCtlRepoName -RepoName $RepoName
        $profile = Get-WtwAgentCtlProfile -RepoName $resolvedRepoName -RepoEntry ([PSCustomObject]@{}) -Config $config
        if ($resolvedRepoName -eq $RepoName) {
            Write-Host "${resolvedRepoName}: $profile"
        } else {
            Write-Host "${resolvedRepoName} ($RepoName): $profile"
        }
        return
    }

    Write-Host "agentctl enabled: $($config.agentctl.enabled)"
    Write-Host "default profile: $($config.agentctl.defaultProfile)"
    Write-Host 'repo profiles:'
    $names = @($config.agentctl.repoProfiles.PSObject.Properties.Name | Sort-Object)
    if ($names.Count -eq 0) {
        Write-Host ' (none)'
        return
    }
    foreach ($name in $names) {
        Write-Host " ${name}: $($config.agentctl.repoProfiles.$name)"
    }
}