forgexa-cli 1.28.0__tar.gz → 1.29.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.28.0 → forgexa_cli-1.29.0}/PKG-INFO +1 -1
- {forgexa_cli-1.28.0 → forgexa_cli-1.29.0}/forgexa_cli/__init__.py +1 -1
- {forgexa_cli-1.28.0 → forgexa_cli-1.29.0}/forgexa_cli/daemon.py +11 -9
- {forgexa_cli-1.28.0 → forgexa_cli-1.29.0}/forgexa_cli/main.py +1 -1
- {forgexa_cli-1.28.0 → forgexa_cli-1.29.0}/forgexa_cli.egg-info/PKG-INFO +1 -1
- {forgexa_cli-1.28.0 → forgexa_cli-1.29.0}/pyproject.toml +1 -1
- {forgexa_cli-1.28.0 → forgexa_cli-1.29.0}/README.md +0 -0
- {forgexa_cli-1.28.0 → forgexa_cli-1.29.0}/forgexa_cli/_build_config.py +0 -0
- {forgexa_cli-1.28.0 → forgexa_cli-1.29.0}/forgexa_cli/_local_bind.py +0 -0
- {forgexa_cli-1.28.0 → forgexa_cli-1.29.0}/forgexa_cli/agent_core.py +0 -0
- {forgexa_cli-1.28.0 → forgexa_cli-1.29.0}/forgexa_cli/autoupgrade.py +0 -0
- {forgexa_cli-1.28.0 → forgexa_cli-1.29.0}/forgexa_cli/py.typed +0 -0
- {forgexa_cli-1.28.0 → forgexa_cli-1.29.0}/forgexa_cli.egg-info/SOURCES.txt +0 -0
- {forgexa_cli-1.28.0 → forgexa_cli-1.29.0}/forgexa_cli.egg-info/dependency_links.txt +0 -0
- {forgexa_cli-1.28.0 → forgexa_cli-1.29.0}/forgexa_cli.egg-info/entry_points.txt +0 -0
- {forgexa_cli-1.28.0 → forgexa_cli-1.29.0}/forgexa_cli.egg-info/requires.txt +0 -0
- {forgexa_cli-1.28.0 → forgexa_cli-1.29.0}/forgexa_cli.egg-info/top_level.txt +0 -0
- {forgexa_cli-1.28.0 → forgexa_cli-1.29.0}/setup.cfg +0 -0
- {forgexa_cli-1.28.0 → forgexa_cli-1.29.0}/tests/test_auth_and_runtime_commands.py +0 -0
- {forgexa_cli-1.28.0 → forgexa_cli-1.29.0}/tests/test_autoupgrade.py +0 -0
- {forgexa_cli-1.28.0 → forgexa_cli-1.29.0}/tests/test_check_command.py +0 -0
- {forgexa_cli-1.28.0 → forgexa_cli-1.29.0}/tests/test_expiry_warnings_and_revoke.py +0 -0
- {forgexa_cli-1.28.0 → forgexa_cli-1.29.0}/tests/test_local_bind_commands.py +0 -0
- {forgexa_cli-1.28.0 → forgexa_cli-1.29.0}/tests/test_runtime_credentials.py +0 -0
- {forgexa_cli-1.28.0 → forgexa_cli-1.29.0}/tests/test_session_credentials.py +0 -0
- {forgexa_cli-1.28.0 → forgexa_cli-1.29.0}/tests/test_silent_install.py +0 -0
- {forgexa_cli-1.28.0 → forgexa_cli-1.29.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.29.0"
|
|
@@ -62,17 +62,18 @@ except ImportError:
|
|
|
62
62
|
# Agent discovery, process primitives, agent command/env builders, output
|
|
63
63
|
# parsing and advisory file locks live in agent_core.py (shared with the IDE
|
|
64
64
|
# agent_host sidecar). Both files are mirrored byte-identical into the
|
|
65
|
-
# CLI/Desktop
|
|
65
|
+
# CLI/Desktop bundles by cli/scripts/sync-daemon.sh — edit only the
|
|
66
66
|
# backend/app/ copies. The import shim covers the backend package layout
|
|
67
67
|
# (app.agent_core), the CLI package layout (forgexa_cli.agent_core) and the
|
|
68
|
-
# flat mirror layout (agent_core next to daemon.py in desktop
|
|
68
|
+
# flat mirror layout (agent_core next to daemon.py in the desktop app's
|
|
69
|
+
# resources).
|
|
69
70
|
try:
|
|
70
71
|
from app import agent_core
|
|
71
72
|
except ImportError:
|
|
72
73
|
try:
|
|
73
74
|
from . import agent_core # type: ignore[no-redef] # CLI package layout
|
|
74
75
|
except ImportError:
|
|
75
|
-
import agent_core # type: ignore[no-redef] # flat script layout (desktop
|
|
76
|
+
import agent_core # type: ignore[no-redef] # flat script layout (desktop resources)
|
|
76
77
|
|
|
77
78
|
# Backwards-compatible aliases: keep every moved symbol importable from
|
|
78
79
|
# app.daemon (tests patch e.g. app.daemon._kill_proc) while the single source
|
|
@@ -909,14 +910,14 @@ except (ImportError, ModuleNotFoundError):
|
|
|
909
910
|
# DAEMON_VERSION is the protocol/logic version of the daemon code.
|
|
910
911
|
# Kept in sync with pyproject.toml version via bump-version.sh.
|
|
911
912
|
# CLIENT_TYPE identifies which packaging/distribution this daemon runs in.
|
|
912
|
-
DAEMON_VERSION = "1.
|
|
913
|
+
DAEMON_VERSION = "1.29.0"
|
|
913
914
|
|
|
914
915
|
|
|
915
916
|
def _detect_client_type() -> str:
|
|
916
917
|
"""Auto-detect client type from runtime context.
|
|
917
918
|
|
|
918
919
|
Priority:
|
|
919
|
-
1. FORGEXA_CLIENT_TYPE env var (set by desktop
|
|
920
|
+
1. FORGEXA_CLIENT_TYPE env var (set by the desktop Tauri launcher)
|
|
920
921
|
2. Import context: app.config importable → "server"
|
|
921
922
|
3. Default: "cli" (standalone pip-installed daemon)
|
|
922
923
|
|
|
@@ -924,9 +925,10 @@ def _detect_client_type() -> str:
|
|
|
924
925
|
of deployment context, making the bundle-daemon.sh copy safe.
|
|
925
926
|
"""
|
|
926
927
|
env_type = os.environ.get("FORGEXA_CLIENT_TYPE", "").strip().lower()
|
|
927
|
-
# "ide"
|
|
928
|
-
# already-installed builds keep
|
|
929
|
-
# accepted permanently alongside
|
|
928
|
+
# "ide" and "studio" are pre-rename client_type values (ide→studio
|
|
929
|
+
# 2026-08-16, studio→desktop 2026-08-25): already-installed builds keep
|
|
930
|
+
# sending them forever, so they must stay accepted permanently alongside
|
|
931
|
+
# "desktop", which the current app reports.
|
|
930
932
|
if env_type in ("server", "cli", "desktop", "ide", "studio"):
|
|
931
933
|
return env_type
|
|
932
934
|
# Server: app.config was successfully imported at module level above
|
|
@@ -1862,7 +1864,7 @@ def _save_local_workspaces_mapping(mapping: dict) -> None:
|
|
|
1862
1864
|
# machine but must NEVER reach the server (on_output_chunk below already
|
|
1863
1865
|
# skips buffering local_bind lines into the server-bound progress report).
|
|
1864
1866
|
# This file is the "same-machine-visible" channel: the Forgexa IDE tails it
|
|
1865
|
-
# directly via a Tauri command (
|
|
1867
|
+
# directly via a Tauri command (desktop/src-tauri/src/local_bind_output.rs) - it
|
|
1866
1868
|
# is never read or transmitted by anything in this module over HTTP.
|
|
1867
1869
|
def _local_bind_output_log_path(task_id: str) -> Path:
|
|
1868
1870
|
return Path.home() / ".forgexa" / "local-bind-output" / f"{task_id}.log"
|
|
@@ -3434,7 +3434,7 @@ def main() -> None:
|
|
|
3434
3434
|
pc.add_argument("name", help="Project name")
|
|
3435
3435
|
pc.add_argument("--workspace", required=True, help="Workspace ID")
|
|
3436
3436
|
pc.add_argument("--stack", default=None, help="Tech stack")
|
|
3437
|
-
bl = proj_sub.add_parser("bind-local", help="Bind a local directory for Forgexa
|
|
3437
|
+
bl = proj_sub.add_parser("bind-local", help="Bind a local directory for Forgexa Desktop direct execution")
|
|
3438
3438
|
bl.add_argument("path", help="Absolute path to your local working directory")
|
|
3439
3439
|
bl.add_argument("--project", required=True, help="Project ID")
|
|
3440
3440
|
bl.add_argument("--runtime", default=None, help="Personal runtime ID prefix (if you have more than one)")
|
|
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
|