forgexa-cli 1.58.0__tar.gz → 1.58.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/PKG-INFO +1 -1
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/forgexa_cli/__init__.py +1 -1
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/forgexa_cli/agent_core.py +27 -0
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/forgexa_cli/daemon.py +1 -1
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/forgexa_cli.egg-info/PKG-INFO +1 -1
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/pyproject.toml +1 -1
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/README.md +0 -0
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/forgexa_cli/_build_config.py +0 -0
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/forgexa_cli/_local_bind.py +0 -0
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/forgexa_cli/autoupgrade.py +0 -0
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/forgexa_cli/main.py +0 -0
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/forgexa_cli/py.typed +0 -0
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/forgexa_cli/runtime_evidence.py +0 -0
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/forgexa_cli/zcode_protocol.py +0 -0
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/forgexa_cli.egg-info/SOURCES.txt +0 -0
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/forgexa_cli.egg-info/dependency_links.txt +0 -0
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/forgexa_cli.egg-info/entry_points.txt +0 -0
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/forgexa_cli.egg-info/requires.txt +0 -0
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/forgexa_cli.egg-info/top_level.txt +0 -0
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/setup.cfg +0 -0
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/tests/test_auth_and_runtime_commands.py +0 -0
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/tests/test_autoupgrade.py +0 -0
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/tests/test_check_command.py +0 -0
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/tests/test_expiry_warnings_and_revoke.py +0 -0
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/tests/test_local_bind_commands.py +0 -0
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/tests/test_runtime_credentials.py +0 -0
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/tests/test_session_credentials.py +0 -0
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/tests/test_silent_install.py +0 -0
- {forgexa_cli-1.58.0 → forgexa_cli-1.58.1}/tests/test_upgrade_observability.py +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"""forgexa-cli — Forgexa command-line client."""
|
|
2
|
-
__version__ = "1.58.
|
|
2
|
+
__version__ = "1.58.1"
|
|
@@ -816,6 +816,30 @@ class AgentDiscovery:
|
|
|
816
816
|
os.environ["PATH"] = os.pathsep.join(additions) + os.pathsep + current
|
|
817
817
|
logger.debug("Expanded PATH with: %s", ", ".join(additions))
|
|
818
818
|
|
|
819
|
+
@staticmethod
|
|
820
|
+
def _wsl_windows_executable(path: str) -> bool:
|
|
821
|
+
"""Reject a Windows-side agent before its version probe can run via WSL interop."""
|
|
822
|
+
if sys.platform != "linux" or not os.environ.get("WSL_DISTRO_NAME"):
|
|
823
|
+
return False
|
|
824
|
+
resolved = Path(path).resolve()
|
|
825
|
+
if resolved.suffix.lower() in {".exe", ".cmd", ".bat"}:
|
|
826
|
+
return True
|
|
827
|
+
parts = resolved.parts
|
|
828
|
+
if len(parts) >= 3 and parts[1] == "mnt" and len(parts[2]) == 1 and parts[2].isalpha():
|
|
829
|
+
return True
|
|
830
|
+
# A custom DrvFs mount need not live under /mnt/<drive>.
|
|
831
|
+
try:
|
|
832
|
+
mounts = Path("/proc/mounts").read_text(encoding="utf-8")
|
|
833
|
+
except OSError:
|
|
834
|
+
return False
|
|
835
|
+
for line in mounts.splitlines():
|
|
836
|
+
fields = line.split()
|
|
837
|
+
if len(fields) >= 3 and fields[2] in {"9p", "drvfs"}:
|
|
838
|
+
mount = Path(fields[1].replace("\\040", " "))
|
|
839
|
+
if resolved == mount or mount in resolved.parents:
|
|
840
|
+
return True
|
|
841
|
+
return False
|
|
842
|
+
|
|
819
843
|
async def discover(self) -> list[DiscoveredAgent]:
|
|
820
844
|
self._expand_path()
|
|
821
845
|
# Probe bwrap support once at discovery time and log a clear warning
|
|
@@ -827,6 +851,9 @@ class AgentDiscovery:
|
|
|
827
851
|
cmd = custom_path or spec["commands"][0]
|
|
828
852
|
resolved = shutil.which(cmd)
|
|
829
853
|
if resolved:
|
|
854
|
+
if self._wsl_windows_executable(resolved):
|
|
855
|
+
logger.warning("Agent %s resolved only to a Windows executable inside WSL; skipping", agent_id)
|
|
856
|
+
continue
|
|
830
857
|
version = await self._get_version(spec["detect"], resolved)
|
|
831
858
|
if version is None and "detect_alt" in spec:
|
|
832
859
|
# Primary detect command failed; try the alternative.
|
|
@@ -1150,7 +1150,7 @@ except (ImportError, ModuleNotFoundError):
|
|
|
1150
1150
|
# DAEMON_VERSION is the protocol/logic version of the daemon code.
|
|
1151
1151
|
# Kept in sync with pyproject.toml version via bump-version.sh.
|
|
1152
1152
|
# CLIENT_TYPE identifies which packaging/distribution this daemon runs in.
|
|
1153
|
-
DAEMON_VERSION = "1.58.
|
|
1153
|
+
DAEMON_VERSION = "1.58.1"
|
|
1154
1154
|
|
|
1155
1155
|
|
|
1156
1156
|
def _detect_client_type() -> str:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|