v3.5.0 — Major Release: Command Code Multi-Format Parser, AI Assist, Self-Revive Watchdog
CC Adapter (17 fixes): - Multi-format tool-call parser chain: DSML → bash → explore → XML → raw JSON → fallback - Three-tier argument parser (direct/unescape/unicode_escape) - Recursive double/triple-wrap unwrapping (_unwrap_cmd) - Post-extraction sanitizer validation - DSML tag support (current CC model format) - Self-revive watchdog (50 restarts, progressive backoff) - Debug-to-file logging (cc-debug.log) - Inline self-test (19 tests via --self-test) - ErrorAnalyzer with 4xx learning on retry - Schema cache with 24h TTL Launcher: - AI Assist integration - Updated usage dashboard - Reasoning controls per-provider - Updated cleanup patterns .deb: v3.5.0 (70KB) — v3.3.0 kept as fallback
This commit is contained in:
57
CHANGELOG.md
57
CHANGELOG.md
@@ -1,5 +1,62 @@
|
||||
# Changelog
|
||||
|
||||
## v3.5.0 (2026-05-22)
|
||||
|
||||
**Major Release — Command Code Adapter Overhaul, AI Assist, Self-Revive Watchdog, Debug Infrastructure**
|
||||
|
||||
### Command Code Provider — Multi-Format Tool-Call Parser (Critical Bug Fix)
|
||||
|
||||
The Command Code (CC) provider adapter in `translate-proxy.py` had a critical bug where the CC model's tool-call output was not being parsed into executable tool calls, causing the Codex agent loop to stop after the first response. The CC model output format **changes between sessions and models** — the parser must handle all observed formats.
|
||||
|
||||
**Root Cause:** The CC model returns tool calls as inline text in various formats (raw JSON, XML, DSML tags, HTML-like blocks) within `text-delta` SSE events. The original parser only handled one format. When the model switched output style, tool calls were silently dropped, and Codex received a plain text response instead of executable commands — halting the multi-turn agent loop.
|
||||
|
||||
**The Fix — Multi-Format Parser Chain (17 patches):**
|
||||
|
||||
A cascading parser chain was built that tries each format in order, first match wins:
|
||||
`DSML → <bash> blocks → <explore_agent> → <tool_call type=...> → XML patterns → raw JSON → fallback regex`
|
||||
|
||||
- **FIX 1**: `cc_input_to_messages()` — enforce STRING content only (CC `/alpha/generate` rejects content blocks). Tool calls sent as inline JSON text in assistant messages. Tool results as `role: "user"` plain text (NOT `role: "tool"`).
|
||||
- **FIX 2**: `x-command-code-version` header always sent (fallback `"0.26.8"`) — prevents 403 `upgrade_required` errors.
|
||||
- **FIX 3**: Cleared stale schema cache (`content_type:"array"`) that was corrupting message construction.
|
||||
- **FIX 4**: Streaming `try/except` wrapper — catches all streaming errors and sends `response.completed(status:"failed")` event instead of crashing the connection.
|
||||
- **FIX 5**: `_extract_raw_json_tool_calls()` — new parser that finds raw JSON tool calls embedded in model text (`{"cmd":"...","type":"tool-call"}`).
|
||||
- **FIX 6**: `_extract_args()` three-tier parser — tries direct parse → `codecs.escape_decode` → `unicode_escape` to prevent double-wrapped argument strings.
|
||||
- **FIX 7**: `_extract_field()` skips leading `\` before value type check — handles malformed escape sequences in CC output.
|
||||
- **FIX 8**: `sandbox_permissions` normalization from parsed dict — converts `{"docker":"full"}` to the flat string format Codex expects.
|
||||
- **FIX 9** (REVERTED): Removed adaptive probe system — proved unnecessary, conservative inline-text format is sufficient.
|
||||
- **FIX 10**: Comprehensive fix documentation added to proxy file header for maintainability.
|
||||
- **FIX 11**: `_unwrap_cmd()` recursive unwrapping — handles double/triple-wrapped `cmd` values at all 7 extraction paths. `_sanitize_tool_calls()` post-extraction validation layer ensures every tool call has valid name + args.
|
||||
- **FIX 11c**: XML regex fix — `</tool_call)` had unbalanced parenthesis for ~4000 lines; now uses `[)]?>` to match both `</tool_call)>` and `</tool_call)>`.
|
||||
- **FIX 12**: Self-revive watchdog loop — auto-restarts proxy on crash (up to 50x, progressive backoff 1→30s). Controlled by `_SHUTDOWN_REQUESTED` flag on SIGTERM/SIGINT.
|
||||
- **FIX 13**: Fallback extraction when main parser returns empty but text contains tool-call signals (`{"cmd":`, `"type":"tool-call"`, `<tool`, `<function=`).
|
||||
- **FIX 14**: Parser for `<tool_call type="bash">\n{"command":"..."}` format (actual CC model output) + fixed fallback regex to match BOTH `"cmd"` AND `"command"` keys.
|
||||
- **FIX 15**: `<explore_agent>` blocks converted to real `exec_command` with synthesized curl-based repo exploration command.
|
||||
- **FIX 16**: `<bash>...</bash>` blocks parsed — extracts `prefix_rule`, `sandbox_permissions`, `justification` via line-oriented parsing.
|
||||
- **FIX 17**: DSML tool_call blocks — the **current CC model output format**:
|
||||
- `<||DSML||tool_calls>` wrapper
|
||||
- `<||DSML||invoke name="exec">` with `<||DSML||parameter name="command">` tags
|
||||
- Extracts command from `parameter name="command"` or fallback to `prefix_rule`
|
||||
- Maps `exec`/`bash` → `exec_command`
|
||||
|
||||
### Debug Infrastructure
|
||||
- **Debug-to-file**: All proxy events, text_buf preview, parser results, and fallback attempts logged to `~/.cache/codex-proxy/cc-debug.log` — works even when stderr is piped by Codex Desktop.
|
||||
- **Inline self-test**: `--self-test` flag runs 19 tests covering unwrap, double-wrap, unescaped quotes, XML, function=, sanitizer edge cases.
|
||||
- **Per-request logging**: Event types, text_buf content, parser match results written to debug log for every request.
|
||||
|
||||
### AI Assist
|
||||
- AI Assist integration in launcher GUI for intelligent provider configuration and troubleshooting.
|
||||
|
||||
### Self-Revive Watchdog
|
||||
- Proxy auto-restarts on crash with progressive backoff (1s → 30s, up to 50 restarts).
|
||||
- Clean shutdown on SIGTERM/SIGINT via `_SHUTDOWN_REQUESTED` flag.
|
||||
- Eliminates manual proxy restart during long coding sessions.
|
||||
|
||||
### Other Improvements
|
||||
- `text_buf` in `cc_stream_to_sse` accumulates all `text-delta` events; parsing happens at end-of-stream for complete extraction.
|
||||
- Schema cache with 24h staleness TTL for provider capabilities.
|
||||
- ErrorAnalyzer learns from 4xx errors on retry (max 2 retries).
|
||||
- `cleanup-codex-stale.sh` updated with additional stale process patterns.
|
||||
|
||||
## v3.3.0 (2026-05-20)
|
||||
|
||||
**Antigravity + Gemini CLI OAuth — full Codex agent loop working**
|
||||
|
||||
Reference in New Issue
Block a user