Constant PWSH_SCRIPT
Source const PWSH_SCRIPT: &str = "# AgentMux shell integration for PowerShell (pwsh / powershell.exe)\n# Deployed to: ~/.agentmux/shell/pwsh/wavepwsh.ps1\n# Loaded via: pwsh -ExecutionPolicy Bypass -NoExit -File <this-file>\n\n# wsh has been retired \u{2014} AGENTMUX is now a plain \"1\" sentinel.\n# See specs/SPEC_RETIRE_WSH_2026_04_12.md.\n\n# \u{2500}\u{2500}\u{2500} Shell Integration \u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\n\n# PS5 (Windows PowerShell 5.1) does not support `e as ESC \u{2014} use [char]0x1B instead\nif ($PSVersionTable.PSVersion.Major -ge 7) { $ESC = \"`e\" } else { $ESC = [char]0x1B }\n\nfunction Global:_agentmux_si_blocked {\n return ($env:TMUX -or $env:STY -or $env:TERM -like \"tmux*\" -or $env:TERM -like \"screen*\")\n}\n\nfunction Global:_agentmux_si_osc7 {\n if (_agentmux_si_blocked) { return }\n $hostname = if ($env:COMPUTERNAME) { $env:COMPUTERNAME } else { $env:HOSTNAME }\n $encoded = [System.Uri]::EscapeDataString($PWD.Path)\n Write-Host -NoNewline \"${ESC}]7;file://$hostname/$encoded`a\"\n}\n\nfunction Global:_agentmux_si_json_escape {\n param([string]$s)\n $s = $s.Replace(\'\\\', \'\\\\\')\n $s = $s.Replace(\'\"\', \'\\\"\')\n return $s\n}\n\n$Global:_AGENTMUX_SI_LAST_AGENT = \"\"\n\n# Send AGENTMUX_AGENT_ID via OSC 16162;E on every prompt (only when changed)\nfunction Global:_agentmux_si_agent_env {\n if (_agentmux_si_blocked) { return }\n $current_agent = \"\"\n if ($env:AGENTMUX_AGENT_ID) {\n $current_agent = \"AGENTMUX_AGENT_ID:$($env:AGENTMUX_AGENT_ID):COLOR:$($env:AGENTMUX_AGENT_COLOR)\"\n }\n if ($current_agent -ne $Global:_AGENTMUX_SI_LAST_AGENT) {\n $Global:_AGENTMUX_SI_LAST_AGENT = $current_agent\n if ($env:AGENTMUX_AGENT_ID) {\n $escaped = _agentmux_si_json_escape $env:AGENTMUX_AGENT_ID\n $payload = \"{`\"AGENTMUX_AGENT_ID`\":`\"$escaped`\"\"\n if ($env:AGENTMUX_AGENT_COLOR) {\n $colorEscaped = _agentmux_si_json_escape $env:AGENTMUX_AGENT_COLOR\n $payload += \",`\"AGENTMUX_AGENT_COLOR`\":`\"$colorEscaped`\"\"\n }\n $payload += \"}\"\n Write-Host -NoNewline \"${ESC}]16162;E;${payload}`a\"\n } else {\n Write-Host -NoNewline \"${ESC}]16162;E;{}`a\"\n }\n }\n}\n\nfunction Global:_agentmux_si_prompt {\n _agentmux_si_osc7\n _agentmux_si_agent_env\n}\n\n# \u{2500}\u{2500}\u{2500} muxlog helper \u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\nfunction Global:muxlog {\n param([string]$Target = \"host\", [string]$Action = \"tail\")\n if (-not $env:AGENTMUX_LOG_DIR) {\n Write-Error \"AGENTMUX_LOG_DIR not set - run inside an AgentMux terminal\"\n return\n }\n $ptr = Join-Path $env:AGENTMUX_LOG_DIR \"current-$Target-v$($env:AGENTMUX_VERSION).path\"\n if (-not (Test-Path $ptr)) {\n Write-Error \"Unknown log target \'$Target\'. Check $env:AGENTMUX_LOG_DIR for current-*.path files.\"\n return\n }\n $logfile = Join-Path $env:AGENTMUX_LOG_DIR (Get-Content $ptr)\n switch ($Action) {\n \"tail\" { Get-Content $logfile -Wait -Tail 50 }\n \"cat\" { Get-Content $logfile }\n default { Select-String $Action $logfile }\n }\n}\n\n# Hook into the prompt function\nif (Test-Path Function:\\prompt) {\n $global:_agentmux_original_prompt = $function:prompt\n function Global:prompt {\n _agentmux_si_prompt\n & $global:_agentmux_original_prompt\n }\n} else {\n function Global:prompt {\n _agentmux_si_prompt\n \"PS $($executionContext.SessionState.Path.CurrentLocation)$(\'>\' * ($nestedPromptLevel + 1)) \"\n }\n}\n";