forked from boos/BoosAPI
2491a9af5a
Several downstream clients send non-cache compatibility fields across Chat, Responses, Anthropic Messages, and Responses WebSocket surfaces. The proxy now normalizes legacy functions/function_call, maps web_search tools across protocols, rejects unsupported HTTP Responses continuation shapes before upstream dispatch, and applies configurable service_tier policy consistently before requests leave the server. Constraint: Publication flow keeps day-to-day commits on dev and opens main PRs from a release branch. Constraint: No new dependencies; web_search-only simulation reuses the existing local search route. Rejected: Forward external HTTP previous_response_id to strict upstreams | it produces ambiguous continuation failures and stale retry behavior outside WebSocket state. Rejected: Add a dedicated search dependency | existing /v1/search route is sufficient for synthetic server-tool responses. Confidence: high Scope-risk: moderate Directive: Keep Responses HTTP continuation checks aligned with WebSocket continuation support before relaxing these guards. Tested: npm run typecheck:server Tested: npx vitest run --root . src/server/proxy-core/responsesPreflight.test.ts src/server/proxy-core/serviceTierPolicy.test.ts src/server/test-fixtures/protocol/non-cache-field-matrix.test.ts src/server/transformers/openai/responses/conversion.test.ts src/server/transformers/anthropic/messages/conversion.test.ts src/server/routes/proxy/chat.stream.test.ts src/server/routes/proxy/responses.codex-oauth.test.ts Tested: npx vitest run --root . src/server/routes/proxy/responses.websocket.test.ts Tested: npm run repo:drift-check Not-tested: Full application build and full Vitest suite Co-authored-by: OmX <omx@oh-my-codex.dev>