prodex 0.56.0

OpenAI profile pooling and safe auto-rotate for Codex CLI and Claude Code
Documentation
{
  "codex": {
    "compatibility": {
      "upstream_repository": "https://github.com/openai/codex",
      "baseline_source": "openai/codex main branch",
      "guard_command": "node scripts/compat/check-upstream-baseline.mjs",
      "format_version": 2,
      "critical_files": [
        {
          "path": "codex-rs/core/src/client.rs",
          "reason": "Owns Responses route constants, compact route constants, conversation headers, turn-state replay, previous-response continuations, and websocket enablement.",
          "required_contains": [
            "RESPONSES_ENDPOINT",
            "/responses",
            "RESPONSES_COMPACT_ENDPOINT",
            "/responses/compact",
            "build_conversation_headers",
            "previous_response_id",
            "X_CODEX_INSTALLATION_ID_HEADER",
            "x-codex-installation-id",
            "X_CODEX_TURN_STATE_HEADER",
            "x-codex-turn-state",
            "X_CODEX_TURN_METADATA_HEADER",
            "x-codex-turn-metadata",
            "X_CODEX_PARENT_THREAD_ID_HEADER",
            "x-codex-parent-thread-id",
            "X_CODEX_WINDOW_ID_HEADER",
            "x-codex-window-id",
            "X_OPENAI_MEMGEN_REQUEST_HEADER",
            "x-openai-memgen-request",
            "X_OPENAI_SUBAGENT_HEADER",
            "x-openai-subagent",
            "X_RESPONSESAPI_INCLUDE_TIMING_METRICS_HEADER",
            "x-responsesapi-include-timing-metrics",
            "x-codex-beta-features",
            "OPENAI_BETA_HEADER",
            "responses_websockets=2026-02-06",
            "x-client-request-id",
            "stream_responses_websocket"
          ]
        },
        {
          "path": "codex-rs/core/src/compact_remote.rs",
          "reason": "Owns remote compaction flow that reaches the unary Responses compact endpoint through ModelClient.",
          "required_contains": [
            "run_remote_compact_task",
            "compact_conversation_history",
            "CompactionImplementation::ResponsesCompact",
            "ContextCompactionItem"
          ]
        },
        {
          "path": "codex-rs/codex-api/src/sse/responses.rs",
          "reason": "Owns SSE Responses stream parsing, turn-state capture, completion boundary, and quota/error event interpretation.",
          "required_contains": [
            "spawn_response_stream",
            "process_sse",
            "process_responses_event",
            "x-codex-turn-state",
            "response.completed",
            "response.failed",
            "response.metadata",
            "openai-model",
            "x-reasoning-included",
            "X-Models-Etag",
            "insufficient_quota",
            "rate_limit_exceeded"
          ]
        },
        {
          "path": "codex-rs/codex-api/src/endpoint/responses_websocket.rs",
          "reason": "Owns websocket Responses connection setup, request header merging, stream completion boundary, rate limit events, and wrapped websocket errors.",
          "required_contains": [
            "ResponsesWebsocketConnection",
            "websocket_url_for_path(\"responses\")",
            "merge_request_headers",
            "add_auth_headers",
            "x-codex-turn-state",
            "response.completed",
            "response.metadata",
            "codex.rate_limits",
            "openai-model",
            "x-reasoning-included",
            "x-models-etag",
            "parse_wrapped_websocket_error_event",
            "websocket_connection_limit_reached"
          ]
        }
      ],
      "expected_headers": [
        "session_id",
        "x-openai-subagent",
        "x-openai-memgen-request",
        "x-codex-installation-id",
        "x-codex-turn-state",
        "x-codex-turn-metadata",
        "x-codex-parent-thread-id",
        "x-codex-window-id",
        "x-client-request-id",
        "x-codex-beta-features",
        "x-responsesapi-include-timing-metrics",
        "OpenAI-Beta",
        "User-Agent"
      ],
      "proxy_replaced_headers": [
        "Authorization",
        "ChatGPT-Account-Id"
      ],
      "expected_routes": [
        "/responses",
        "/responses/compact",
        "/memories/trace_summarize",
        "websocket_url_for_path(\"responses\")"
      ],
      "expected_stream_events": [
        "response.completed",
        "response.failed",
        "response.metadata",
        "codex.rate_limits"
      ],
      "semantic_checks": [
        {
          "id": "client.responses-route",
          "kind": "route",
          "file": "codex-rs/core/src/client.rs",
          "reason": "Responses unary traffic must keep the upstream route constant and path together.",
          "file_contains_all": [
            "RESPONSES_ENDPOINT",
            "/responses"
          ],
          "expected_routes_all": [
            "/responses"
          ]
        },
        {
          "id": "client.responses-compact-route",
          "kind": "route",
          "file": "codex-rs/core/src/client.rs",
          "reason": "Remote compaction must keep using the upstream Responses compact route.",
          "file_contains_all": [
            "RESPONSES_COMPACT_ENDPOINT",
            "/responses/compact"
          ],
          "expected_routes_all": [
            "/responses/compact"
          ]
        },
        {
          "id": "client.conversation-headers",
          "kind": "header_group",
          "file": "codex-rs/core/src/client.rs",
          "reason": "Conversation metadata headers are forwarded together for affinity and upstream Codex behavior.",
          "file_contains_all": [
            "build_conversation_headers",
            "x-codex-installation-id",
            "x-codex-turn-state",
            "x-codex-turn-metadata",
            "x-codex-parent-thread-id",
            "x-codex-window-id",
            "x-openai-memgen-request",
            "x-openai-subagent",
            "x-responsesapi-include-timing-metrics",
            "x-client-request-id"
          ],
          "expected_headers_all": [
            "x-codex-installation-id",
            "x-codex-turn-state",
            "x-codex-turn-metadata",
            "x-codex-parent-thread-id",
            "x-codex-window-id",
            "x-openai-memgen-request",
            "x-openai-subagent",
            "x-responsesapi-include-timing-metrics",
            "x-client-request-id"
          ]
        },
        {
          "id": "client.websocket-beta",
          "kind": "co_occurrence",
          "file": "codex-rs/core/src/client.rs",
          "reason": "Websocket transport remains gated by the upstream beta header and version token.",
          "file_contains_all": [
            "stream_responses_websocket",
            "OPENAI_BETA_HEADER",
            "responses_websockets=2026-02-06"
          ],
          "expected_headers_all": [
            "OpenAI-Beta"
          ]
        },
        {
          "id": "compact.remote-responses-compact",
          "kind": "route",
          "file": "codex-rs/core/src/compact_remote.rs",
          "reason": "Remote compaction is tied to the Responses compact implementation and item shape.",
          "file_contains_all": [
            "run_remote_compact_task",
            "compact_conversation_history",
            "CompactionImplementation::ResponsesCompact",
            "ContextCompactionItem"
          ],
          "expected_routes_all": [
            "/responses/compact"
          ]
        },
        {
          "id": "sse.responses-events",
          "kind": "event_group",
          "file": "codex-rs/codex-api/src/sse/responses.rs",
          "reason": "SSE parsing must keep response lifecycle events grouped for stream compatibility.",
          "file_contains_all": [
            "process_responses_event",
            "response.completed",
            "response.failed",
            "response.metadata"
          ],
          "expected_stream_events_all": [
            "response.completed",
            "response.failed",
            "response.metadata"
          ]
        },
        {
          "id": "sse.quota-codes",
          "kind": "co_occurrence",
          "file": "codex-rs/codex-api/src/sse/responses.rs",
          "reason": "Quota rotation must remain tied to explicit upstream quota and rate-limit codes.",
          "file_contains_all": [
            "insufficient_quota",
            "rate_limit_exceeded"
          ]
        },
        {
          "id": "websocket.responses-route",
          "kind": "route",
          "file": "codex-rs/codex-api/src/endpoint/responses_websocket.rs",
          "reason": "Websocket sessions must keep the upstream Responses websocket route.",
          "file_contains_all": [
            "ResponsesWebsocketConnection",
            "websocket_url_for_path(\"responses\")"
          ],
          "expected_routes_all": [
            "websocket_url_for_path(\"responses\")"
          ]
        },
        {
          "id": "websocket.responses-events",
          "kind": "event_group",
          "file": "codex-rs/codex-api/src/endpoint/responses_websocket.rs",
          "reason": "Websocket stream parsing must preserve response lifecycle and rate-limit events.",
          "file_contains_all": [
            "response.completed",
            "response.metadata",
            "codex.rate_limits"
          ],
          "expected_stream_events_all": [
            "response.completed",
            "response.metadata",
            "codex.rate_limits"
          ]
        },
        {
          "id": "websocket.header-auth-merge",
          "kind": "header_group",
          "file": "codex-rs/codex-api/src/endpoint/responses_websocket.rs",
          "reason": "Websocket request metadata should merge upstream headers while auth remains profile-owned.",
          "file_contains_all": [
            "merge_request_headers",
            "add_auth_headers",
            "x-codex-turn-state"
          ],
          "expected_headers_all": [
            "x-codex-turn-state"
          ],
          "proxy_replaced_headers_all": [
            "Authorization",
            "ChatGPT-Account-Id"
          ]
        }
      ]
    },
    "latestRelease": {
      "tag_name": "rust-v0.125.0",
      "name": "0.125.0",
      "published_at": "2026-04-24T18:00:38Z",
      "html_url": "https://github.com/openai/codex/releases/tag/rust-v0.125.0",
      "body_head": [
        "## New Features",
        "- App-server integrations now support Unix socket transport, pagination-friendly resume/fork, sticky environments, and remote thread config/store plumbing. (#18255, #18892, #18897, #18908, #19008, #19014)",
        "- App-server plugin management can install remote plugins and upgrade configured marketplaces. (#18917, #19074)",
        "- Permission profiles now round-trip across TUI sessions, user turns, MCP sandbox state, shell escalation, and app-server APIs. (#18284, #18285, #18286, #18287, #19231)",
        "- Model providers now own model discovery, with AWS/Bedrock account state exposed to app clients. (#18950, #19048)",
        "- `codex exec --json` now reports reasoning-token usage for programmatic consumers. (#19308)",
        "- Rollout tracing now records tool, code-mode, session, and multi-agent relationships, with a debug reducer command for inspection. (#18878, #18879, #18880)",
        "## Bug Fixes"
      ]
    }
  },
  "claude": {
    "latestRelease": {
      "tag_name": "v2.1.119",
      "name": "v2.1.119",
      "published_at": "2026-04-23T23:24:19Z",
      "html_url": "https://github.com/anthropics/claude-code/releases/tag/v2.1.119"
    },
    "docs": [
      {
        "url": "https://docs.anthropic.com/en/docs/claude-code/settings",
        "title": "Claude Code settings - Claude Code Docs",
        "description": "Configure Claude Code with global and project-level settings, and environment variables.",
        "required_contains": [
          "settings.json",
          "CLAUDE.md",
          "hooks",
          "permissions",
          "MCP"
        ]
      },
      {
        "url": "https://docs.anthropic.com/en/docs/claude-code/setup",
        "title": "Advanced setup - Claude Code Docs",
        "description": "System requirements, platform-specific installation, version management, and uninstallation for Claude Code.",
        "required_contains": [
          "System requirements",
          "platform-specific installation",
          "version management",
          "uninstallation",
          "Claude Code"
        ]
      },
      {
        "url": "https://docs.anthropic.com/en/docs/claude-code/github-actions",
        "title": "Claude Code GitHub Actions - Claude Code Docs",
        "description": "Learn about integrating Claude Code into your development workflow with Claude Code GitHub Actions",
        "required_contains": [
          "GitHub Actions",
          "workflow",
          "development workflow",
          "integrate",
          "Claude Code"
        ]
      }
    ]
  }
}