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.
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/PKG-INFO +1 -1
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli/__init__.py +1 -1
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli/agent_core.py +27 -14
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli/daemon.py +1 -1
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli.egg-info/PKG-INFO +1 -1
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/pyproject.toml +1 -1
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/README.md +0 -0
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli/_build_config.py +0 -0
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli/_local_bind.py +0 -0
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli/autoupgrade.py +0 -0
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli/aws_evidence.py +0 -0
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli/aws_logs_evidence.py +0 -0
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli/main.py +0 -0
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli/py.typed +0 -0
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli/runtime_evidence.py +0 -0
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli/zcode_protocol.py +0 -0
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli.egg-info/SOURCES.txt +0 -0
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli.egg-info/dependency_links.txt +0 -0
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli.egg-info/entry_points.txt +0 -0
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli.egg-info/requires.txt +0 -0
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/forgexa_cli.egg-info/top_level.txt +0 -0
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/setup.cfg +0 -0
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/tests/test_auth_and_runtime_commands.py +0 -0
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/tests/test_autoupgrade.py +0 -0
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/tests/test_check_command.py +0 -0
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/tests/test_expiry_warnings_and_revoke.py +0 -0
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/tests/test_local_bind_commands.py +0 -0
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/tests/test_runtime_credentials.py +0 -0
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/tests/test_session_credentials.py +0 -0
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/tests/test_silent_install.py +0 -0
- {forgexa_cli-1.71.2 → forgexa_cli-1.72.0}/tests/test_upgrade_observability.py +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"""forgexa-cli — Forgexa command-line client."""
|
|
2
|
-
__version__ = "1.
|
|
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
|
-
|
|
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
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
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
|
|
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 .
|
|
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.
|
|
3675
|
-
|
|
3676
|
-
|
|
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.
|
|
1237
|
+
DAEMON_VERSION = "1.72.0"
|
|
1238
1238
|
|
|
1239
1239
|
|
|
1240
1240
|
def _detect_client_type() -> str:
|
|
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
|