Files
ableton-mcp-ai/ralph/scripts/Test-RalphCodex.ps1

81 lines
2.9 KiB
PowerShell

param(
[switch]$Full
)
. (Join-Path $PSScriptRoot "Common.ps1")
$codexConfig = Get-CodexConfig
$preferredCmd = Join-Path $env:APPDATA "npm\codex.cmd"
$preferredPs1 = Join-Path $env:APPDATA "npm\codex.ps1"
$codexPath = $null
if (Test-Path $preferredCmd) {
$codexPath = $preferredCmd
}
elseif (Test-Path $preferredPs1) {
$codexPath = $preferredPs1
}
else {
$codexCommand = Get-Command codex -ErrorAction SilentlyContinue
if ($null -ne $codexCommand) {
$codexPath = $codexCommand.Source
}
}
$result = [ordered]@{
ok = $false
binary_found = $false
binary_path = $codexPath
session_id = [string]$codexConfig.session_id
model = [string]$codexConfig.model
help_ok = $false
full_ok = $false
output = ""
}
if ([string]::IsNullOrWhiteSpace($codexPath)) {
$result.output = "codex executable not found"
}
else {
$result.binary_found = $true
$helpOutput = & $codexPath exec resume --help 2>&1
if ($LASTEXITCODE -eq 0) {
$result.help_ok = $true
}
$result.output = (@($helpOutput) -join [Environment]::NewLine)
if ($Full) {
$tempPromptPath = Join-Path ([System.IO.Path]::GetTempPath()) ("ralph-codex-smoke-" + [guid]::NewGuid().ToString("N") + ".md")
$tempOutput = Join-Path ([System.IO.Path]::GetTempPath()) ("ralph-codex-smoke-" + [guid]::NewGuid().ToString("N") + ".json")
$tempPrompt = @'
You are Codex.
Return exactly one JSON object and nothing else.
Use this exact payload:
{"verdict":"pass","acceptance_passed":true,"fix_required":false,"summary":"smoke","highest_risk_issues":[],"next_sprint_needed":false,"next_sprint_brief":""}
'@
try {
Write-Utf8File -Path $tempPromptPath -Content ($tempPrompt.Trim() + "`n")
$verdict = & (Join-Path $PSScriptRoot "Invoke-CodexMaster.ps1") -PromptFile $tempPromptPath -OutputFile $tempOutput
$result.output = ($result.output + [Environment]::NewLine + ($verdict | ConvertTo-Json -Depth 20)).Trim()
if ($null -ne $verdict -and [string]$verdict.verdict -eq "pass" -and [bool]$verdict.acceptance_passed) {
$result.full_ok = $true
}
}
catch {
$result.output = ($result.output + [Environment]::NewLine + $_.Exception.Message).Trim()
}
finally {
if (Test-Path $tempPromptPath) {
Remove-Item -LiteralPath $tempPromptPath -Force -ErrorAction SilentlyContinue
}
if (Test-Path $tempOutput) {
Remove-Item -LiteralPath $tempOutput -Force -ErrorAction SilentlyContinue
}
}
}
}
$result.ok = [bool]($result.binary_found -and $result.help_ok -and ((-not $Full) -or $result.full_ok))
$outputPath = Join-Path (Get-RalphRoot) "state\codex_smoke.json"
Write-Utf8File -Path $outputPath -Content ((@($result) | ConvertTo-Json -Depth 20) + "`n")
Get-Content -Raw -Path $outputPath