Repository navigation
Codex Turn State Probe v0.5.2
Let an empty proxy pool mean "direct only", and stop hiding why a probe failed.
Fixed in v0.5.2
- Probing no longer requires a proxy pool: with
direct_probe: trueand no proxies, the round now runs direct-only. Before this, an empty pool skipped probing entirely withat least one proxy is required for probing. - One unparsable proxy line no longer aborts the whole round. Valid entries keep working, skipped entries are logged with their line number, and the round is only skipped when nothing is usable.
- Pasting a JSON array (the shape the config editor uses for
proxies) into the legacyproxystring field now works instead of failing withproxy must be [host]:port:user:password. - Proxy entries without credentials are accepted:
host:portandhost:port:userare valid next tohost:port:user:password, and passwords may contain colons. accepted_blocksnow defaults to[10, 11, 12].11blocks ≈ 312 characters is the current full-strength shape for the gpt-5.6 / gpt-6 era, so the previous[10, 12]default rejected every probe against those models. Set[10, 12]to restore the stricter behaviour.
Added in v0.5.2
- The status page explains plugin-raised failures instead of the generic "Operation failed; inspect local plugin logs for details": missing/unusable proxy configuration, unreachable egress, upstream HTTP status, and rejected state shapes (with the received length and block count) each get their own message.
- Every failed probe attempt is written to the log with
route,proxy_index,attempt, and the error, with proxy credentials redacted, so a failing egress can be identified without guessing. - The status page shows the accepted block counts as its own chip (also
accepted_blocksin the JSON view).
Fixed in v0.5.1
attempts_per_routeis now declared in the plugin registration metadata, so it appears in the CPA plugin configuration editor instead of only inconfig.yaml.- The status page shows the per-route attempt budget as its own chip.
- The
direct_probedescription now matches the actual behaviour: an accepted direct state is cached and ends the round rather than only being logged.
Added in v0.5.0
- The status page and JSON now count, per account+model, requests that carried a cached ticket (
injections), requests that passed every gate but left with no state (bare_requests), and whether a harvested response handed back the ticket already held (ticket_echoes) or a different one (ticket_changes). A non-zerobare_requestsis the visible signal that injection is silently failing open, and the echo/change split shows whether the upstream returns the ticket it was given or reissues one per turn. - The counters are persisted in
runtime.jsonnext to cached states, probe logs, and injection records, so a reload keeps the history. attempts_per_route(default1, maximum10): retry the direct route or a single proxy before the probe moves on to the next egress, inside themax_probe_attemptsbudget. Raise it when one attempt per egress keeps returning a rejected state length. The default keeps the previous rotation.
Install with CPA
Add this URL to plugins.store-sources, refresh the plugin store, and install Codex Turn State Probe:
https://raw.githubusercontent.com/spacex-3/cts-plugin/main/registry.json
Then merge config.example.yaml into the existing CPA configuration.