$ErrorActionPreference = "Stop" function Install-WingetPackageIfMissing { param( [string]$Command, [string]$PackageId ) if (Get-Command $Command -ErrorAction SilentlyContinue) { return } if (-not (Get-Command winget.exe -ErrorAction SilentlyContinue)) { throw "winget не найден. Обновите Windows App Installer и повторите установку." } winget install --id $PackageId -e --accept-package-agreements --accept-source-agreements if ($LASTEXITCODE -ne 0) { throw "Не удалось установить пакет $PackageId." } } Install-WingetPackageIfMissing "git.exe" "Git.Git" Install-WingetPackageIfMissing "npm.cmd" "OpenJS.NodeJS.LTS" $env:Path = "$env:ProgramFiles\Git\cmd;$env:ProgramFiles\nodejs;$env:APPDATA\npm;$env:Path" $npm = Get-Command npm.cmd -ErrorAction SilentlyContinue if (-not $npm) { throw "Node.js установлен, но npm не найден. Перезапустите PowerShell и повторите команду." } $codex = Get-Command codex.cmd -ErrorAction SilentlyContinue if (-not $codex) { & $npm.Source install --global "@openai/codex" if ($LASTEXITCODE -ne 0) { throw "Не удалось установить Codex CLI." } $npmPrefix = (& $npm.Source config get prefix).Trim() $env:Path = "$npmPrefix;$env:Path" $codex = Get-Command codex.cmd -ErrorAction SilentlyContinue } if (-not $codex) { throw "Codex CLI установлен, но команда codex не найдена. Перезапустите PowerShell и повторите установку." } $marketplaceName = "logos-company-plugins" $marketplaceUrl = "https://dev.ast.ltr.kz/Logos/codex-plugins.git" $pluginId = "tax-code-research@$marketplaceName" $marketplaces = (& $codex.Source plugin marketplace list --json | ConvertFrom-Json).marketplaces if ($marketplaces.name -contains $marketplaceName) { & $codex.Source plugin marketplace upgrade $marketplaceName } else { & $codex.Source plugin marketplace add $marketplaceUrl --ref main } if ($LASTEXITCODE -ne 0) { throw "Не удалось подключить marketplace $marketplaceName." } $installed = (& $codex.Source plugin list --json | ConvertFrom-Json).installed if ($installed.pluginId -notcontains $pluginId) { & $codex.Source plugin add $pluginId if ($LASTEXITCODE -ne 0) { throw "Не удалось установить плагин $pluginId." } } Write-Host "Готово. Перезапустите ChatGPT Desktop или откройте новый рабочий чат." -ForegroundColor Green