forgexa-cli 1.88.1__tar.gz → 1.88.2__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.88.1 → forgexa_cli-1.88.2}/PKG-INFO +1 -1
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/forgexa_cli/__init__.py +1 -1
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/forgexa_cli/agent_core.py +22 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/forgexa_cli/daemon.py +6 -4
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/forgexa_cli.egg-info/PKG-INFO +1 -1
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/pyproject.toml +1 -1
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/README.md +0 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/forgexa_cli/_build_config.py +0 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/forgexa_cli/_local_bind.py +0 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/forgexa_cli/autoupgrade.py +0 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/forgexa_cli/aws_evidence.py +0 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/forgexa_cli/aws_logs_evidence.py +0 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/forgexa_cli/main.py +0 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/forgexa_cli/observability_contract.py +0 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/forgexa_cli/observability_evidence.py +0 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/forgexa_cli/py.typed +0 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/forgexa_cli/runtime_evidence.py +0 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/forgexa_cli/zcode_protocol.py +0 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/forgexa_cli.egg-info/SOURCES.txt +0 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/forgexa_cli.egg-info/dependency_links.txt +0 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/forgexa_cli.egg-info/entry_points.txt +0 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/forgexa_cli.egg-info/requires.txt +0 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/forgexa_cli.egg-info/top_level.txt +0 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/setup.cfg +0 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/tests/test_auth_and_runtime_commands.py +0 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/tests/test_autoupgrade.py +0 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/tests/test_check_command.py +0 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/tests/test_expiry_warnings_and_revoke.py +0 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/tests/test_local_bind_commands.py +0 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/tests/test_publish_script.py +0 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/tests/test_runtime_credentials.py +0 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/tests/test_session_credentials.py +0 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/tests/test_silent_install.py +0 -0
- {forgexa_cli-1.88.1 → forgexa_cli-1.88.2}/tests/test_upgrade_observability.py +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"""forgexa-cli — Forgexa command-line client."""
|
|
2
|
-
__version__ = "1.88.
|
|
2
|
+
__version__ = "1.88.2"
|
|
@@ -800,6 +800,28 @@ def is_frozen_analysis_path(value: str) -> bool:
|
|
|
800
800
|
return parts[1] == "workitems" and parts[3] == "analysis"
|
|
801
801
|
|
|
802
802
|
|
|
803
|
+
def is_verification_analysis_output(node_type: str, task_input: dict, value: str) -> bool:
|
|
804
|
+
if node_type != "analysis" or task_input.get("verification_work_item") is not True or not isinstance(value, str):
|
|
805
|
+
return False
|
|
806
|
+
declared = task_input.get("verification_analysis_doc_path")
|
|
807
|
+
if not isinstance(declared, str) or not declared:
|
|
808
|
+
return False
|
|
809
|
+
expected = PurePosixPath(declared.replace("\\", "/"))
|
|
810
|
+
actual = PurePosixPath(value.replace("\\", "/"))
|
|
811
|
+
if expected.is_absolute() or actual.is_absolute() or ".." in expected.parts or ".." in actual.parts:
|
|
812
|
+
return False
|
|
813
|
+
parts = expected.parts
|
|
814
|
+
if len(parts) != 5 or parts[:2] != ("docs", "workitems") or parts[3:] != ("analysis", "verification-analysis.md"):
|
|
815
|
+
return False
|
|
816
|
+
key = task_input.get("work_item_key")
|
|
817
|
+
directory = task_input.get("analysis_output_dir")
|
|
818
|
+
if key is not None and key != parts[2]:
|
|
819
|
+
return False
|
|
820
|
+
if directory is not None and (not isinstance(directory, str) or PurePosixPath(directory.replace("\\", "/")) != expected.parent):
|
|
821
|
+
return False
|
|
822
|
+
return actual == expected
|
|
823
|
+
|
|
824
|
+
|
|
803
825
|
def uses_necessary_execution_checks(node_type: str, task_input: dict, graph_type: str | None = None) -> bool:
|
|
804
826
|
actual_graph_type = graph_type if graph_type is not None else task_input.get("graph_type") or "execution"
|
|
805
827
|
return (
|
|
@@ -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.88.
|
|
1237
|
+
DAEMON_VERSION = "1.88.2"
|
|
1238
1238
|
|
|
1239
1239
|
|
|
1240
1240
|
def _detect_client_type() -> str:
|
|
@@ -14749,11 +14749,13 @@ class RuntimeDaemon:
|
|
|
14749
14749
|
))
|
|
14750
14750
|
|
|
14751
14751
|
if verification_work_item:
|
|
14752
|
-
forbidden_paths = sorted(
|
|
14752
|
+
forbidden_paths = sorted({
|
|
14753
14753
|
path
|
|
14754
|
-
for
|
|
14754
|
+
for original in result.files_changed or []
|
|
14755
|
+
for path in ProcessManager._normalize_repo_paths([original])
|
|
14755
14756
|
if _is_requirement_analysis_path(path)
|
|
14756
|
-
|
|
14757
|
+
and not agent_core.is_verification_analysis_output(node_type, input_data, original)
|
|
14758
|
+
})
|
|
14757
14759
|
if forbidden_paths:
|
|
14758
14760
|
issues.append(_OutputValidationIssue(
|
|
14759
14761
|
"verification_work_item_scope_violation",
|
|
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
|
|
File without changes
|
|
File without changes
|