forgexa-cli 1.73.2__tar.gz → 1.75.0__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.73.2 → forgexa_cli-1.75.0}/PKG-INFO +1 -1
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/forgexa_cli/__init__.py +1 -1
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/forgexa_cli/daemon.py +41 -2
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/forgexa_cli.egg-info/PKG-INFO +1 -1
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/pyproject.toml +1 -1
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/README.md +0 -0
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/forgexa_cli/_build_config.py +0 -0
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/forgexa_cli/_local_bind.py +0 -0
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/forgexa_cli/agent_core.py +0 -0
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/forgexa_cli/autoupgrade.py +0 -0
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/forgexa_cli/aws_evidence.py +0 -0
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/forgexa_cli/aws_logs_evidence.py +0 -0
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/forgexa_cli/main.py +0 -0
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/forgexa_cli/py.typed +0 -0
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/forgexa_cli/runtime_evidence.py +0 -0
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/forgexa_cli/zcode_protocol.py +0 -0
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/forgexa_cli.egg-info/SOURCES.txt +0 -0
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/forgexa_cli.egg-info/dependency_links.txt +0 -0
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/forgexa_cli.egg-info/entry_points.txt +0 -0
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/forgexa_cli.egg-info/requires.txt +0 -0
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/forgexa_cli.egg-info/top_level.txt +0 -0
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/setup.cfg +0 -0
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/tests/test_auth_and_runtime_commands.py +0 -0
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/tests/test_autoupgrade.py +0 -0
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/tests/test_check_command.py +0 -0
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/tests/test_expiry_warnings_and_revoke.py +0 -0
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/tests/test_local_bind_commands.py +0 -0
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/tests/test_runtime_credentials.py +0 -0
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/tests/test_session_credentials.py +0 -0
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/tests/test_silent_install.py +0 -0
- {forgexa_cli-1.73.2 → forgexa_cli-1.75.0}/tests/test_upgrade_observability.py +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"""forgexa-cli — Forgexa command-line client."""
|
|
2
|
-
__version__ = "1.
|
|
2
|
+
__version__ = "1.75.0"
|
|
@@ -1234,7 +1234,7 @@ except (ImportError, ModuleNotFoundError):
|
|
|
1234
1234
|
# DAEMON_VERSION is the protocol/logic version of the daemon code.
|
|
1235
1235
|
# Kept in sync with pyproject.toml version via bump-version.sh.
|
|
1236
1236
|
# CLIENT_TYPE identifies which packaging/distribution this daemon runs in.
|
|
1237
|
-
DAEMON_VERSION = "1.
|
|
1237
|
+
DAEMON_VERSION = "1.75.0"
|
|
1238
1238
|
|
|
1239
1239
|
|
|
1240
1240
|
def _detect_client_type() -> str:
|
|
@@ -9632,7 +9632,7 @@ class TaskPoller:
|
|
|
9632
9632
|
analysis_branch=t.get("analysis_branch"),
|
|
9633
9633
|
workspace_source_mode=t.get("workspace_source_mode"),
|
|
9634
9634
|
workspace_branch=t.get("workspace_branch"),
|
|
9635
|
-
workspace_resolution=t.get("workspace_resolution"
|
|
9635
|
+
workspace_resolution=t.get("workspace_resolution"),
|
|
9636
9636
|
local_workspace_binding_id=t.get("local_workspace_binding_id"),
|
|
9637
9637
|
effective_operator_user_id=t.get("effective_operator_user_id"),
|
|
9638
9638
|
required_commit_shas=t.get("required_commit_shas", []),
|
|
@@ -9649,6 +9649,45 @@ class TaskPoller:
|
|
|
9649
9649
|
# root neither executes nor fails them. Invalid OWN tasks
|
|
9650
9650
|
# still reach the ordinary authorization-failure path.
|
|
9651
9651
|
continue
|
|
9652
|
+
resolution = task.workspace_resolution
|
|
9653
|
+
binding_id = task.local_workspace_binding_id
|
|
9654
|
+
target_valid = (
|
|
9655
|
+
resolution == "cloud_worktree" and binding_id is None
|
|
9656
|
+
or resolution == "local_bind"
|
|
9657
|
+
and isinstance(binding_id, str) and bool(binding_id.strip())
|
|
9658
|
+
)
|
|
9659
|
+
if not target_valid:
|
|
9660
|
+
error = (
|
|
9661
|
+
"Runtime task has a missing or conflicting execution target. "
|
|
9662
|
+
"An explicit workspace_resolution and matching local binding "
|
|
9663
|
+
"are required; refusing to infer a managed checkout. "
|
|
9664
|
+
"Update the server and Desktop before retrying."
|
|
9665
|
+
)
|
|
9666
|
+
logger.error("Refusing task %s: %s", task.task_id, error)
|
|
9667
|
+
try:
|
|
9668
|
+
rejected = await self.client.post(
|
|
9669
|
+
f"{self.server_url}/api/v1/runtimes/{self.runtime_id}"
|
|
9670
|
+
f"/tasks/{task.task_id}/complete",
|
|
9671
|
+
json={
|
|
9672
|
+
"status": "failed",
|
|
9673
|
+
"exit_code": -1,
|
|
9674
|
+
"error": error,
|
|
9675
|
+
"failure_code": "execution_target_invalid",
|
|
9676
|
+
"execution_attempt_id": task.execution_attempt_id,
|
|
9677
|
+
},
|
|
9678
|
+
timeout=15,
|
|
9679
|
+
)
|
|
9680
|
+
rejected.raise_for_status()
|
|
9681
|
+
except httpx.HTTPError as exc:
|
|
9682
|
+
logger.warning(
|
|
9683
|
+
"Could not report invalid execution target for task %s: %s",
|
|
9684
|
+
task.task_id, _format_exc(exc),
|
|
9685
|
+
)
|
|
9686
|
+
continue
|
|
9687
|
+
logger.info(
|
|
9688
|
+
"Task %s execution target: workspace_resolution=%s binding_id=%s",
|
|
9689
|
+
task.task_id, resolution, binding_id,
|
|
9690
|
+
)
|
|
9652
9691
|
tasks.append(task)
|
|
9653
9692
|
return tasks
|
|
9654
9693
|
except Exception as e:
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|