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.
Files changed (27) hide show
  1. {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/PKG-INFO +1 -1
  2. {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli/__init__.py +1 -1
  3. {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli/agent_core.py +3 -0
  4. {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli/daemon.py +40 -7
  5. {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli.egg-info/PKG-INFO +1 -1
  6. {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/pyproject.toml +1 -1
  7. {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/README.md +0 -0
  8. {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli/_build_config.py +0 -0
  9. {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli/_local_bind.py +0 -0
  10. {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli/autoupgrade.py +0 -0
  11. {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli/main.py +0 -0
  12. {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli/py.typed +0 -0
  13. {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli.egg-info/SOURCES.txt +0 -0
  14. {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli.egg-info/dependency_links.txt +0 -0
  15. {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli.egg-info/entry_points.txt +0 -0
  16. {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli.egg-info/requires.txt +0 -0
  17. {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/forgexa_cli.egg-info/top_level.txt +0 -0
  18. {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/setup.cfg +0 -0
  19. {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/tests/test_auth_and_runtime_commands.py +0 -0
  20. {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/tests/test_autoupgrade.py +0 -0
  21. {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/tests/test_check_command.py +0 -0
  22. {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/tests/test_expiry_warnings_and_revoke.py +0 -0
  23. {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/tests/test_local_bind_commands.py +0 -0
  24. {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/tests/test_runtime_credentials.py +0 -0
  25. {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/tests/test_session_credentials.py +0 -0
  26. {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/tests/test_silent_install.py +0 -0
  27. {forgexa_cli-1.41.2 → forgexa_cli-1.41.4}/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.41.2
3
+ Version: 1.41.4
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.41.2"
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.2"
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 {"qa_scenario_generate_prompt", "test_script_generate"}:
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(agent, prompt, workspace_path, timeout, task.task_id, on_chunk)
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=settings.AGENT_TIMEOUT,
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 = 200000 if task_type == "deliverable_generate" else 20000
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 == "qa_scenario_generate_prompt":
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,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: forgexa-cli
3
- Version: 1.41.2
3
+ Version: 1.41.4
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.41.2"
3
+ version = "1.41.4"
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