forgexa-cli 1.69.1__tar.gz → 1.70.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.69.1 → forgexa_cli-1.70.1}/PKG-INFO +1 -1
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/forgexa_cli/__init__.py +1 -1
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/forgexa_cli/daemon.py +27 -5
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/forgexa_cli.egg-info/PKG-INFO +1 -1
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/pyproject.toml +1 -1
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/README.md +0 -0
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/forgexa_cli/_build_config.py +0 -0
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/forgexa_cli/_local_bind.py +0 -0
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/forgexa_cli/agent_core.py +0 -0
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/forgexa_cli/autoupgrade.py +0 -0
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/forgexa_cli/aws_evidence.py +0 -0
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/forgexa_cli/aws_logs_evidence.py +0 -0
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/forgexa_cli/main.py +0 -0
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/forgexa_cli/py.typed +0 -0
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/forgexa_cli/runtime_evidence.py +0 -0
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/forgexa_cli/zcode_protocol.py +0 -0
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/forgexa_cli.egg-info/SOURCES.txt +0 -0
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/forgexa_cli.egg-info/dependency_links.txt +0 -0
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/forgexa_cli.egg-info/entry_points.txt +0 -0
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/forgexa_cli.egg-info/requires.txt +0 -0
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/forgexa_cli.egg-info/top_level.txt +0 -0
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/setup.cfg +0 -0
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/tests/test_auth_and_runtime_commands.py +0 -0
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/tests/test_autoupgrade.py +0 -0
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/tests/test_check_command.py +0 -0
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/tests/test_expiry_warnings_and_revoke.py +0 -0
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/tests/test_local_bind_commands.py +0 -0
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/tests/test_runtime_credentials.py +0 -0
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/tests/test_session_credentials.py +0 -0
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/tests/test_silent_install.py +0 -0
- {forgexa_cli-1.69.1 → forgexa_cli-1.70.1}/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.70.1"
|
|
@@ -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.70.1"
|
|
1238
1238
|
|
|
1239
1239
|
|
|
1240
1240
|
def _detect_client_type() -> str:
|
|
@@ -6460,6 +6460,13 @@ class ProcessManager:
|
|
|
6460
6460
|
on_chunk: Any = None,
|
|
6461
6461
|
) -> TaskResult:
|
|
6462
6462
|
"""Execute an agent CLI and collect results."""
|
|
6463
|
+
if isinstance(getattr(task, "input_data", None), dict) and task.input_data.get("requires_capture_images") and agent.agent_id != "claude":
|
|
6464
|
+
return TaskResult(
|
|
6465
|
+
status="failed", exit_code=-1, stdout="", stderr="",
|
|
6466
|
+
error="Capture images require the verified Claude image-input contract",
|
|
6467
|
+
failure_code="capture_image_agent_unsupported",
|
|
6468
|
+
execution_attempt_id=task.execution_attempt_id,
|
|
6469
|
+
)
|
|
6463
6470
|
resource_metrics = agent_core.collect_runtime_resource_metrics()
|
|
6464
6471
|
resource_reason = agent_core.runtime_resource_exhaustion_reason(
|
|
6465
6472
|
resource_metrics,
|
|
@@ -9606,7 +9613,7 @@ class TaskPoller:
|
|
|
9606
9613
|
]
|
|
9607
9614
|
tasks = []
|
|
9608
9615
|
for t in data.get("tasks", []):
|
|
9609
|
-
|
|
9616
|
+
task = TaskInfo(
|
|
9610
9617
|
task_id=t["task_id"],
|
|
9611
9618
|
graph_id=t["graph_id"],
|
|
9612
9619
|
node_type=t["node_type"],
|
|
@@ -9636,7 +9643,13 @@ class TaskPoller:
|
|
|
9636
9643
|
),
|
|
9637
9644
|
local_evidence_upload=t.get("local_evidence_upload") is True,
|
|
9638
9645
|
critic_review_required=t.get("critic_review_required") is True,
|
|
9639
|
-
)
|
|
9646
|
+
)
|
|
9647
|
+
if _MANAGED_WSL_POLICY is not None and not _MANAGED_WSL_POLICY.owns_task(task, self.runtime_id):
|
|
9648
|
+
# Other checkouts remain assigned on the server; this fixed
|
|
9649
|
+
# root neither executes nor fails them. Invalid OWN tasks
|
|
9650
|
+
# still reach the ordinary authorization-failure path.
|
|
9651
|
+
continue
|
|
9652
|
+
tasks.append(task)
|
|
9640
9653
|
return tasks
|
|
9641
9654
|
except Exception as e:
|
|
9642
9655
|
logger.warning("Task poll error: %s", _format_exc(e))
|
|
@@ -9808,7 +9821,7 @@ class ServerConnection:
|
|
|
9808
9821
|
"local_fresh_branch_reset": {
|
|
9809
9822
|
"protocol_version": _LOCAL_FRESH_BRANCH_RESET_PROTOCOL_VERSION,
|
|
9810
9823
|
},
|
|
9811
|
-
"task_attachment_staging": {"protocol_version": 1, "runtime_proxy": True},
|
|
9824
|
+
"task_attachment_staging": {"protocol_version": 1, "runtime_proxy": True, "image_agents": ["claude"]},
|
|
9812
9825
|
},
|
|
9813
9826
|
"server_url": self.server_url,
|
|
9814
9827
|
"expires_in_days": 90,
|
|
@@ -10229,7 +10242,7 @@ class ServerConnection:
|
|
|
10229
10242
|
"protocol_version": _LOCAL_FRESH_BRANCH_RESET_PROTOCOL_VERSION,
|
|
10230
10243
|
},
|
|
10231
10244
|
"local_evidence": {"protocol_version": 1, "structured_summary": True},
|
|
10232
|
-
"task_attachment_staging": {"protocol_version": 1, "runtime_proxy": True},
|
|
10245
|
+
"task_attachment_staging": {"protocol_version": 1, "runtime_proxy": True, "image_agents": ["claude"]},
|
|
10233
10246
|
},
|
|
10234
10247
|
"server_url": self.server_url,
|
|
10235
10248
|
}
|
|
@@ -12574,6 +12587,15 @@ class RuntimeDaemon:
|
|
|
12574
12587
|
))
|
|
12575
12588
|
return
|
|
12576
12589
|
|
|
12590
|
+
if task.input_data.get("requires_capture_images") and agent.agent_id != "claude":
|
|
12591
|
+
await report_task_complete(TaskResult(
|
|
12592
|
+
status="failed", exit_code=-1, stdout="", stderr="",
|
|
12593
|
+
error="Capture images require the verified Claude image-input contract",
|
|
12594
|
+
failure_code="capture_image_agent_unsupported",
|
|
12595
|
+
execution_attempt_id=task.execution_attempt_id,
|
|
12596
|
+
))
|
|
12597
|
+
return
|
|
12598
|
+
|
|
12577
12599
|
await reporter.report_progress(task.task_id, 3, "waiting_for_workspace_lock", execution_attempt_id=task.execution_attempt_id)
|
|
12578
12600
|
workspace_execution_lock = await self.workspace_manager.acquire_workspace_execution_lock(
|
|
12579
12601
|
task.project,
|
|
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
|