Repository navigation
codex-plugin-cc v1.2.0
Synchronous rescue, bounded turns, and a state layer that survives concurrent sessions and killed workers.
Highlights
task --await [--await-timeout-ms],--prompt-stdin, andresult <id> [--wait --timeout-ms]:/codex:rescueand the rescue agent are a singlenode … task --await --prompt-stdin <<'CODEX_PROMPT_…'call again,allowed-toolsis back toBash(node:*), and exit codes are documented (0done,1failed,3still running with a printedRe-run:line).- Session lifecycle:
SessionEndstops only its own foreground jobs, checks for any active job in the workspace, and asks the broker to shut down only when it is idle (newline-framed, id-matched, 5 s-bounded handshake; an unanswered handshake skips teardown). The broker refusesbroker/shutdownwhile another client is connected, self-terminates on idle (openai#457), and its own shutdown is bounded so a peer that never answers the FIN cannot make it ignore SIGTERM. - Bounded turns:
--turn-timeout-ms/CODEX_TURN_TIMEOUT_MSinterrupt the turn, wait for the terminal notification, and record a structuredfailed; the ack timer is referenced, a transport exit always yields a terminal record, andclose()is idempotent and bounded (TERM → KILL). - State integrity: a replace-free cross-process ticket lock (Lamport bakery on uniquely named immutable files under
state.lock.d/; dead PID → taken over at once, unreadable holder → 2 s, unusable PID → 30 s, live PID → never; listing/stat/read errors fail closed; 5 s bound naming the blocking PID and entry), atomic state writes, a PID sidecar written after spawn, file-first reaper reconciliation, and dead workers reported asfailedwith their private payload removed. - Secrets: every
--configvalue is redacted in job records and everystatus/resultrendering; the raw request lives only in a 0600 payload file; v1.1.1 records are migrated (queued jobs get their payload file before redaction). - Releases now ship as GitHub Releases with the
npm packtarball and its SHA-256 attached;release-verify.ymlre-runs the gate on the published tag (docs/RELEASING.md).
Compatibility
/codex:rescuebodies changed shape (single companion call); custom wrappers that parsed the oldstatus --waitloop should usetask --await/result --wait.- Job state directory gains
state.lock.d/,jobs/<id>.pidand 0600jobs/<id>.request.json; a legacystate.lockdirectory from unreleased builds is ignored. SessionEndis more conservative: withCODEX_COMPANION_BROKER_IDLE_TIMEOUT_MS=0a lingering client keeps the broker alive until the operator stops it.
Validation
- Exact tag target:
002a9b643eccd4f156175820037093de3d2f80e4(merge of #3; branch headae32d99) - Local gate: 239/239 tests, 0 leaked test processes,
npm run build,npm run check-version,claude plugin validate . --strict - GitHub CI: release branch
ae32d99green on push, pull_request and a re-run (https://github.com/CBEPX/codex-plugin-cc/actions/runs/33175542754, https://github.com/CBEPX/codex-plugin-cc/actions/runs/33175546290);mainafter merge: https://github.com/CBEPX/codex-plugin-cc/actions/runs/33176478976 (green) - Review: Codex adversarial review ×16 (final verdict approve) and Claude (opus) review ×13 (final verdict SHIP) over 17 fix waves; every finding either fixed on the branch or recorded for 1.2.1
- Runtime dependency audit:
npm audit --omit=devreports 0 vulnerabilities - Live verification against Codex CLI 0.150.1:
--turn-timeout-ms→ structuredfailed; SIGKILLed background worker →failed, payload removed;task --awaitround trip;/codex:statusand/codex:rescuesynchronous in Claude Code 2.1.247 auto mode
Artifact
a77beb45af79a481c8c6ae7d0e57f035e6e5a6ea3d0b65c0581248727870b6d0 cbepx-codex-plugin-cc-1.2.0.tgz