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>
33 lines
1.4 KiB
Python
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)
|