myagent-ai 1.15.38 → 1.15.41
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.
- package/agents/main_agent.py +10 -3
- package/core/deps_checker.py +21 -1
- package/main.py +3 -0
- package/package.json +1 -1
package/agents/main_agent.py
CHANGED
|
@@ -642,10 +642,12 @@ class MainAgent(BaseAgent):
|
|
|
642
642
|
stream_callback,
|
|
643
643
|
)
|
|
644
644
|
|
|
645
|
-
# Step 4.2: <output> 块完整性检查
|
|
646
|
-
|
|
645
|
+
# Step 4.2: <output> 块完整性检查
|
|
646
|
+
# 仅在块不完整且解析未提取到任何有效内容时才触发修正
|
|
647
|
+
# 如果解析器已经从非完整块中提取到有效内容(response/tools等),则正常继续
|
|
648
|
+
if not parsed.output_block_complete and not parsed.parse_success:
|
|
647
649
|
logger.warning(
|
|
648
|
-
f"[{task_id}] <output>
|
|
650
|
+
f"[{task_id}] <output> 块不完整且未提取到有效内容,"
|
|
649
651
|
f"跳过本轮输出和工具执行"
|
|
650
652
|
)
|
|
651
653
|
if _xml_correction_retries < 1:
|
|
@@ -679,6 +681,11 @@ class MainAgent(BaseAgent):
|
|
|
679
681
|
stream_callback,
|
|
680
682
|
)
|
|
681
683
|
break
|
|
684
|
+
elif not parsed.output_block_complete and parsed.parse_success:
|
|
685
|
+
# 块不完整但已提取到有效内容,记录日志但正常继续
|
|
686
|
+
logger.info(
|
|
687
|
+
f"[{task_id}] <output> 块不完整但已提取到有效内容,跳过修正直接处理"
|
|
688
|
+
)
|
|
682
689
|
|
|
683
690
|
# Step 4.5: 解析失败处理 — 回退给 LLM 修正或提取周边文本
|
|
684
691
|
if not parsed.parse_success:
|
package/core/deps_checker.py
CHANGED
|
@@ -140,6 +140,11 @@ def _get_pip_index_args() -> List[str]:
|
|
|
140
140
|
return []
|
|
141
141
|
|
|
142
142
|
|
|
143
|
+
def _is_skip_deps() -> bool:
|
|
144
|
+
"""检查是否设置了跳过依赖安装的环境变量"""
|
|
145
|
+
return os.environ.get("MYAGENT_SKIP_DEPS") == "1"
|
|
146
|
+
|
|
147
|
+
|
|
143
148
|
def _pip_install(pip_names: List[str], category: str = "") -> Tuple[bool, str]:
|
|
144
149
|
"""
|
|
145
150
|
使用当前 Python 解释器执行 pip install。
|
|
@@ -147,6 +152,11 @@ def _pip_install(pip_names: List[str], category: str = "") -> Tuple[bool, str]:
|
|
|
147
152
|
Returns:
|
|
148
153
|
(success, message)
|
|
149
154
|
"""
|
|
155
|
+
# --skip-deps 时完全跳过任何 pip 安装
|
|
156
|
+
if _is_skip_deps():
|
|
157
|
+
packages = " ".join(pip_names)
|
|
158
|
+
logger.debug(f"跳过依赖安装(--skip-deps): {packages}")
|
|
159
|
+
return True, f"已跳过: {packages}"
|
|
150
160
|
python = _get_python_executable()
|
|
151
161
|
packages = " ".join(pip_names)
|
|
152
162
|
|
|
@@ -267,6 +277,9 @@ def check_and_install_deps(
|
|
|
267
277
|
"browser": str, # ChromeDev MCP 状态
|
|
268
278
|
}
|
|
269
279
|
"""
|
|
280
|
+
# --skip-deps 安全网:即使调用方忘记检查,也不会执行安装
|
|
281
|
+
skip_deps = _is_skip_deps()
|
|
282
|
+
|
|
270
283
|
stats = {
|
|
271
284
|
"checked": 0,
|
|
272
285
|
"available": 0,
|
|
@@ -322,7 +335,9 @@ def check_and_install_deps(
|
|
|
322
335
|
if not silent:
|
|
323
336
|
logger.info(f"依赖缺失: {dep.import_name} (pip: {dep.pip_name}, 分类: {dep.category})")
|
|
324
337
|
|
|
325
|
-
if not auto_fix or stats["missing"] == 0:
|
|
338
|
+
if not auto_fix or stats["missing"] == 0 or skip_deps:
|
|
339
|
+
if skip_deps and stats["missing"] > 0 and not silent:
|
|
340
|
+
logger.info(f"跳过 {stats['missing']} 个缺失依赖的安装(--skip-deps)")
|
|
326
341
|
return stats
|
|
327
342
|
|
|
328
343
|
# 第二遍:批量安装缺失的依赖(按分类分批)
|
|
@@ -377,6 +392,11 @@ def ensure_skill_deps(skill_category: str) -> bool:
|
|
|
377
392
|
Returns:
|
|
378
393
|
True 如果所有依赖已就绪(包括刚安装的)
|
|
379
394
|
"""
|
|
395
|
+
# --skip-deps 时跳过懒加载依赖安装
|
|
396
|
+
if _is_skip_deps():
|
|
397
|
+
logger.debug(f"跳过技能依赖检查(--skip-deps): {skill_category}")
|
|
398
|
+
return True
|
|
399
|
+
|
|
380
400
|
category_map = {
|
|
381
401
|
"browser": {"browser"},
|
|
382
402
|
"gui": {"gui"},
|
package/main.py
CHANGED
|
@@ -692,6 +692,9 @@ def create_tray_icon(app: MyAgentApp, web_port: int = 8767):
|
|
|
692
692
|
from PIL import Image, ImageDraw, ImageFont
|
|
693
693
|
except Exception:
|
|
694
694
|
# pystray 可能因缺少 GUI 环境 (X11/Wayland) 或未安装而失败
|
|
695
|
+
if os.environ.get('MYAGENT_SKIP_DEPS') == '1':
|
|
696
|
+
logger.info("pystray/PIL 未安装,跳过自动安装(--skip-deps)")
|
|
697
|
+
return None
|
|
695
698
|
try:
|
|
696
699
|
from core.deps_checker import _pip_install
|
|
697
700
|
logger.info("pystray/PIL 未安装,正在自动安装...")
|