- before: https://github.com/CorrectRoadH/niceeval/tree/main/examples/zh/origin/codex-sdk — a standalone
@openai/codex-sdkHTTP service, before any eval integration. - after: https://github.com/CorrectRoadH/niceeval/tree/main/examples/zh/tier1/codex-sdk — the same app after integrating NiceEval.
ThreadEvent events into standard events is handled by createCodexThreadEventStream (exported from "niceeval/adapter"). Message text, tool items (command_execution / mcp_tool_call / file_change -> paired operation.started / operation.finished events), and turn.completed usage all come from this stream, leaving only transport glue in the adapter. There is no HITL because Codex SDK does not support it. The evals run real coding tasks (writing files and running commands in a working directory), and assertions read the disk directly. You start the app yourself (pnpm start); evals do not manage the process. App-side src/backend/* files are byte-for-byte unchanged. Use tier2/ for OTel waterfalls and tier3/ for feature A/B.
All integration code changes (measured from both directories when generated):