Sync: Complete project state with all MEGA SPRINT V1-V3 features and Codex stubs
This commit is contained in:
80
ralph/scripts/Test-RalphCodex.ps1
Normal file
80
ralph/scripts/Test-RalphCodex.ps1
Normal file
@@ -0,0 +1,80 @@
|
||||
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
|
||||
Reference in New Issue
Block a user