forgexa-cli 1.37.0__tar.gz → 1.37.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.
Files changed (27) hide show
  1. {forgexa_cli-1.37.0 → forgexa_cli-1.37.1}/PKG-INFO +1 -1
  2. {forgexa_cli-1.37.0 → forgexa_cli-1.37.1}/forgexa_cli/__init__.py +1 -1
  3. {forgexa_cli-1.37.0 → forgexa_cli-1.37.1}/forgexa_cli/daemon.py +28 -5
  4. {forgexa_cli-1.37.0 → forgexa_cli-1.37.1}/forgexa_cli.egg-info/PKG-INFO +1 -1
  5. {forgexa_cli-1.37.0 → forgexa_cli-1.37.1}/pyproject.toml +1 -1
  6. {forgexa_cli-1.37.0 → forgexa_cli-1.37.1}/README.md +0 -0
  7. {forgexa_cli-1.37.0 → forgexa_cli-1.37.1}/forgexa_cli/_build_config.py +0 -0
  8. {forgexa_cli-1.37.0 → forgexa_cli-1.37.1}/forgexa_cli/_local_bind.py +0 -0
  9. {forgexa_cli-1.37.0 → forgexa_cli-1.37.1}/forgexa_cli/agent_core.py +0 -0
  10. {forgexa_cli-1.37.0 → forgexa_cli-1.37.1}/forgexa_cli/autoupgrade.py +0 -0
  11. {forgexa_cli-1.37.0 → forgexa_cli-1.37.1}/forgexa_cli/main.py +0 -0
  12. {forgexa_cli-1.37.0 → forgexa_cli-1.37.1}/forgexa_cli/py.typed +0 -0
  13. {forgexa_cli-1.37.0 → forgexa_cli-1.37.1}/forgexa_cli.egg-info/SOURCES.txt +0 -0
  14. {forgexa_cli-1.37.0 → forgexa_cli-1.37.1}/forgexa_cli.egg-info/dependency_links.txt +0 -0
  15. {forgexa_cli-1.37.0 → forgexa_cli-1.37.1}/forgexa_cli.egg-info/entry_points.txt +0 -0
  16. {forgexa_cli-1.37.0 → forgexa_cli-1.37.1}/forgexa_cli.egg-info/requires.txt +0 -0
  17. {forgexa_cli-1.37.0 → forgexa_cli-1.37.1}/forgexa_cli.egg-info/top_level.txt +0 -0
  18. {forgexa_cli-1.37.0 → forgexa_cli-1.37.1}/setup.cfg +0 -0
  19. {forgexa_cli-1.37.0 → forgexa_cli-1.37.1}/tests/test_auth_and_runtime_commands.py +0 -0
  20. {forgexa_cli-1.37.0 → forgexa_cli-1.37.1}/tests/test_autoupgrade.py +0 -0
  21. {forgexa_cli-1.37.0 → forgexa_cli-1.37.1}/tests/test_check_command.py +0 -0
  22. {forgexa_cli-1.37.0 → forgexa_cli-1.37.1}/tests/test_expiry_warnings_and_revoke.py +0 -0
  23. {forgexa_cli-1.37.0 → forgexa_cli-1.37.1}/tests/test_local_bind_commands.py +0 -0
  24. {forgexa_cli-1.37.0 → forgexa_cli-1.37.1}/tests/test_runtime_credentials.py +0 -0
  25. {forgexa_cli-1.37.0 → forgexa_cli-1.37.1}/tests/test_session_credentials.py +0 -0
  26. {forgexa_cli-1.37.0 → forgexa_cli-1.37.1}/tests/test_silent_install.py +0 -0
  27. {forgexa_cli-1.37.0 → forgexa_cli-1.37.1}/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.37.0
3
+ Version: 1.37.1
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.37.0"
2
+ __version__ = "1.37.1"
@@ -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.0"
913
+ DAEMON_VERSION = "1.37.1"
914
914
 
915
915
 
916
916
  def _detect_client_type() -> str:
@@ -8658,6 +8658,17 @@ class RuntimeDaemon:
8658
8658
  return
8659
8659
 
8660
8660
  try:
8661
+ # Analysis-continuity P0 (design doc §九 P0-5, R1-c): capture the
8662
+ # pre-wipe HEAD so the deleted analysis docs remain recoverable
8663
+ # from git history via this exact commit.
8664
+ try:
8665
+ pre_wipe_sha = (
8666
+ await self.workspace_manager._git(
8667
+ "rev-parse", "HEAD", cwd=workspace_path,
8668
+ )
8669
+ ).strip()
8670
+ except Exception:
8671
+ pre_wipe_sha = "unknown"
8661
8672
  # Stage all deletions with git rm
8662
8673
  await self.workspace_manager._git(
8663
8674
  "rm", "-r", "--cached", "--ignore-unmatch",
@@ -8666,18 +8677,24 @@ class RuntimeDaemon:
8666
8677
  )
8667
8678
  # Remove physical files
8668
8679
  shutil.rmtree(str(dir_to_wipe), ignore_errors=True)
8669
- # Commit the wipe so the branch diff is clean
8680
+ # Commit the wipe so the branch diff is clean. The pre-wipe HEAD in
8681
+ # the message documents where the old docs can be recovered from.
8670
8682
  _git_name, _git_email = _resolve_git_author(task.project)
8683
+ _wipe_msg = (
8684
+ f"cleanup: wipe analysis docs in {output_dir_norm} before fresh re-analysis"
8685
+ )
8686
+ if pre_wipe_sha and pre_wipe_sha != "unknown":
8687
+ _wipe_msg += f" [pre-wipe HEAD {pre_wipe_sha}]"
8671
8688
  await self.workspace_manager._git(
8672
8689
  "-c", f"user.name={_git_name}",
8673
8690
  "-c", f"user.email={_git_email}",
8674
8691
  "commit", "-m",
8675
- f"cleanup: wipe analysis docs in {output_dir_norm} before fresh re-analysis",
8692
+ _wipe_msg,
8676
8693
  cwd=workspace_path,
8677
8694
  )
8678
8695
  logger.info(
8679
- "Wiped %d analysis doc(s) from %s for task %s (fresh analysis)",
8680
- len(existing_files), output_dir_norm, task.task_id,
8696
+ "Wiped %d analysis doc(s) from %s for task %s (fresh analysis; pre-wipe HEAD %s)",
8697
+ len(existing_files), output_dir_norm, task.task_id, pre_wipe_sha,
8681
8698
  )
8682
8699
  except Exception as _wipe_err:
8683
8700
  # Wipe failure on a fresh analysis is not safe to ignore:
@@ -11393,6 +11410,12 @@ class RuntimeDaemon:
11393
11410
  base = workspace_path / doc_dir.lstrip("./")
11394
11411
  req_type = input_data.get("requirement_type", "feature")
11395
11412
  candidate_paths = [str(base / fname) for fname in _get_analysis_outputs_for_type(req_type)]
11413
+ # Analysis-continuity P2: collect the machine-readable refinement
11414
+ # report so the server can verify feedback coverage and baseline
11415
+ # commitments before promoting the candidate (missing file is
11416
+ # handled server-side as a needs_review condition).
11417
+ if input_data.get("analysis_mode") == "refine":
11418
+ candidate_paths.append(str(base / "refinement-report.json"))
11396
11419
 
11397
11420
  existing_artifact_paths = {a.get("path", "").replace("\\", "/") for a in result.artifacts}
11398
11421
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: forgexa-cli
3
- Version: 1.37.0
3
+ Version: 1.37.1
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.37.0"
3
+ version = "1.37.1"
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