Merge pull request #20 from madhura68/fix/token-expired-false-positive
fix(worker): TOKEN_EXPIRED-detectie alleen bij non-zero Claude-exit
This commit is contained in:
commit
28ef6818a3
2 changed files with 20 additions and 8 deletions
|
|
@ -80,8 +80,12 @@ while true; do
|
||||||
# Token-expiry detectie: run-one-job.ts retourneert exit 3 wanneer het
|
# Token-expiry detectie: run-one-job.ts retourneert exit 3 wanneer het
|
||||||
# bekende auth-error-strings in Claude's output ziet. We checken óók de
|
# bekende auth-error-strings in Claude's output ziet. We checken óók de
|
||||||
# log-tekst voor het geval een ander pad het patroon raakt (bv. Prisma-
|
# log-tekst voor het geval een ander pad het patroon raakt (bv. Prisma-
|
||||||
# connection-error met OAuth-expired in error-body).
|
# connection-error met OAuth-expired in error-body) — maar alléén bij een
|
||||||
if [[ "$exit_code" -eq 3 ]] || grep -qE '(invalid_api_key|authentication.*failed|401.*unauthor|OAuth.*expired)' "${run_log}"; then
|
# niet-nul exit. Het run-log bevat de volledige stream-json output (incl.
|
||||||
|
# tool-results én run-one-job's eigen "TOKEN_EXPIRED detected"-logregel),
|
||||||
|
# dus een geslaagde job die toevallig "401 unauthorized" in z'n output
|
||||||
|
# heeft mag de grep-fallback niet triggeren.
|
||||||
|
if [[ "$exit_code" -eq 3 ]] || { [[ "$exit_code" -ne 0 ]] && grep -qE '(invalid_api_key|authentication.*failed|401.*unauthor|OAuth.*expired)' "${run_log}"; }; then
|
||||||
log "AUTH FAILURE detected (exit=$exit_code or pattern in log) — marking TOKEN_EXPIRED"
|
log "AUTH FAILURE detected (exit=$exit_code or pattern in log) — marking TOKEN_EXPIRED"
|
||||||
touch "${AGENT_STATE_DIR}/TOKEN_EXPIRED"
|
touch "${AGENT_STATE_DIR}/TOKEN_EXPIRED"
|
||||||
write_state "$(jq -n \
|
write_state "$(jq -n \
|
||||||
|
|
|
||||||
|
|
@ -383,8 +383,15 @@ async function main(): Promise<number> {
|
||||||
`duration_ms=${durationMs} wall_clock_seconds=${Math.round(durationMs / 1000)}`,
|
`duration_ms=${durationMs} wall_clock_seconds=${Math.round(durationMs / 1000)}`,
|
||||||
)
|
)
|
||||||
|
|
||||||
// 10. Token-expiry detection.
|
// 10. Token-expiry detection — alleen als Claude zelf non-zero eindigde.
|
||||||
|
// stdoutBuf bevat de volledige stream-json output incl. álle tool-results,
|
||||||
|
// dus de auth-error-strings kunnen ook agent-werk-content zijn (een doc
|
||||||
|
// over 401-handling gelezen, een endpoint getest). Een echte credential-
|
||||||
|
// fout laat 'claude' non-zero exiten; een geslaagde run (exit 0) is per
|
||||||
|
// definitie geen token-expiry. Zonder deze gate legt zulke content de
|
||||||
|
// worker onterecht plat (run-agent.sh → TOKEN_EXPIRED marker + sleep).
|
||||||
let tokenExpired = false
|
let tokenExpired = false
|
||||||
|
if (exitCode !== 0) {
|
||||||
for (const pat of TOKEN_EXPIRY_PATTERNS) {
|
for (const pat of TOKEN_EXPIRY_PATTERNS) {
|
||||||
if (pat.test(stdoutBuf)) {
|
if (pat.test(stdoutBuf)) {
|
||||||
tokenExpired = true
|
tokenExpired = true
|
||||||
|
|
@ -392,6 +399,7 @@ async function main(): Promise<number> {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 11. Rollback claim if Claude exited non-zero without updating job-status.
|
// 11. Rollback claim if Claude exited non-zero without updating job-status.
|
||||||
// PBI-50 lease-driven recovery vangt resterende stale jobs op na 5 min.
|
// PBI-50 lease-driven recovery vangt resterende stale jobs op na 5 min.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue