private/Get-ToolConfiguration.ps1
|
function Get-ToolConfiguration { <# .SYNOPSIS Loads tool-specific configuration from PSFramework config. .DESCRIPTION Retrieves configuration settings for a specific AI tool, including model, permission bypass, edit mode, reasoning effort, and ignore instructions settings. Command-line overrides take precedence over configured defaults. .PARAMETER ToolName The name of the AI tool (e.g., Claude, Aider, Codex). .PARAMETER ModelOverride Optional model override from command line. Takes precedence over configured default. .PARAMETER ReasoningEffortOverride Optional reasoning effort override from command line. Takes precedence over configured default. .PARAMETER IgnoreInstructionsOverride Optional switch to override ignore instructions setting. When specified, takes precedence over configured default. .PARAMETER IgnoreInstructionsBound Indicates whether the IgnoreInstructions parameter was explicitly bound (from $PSBoundParameters). .OUTPUTS [hashtable] with keys: - PermissionBypass: Whether to bypass permission prompts - Model: The model to use (override or configured default) - EditMode: The edit mode (Diff, etc.) - ReasoningEffort: The reasoning effort level (low, medium, high) - IgnoreInstructions: Whether to ignore instruction files .EXAMPLE $config = Get-ToolConfiguration -ToolName 'Claude' -ModelOverride 'claude-3-opus' #> [CmdletBinding()] param( [Parameter(Mandatory)] [string]$ToolName, [Parameter()] [string]$ModelOverride, [Parameter()] [ValidateSet('low', 'medium', 'high', '')] [string]$ReasoningEffortOverride, [Parameter()] [switch]$IgnoreInstructionsOverride, [Parameter()] [bool]$IgnoreInstructionsBound = $false ) # Load configuration for the tool $permissionBypass = Get-PSFConfigValue -FullName "AITools.$ToolName.PermissionBypass" -Fallback $true Write-PSFMessage -Level Verbose -Message "Permission bypass: $permissionBypass" $configuredModel = Get-PSFConfigValue -FullName "AITools.$ToolName.Model" -Fallback $null Write-PSFMessage -Level Verbose -Message "Configured model: $configuredModel" $editMode = Get-PSFConfigValue -FullName "AITools.$ToolName.EditMode" -Fallback 'Diff' Write-PSFMessage -Level Verbose -Message "Edit mode: $editMode" $configuredReasoningEffort = Get-PSFConfigValue -FullName "AITools.$ToolName.ReasoningEffort" -Fallback $null Write-PSFMessage -Level Verbose -Message "Configured reasoning effort: $configuredReasoningEffort" $configuredIgnoreInstructions = Get-PSFConfigValue -FullName "AITools.$ToolName.IgnoreInstructions" -Fallback $false Write-PSFMessage -Level Verbose -Message "Configured ignore instructions: $configuredIgnoreInstructions" # Apply overrides $modelToUse = if ($ModelOverride) { $ModelOverride } else { $configuredModel } Write-PSFMessage -Level Verbose -Message "Model to use: $modelToUse" $reasoningEffortToUse = if ($ReasoningEffortOverride) { $ReasoningEffortOverride } else { $configuredReasoningEffort } Write-PSFMessage -Level Verbose -Message "Reasoning effort to use: $reasoningEffortToUse" # Command-line parameter overrides config (if switch is present, use it; otherwise use config) $ignoreInstructionsToUse = if ($IgnoreInstructionsBound) { $IgnoreInstructionsOverride.IsPresent } else { $configuredIgnoreInstructions } Write-PSFMessage -Level Verbose -Message "Ignore instructions to use: $ignoreInstructionsToUse" return @{ PermissionBypass = $permissionBypass Model = $modelToUse EditMode = $editMode ReasoningEffort = $reasoningEffortToUse IgnoreInstructions = $ignoreInstructionsToUse } } |