fix(doctor): attach codex CLI hint to OpenAI Codex auth (#27986)#28595
Merged
Conversation
…27975 `hermes doctor` printed 'codex CLI not installed (optional — ...)' as a generic info line at the bottom of the auth section, several rows below 'OpenAI Codex auth (not logged in)' and after MiniMax/Gemini auth checks. Users reading sequentially mistook it for MiniMax-related advice. Move the hint up under the Codex auth warning so it's adjacent to the row it actually pertains to. Behavior unchanged when the codex CLI is installed (success path keeps its 'codex CLI ✓' row at the bottom). Tests cover both placement and suppression cases. Salvage of @xxxigm's 3-commit stack (#27986). Closes #27975.
This was referenced May 19, 2026
Contributor
🔎 Lint report:
|
| Rule | Count |
|---|---|
unresolved-import |
1392 |
unresolved-attribute |
1226 |
invalid-argument-type |
1001 |
invalid-assignment |
473 |
unsupported-operator |
141 |
invalid-parameter-default |
129 |
invalid-method-override |
86 |
not-subscriptable |
85 |
invalid-return-type |
38 |
no-matching-overload |
31 |
call-non-callable |
29 |
unused-type-ignore-comment |
19 |
unresolved-reference |
17 |
invalid-type-form |
17 |
not-iterable |
6 |
| +6 more rules |
First entries
gateway/platforms/bluebubbles.py:439: [deprecated] deprecated: The function `utcnow` is deprecated: Use timezone-aware objects to represent datetimes in UTC; e.g. by calling .now(datetime.timezone.utc)
tests/gateway/test_line_plugin.py:467: [not-subscriptable] not-subscriptable: Cannot subscript object of type `None` with no `__getitem__` method
tests/test_yuanbao_pipeline.py:762: [invalid-assignment] invalid-assignment: Object of type `AsyncMock` is not assignable to attribute `handle_message` of type `def handle_message(self, event: MessageEvent) -> CoroutineType[Any, Any, None]`
plugins/video_gen/fal/__init__.py:325: [unresolved-import] unresolved-import: Cannot resolve imported module `fal_client`
tests/hermes_cli/test_gemini_free_tier_setup_block.py:6: [unresolved-import] unresolved-import: Cannot resolve imported module `pytest`
tests/run_agent/test_session_id_env.py:46: [unresolved-attribute] unresolved-attribute: Object of type `AIAgent` has no attribute `session_id`
tests/agent/test_minimax_provider.py:301: [invalid-argument-type] invalid-argument-type: Argument to function `AIAgent._anthropic_preserve_dots` is incorrect: Expected `AIAgent`, found `SimpleNamespace`
batch_runner.py:552: [invalid-parameter-default] invalid-parameter-default: Default value of type `None` is not assignable to annotated parameter type `dict[str, Any]`
tests/acp/test_tools.py:15: [unresolved-import] unresolved-import: Cannot resolve imported module `acp.schema`
tests/tools/test_send_message_telegram_proxy.py:23: [unresolved-import] unresolved-import: Cannot resolve imported module `pytest`
tools/environments/base.py:694: [unresolved-attribute] unresolved-attribute: Attribute `close` is not defined on `None` in union `IO[str] | None`
tools/environments/local.py:532: [unresolved-attribute] unresolved-attribute: Module `subprocess` has no member `CREATE_NO_WINDOW`
tests/tools/test_skills_hub_clawhub.py:210: [unresolved-attribute] unresolved-attribute: Attribute `name` is not defined on `None` in union `SkillMeta | None`
tests/agent/test_redact.py:6: [unresolved-import] unresolved-import: Cannot resolve imported module `pytest`
tools/environments/docker.py:303: [invalid-parameter-default] invalid-parameter-default: Default value of type `None` is not assignable to annotated parameter type `list[Unknown]`
hermes_cli/runtime_provider.py:654: [invalid-argument-type] invalid-argument-type: Argument to function `_config_base_url_trustworthy_for_bare_custom` is incorrect: Expected `str`, found `Any | None | Literal[""]`
gateway/platforms/yuanbao.py:3065: [unresolved-attribute] unresolved-attribute: Attribute `exceptions` is not defined on `None` in union `Unknown | None`
tests/hermes_cli/test_aux_config.py:40: [invalid-argument-type] invalid-argument-type: Method `__getitem__` of type `Overload[(key: SupportsIndex | slice[SupportsIndex | None, SupportsIndex | None, SupportsIndex | None], /) -> LiteralString, (key: SupportsIndex | slice[SupportsIndex | None, SupportsIndex | None, SupportsIndex | None], /) -> str]` cannot be called with key of type `Literal["model"]` on object of type `str`
tests/gateway/test_api_server.py:22: [unresolved-import] unresolved-import: Cannot resolve imported module `aiohttp`
tests/run_agent/test_compression_boundary.py:42: [invalid-argument-type] invalid-argument-type: Argument to `ContextCompressor.__init__` is incorrect: Expected `int | float`, found `str | int | float`
tests/gateway/test_discord_slash_commands.py:113: [invalid-assignment] invalid-assignment: Object of type `AsyncMock` is not assignable to attribute `_check_slash_authorization` of type `def _check_slash_authorization(self, interaction: Unknown, command_text: str) -> CoroutineType[Any, Any, bool]`
tools/mcp_tool.py:225: [unresolved-import] unresolved-import: Cannot resolve imported module `mcp.types`
gateway/platforms/discord.py:263: [unresolved-import] unresolved-import: Cannot resolve imported module `discord.utils`
tests/tools/test_mcp_oauth_cold_load_expiry.py:503: [unresolved-import] unresolved-import: Cannot resolve imported module `pydantic`
tests/agent/test_crossloop_client_cache.py:17: [unresolved-import] unresolved-import: Cannot resolve imported module `pytest`
... and 4677 more
✅ Fixed issues: none
Unchanged: 0 pre-existing issues carried over.
Diagnostics are surfaced as warnings — this check never fails the build.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Salvage of #27986 by @xxxigm (squashed 3-commit stack). Supersedes duplicates #28007 (@worlldz) and #28186 (@outsourc-e) — all three landed the same diff; @xxxigm submitted first.
What:
hermes doctorprinted 'codex CLI not installed' as a generic info line at the bottom of the auth section, several rows below 'OpenAI Codex auth (not logged in)' and after MiniMax/Gemini auth checks. Users reading sequentially mistook it for MiniMax-related advice.How: Move the hint up under the Codex auth warning so it's adjacent to the row it pertains to. Behavior unchanged when the codex CLI IS installed (success path keeps its 'codex CLI ✓' row at the bottom). Tests cover both placement and suppression cases.
Original PR: #27986
Co-credit: @worlldz (#28007) and @outsourc-e (#28186) submitted the same fix in parallel; closing those in favor of this one.
Closes #27975.