forgexa-cli 1.15.5__tar.gz → 1.15.7__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.15.5 → forgexa_cli-1.15.7}/PKG-INFO +2 -3
- {forgexa_cli-1.15.5 → forgexa_cli-1.15.7}/forgexa_cli/__init__.py +1 -1
- {forgexa_cli-1.15.5 → forgexa_cli-1.15.7}/forgexa_cli/daemon.py +59 -1
- {forgexa_cli-1.15.5 → forgexa_cli-1.15.7}/forgexa_cli.egg-info/PKG-INFO +2 -3
- {forgexa_cli-1.15.5 → forgexa_cli-1.15.7}/pyproject.toml +3 -4
- {forgexa_cli-1.15.5 → forgexa_cli-1.15.7}/README.md +0 -0
- {forgexa_cli-1.15.5 → forgexa_cli-1.15.7}/forgexa_cli/_build_config.py +0 -0
- {forgexa_cli-1.15.5 → forgexa_cli-1.15.7}/forgexa_cli/main.py +0 -0
- {forgexa_cli-1.15.5 → forgexa_cli-1.15.7}/forgexa_cli/py.typed +0 -0
- {forgexa_cli-1.15.5 → forgexa_cli-1.15.7}/forgexa_cli.egg-info/SOURCES.txt +0 -0
- {forgexa_cli-1.15.5 → forgexa_cli-1.15.7}/forgexa_cli.egg-info/dependency_links.txt +0 -0
- {forgexa_cli-1.15.5 → forgexa_cli-1.15.7}/forgexa_cli.egg-info/entry_points.txt +0 -0
- {forgexa_cli-1.15.5 → forgexa_cli-1.15.7}/forgexa_cli.egg-info/requires.txt +0 -0
- {forgexa_cli-1.15.5 → forgexa_cli-1.15.7}/forgexa_cli.egg-info/top_level.txt +0 -0
- {forgexa_cli-1.15.5 → forgexa_cli-1.15.7}/setup.cfg +0 -0
- {forgexa_cli-1.15.5 → forgexa_cli-1.15.7}/tests/test_auth_and_runtime_commands.py +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: forgexa-cli
|
|
3
|
-
Version: 1.15.
|
|
3
|
+
Version: 1.15.7
|
|
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
|
-
License: MIT
|
|
6
|
+
License-Expression: MIT
|
|
7
7
|
Project-URL: Homepage, https://forgexa.net
|
|
8
8
|
Project-URL: Documentation, https://docs.forgexa.net
|
|
9
9
|
Project-URL: Repository, https://github.com/forgexa/forgexa
|
|
@@ -12,7 +12,6 @@ Keywords: forgexa,ai,software-factory,cli,devops,agent
|
|
|
12
12
|
Classifier: Development Status :: 4 - Beta
|
|
13
13
|
Classifier: Environment :: Console
|
|
14
14
|
Classifier: Intended Audience :: Developers
|
|
15
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
16
15
|
Classifier: Operating System :: OS Independent
|
|
17
16
|
Classifier: Programming Language :: Python :: 3
|
|
18
17
|
Classifier: Programming Language :: Python :: 3.9
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"""forgexa-cli — Forgexa command-line client."""
|
|
2
|
-
__version__ = "1.15.
|
|
2
|
+
__version__ = "1.15.7"
|
|
@@ -523,7 +523,7 @@ except (ImportError, ModuleNotFoundError):
|
|
|
523
523
|
# DAEMON_VERSION is the protocol/logic version of the daemon code.
|
|
524
524
|
# Kept in sync with pyproject.toml version via bump-version.sh.
|
|
525
525
|
# CLIENT_TYPE identifies which packaging/distribution this daemon runs in.
|
|
526
|
-
DAEMON_VERSION = "1.15.
|
|
526
|
+
DAEMON_VERSION = "1.15.7"
|
|
527
527
|
|
|
528
528
|
|
|
529
529
|
def _detect_client_type() -> str:
|
|
@@ -862,6 +862,62 @@ def _daemon_extract_copilot_output(raw: str) -> str:
|
|
|
862
862
|
return raw
|
|
863
863
|
|
|
864
864
|
|
|
865
|
+
def _daemon_extract_codex_output(raw: str) -> str:
|
|
866
|
+
"""Extract assistant text from Codex JSONL output."""
|
|
867
|
+
assistant_messages: list[str] = []
|
|
868
|
+
fallback_parts: list[str] = []
|
|
869
|
+
|
|
870
|
+
for line in raw.split("\n"):
|
|
871
|
+
line = line.strip()
|
|
872
|
+
if not line:
|
|
873
|
+
continue
|
|
874
|
+
try:
|
|
875
|
+
data = json.loads(line)
|
|
876
|
+
except json.JSONDecodeError:
|
|
877
|
+
fallback_parts.append(line)
|
|
878
|
+
continue
|
|
879
|
+
if not isinstance(data, dict):
|
|
880
|
+
continue
|
|
881
|
+
|
|
882
|
+
if data.get("type") == "item.completed":
|
|
883
|
+
item = data.get("item") or {}
|
|
884
|
+
if item.get("type") == "agent_message":
|
|
885
|
+
text = item.get("text") or ""
|
|
886
|
+
if isinstance(text, str) and text.strip():
|
|
887
|
+
assistant_messages.append(text.strip())
|
|
888
|
+
continue
|
|
889
|
+
|
|
890
|
+
if data.get("type") != "message" or data.get("role") != "assistant":
|
|
891
|
+
continue
|
|
892
|
+
|
|
893
|
+
content = data.get("content", [])
|
|
894
|
+
if isinstance(content, str) and content.strip():
|
|
895
|
+
assistant_messages.append(content.strip())
|
|
896
|
+
continue
|
|
897
|
+
if not isinstance(content, list):
|
|
898
|
+
continue
|
|
899
|
+
|
|
900
|
+
texts: list[str] = []
|
|
901
|
+
for block in content:
|
|
902
|
+
if not isinstance(block, dict):
|
|
903
|
+
continue
|
|
904
|
+
if block.get("type") not in ("text", "output_text"):
|
|
905
|
+
continue
|
|
906
|
+
text = block.get("text") or block.get("content") or ""
|
|
907
|
+
if isinstance(text, str) and text.strip():
|
|
908
|
+
texts.append(text)
|
|
909
|
+
|
|
910
|
+
joined = "\n".join(texts).strip()
|
|
911
|
+
if joined:
|
|
912
|
+
assistant_messages.append(joined)
|
|
913
|
+
|
|
914
|
+
if assistant_messages:
|
|
915
|
+
return assistant_messages[-1]
|
|
916
|
+
|
|
917
|
+
fallback = "\n".join(fallback_parts).strip()
|
|
918
|
+
return fallback or raw
|
|
919
|
+
|
|
920
|
+
|
|
865
921
|
def _daemon_extract_claude_output(raw: str) -> str:
|
|
866
922
|
"""Extract result text from Claude CLI JSON/stream-json output."""
|
|
867
923
|
raw = raw.strip()
|
|
@@ -990,6 +1046,8 @@ def _daemon_extract_agent_output(agent_id: str, raw: str) -> str:
|
|
|
990
1046
|
return _daemon_extract_claude_output(raw)
|
|
991
1047
|
if agent_id == "copilot":
|
|
992
1048
|
return _daemon_extract_copilot_output(raw)
|
|
1049
|
+
if agent_id == "codex":
|
|
1050
|
+
return _daemon_extract_codex_output(raw)
|
|
993
1051
|
if agent_id == "opencode":
|
|
994
1052
|
return _daemon_extract_opencode_output(raw)
|
|
995
1053
|
return raw
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: forgexa-cli
|
|
3
|
-
Version: 1.15.
|
|
3
|
+
Version: 1.15.7
|
|
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
|
-
License: MIT
|
|
6
|
+
License-Expression: MIT
|
|
7
7
|
Project-URL: Homepage, https://forgexa.net
|
|
8
8
|
Project-URL: Documentation, https://docs.forgexa.net
|
|
9
9
|
Project-URL: Repository, https://github.com/forgexa/forgexa
|
|
@@ -12,7 +12,6 @@ Keywords: forgexa,ai,software-factory,cli,devops,agent
|
|
|
12
12
|
Classifier: Development Status :: 4 - Beta
|
|
13
13
|
Classifier: Environment :: Console
|
|
14
14
|
Classifier: Intended Audience :: Developers
|
|
15
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
16
15
|
Classifier: Operating System :: OS Independent
|
|
17
16
|
Classifier: Programming Language :: Python :: 3
|
|
18
17
|
Classifier: Programming Language :: Python :: 3.9
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "forgexa-cli"
|
|
3
|
-
version = "1.15.
|
|
3
|
+
version = "1.15.7"
|
|
4
4
|
description = "Forgexa CLI — command-line client and AI agent runtime for the Forgexa platform"
|
|
5
5
|
requires-python = ">=3.9"
|
|
6
|
-
license =
|
|
6
|
+
license = "MIT"
|
|
7
7
|
authors = [
|
|
8
8
|
{ name = "Jason Sun", email = "dev.winds@gmail.com" },
|
|
9
9
|
]
|
|
@@ -13,7 +13,6 @@ classifiers = [
|
|
|
13
13
|
"Development Status :: 4 - Beta",
|
|
14
14
|
"Environment :: Console",
|
|
15
15
|
"Intended Audience :: Developers",
|
|
16
|
-
"License :: OSI Approved :: MIT License",
|
|
17
16
|
"Operating System :: OS Independent",
|
|
18
17
|
"Programming Language :: Python :: 3",
|
|
19
18
|
"Programming Language :: Python :: 3.9",
|
|
@@ -46,7 +45,7 @@ forgexa = "forgexa_cli.main:main"
|
|
|
46
45
|
forgexa-daemon = "forgexa_cli.daemon:main_sync"
|
|
47
46
|
|
|
48
47
|
[build-system]
|
|
49
|
-
requires = ["setuptools>=
|
|
48
|
+
requires = ["setuptools>=77.0.0"]
|
|
50
49
|
build-backend = "setuptools.build_meta"
|
|
51
50
|
|
|
52
51
|
[tool.setuptools.packages.find]
|
|
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
|