Files
hermes-agent/hermes_cli/auth_external_process.py
Brooklyn Nicholson 865ba906c1 fix(auth): return the user-local external CLI as one native path on Windows
The user-local known dir is spelled %USERPROFILE%/.local/bin, so a Windows hit came back
with mixed separators in provider status and in the spawned ACP argv. Normalize the
resolved path.

Co-authored-by: Finn763 <165816600+finn763@users.noreply.github.com>
2026-10-07 14:19:47 -05:00

33 lines
1.4 KiB
Python

"""Executable lookup for ``external_process`` (ACP) providers.
A GUI/service launch (LaunchAgent, Desktop backend, Desktop over SSH) has a bare PATH, so the
profile's command resolves through PATH, then the user-local bin, then Claude Code's install
prefixes."""
from __future__ import annotations
import os
from typing import Optional
def resolve_external_process_command(command: str) -> Optional[str]:
"""Absolute path of the provider CLI ``command``, or ``None`` when nothing executable matches."""
if not command:
return None
from hermes_platform.resolver import locate_command
from hermes_platform.resolver.known_dirs import user_local_bin
lookup = command
if os.sep in command or (os.altsep and os.altsep in command):
# An operator-configured relative path (./bin/copilot) means the launch cwd, as it did
# under shutil.which; anchor it so the resolver's absolute-only explicit check accepts it.
lookup = os.path.abspath(os.path.expandvars(os.path.expanduser(command)))
found = locate_command(lookup, known_dirs=user_local_bin()).command
if found:
# Known dirs are written with "/" (%USERPROFILE%/.local/bin); normalize so a Windows hit
# reads as one native path in status and in the spawned argv.
return os.path.normpath(found[0])
from agent.anthropic_adapter import find_claude_code_cli
return find_claude_code_cli(command)