forgexa-cli 1.37.2__tar.gz → 1.37.4__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.37.2 → forgexa_cli-1.37.4}/PKG-INFO +1 -1
- {forgexa_cli-1.37.2 → forgexa_cli-1.37.4}/forgexa_cli/__init__.py +1 -1
- {forgexa_cli-1.37.2 → forgexa_cli-1.37.4}/forgexa_cli/daemon.py +22 -3
- {forgexa_cli-1.37.2 → forgexa_cli-1.37.4}/forgexa_cli.egg-info/PKG-INFO +1 -1
- {forgexa_cli-1.37.2 → forgexa_cli-1.37.4}/pyproject.toml +1 -1
- {forgexa_cli-1.37.2 → forgexa_cli-1.37.4}/README.md +0 -0
- {forgexa_cli-1.37.2 → forgexa_cli-1.37.4}/forgexa_cli/_build_config.py +0 -0
- {forgexa_cli-1.37.2 → forgexa_cli-1.37.4}/forgexa_cli/_local_bind.py +0 -0
- {forgexa_cli-1.37.2 → forgexa_cli-1.37.4}/forgexa_cli/agent_core.py +0 -0
- {forgexa_cli-1.37.2 → forgexa_cli-1.37.4}/forgexa_cli/autoupgrade.py +0 -0
- {forgexa_cli-1.37.2 → forgexa_cli-1.37.4}/forgexa_cli/main.py +0 -0
- {forgexa_cli-1.37.2 → forgexa_cli-1.37.4}/forgexa_cli/py.typed +0 -0
- {forgexa_cli-1.37.2 → forgexa_cli-1.37.4}/forgexa_cli.egg-info/SOURCES.txt +0 -0
- {forgexa_cli-1.37.2 → forgexa_cli-1.37.4}/forgexa_cli.egg-info/dependency_links.txt +0 -0
- {forgexa_cli-1.37.2 → forgexa_cli-1.37.4}/forgexa_cli.egg-info/entry_points.txt +0 -0
- {forgexa_cli-1.37.2 → forgexa_cli-1.37.4}/forgexa_cli.egg-info/requires.txt +0 -0
- {forgexa_cli-1.37.2 → forgexa_cli-1.37.4}/forgexa_cli.egg-info/top_level.txt +0 -0
- {forgexa_cli-1.37.2 → forgexa_cli-1.37.4}/setup.cfg +0 -0
- {forgexa_cli-1.37.2 → forgexa_cli-1.37.4}/tests/test_auth_and_runtime_commands.py +0 -0
- {forgexa_cli-1.37.2 → forgexa_cli-1.37.4}/tests/test_autoupgrade.py +0 -0
- {forgexa_cli-1.37.2 → forgexa_cli-1.37.4}/tests/test_check_command.py +0 -0
- {forgexa_cli-1.37.2 → forgexa_cli-1.37.4}/tests/test_expiry_warnings_and_revoke.py +0 -0
- {forgexa_cli-1.37.2 → forgexa_cli-1.37.4}/tests/test_local_bind_commands.py +0 -0
- {forgexa_cli-1.37.2 → forgexa_cli-1.37.4}/tests/test_runtime_credentials.py +0 -0
- {forgexa_cli-1.37.2 → forgexa_cli-1.37.4}/tests/test_session_credentials.py +0 -0
- {forgexa_cli-1.37.2 → forgexa_cli-1.37.4}/tests/test_silent_install.py +0 -0
- {forgexa_cli-1.37.2 → forgexa_cli-1.37.4}/tests/test_upgrade_observability.py +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"""forgexa-cli — Forgexa command-line client."""
|
|
2
|
-
__version__ = "1.37.
|
|
2
|
+
__version__ = "1.37.4"
|
|
@@ -910,7 +910,7 @@ except (ImportError, ModuleNotFoundError):
|
|
|
910
910
|
# DAEMON_VERSION is the protocol/logic version of the daemon code.
|
|
911
911
|
# Kept in sync with pyproject.toml version via bump-version.sh.
|
|
912
912
|
# CLIENT_TYPE identifies which packaging/distribution this daemon runs in.
|
|
913
|
-
DAEMON_VERSION = "1.37.
|
|
913
|
+
DAEMON_VERSION = "1.37.4"
|
|
914
914
|
|
|
915
915
|
|
|
916
916
|
def _detect_client_type() -> str:
|
|
@@ -4742,6 +4742,19 @@ class ProcessManager:
|
|
|
4742
4742
|
or signals["has_meaningful_content"]
|
|
4743
4743
|
)
|
|
4744
4744
|
|
|
4745
|
+
@staticmethod
|
|
4746
|
+
def has_verified_agent_completion(result: "TaskResult") -> bool:
|
|
4747
|
+
"""Return True when structured output proves the agent completed a real turn."""
|
|
4748
|
+
combined = "\n".join(part for part in (result.stdout, result.stderr) if part)
|
|
4749
|
+
signals = ProcessManager._extract_output_signals(combined)
|
|
4750
|
+
return bool(
|
|
4751
|
+
signals["has_assistant_events"]
|
|
4752
|
+
and signals["has_meaningful_content"]
|
|
4753
|
+
and (signals["has_result"] or signals["has_turn_completed"])
|
|
4754
|
+
and not signals["has_turn_failed"]
|
|
4755
|
+
and not signals["error_messages"]
|
|
4756
|
+
)
|
|
4757
|
+
|
|
4745
4758
|
@staticmethod
|
|
4746
4759
|
def _copilot_completed_without_result(stdout: str) -> bool:
|
|
4747
4760
|
"""Implementation lives in agent_core._copilot_completed_without_result."""
|
|
@@ -9077,10 +9090,16 @@ class RuntimeDaemon:
|
|
|
9077
9090
|
int(result.metrics.get("token_input", 0) or 0)
|
|
9078
9091
|
+ int(result.metrics.get("token_output", 0) or 0)
|
|
9079
9092
|
) > 0
|
|
9080
|
-
|
|
9093
|
+
has_verified_completion = self.process_manager.has_verified_agent_completion(result)
|
|
9094
|
+
if (
|
|
9095
|
+
not has_uncommitted
|
|
9096
|
+
and not has_committed
|
|
9097
|
+
and not has_tokens
|
|
9098
|
+
and not has_verified_completion
|
|
9099
|
+
):
|
|
9081
9100
|
logger.warning(
|
|
9082
9101
|
"Task %s (%s) agent reported success but produced no file changes "
|
|
9083
|
-
"
|
|
9102
|
+
"or verified completion evidence — marking as failed",
|
|
9084
9103
|
task.task_id, task.node_type,
|
|
9085
9104
|
)
|
|
9086
9105
|
result.status = "failed"
|
|
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
|