forgexa-cli 1.41.2__tar.gz → 1.41.4__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.41.2 → forgexa_cli-1.41.4}/PKG-INFO +1 -1
- {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli/__init__.py +1 -1
- {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli/agent_core.py +3 -0
- {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli/daemon.py +40 -7
- {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli.egg-info/PKG-INFO +1 -1
- {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/pyproject.toml +1 -1
- {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/README.md +0 -0
- {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli/_build_config.py +0 -0
- {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli/_local_bind.py +0 -0
- {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli/autoupgrade.py +0 -0
- {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli/main.py +0 -0
- {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli/py.typed +0 -0
- {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli.egg-info/SOURCES.txt +0 -0
- {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli.egg-info/dependency_links.txt +0 -0
- {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli.egg-info/entry_points.txt +0 -0
- {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli.egg-info/requires.txt +0 -0
- {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli.egg-info/top_level.txt +0 -0
- {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/setup.cfg +0 -0
- {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/tests/test_auth_and_runtime_commands.py +0 -0
- {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/tests/test_autoupgrade.py +0 -0
- {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/tests/test_check_command.py +0 -0
- {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/tests/test_expiry_warnings_and_revoke.py +0 -0
- {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/tests/test_local_bind_commands.py +0 -0
- {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/tests/test_runtime_credentials.py +0 -0
- {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/tests/test_session_credentials.py +0 -0
- {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/tests/test_silent_install.py +0 -0
- {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/tests/test_upgrade_observability.py +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"""forgexa-cli — Forgexa command-line client."""
|
|
2
|
-
__version__ = "1.41.
|
|
2
|
+
__version__ = "1.41.4"
|
|
@@ -1679,6 +1679,7 @@ def build_copilot_command(
|
|
|
1679
1679
|
model: str | None = None,
|
|
1680
1680
|
reasoning: str | None = None,
|
|
1681
1681
|
resume_session_id: str | None = None,
|
|
1682
|
+
disable_builtin_mcps: bool = False,
|
|
1682
1683
|
) -> list[str]:
|
|
1683
1684
|
"""GitHub Copilot CLI non-interactive JSON-streaming invocation.
|
|
1684
1685
|
|
|
@@ -1695,6 +1696,8 @@ def build_copilot_command(
|
|
|
1695
1696
|
"--output-format", "json",
|
|
1696
1697
|
"--allow-all",
|
|
1697
1698
|
]
|
|
1699
|
+
if disable_builtin_mcps:
|
|
1700
|
+
cmd.append("--disable-builtin-mcps")
|
|
1698
1701
|
if reasoning:
|
|
1699
1702
|
cmd += ["--effort", reasoning]
|
|
1700
1703
|
if resume_session_id:
|
|
@@ -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.41.
|
|
913
|
+
DAEMON_VERSION = "1.41.4"
|
|
914
914
|
|
|
915
915
|
|
|
916
916
|
def _detect_client_type() -> str:
|
|
@@ -1557,7 +1557,12 @@ def _normalize_ai_job_output(
|
|
|
1557
1557
|
if not raw_output:
|
|
1558
1558
|
return "", None
|
|
1559
1559
|
|
|
1560
|
-
if task_type not in {
|
|
1560
|
+
if task_type not in {
|
|
1561
|
+
"qa_scenario_generate_prompt",
|
|
1562
|
+
"qa_scenario_preview",
|
|
1563
|
+
"qa_script_preview",
|
|
1564
|
+
"test_script_generate",
|
|
1565
|
+
}:
|
|
1561
1566
|
return raw_output, None
|
|
1562
1567
|
|
|
1563
1568
|
extracted_output = _daemon_extract_agent_output(agent_id, raw_output)
|
|
@@ -5055,7 +5060,19 @@ class ProcessManager:
|
|
|
5055
5060
|
elif agent.agent_id == "kimi":
|
|
5056
5061
|
result = await self._run_kimi_code(agent, prompt, workspace_path, timeout, task.task_id, on_chunk)
|
|
5057
5062
|
elif agent.agent_id == "copilot":
|
|
5058
|
-
result = await self._run_copilot(
|
|
5063
|
+
result = await self._run_copilot(
|
|
5064
|
+
agent,
|
|
5065
|
+
prompt,
|
|
5066
|
+
workspace_path,
|
|
5067
|
+
timeout,
|
|
5068
|
+
task.task_id,
|
|
5069
|
+
on_chunk,
|
|
5070
|
+
disable_builtin_mcps=task.input_data.get("task_type") in {
|
|
5071
|
+
"test_script_generate",
|
|
5072
|
+
"qa_scenario_preview",
|
|
5073
|
+
"qa_script_preview",
|
|
5074
|
+
},
|
|
5075
|
+
)
|
|
5059
5076
|
else:
|
|
5060
5077
|
result = await self._run_generic(agent, prompt, workspace_path, timeout, task.task_id, on_chunk)
|
|
5061
5078
|
|
|
@@ -5869,6 +5886,7 @@ class ProcessManager:
|
|
|
5869
5886
|
self, agent: DiscoveredAgent, prompt: str, cwd: Path, timeout: int, task_id: str,
|
|
5870
5887
|
on_chunk: Any = None,
|
|
5871
5888
|
*,
|
|
5889
|
+
disable_builtin_mcps: bool = False,
|
|
5872
5890
|
_retry_without_effort: bool = False,
|
|
5873
5891
|
_isolated_copilot_home: str | None = None,
|
|
5874
5892
|
) -> TaskResult:
|
|
@@ -5994,6 +6012,7 @@ class ProcessManager:
|
|
|
5994
6012
|
prompt=_effective_prompt,
|
|
5995
6013
|
model=model_override,
|
|
5996
6014
|
reasoning=reasoning if not _retry_without_effort else None,
|
|
6015
|
+
disable_builtin_mcps=disable_builtin_mcps,
|
|
5997
6016
|
)
|
|
5998
6017
|
cmd = _prepare_agent_command(cmd)
|
|
5999
6018
|
|
|
@@ -6131,6 +6150,7 @@ class ProcessManager:
|
|
|
6131
6150
|
)
|
|
6132
6151
|
return await self._run_copilot(
|
|
6133
6152
|
agent, prompt, cwd, timeout, task_id, on_chunk,
|
|
6153
|
+
disable_builtin_mcps=disable_builtin_mcps,
|
|
6134
6154
|
_retry_without_effort=True,
|
|
6135
6155
|
_isolated_copilot_home=_isolated_copilot_home,
|
|
6136
6156
|
)
|
|
@@ -11013,6 +11033,15 @@ class RuntimeDaemon:
|
|
|
11013
11033
|
|
|
11014
11034
|
# 2. Prepare workspace (using project info + requirement branch)
|
|
11015
11035
|
full_prompt = f"{system_prompt}\n\n{user_prompt}" if system_prompt else user_prompt
|
|
11036
|
+
task_timeout = settings.AGENT_TIMEOUT
|
|
11037
|
+
if task_type in {"qa_scenario_preview", "qa_script_preview"}:
|
|
11038
|
+
try:
|
|
11039
|
+
task_timeout = min(
|
|
11040
|
+
max(int(input_ctx.get("timeout_seconds", settings.AGENT_TIMEOUT)), 30),
|
|
11041
|
+
settings.AGENT_TIMEOUT,
|
|
11042
|
+
)
|
|
11043
|
+
except (TypeError, ValueError):
|
|
11044
|
+
pass
|
|
11016
11045
|
fake_task = TaskInfo(
|
|
11017
11046
|
task_id=job_id,
|
|
11018
11047
|
# Reuse a stable workspace key when the server provides one so
|
|
@@ -11022,8 +11051,8 @@ class RuntimeDaemon:
|
|
|
11022
11051
|
node_type="ai_job",
|
|
11023
11052
|
agent_type=agent_type,
|
|
11024
11053
|
input_prompt=full_prompt,
|
|
11025
|
-
input_data={},
|
|
11026
|
-
timeout_seconds=
|
|
11054
|
+
input_data={"task_type": task_type},
|
|
11055
|
+
timeout_seconds=task_timeout,
|
|
11027
11056
|
max_retries=0,
|
|
11028
11057
|
retry_count=0,
|
|
11029
11058
|
project=project_info,
|
|
@@ -11260,7 +11289,11 @@ class RuntimeDaemon:
|
|
|
11260
11289
|
|
|
11261
11290
|
# 5. Report completion
|
|
11262
11291
|
# For deliverables: allow up to 200K chars (full document); others: last 20K
|
|
11263
|
-
max_content =
|
|
11292
|
+
max_content = (
|
|
11293
|
+
200000 if task_type == "deliverable_generate"
|
|
11294
|
+
else 50000 if task_type in {"qa_scenario_preview", "qa_script_preview"}
|
|
11295
|
+
else 20000
|
|
11296
|
+
)
|
|
11264
11297
|
normalized_output, scenario_items = _normalize_ai_job_output(
|
|
11265
11298
|
task_type=task_type,
|
|
11266
11299
|
agent_id=agent.agent_id,
|
|
@@ -11272,7 +11305,7 @@ class RuntimeDaemon:
|
|
|
11272
11305
|
scenario_ids=input_ctx.get("scenario_ids", []),
|
|
11273
11306
|
workspace_path=workspace_path,
|
|
11274
11307
|
)
|
|
11275
|
-
if task_type
|
|
11308
|
+
if task_type in {"qa_scenario_generate_prompt", "qa_scenario_preview", "qa_script_preview"}:
|
|
11276
11309
|
output_content, scenario_items = _prepare_ai_job_output(
|
|
11277
11310
|
task_type=task_type,
|
|
11278
11311
|
agent_id=agent.agent_id,
|
|
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
|