public/Invoke-GitHubCopilotWhatTheShell.ps1
<# .SYNOPSIS Invokes the GitHub Copilot CLI's what-the-shell function. .DESCRIPTION The Invoke-GitHubCopilotWhatTheShell function runs the what-the-shell function from the GitHub Copilot CLI. It takes the user's input, calls the Copilot CLI, and then executes the command returned by the Copilot CLI. .PARAMETER Query A variable-length argument list representing the user's input for the what-the-shell function. The code that is generated should work on PowerShell on Windows (without quotes). .EXAMPLE Invoke-GitHubCopilotWhatTheShell create a new folder called "my-folder" #> function Invoke-GitHubCopilotWhatTheShell { param( [Parameter(Mandatory=$true, ValueFromRemainingArguments=$true)] [string[]]$Query ) $operatingSystem = Get-OperatingSystem # Join the args to form a single input string $inputString = [string]::Join(" ", $Query) $inputString += " in PowerShell on $operatingSystem." # Create a temporary file to store the output $tmpFile = New-TemporaryFile # Get the path to the node executable $nodeFolder = (Split-Path -Parent (Get-Command -Name "node").Path) $copilotCliPath = Join-Path -Path $nodeFolder -ChildPath "node_modules\@githubnext\github-copilot-cli\cli.js" # Call the Copilot CLI using node and store the output in the temporary file & "node" $copilotCliPath what-the-shell $inputString --shellout $tmpFile # Check if the command was successful if ($?) { # Read the contents of the temporary file and execute the command $fixedCmd = Get-Content -Path $tmpFile Invoke-Expression -Command $fixedCmd } else { Write-Host "Apologies! Extracting command failed" } # Remove the temporary file Remove-Item -Path $tmpFile.FullName } # Set the alias for the function Set-Alias -Name "??" -Value "Invoke-GitHubCopilotWhatTheShell" Set-Alias -Name "wts" -Value "Invoke-GitHubCopilotWhatTheShell" # Export the function and its aliases Export-ModuleMember -Function "Invoke-GitHubCopilotWhatTheShell" Export-ModuleMember -Alias "??" Export-ModuleMember -Alias "wts" |