[codex] keep long app-server turns alive through progress#78757
[codex] keep long app-server turns alive through progress#78757jonathangu wants to merge 97 commits intoopenclaw:mainfrom
Conversation
(cherry picked from commit a373468)
(cherry picked from commit 2e8761c)
(cherry picked from commit 712aa96)
(cherry picked from commit 0eb06ca)
(cherry picked from commit cf3ce08)
(cherry picked from commit a91c17c)
(cherry picked from commit b546aa9)
Normalize WhatsApp onboarding allowlist entries to digit-only WhatsApp IDs and reject invalid owner-phone inputs during prompt validation. (cherry picked from commit 68a500c)
* fix(telegram): reuse preview for long text finals * test(qa): cover long telegram finals * fix(qa): satisfy extension lint * fix(qa): keep telegram long final fixture to two chunks * test(telegram): cover three chunk finals * fix(telegram): force long final preview boundary (cherry picked from commit e03fe1e)
(cherry picked from commit b0f841e)
Bind the default loopback gateway listener only to `127.0.0.1` on Windows so libuv dual-stack `::1` behavior cannot wedge localhost HTTP requests. Also keeps non-Windows dual-loopback behavior covered, replaces the redundant Windows passthrough test with guard coverage, and adds the required changelog entry. Fixes openclaw#69674. Tests: - pnpm exec oxfmt --check --threads=1 CHANGELOG.md src/gateway/net.ts src/gateway/net.test.ts - pnpm test src/gateway/net.test.ts - pnpm check:changed - GitHub required checks: green Thanks @SARAMALI15792. Co-authored-by: saram ali <140950904+SARAMALI15792@users.noreply.github.com> Co-authored-by: Brad Groux <3053586+BradGroux@users.noreply.github.com> (cherry picked from commit 978bc53)
…isted] (openclaw#74161) Summary: - The PR updates agents skill prompt guidance to require exact `<location>` paths for single- and multi-skill selection, adds prompt assertions, and records the fix in the changelog. - Reproducibility: yes. Static source reproduction is enough: current main lacks the exact-`<location>` guard ... illsSection()`, while the PR diff adds it to both selection branches and asserts the resulting prompt text. Automerge notes: - PR branch already contained follow-up commit before automerge: fix: enforce exact skill paths for all skill matches Validation: - ClawSweeper review passed for head 743c984. - Required merge gates passed before the squash merge. Prepared head SHA: 743c984 Review: openclaw#74161 (comment) Co-authored-by: tianguicheng <tianguicheng@xiaomi.com> Co-authored-by: sallyom <somalley@redhat.com> (cherry picked from commit c739088)
Accept drive-absolute Windows sandbox Docker bind sources in config and runtime validation while keeping blocked-path and allowed-root comparisons case-insensitive for Windows drive paths. Also remove a stale WhatsApp setup import that blocked extension lint after the rebase. Co-authored-by: 6607changchun <84566142+6607changchun@users.noreply.github.com> Co-authored-by: Brad Groux <3053586+BradGroux@users.noreply.github.com> (cherry picked from commit d02fbc6)
(cherry picked from commit c37871e)
(cherry picked from commit a0ea07e)
(cherry picked from commit add9a49)
(cherry picked from commit b32d4c5)
Adds cap_drop and no-new-privileges hardening for the bundled gateway Docker Compose services.\n\nThanks @VintageAyu. (cherry picked from commit f9da484)
…penclaw#77280) Merged via squash. Prepared head SHA: f4188b4 Co-authored-by: openperf <80630709+openperf@users.noreply.github.com> Co-authored-by: openperf <80630709+openperf@users.noreply.github.com> Reviewed-by: @openperf (cherry picked from commit 31da1fe)
|
Codex review: needs real behavior proof before merge. Summary Reproducibility: yes. from source inspection, though I did not run a live Codex turn: current main arms a 60s completion idle timeout and a request-timeout hard abort after Real behavior proof Next step before merge Security Review findings
Review detailsBest possible solution: Land a narrow Codex app-server and embedded-runner fix with focused regression tests, a minimal current changelog entry if user-facing, unchanged release/workflow state, and redacted live or terminal proof of a long accepted turn continuing past 60 seconds without a generic timeout response. Do we have a high-confidence way to reproduce the issue? Yes from source inspection, though I did not run a live Codex turn: current main arms a 60s completion idle timeout and a request-timeout hard abort after Is this the best way to solve the issue? No, not as submitted: the timeout/progress direction is reasonable, but the branch must be narrowed and rebased because it currently includes unrelated release/workflow/changelog churn and lacks real behavior proof. The safer path is a small Codex-only PR plus proof from a real long turn. Full review comments:
Overall correctness: patch is incorrect Security concerns:
What I checked:
Likely related people:
Remaining risk / open question:
Codex review notes: model gpt-5.5, reasoning high; reviewed against 58fa23b4a2f2. Re-review progress:
|
|
Independently confirmed on current |
|
Thanks for the PR. This branch buries the Codex timeout fix in unrelated release/plugin churn, so it is not reviewable as a focused Telegram PR. Please reopen as a narrow PR with only the intended fix. |
Fixes #78756.
Summary
This PR makes Codex app-server turns progress-aware instead of letting the per-request timeout kill an already-started turn after roughly 60 seconds.
The user-facing failure this addresses is a generic channel error after a Codex GPT-5.5 turn has already made progress or sent a visible update:
Root Cause
runCodexAppServerAttemptused the app-server request timeout as a hard timeout afterturn/startsucceeded. That means a turn could be accepted, perform useful work, then still be marked failed beforeturn/completedarrived.The progress clock was also too broad: low-signal account/rate-limit notifications were treated like turn progress, while some useful long-turn phases still had only the short completion wait. Separately, the embedded runner could emit a generic timeout payload even after a messaging tool had already delivered a user-visible update.
Changes
account/*notifications from progress accounting.didSendViaMessagingToolis already true.Validation
pnpm exec vitest run extensions/codex/src/app-server/run-attempt.test.ts→ 60 passedpnpm exec vitest run src/agents/pi-embedded-runner/run.overflow-compaction.loop.test.ts→ 42 passedpnpm tsgo:prod→ passedpnpm tsgo:test→ passedpnpm build→ passedNotes
This does not make stuck turns immortal. The intended policy is: extend while the current turn is doing real work, ignore low-signal account/status chatter for liveness, and keep a separate hard cap for genuinely wedged app-server turns.