private/New-CopilotArgument.ps1
|
function New-CopilotArgument { [CmdletBinding()] param( [string]$TargetFile, [string]$Message, [string]$Model, [bool]$UsePermissionBypass, [string]$WorkingDirectory, [string]$PromptFilePath, [string[]]$ContextFilePaths ) Write-PSFMessage -Level Verbose -Message "Building GitHub Copilot CLI arguments..." $arguments = @() # Always add --allow-all-tools for non-interactive mode Write-PSFMessage -Level Debug -Message "Adding allow-all-tools flag" $arguments += '--allow-all-tools' # Add directory access first (must come before other flags for proper permission handling) # Collect unique directories to avoid duplicates $directoriesToAdd = @() if ($WorkingDirectory) { Write-PSFMessage -Level Debug -Message "Adding working directory: $WorkingDirectory" $directoriesToAdd += $WorkingDirectory } if ($TargetFile) { $parentDir = Split-Path -Parent $TargetFile Write-PSFMessage -Level Debug -Message "Adding target file parent directory: $parentDir" $directoriesToAdd += $parentDir if (-not (Test-Path $parentDir/.git)) { $grandparentDir = Split-Path -Parent $parentDir Write-PSFMessage -Level Debug -Message "Adding target file grandparent directory: $grandparentDir" $directoriesToAdd += $grandparentDir } } # Add parent directories from prompt file if ($PromptFilePath) { if (Test-Path $PromptFilePath) { # Resolve to full path $resolvedPromptFile = (Resolve-Path $PromptFilePath).Path $promptParentDir = Split-Path -Parent $resolvedPromptFile Write-PSFMessage -Level Debug -Message "Adding prompt file parent directory: $promptParentDir (resolved from: $PromptFilePath)" $directoriesToAdd += $promptParentDir } else { Write-PSFMessage -Level Warning -Message "Prompt file path not found and will be skipped: $PromptFilePath" } } # Add parent directories from context files if ($ContextFilePaths -and $ContextFilePaths.Count -gt 0) { foreach ($contextFile in $ContextFilePaths) { # Validate and resolve the context file path if (Test-Path $contextFile) { # Resolve to full path $resolvedContextFile = (Resolve-Path $contextFile).Path $contextParentDir = Split-Path -Parent $resolvedContextFile Write-PSFMessage -Level Debug -Message "Adding context file parent directory: $contextParentDir (resolved from: $contextFile)" $directoriesToAdd += $contextParentDir } else { Write-PSFMessage -Level Warning -Message "Context file path not found and will be skipped: $contextFile" } } } # Add unique directories to arguments $uniqueDirs = $directoriesToAdd | Select-Object -Unique foreach ($dir in $uniqueDirs) { $arguments += '--add-dir', $dir } if ($PSCmdlet.MyInvocation.BoundParameters['Debug']) { Write-PSFMessage -Level Debug -Message "Setting log level to debug" $arguments += '--log-level', 'debug' } elseif ($PSCmdlet.MyInvocation.BoundParameters['Verbose']) { Write-PSFMessage -Level Debug -Message "Setting log level to info" $arguments += '--log-level', 'info' } if ($Model) { Write-PSFMessage -Level Debug -Message "Using model: $Model" $arguments += '--model', $Model } if ($Message) { Write-PSFMessage -Level Debug -Message "Adding message prompt" # For file editing, prepend the target file reference at the very beginning # so Copilot knows which file to edit before reading the instructions if ($TargetFile) { $Message = "@$TargetFile`n`n$Message" Write-PSFMessage -Level Debug -Message "Prepended target file to message: @$TargetFile" } $arguments += '-p', $Message } Write-PSFMessage -Level Verbose -Message "Copilot arguments built: $($arguments -join ' ')" return $arguments } |