forgexa-cli 1.71.2__tar.gz → 1.72.0__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 (31) hide show
  1. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/PKG-INFO +1 -1
  2. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli/__init__.py +1 -1
  3. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli/agent_core.py +27 -14
  4. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli/daemon.py +1 -1
  5. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli.egg-info/PKG-INFO +1 -1
  6. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/pyproject.toml +1 -1
  7. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/README.md +0 -0
  8. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli/_build_config.py +0 -0
  9. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli/_local_bind.py +0 -0
  10. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli/autoupgrade.py +0 -0
  11. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli/aws_evidence.py +0 -0
  12. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli/aws_logs_evidence.py +0 -0
  13. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli/main.py +0 -0
  14. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli/py.typed +0 -0
  15. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli/runtime_evidence.py +0 -0
  16. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli/zcode_protocol.py +0 -0
  17. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli.egg-info/SOURCES.txt +0 -0
  18. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli.egg-info/dependency_links.txt +0 -0
  19. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli.egg-info/entry_points.txt +0 -0
  20. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli.egg-info/requires.txt +0 -0
  21. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli.egg-info/top_level.txt +0 -0
  22. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/setup.cfg +0 -0
  23. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/tests/test_auth_and_runtime_commands.py +0 -0
  24. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/tests/test_autoupgrade.py +0 -0
  25. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/tests/test_check_command.py +0 -0
  26. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/tests/test_expiry_warnings_and_revoke.py +0 -0
  27. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/tests/test_local_bind_commands.py +0 -0
  28. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/tests/test_runtime_credentials.py +0 -0
  29. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/tests/test_session_credentials.py +0 -0
  30. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/tests/test_silent_install.py +0 -0
  31. {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/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.71.2
3
+ Version: 1.72.0
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.71.2"
2
+ __version__ = "1.72.0"
@@ -428,6 +428,7 @@ def _windows_agent_needs_task_file_redirect(agent_command: str) -> bool:
428
428
 
429
429
  def _redirect_prompt_through_task_file(
430
430
  cwd: Path, prompt: str, task_id: str, agent_label: str,
431
+ *, task_file: Path | None = None, git_exclude: Path | None = None,
431
432
  ) -> tuple[str, Path | None]:
432
433
  """Write ``prompt`` to a workspace-local file and return a short, fixed,
433
434
  shell-metacharacter-free instruction telling the agent to read it instead.
@@ -435,24 +436,35 @@ def _redirect_prompt_through_task_file(
435
436
  Returns ``(effective_prompt, task_file)``. ``task_file`` is the path the
436
437
  caller must delete after the run, or ``None`` if writing failed, in which
437
438
  case ``effective_prompt`` falls back to the original ``prompt`` unchanged.
439
+ A caller may supply a preallocated private file and the Git-resolved
440
+ exclude path, including for linked worktrees. Such callers must reject
441
+ ``None`` rather than sending the original prompt through a script.
438
442
  """
439
- task_file = Path(cwd) / ".forgexa-task.md"
443
+ exclude_entry = ".forgexa-task-*.md" if task_file is not None else ".forgexa-task.md"
444
+ task_file = task_file if task_file is not None else Path(cwd) / ".forgexa-task.md"
440
445
  try:
441
- task_file.write_text(prompt, encoding="utf-8")
446
+ task_file.write_text(prompt, encoding="utf-8", newline="")
442
447
  # Prevent accidental git commit of this ephemeral file.
443
- git_exclude = Path(cwd) / ".git" / "info" / "exclude"
444
- if git_exclude.exists():
445
- excl = git_exclude.read_text(encoding="utf-8", errors="replace")
446
- if ".forgexa-task.md" not in excl:
447
- git_exclude.write_text(
448
- excl.rstrip("\n") + "\n.forgexa-task.md\n", encoding="utf-8",
448
+ exclude_path = (
449
+ git_exclude if git_exclude is not None
450
+ else Path(cwd) / ".git" / "info" / "exclude"
451
+ )
452
+ if git_exclude is not None or exclude_path.exists():
453
+ exclude_path.parent.mkdir(parents=True, exist_ok=True)
454
+ excl = (
455
+ exclude_path.read_text(encoding="utf-8", errors="replace")
456
+ if exclude_path.exists() else ""
457
+ )
458
+ if exclude_entry not in excl.splitlines():
459
+ exclude_path.write_text(
460
+ excl.rstrip("\n") + "\n" + exclude_entry + "\n", encoding="utf-8",
449
461
  )
450
462
  logger.debug(
451
- "%s task %s: wrote %d-char prompt to .forgexa-task.md",
452
- agent_label, task_id, len(prompt),
463
+ "%s task %s: wrote %d-char prompt to %s",
464
+ agent_label, task_id, len(prompt), task_file.name,
453
465
  )
454
466
  return (
455
- "Read the file .forgexa-task.md for your complete task "
467
+ f"Read the file {task_file.name} for your complete task "
456
468
  "specification. Follow all instructions in it exactly."
457
469
  ), task_file
458
470
  except Exception as exc:
@@ -3671,9 +3683,10 @@ def build_copilot_command(
3671
3683
  stdin instead - verified live on CLI 1.0.86, where piped stdin is a full
3672
3684
  non-interactive prompt source. The daemon uses it for native launchers
3673
3685
  to avoid single-argument and total command-line limits; Windows batch
3674
- wrappers retain task-file redirection. The host uses it for every prompt
3675
- so task text never passes through Windows batch argument parsing or
3676
- command-line limits, including when attachments are inlined.
3686
+ wrappers retain task-file redirection. The host also uses a private task
3687
+ file for Windows script launchers, whose forwarding of stdin cannot be
3688
+ assumed. Native host launchers use stdin for every prompt so task text
3689
+ never passes through shell parsing or command-line limits.
3677
3690
  """
3678
3691
  cmd = [
3679
3692
  binary,
@@ -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.71.2"
1237
+ DAEMON_VERSION = "1.72.0"
1238
1238
 
1239
1239
 
1240
1240
  def _detect_client_type() -> str:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: forgexa-cli
3
- Version: 1.71.2
3
+ Version: 1.72.0
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.71.2"
3
+ version = "1.72.0"
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