[CREDENTIALS] No external credentials file found, using defaults. [DB] SQLite database ready: /home/diegosouzapw/.omniroute/storage.sqlite [MODEL] Ambiguous model 'claude-haiku-4.5'. Use provider/model prefix (ex: gh/claude-haiku-4.5 or kr/claude-haiku-4.5). Candidates: gh, kr, anthropic TAP version 13 # Subtest: getModelInfoCore resolves unique non-openai unprefixed model ok 1 - getModelInfoCore resolves unique non-openai unprefixed model --- duration_ms: 3.403766 type: 'test' ... # Subtest: getModelInfoCore keeps openai fallback for gpt-4o ok 2 - getModelInfoCore keeps openai fallback for gpt-4o --- duration_ms: 0.535726 type: 'test' ... # Subtest: getModelInfoCore resolves gpt-5.4 to codex ok 3 - getModelInfoCore resolves gpt-5.4 to codex --- duration_ms: 0.321781 type: 'test' ... # Subtest: getModelInfoCore returns explicit ambiguity metadata for ambiguous unprefixed model ok 4 - getModelInfoCore returns explicit ambiguity metadata for ambiguous unprefixed model --- duration_ms: 1.079896 type: 'test' ... # Subtest: getModelInfoCore canonicalizes github legacy alias with explicit provider prefix ok 5 - getModelInfoCore canonicalizes github legacy alias with explicit provider prefix --- duration_ms: 0.370547 type: 'test' ... # Subtest: GithubExecutor routes codex-family model to /responses ok 6 - GithubExecutor routes codex-family model to /responses --- duration_ms: 0.47113 type: 'test' ... # Subtest: GithubExecutor keeps non-codex model on /chat/completions ok 7 - GithubExecutor keeps non-codex model on /chat/completions --- duration_ms: 0.38457 type: 'test' ... # Subtest: DefaultExecutor uses x-api-key for kimi-coding-apikey ok 8 - DefaultExecutor uses x-api-key for kimi-coding-apikey --- duration_ms: 0.451443 type: 'test' ... # Subtest: CodexExecutor forces stream=true for upstream compatibility ok 9 - CodexExecutor forces stream=true for upstream compatibility --- duration_ms: 1.203259 type: 'test' ... # Subtest: Claude native messages can be round-tripped through OpenAI into Claude OAuth format ok 10 - Claude native messages can be round-tripped through OpenAI into Claude OAuth format --- duration_ms: 7.232512 type: 'test' ... # Subtest: CodexExecutor maps fast service tier to priority ok 11 - CodexExecutor maps fast service tier to priority --- duration_ms: 0.489993 type: 'test' ... # Subtest: shouldUseNativeCodexPassthrough only enables responses-native Codex requests ok 12 - shouldUseNativeCodexPassthrough only enables responses-native Codex requests --- duration_ms: 0.441911 type: 'test' ... # Subtest: CodexExecutor can force fast service tier from settings ok 13 - CodexExecutor can force fast service tier from settings --- duration_ms: 0.299575 type: 'test' ... # Subtest: CodexExecutor always requests SSE accept header ok 14 - CodexExecutor always requests SSE accept header --- duration_ms: 0.602914 type: 'test' ... # Subtest: CodexExecutor does not request SSE accept header for compact requests ok 15 - CodexExecutor does not request SSE accept header for compact requests --- duration_ms: 0.322611 type: 'test' ... # Subtest: CodexExecutor preserves native responses payloads for Codex passthrough not ok 16 - CodexExecutor preserves native responses payloads for Codex passthrough --- duration_ms: 1.856261 type: 'test' location: '/home/diegosouzapw/dev/proxys/9router/tests/unit/plan3-p0.test.mjs:221:1' failureType: 'testCodeFailure' error: |- Expected values to be strictly equal: false !== true code: 'ERR_ASSERTION' name: 'AssertionError' expected: true actual: false operator: 'strictEqual' stack: |- TestContext. (file:///home/diegosouzapw/dev/proxys/9router/tests/unit/plan3-p0.test.mjs:242:10) Test.runInAsyncScope (node:async_hooks:214:14) Test.run (node:internal/test_runner/test:1047:25) Test.processPendingSubtests (node:internal/test_runner/test:744:18) Test.postRun (node:internal/test_runner/test:1173:19) Test.run (node:internal/test_runner/test:1101:12) async Test.processPendingSubtests (node:internal/test_runner/test:744:7) ... # Subtest: CodexExecutor strips streaming fields for compact passthrough ok 17 - CodexExecutor strips streaming fields for compact passthrough --- duration_ms: 0.296176 type: 'test' ... # Subtest: CodexExecutor routes responses subpaths to matching upstream paths ok 18 - CodexExecutor routes responses subpaths to matching upstream paths --- duration_ms: 0.546657 type: 'test' ... # Subtest: translateNonStreamingResponse converts Responses API payload to OpenAI chat.completion ok 19 - translateNonStreamingResponse converts Responses API payload to OpenAI chat.completion --- duration_ms: 1.483788 type: 'test' ... # Subtest: extractUsageFromResponse reads usage from Responses API payload ok 20 - extractUsageFromResponse reads usage from Responses API payload --- duration_ms: 0.398039 type: 'test' ... # Subtest: detectFormat identifies OpenAI Responses when input is string ok 21 - detectFormat identifies OpenAI Responses when input is string --- duration_ms: 0.359174 type: 'test' ... # Subtest: detectFormat identifies OpenAI Responses by max_output_tokens without input array ok 22 - detectFormat identifies OpenAI Responses by max_output_tokens without input array --- duration_ms: 0.271215 type: 'test' ... # Subtest: detectFormatFromEndpoint forces OpenAI for /v1/chat/completions ok 23 - detectFormatFromEndpoint forces OpenAI for /v1/chat/completions --- duration_ms: 0.52054 type: 'test' ... # Subtest: detectFormatFromEndpoint forces Claude for /v1/messages ok 24 - detectFormatFromEndpoint forces Claude for /v1/messages --- duration_ms: 0.433035 type: 'test' ... # Subtest: translateRequest normalizes openai-responses input string into list payload ok 25 - translateRequest normalizes openai-responses input string into list payload --- duration_ms: 0.358109 type: 'test' ... # Subtest: translateRequest preserves service_tier when converting openai to openai-responses ok 26 - translateRequest preserves service_tier when converting openai to openai-responses --- duration_ms: 1.10454 type: 'test' ... # Subtest: parseSSEToResponsesOutput parses completed response from SSE payload ok 27 - parseSSEToResponsesOutput parses completed response from SSE payload --- duration_ms: 0.575476 type: 'test' ... # Subtest: parseSSEToResponsesOutput returns null for invalid payload ok 28 - parseSSEToResponsesOutput returns null for invalid payload --- duration_ms: 0.302714 type: 'test' ... # Subtest: parseSSEToOpenAIResponse merges split tool call chunks by id without duplication ok 29 - parseSSEToOpenAIResponse merges split tool call chunks by id without duplication --- duration_ms: 0.916032 type: 'test' ... 1..29 # tests 29 # suites 0 # pass 28 # fail 1 # cancelled 0 # skipped 0 # todo 0 # duration_ms 65.394285