Functions/GenXdev.Queries.AI/Open-DeepSearchQuery.ps1
############################################################################### <# .SYNOPSIS Opens a DeepSeek query in a webbrowser .DESCRIPTION Opens a DeepSeek query in the webbrowser, types in the query and presses enter to execute the search. This function leverages the DeepSeek AI search engine to provide intelligent answers and insights for the provided queries. .PARAMETER Queries One or more queries to perform on DeepSeek. Each query will be processed individually and sent to the DeepSeek AI search interface. .PARAMETER Language The language of the returned search results. This affects the browser's accept-lang header and influences the language of the search results. .PARAMETER Private Opens in incognito/private browsing mode for enhanced privacy during the search session. .PARAMETER Force Force enable debugging port, stopping existing browsers if needed to ensure proper browser automation functionality. .PARAMETER Edge Opens in Microsoft Edge browser specifically. .PARAMETER Chrome Opens in Google Chrome browser specifically. .PARAMETER Chromium Opens in Microsoft Edge or Google Chrome, depending on what the default browser is. .PARAMETER Firefox Opens in Firefox browser specifically. .PARAMETER All Opens in all registered modern browsers simultaneously. .PARAMETER Monitor The monitor to use, 0 = default, -1 is discard, -2 = Configured secondary monitor, defaults to -1, no positioning. .PARAMETER FullScreen Opens in fullscreen mode for distraction-free searching. .PARAMETER Width The initial width of the webbrowser window in pixels. .PARAMETER Height The initial height of the webbrowser window in pixels. .PARAMETER X The initial X position of the webbrowser window. .PARAMETER Y The initial Y position of the webbrowser window. .PARAMETER Left Place browser window on the left side of the screen. .PARAMETER Right Place browser window on the right side of the screen. .PARAMETER Top Place browser window on the top side of the screen. .PARAMETER Bottom Place browser window on the bottom side of the screen. .PARAMETER Centered Place browser window in the center of the screen. .PARAMETER ApplicationMode Hide the browser controls for a cleaner search interface. .PARAMETER NoBrowserExtensions Prevent loading of browser extensions during the search session. .PARAMETER DisablePopupBlocker Disable the popup blocker to allow search-related popups. .PARAMETER AcceptLang Set the browser accept-lang http header for localized search results. .PARAMETER KeysToSend Keystrokes to send to the Browser window, see documentation for cmdlet GenXdev.Windows\Send-Key. .PARAMETER FocusWindow Focus the browser window after opening. .PARAMETER SetForeground Set the browser window to foreground after opening. .PARAMETER Maximize Maximize the window after positioning. .PARAMETER RestoreFocus Restore PowerShell window focus after opening the browser. .PARAMETER NewWindow Don't re-use existing browser window, instead, create a new one. .PARAMETER PassThru Returns a [System.Diagnostics.Process] object of the browser process. .PARAMETER SendKeyEscape Escape control characters when sending keys to the browser. .PARAMETER SendKeyHoldKeyboardFocus Prevent returning keyboard focus to PowerShell after sending keys. .PARAMETER SendKeyUseShiftEnter Send Shift+Enter instead of regular Enter for line breaks. .PARAMETER SendKeyDelayMilliSeconds Delay between sending different key sequences in milliseconds. .PARAMETER NoBorders Remove window borders and title bar for a cleaner appearance. .PARAMETER SessionOnly Use alternative settings stored in session for AI preferences. .PARAMETER ClearSession Clear alternative settings stored in session for AI preferences. .PARAMETER SkipSession Store settings only in persistent preferences without affecting session. .PARAMETER SideBySide Position browser window either fullscreen on different monitor than PowerShell, or side by side with PowerShell on the same monitor. .EXAMPLE Open-DeepSearchQuery -Queries "powershell function" Opens DeepSeek and searches for "powershell function" using default settings. .EXAMPLE aideepseek "powershell function" Uses the alias to search for "powershell function" with default parameters. .EXAMPLE Open-DeepSearchQuery -Queries "machine learning basics" -Monitor 0 -FullScreen Opens DeepSeek in fullscreen mode on the primary monitor to search for "machine learning basics". #> function Open-DeepSearchQuery { [CmdletBinding()] [Alias('aideepseek', 'askdeepsearch')] param( ######################################################################## [Alias('q', 'Name', 'Text', 'Query')] [Parameter( Mandatory = $true, Position = 0, ValueFromRemainingArguments = $false, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, HelpMessage = 'The query to execute.' )] [string[]] $Queries, ######################################################################## [ValidateSet( 'Afrikaans', 'Akan', 'Albanian', 'Amharic', 'Arabic', 'Armenian', 'Azerbaijani', 'Basque', 'Belarusian', 'Bemba', 'Bengali', 'Bihari', 'Bork, bork, bork!', 'Bosnian', 'Breton', 'Bulgarian', 'Cambodian', 'Catalan', 'Cherokee', 'Chichewa', 'Chinese (Simplified)', 'Chinese (Traditional)', 'Corsican', 'Croatian', 'Czech', 'Danish', 'Dutch', 'Elmer Fudd', 'English', 'Esperanto', 'Estonian', 'Ewe', 'Faroese', 'Filipino', 'Finnish', 'French', 'Frisian', 'Ga', 'Galician', 'Georgian', 'German', 'Greek', 'Guarani', 'Gujarati', 'Hacker', 'Haitian Creole', 'Hausa', 'Hawaiian', 'Hebrew', 'Hindi', 'Hungarian', 'Icelandic', 'Igbo', 'Indonesian', 'Interlingua', 'Irish', 'Italian', 'Japanese', 'Javanese', 'Kannada', 'Kazakh', 'Kinyarwanda', 'Kirundi', 'Klingon', 'Kongo', 'Korean', 'Krio (Sierra Leone)', 'Kurdish', 'Kurdish (Soranî)', 'Kyrgyz', 'Laothian', 'Latin', 'Latvian', 'Lingala', 'Lithuanian', 'Lozi', 'Luganda', 'Luo', 'Macedonian', 'Malagasy', 'Malay', 'Malayalam', 'Maltese', 'Maori', 'Marathi', 'Mauritian Creole', 'Moldavian', 'Mongolian', 'Montenegrin', 'Nepali', 'Nigerian Pidgin', 'Northern Sotho', 'Norwegian', 'Norwegian (Nynorsk)', 'Occitan', 'Oriya', 'Oromo', 'Pashto', 'Persian', 'Pirate', 'Polish', 'Portuguese (Brazil)', 'Portuguese (Portugal)', 'Punjabi', 'Quechua', 'Romanian', 'Romansh', 'Runyakitara', 'Russian', 'Scots Gaelic', 'Serbian', 'Serbo-Croatian', 'Sesotho', 'Setswana', 'Seychellois Creole', 'Shona', 'Sindhi', 'Sinhalese', 'Slovak', 'Slovenian', 'Somali', 'Spanish', 'Spanish (Latin American)', 'Sundanese', 'Swahili', 'Swedish', 'Tajik', 'Tamil', 'Tatar', 'Telugu', 'Thai', 'Tigrinya', 'Tonga', 'Tshiluba', 'Tumbuka', 'Turkish', 'Turkmen', 'Twi', 'Uighur', 'Ukrainian', 'Urdu', 'Uzbek', 'Vietnamese', 'Welsh', 'Wolof', 'Xhosa', 'Yiddish', 'Yoruba', 'Zulu')] [parameter( Mandatory = $false, Position = 2, HelpMessage = 'The language of the returned search results' )] [string] $Language, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'Opens in incognito/private browsing mode' )] [Alias('incognito', 'inprivate')] [switch] $Private, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = ('Force enable debugging port, stopping existing ' + 'browsers if needed') )] [switch] $Force, ######################################################################## [Alias('e')] [Parameter( Mandatory = $false, HelpMessage = 'Opens in Microsoft Edge' )] [switch] $Edge, ######################################################################## [Alias('ch')] [Parameter( Mandatory = $false, HelpMessage = 'Opens in Google Chrome' )] [switch] $Chrome, ######################################################################## [Alias('c')] [Parameter( Mandatory = $false, HelpMessage = ('Opens in Microsoft Edge or Google Chrome, ' + 'depending on what the default browser is') )] [switch] $Chromium, ######################################################################## [Alias('ff')] [Parameter( Mandatory = $false, HelpMessage = 'Opens in Firefox' )] [switch] $Firefox, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'Opens in all registered modern browsers' )] [switch] $All, ######################################################################## [Alias('m', 'mon')] [Parameter( Mandatory = $false, HelpMessage = ('The monitor to use, 0 = default, -1 is discard, ' + '-2 = Configured secondary monitor, defaults to -1, no positioning') )] [int] $Monitor = -1, ######################################################################## [Alias('fs', 'f')] [Parameter( Mandatory = $false, HelpMessage = 'Opens in fullscreen mode' )] [switch] $FullScreen, ######################################################################## [Alias('sw')] [switch]$ShowWindow, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'The initial width of the webbrowser window' )] [int] $Width = -1, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'The initial height of the webbrowser window' )] [int] $Height = -1, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'The initial X position of the webbrowser window' )] [int] $X = -999999, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'The initial Y position of the webbrowser window' )] [int] $Y = -999999, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'Place browser window on the left side of the screen' )] [switch] $Left, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'Place browser window on the right side of the screen' )] [switch] $Right, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'Place browser window on the top side of the screen' )] [switch] $Top, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'Place browser window on the bottom side of the screen' )] [switch] $Bottom, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'Place browser window in the center of the screen' )] [switch] $Centered, ######################################################################## [Alias('a', 'app', 'appmode')] [Parameter( Mandatory = $false, HelpMessage = 'Hide the browser controls' )] [switch] $ApplicationMode, ######################################################################## [Alias('de', 'ne', 'NoExtensions')] [Parameter( Mandatory = $false, HelpMessage = 'Prevent loading of browser extensions' )] [switch] $NoBrowserExtensions, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'Disable the popup blocker' )] [Alias('allowpopups')] [switch] $DisablePopupBlocker, ######################################################################## [Alias('lang', 'locale')] [Parameter( Mandatory = $false, HelpMessage = 'Set the browser accept-lang http header' )] [string] $AcceptLang = $null, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = ('Keystrokes to send to the Browser window, ' + 'see documentation for cmdlet GenXdev.Windows\Send-Key') )] [string[]] $KeysToSend, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'Focus the browser window after opening' )] [Alias('fw','focus')] [switch] $FocusWindow, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'Set the browser window to foreground after opening' )] [Alias('fg')] [switch] $SetForeground, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'Maximize the window after positioning' )] [switch] $Maximize, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'Restore PowerShell window focus' )] [Alias('rf', 'bg')] [switch]$RestoreFocus, ######################################################################## [Alias('nw', 'new')] [Parameter( Mandatory = $false, HelpMessage = ("Don't re-use existing browser window, instead, " + 'create a new one') )] [switch] $NewWindow, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = ('Returns a [System.Diagnostics.Process] object of ' + 'the browserprocess') )] [Alias('pt')] [switch]$PassThru, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'Escape control characters when sending keys' )] [Alias('Escape')] [switch] $SendKeyEscape, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = ('Prevent returning keyboard focus to PowerShell ' + 'after sending keys') )] [Alias('HoldKeyboardFocus')] [switch] $SendKeyHoldKeyboardFocus, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = ('Send Shift+Enter instead of regular Enter for ' + 'line breaks') )] [Alias('UseShiftEnter')] [switch] $SendKeyUseShiftEnter, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = ('Delay between sending different key sequences ' + 'in milliseconds') )] [Alias('DelayMilliSeconds')] [int] $SendKeyDelayMilliSeconds, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = 'Removes the borders of the browser window' )] [Alias('nb')] [switch] $NoBorders, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = ('Use alternative settings stored in session for AI ' + 'preferences') )] [switch] $SessionOnly, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = ('Clear alternative settings stored in session for AI ' + 'preferences') )] [switch] $ClearSession, ######################################################################## [Parameter( Mandatory = $false, HelpMessage = ('Store settings only in persistent preferences without ' + 'affecting session') )] [Alias('FromPreferences')] [switch] $SkipSession, ######################################################################## [Parameter( HelpMessage = 'Position browser window either fullscreen on different monitor than PowerShell, or side by side with PowerShell on the same monitor.' )] [Alias('sbs')] [switch] $SideBySide ) begin { # output verbose message about initialization Microsoft.PowerShell.Utility\Write-Verbose 'Initializing DeepSeek query handler' # remove queries parameter from bound parameters before copying $null = $PSBoundParameters.Remove('Queries') # ensure url parameter is present for the target function if (-not $PSBoundParameters.ContainsKey('Url')) { $null = $PSBoundParameters.Add('Url', 'Url') } # ensure monitor parameter is present with default value if (-not $PSBoundParameters.ContainsKey('Monitor')) { $null = $PSBoundParameters.Add('Monitor', $Monitor) } # determine language code based on language parameter $code = 'www' if (-not [string]::IsNullOrWhiteSpace($Language)) { # get language code from the web language dictionary $code = (GenXdev.Helpers\Get-WebLanguageDictionary)[$Language] # set accept-lang header if not already specified if (-not $PSBoundParameters.ContainsKey('AcceptLang')) { $null = $PSBoundParameters.Add('AcceptLang', $code) } } # copy identical parameter values between functions $invocationArguments = GenXdev.Helpers\Copy-IdenticalParamValues ` -BoundParameters $PSBoundParameters ` -FunctionName 'GenXdev.Queries\Open-WebsiteAndPerformQuery' ` -DefaultValues (Microsoft.PowerShell.Utility\Get-Variable ` -Scope Local ` -ErrorAction SilentlyContinue) # set the deepseek chat url as the target website $invocationArguments.Url = 'https://chat.deepseek.com/' } process { # process each search query individually foreach ($query in $Queries) { # output verbose information about the current query Microsoft.PowerShell.Utility\Write-Verbose "Processing query: $query" # set the current query for the website interaction $invocationArguments.Queries = @($query) # invoke the website query function with all parameters GenXdev.Queries\Open-WebsiteAndPerformQuery @invocationArguments } } end { # output verbose message about operation completion Microsoft.PowerShell.Utility\Write-Verbose 'DeepSeek query operation completed' } } ############################################################################### |