forgexa-cli 1.82.3__tar.gz → 1.82.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.
Files changed (33) hide show
  1. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/PKG-INFO +1 -1
  2. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/forgexa_cli/__init__.py +1 -1
  3. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/forgexa_cli/daemon.py +52 -1
  4. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/forgexa_cli.egg-info/PKG-INFO +1 -1
  5. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/pyproject.toml +1 -1
  6. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/README.md +0 -0
  7. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/forgexa_cli/_build_config.py +0 -0
  8. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/forgexa_cli/_local_bind.py +0 -0
  9. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/forgexa_cli/agent_core.py +0 -0
  10. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/forgexa_cli/autoupgrade.py +0 -0
  11. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/forgexa_cli/aws_evidence.py +0 -0
  12. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/forgexa_cli/aws_logs_evidence.py +0 -0
  13. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/forgexa_cli/main.py +0 -0
  14. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/forgexa_cli/observability_contract.py +0 -0
  15. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/forgexa_cli/observability_evidence.py +0 -0
  16. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/forgexa_cli/py.typed +0 -0
  17. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/forgexa_cli/runtime_evidence.py +0 -0
  18. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/forgexa_cli/zcode_protocol.py +0 -0
  19. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/forgexa_cli.egg-info/SOURCES.txt +0 -0
  20. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/forgexa_cli.egg-info/dependency_links.txt +0 -0
  21. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/forgexa_cli.egg-info/entry_points.txt +0 -0
  22. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/forgexa_cli.egg-info/requires.txt +0 -0
  23. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/forgexa_cli.egg-info/top_level.txt +0 -0
  24. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/setup.cfg +0 -0
  25. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/tests/test_auth_and_runtime_commands.py +0 -0
  26. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/tests/test_autoupgrade.py +0 -0
  27. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/tests/test_check_command.py +0 -0
  28. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/tests/test_expiry_warnings_and_revoke.py +0 -0
  29. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/tests/test_local_bind_commands.py +0 -0
  30. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/tests/test_runtime_credentials.py +0 -0
  31. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/tests/test_session_credentials.py +0 -0
  32. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/tests/test_silent_install.py +0 -0
  33. {forgexa_cli-1.82.3 → forgexa_cli-1.82.4}/tests/test_upgrade_observability.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: forgexa-cli
3
- Version: 1.82.3
3
+ Version: 1.82.4
4
4
  Summary: Forgexa CLI — command-line client and AI agent runtime for the Forgexa platform
5
5
  Author-email: Jason Sun <dev.winds@gmail.com>
6
6
  License-Expression: MIT
@@ -1,2 +1,2 @@
1
1
  """forgexa-cli — Forgexa command-line client."""
2
- __version__ = "1.82.3"
2
+ __version__ = "1.82.4"
@@ -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.82.3"
1237
+ DAEMON_VERSION = "1.82.4"
1238
1238
 
1239
1239
 
1240
1240
  def _detect_client_type() -> str:
@@ -1759,6 +1759,17 @@ def _build_runtime_critic_prompt(
1759
1759
  for key in ("remediation_scope", "deferred_acceptance_verification", "qa_test_level_policy_snapshot"):
1760
1760
  if isinstance((task.input_data or {}).get(key), dict):
1761
1761
  parts.extend((f"## Frozen {key}", json.dumps(task.input_data[key], ensure_ascii=True, sort_keys=True)))
1762
+ acceptance_contract = (task.input_data or {}).get("deferred_acceptance_verification")
1763
+ if isinstance(acceptance_contract, dict) and acceptance_contract.get("execution_phase") == "verification_final":
1764
+ parts.append(
1765
+ "The server-owned final-QA contract overrides runtime-execution wording in the original task "
1766
+ "only for its reserved criteria. Review source behavior and complete prepared E2E/manual "
1767
+ "verification assets now, not post-deployment acceptance execution. Missing environment access "
1768
+ "or an unexecuted reserved check alone is not a reason for unverified plan conformance. "
1769
+ "Missing or unreadable source/assets, missing required assertions or manual steps, and actual "
1770
+ "failed checks remain blocking. State the concrete missing evidence; never invent a run, "
1771
+ "treat asset existence as proof of correctness, or claim final QA or release acceptance."
1772
+ )
1762
1773
  else:
1763
1774
  planned_context = {
1764
1775
  key: (task.input_data or {}).get(key)
@@ -13813,11 +13824,51 @@ class RuntimeDaemon:
13813
13824
  paths = agent_core.missing_planned_task_files({
13814
13825
  "files": planned.get("files") or [], "items": planned.get("items") or [],
13815
13826
  }, [])
13827
+ if planned.get("type") in ("testing", "review") and getattr(task, "requirement_key", ""):
13828
+ output_dir = str((task.input_data or {}).get("output_dir") or "").replace("\\", "/").rstrip("/")
13829
+ artifact_paths = WorkspaceManager._local_requirement_artifact_paths(task, workspace_path)
13830
+ asset_paths = sorted(path for path in artifact_paths if path.startswith("tests/") or (
13831
+ path.startswith(output_dir + "/") and path.rsplit("/", 1)[-1] in {
13832
+ "test-cases.json", "coverage-matrix.json", "test-evidence.json", "test-report.md",
13833
+ }
13834
+ ))
13835
+ paths.extend(asset_paths)
13836
+ support_dirs = sorted({(Path(path).parent / "support").as_posix() for path in asset_paths if path.startswith("tests/")})
13837
+ for directory in support_dirs[:5]:
13838
+ try:
13839
+ support_paths = await self.workspace_manager._git(
13840
+ "ls-tree", "-r", "--name-only", after_sha, "--", directory,
13841
+ cwd=workspace_path, timeout=10,
13842
+ )
13843
+ except Exception:
13844
+ continue
13845
+ paths.extend(
13846
+ path for path in support_paths.splitlines()[:20]
13847
+ if path.startswith(directory + "/") and path.endswith((".ts", ".js", ".py"))
13848
+ )
13849
+ audit_contract = (task.input_data or {}).get("implementation_audit_contract")
13850
+ if isinstance(audit_contract, dict) and baseline.get("plan_id") is not None and audit_contract.get("plan_id") == baseline["plan_id"]:
13851
+ approved_tasks = {entry["id"]: entry for entry in audit_contract.get("tasks") or [] if isinstance(entry, dict) and isinstance(entry.get("id"), str)}
13852
+ pending = list(planned.get("depends_on") or [])
13853
+ visited = set()
13854
+ while pending:
13855
+ dependency_id = pending.pop()
13856
+ if dependency_id in visited:
13857
+ continue
13858
+ visited.add(dependency_id)
13859
+ dependency = approved_tasks.get(dependency_id)
13860
+ if dependency is not None:
13861
+ paths.extend(agent_core.missing_planned_task_files({
13862
+ "files": (dependency.get("input") or {}).get("files") or [],
13863
+ "items": dependency.get("items") or [],
13864
+ }, []))
13865
+ pending.extend(dependency.get("depends_on") or [])
13816
13866
  for related in baseline.get("related_tasks") or []:
13817
13867
  paths.extend(agent_core.missing_planned_task_files({
13818
13868
  "files": (related.get("input") or {}).get("files") or [],
13819
13869
  "items": related.get("items") or [],
13820
13870
  }, []))
13871
+ paths.extend(changed_files)
13821
13872
  paths = list(dict.fromkeys(paths))
13822
13873
  remaining = _RUNTIME_CRITIC_DIFF_MAX_CHARS - len(diff or "")
13823
13874
  source_context = []
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: forgexa-cli
3
- Version: 1.82.3
3
+ Version: 1.82.4
4
4
  Summary: Forgexa CLI — command-line client and AI agent runtime for the Forgexa platform
5
5
  Author-email: Jason Sun <dev.winds@gmail.com>
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "forgexa-cli"
3
- version = "1.82.3"
3
+ version = "1.82.4"
4
4
  description = "Forgexa CLI — command-line client and AI agent runtime for the Forgexa platform"
5
5
  requires-python = ">=3.9"
6
6
  license = "MIT"
File without changes
File without changes