Track full dispatch completion separately for error handling and shutdown drain while allowing same-session follow-ups to steer active runs. Fixes#113180.
Co-authored-by: Taksh <takshkothari09@gmail.com>
Accept only the official OpenAI Responses SDK plain-text format and preserve strict rejection of unsupported structured outputs and verbosity.
Reported-by: @logicbridgedev
Refs: #80418
Reject ambiguous duplicate IDs in ID-merged patches. Compare shared auth against current authored ownership so runtime-only fields and stale secret snapshots cannot skew disconnect decisions.
Recognize standard prompt/completion token fields in JSON, complete JSONL, and incremental streaming without changing existing CLI-token precedence or cached-token accounting.
Inspired-by: @Beandon13 (#78085)
Refs: #77992
Publish the existing Slack route-based doctor capabilities in channel metadata so cold doctor scans no longer falsely report dropped messages or recommend schema-invalid sender allowlists. Add metadata-only discovery regression. Fixes#110489; thanks @ari-hjunk for the report.
* test(process): reproduce Windows taskkill process-tree leak
* fix(process): stop leaked Windows child process trees
Escalate only when Windows taskkill reports that graceful process-tree termination failed. Preserve awaited taskkill completion, grace-period fallback, one-shot signaling, and PID-reuse protection.
Closes#110789
Supersedes #112202
Co-authored-by: Mohammed Alkindi <alkndymhmd692@gmail.com>
---------
Co-authored-by: Mohammed Alkindi <alkndymhmd692@gmail.com>
Bind the detected-candidate recommendation placeholder to the canonical empty suffix so guided onboarding never exposes the raw token.
Co-authored-by: OpenAI Codex <noreply@openai.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
* fix(state): recover from state-database corruption without a gateway restart
A cached state-database handle that starts reporting SQLITE_CORRUPT or
SQLITE_NOTADB stayed cached for the process lifetime, so every later
operation failed even after the file itself was repaired on disk. Only a
restart recovered.
Evict the cached handle when a state write reports proven corruption so
the next open reverifies the file: a repaired database recovers in place,
and real damage latches through the existing terminal path instead of
looping. Add isSqliteCorruptionError next to isSqliteLockError and reuse
it from isTerminalSqliteIntegrityError, replacing the duplicated errcode
constants and hand-rolled masking.
* test(state): prove corruption recovery with a real SQLite failure
Replace the synthetic callback error injection with a real corrupted-then-
repaired database. A second connection bumps SQLite change counter and
checkpoints the WAL, so the cached handle must reread page 1 and hits the
genuine driver error (ERR_SQLITE_ERROR, errcode 26) instead of a hand-built
one. The test then restores the file and asserts the pre-corruption rows read
back through a fresh handle, proving recovery without a process restart.
* fix(state): evict corrupted cached reads safely
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>