mirror of
https://github.com/nearai/ironclaw.git
synced 2026-09-02 23:56:24 +08:00
* fix(gateway): serve Responses API under /api/v1/ prefix (#2201) The OpenAI Responses API was only reachable at `/v1/responses`, which broke the otherwise consistent `/api/...` prefix used by every other IronClaw HTTP surface. Callers expecting `/api/v1/responses` got a 404. This routes both paths through the same handlers: - `/api/v1/responses` + `/api/v1/responses/{id}` — canonical paths - `/v1/responses` + `/v1/responses/{id}` — retained as backward-compat aliases for clients already configured against the legacy path Also updates the web gateway CLAUDE.md route table, the USER_MANAGEMENT_API.md reference, and the module docstring for responses_api.rs so documentation points at the canonical prefix. Regression test: tests/responses_api_path_prefix.rs drives the full router via `start_server` and asserts that POST/GET on both the canonical and legacy paths reach the handler (400 from the handler for bad inputs, not 404 from the router) and that both paths enforce bearer auth (401 without a token). This follows the "Test Through the Caller, Not Just the Helper" rule so a future router edit that drops either path fails the test rather than silently regressing. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(gateway): address PR #2748 review feedback - Extend both_paths_require_auth to cover GET /responses/{id} on both canonical and legacy paths. - Align USER_MANAGEMENT_API.md Responses API examples with the current handler behavior (only "default" model accepted). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs: address PR #2748 reviewer nits - Change the "Go ahead with the transfer" Responses API request example to use "model": "default". The handler rejects any other value, so copying the old example verbatim would 400. - Expand the Error Format section to document that the Responses API returns an OpenAI-compatible JSON envelope ({"error": {...}}) rather than the plain-text body used by every other endpoint. Add 429 to the status-code table for Responses API rate limiting. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix: address PR #2748 Copilot review nits on docs + test cleanup - Correct the documented Responses API 429 error type from `rate_limit_exceeded` to `rate_limit_error` to match what `create_response_handler` actually emits. - Clarify that the JSON error envelope covers handler-generated errors; missing/invalid bearer token (401) and auth-path 503 are returned by the shared gateway auth middleware as plain text. - Add a `ServerGuard` RAII helper in the Responses API path-prefix integration test that takes `state.shutdown_tx` on startup and sends `()` on drop, so each test tears its `axum::serve` task down instead of leaking it for the rest of the process. Update the six test callers to bind the guard. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>