chore: 去掉 generic_steps 的默认步骤 + 重试失败带上真实原因

- tasks/generic/task.py:DEFAULT_PARAMS 只留 max_duration,**不再内置示例步骤**
  (步骤只能由前端编辑器产出;此前默认的"打开抖音→循环看视频"只有后端在用,
  编辑器新建任务本来就是空的,等于埋了个和界面不一致的隐性默认值)
- 空步骤不再静默空跑:worker 立即抛错「通用步骤任务没有可执行步骤…」,
  设备表「最近错误」能看到(此前会走完 0 步当成功)
- core/task_manager.py:重试耗尽的 last_error 现在带上最后一次的真实失败原因,
  不再只有"重试N次失败"(用户看不到为什么失败);max_attempts=1 显示"执行失败"
  而非费解的"重试1次失败";长度截断 200 字符
- 文档:TASK_DEV §2.10 说明无默认步骤 + 空步骤会报错;API.md 的 task_types 示例
  改 default_params={"max_duration":0},POST /api/jobs 补「steps 要一起传」提示

自测(全通过):default_params 无 steps;无步骤任务真跑一次 → 设备错误信息完整含原因;
有步骤任务(wait 1s)真跑一次 → status=done 无错误;临时任务验完已删,任务集合复原
This commit is contained in:
2026-09-10 21:50:18 +08:00
parent 98cdc39224
commit f4b5316436
4 changed files with 24 additions and 17 deletions
+6 -15
View File
@@ -104,21 +104,8 @@ STEP_TYPES = [
DEFAULT_PARAMS = {
"max_duration": 0, # 最大运行时长(秒),0=不限时
"steps": [ # 默认示例:打开抖音→循环(看视频→滑动)
{
"id": "step_1", "type": "open_app", "label": "打开抖音",
"params": {"package": "com.ss.android.ugc.aweme", "wait_home": True, "home_feature": "拍摄"},
},
{
"id": "step_2", "type": "loop", "label": "循环看视频",
"params": {"max_iterations": 20, "children": [
{"id": "step_2_1", "type": "wait", "label": "观看视频",
"params": {"min": 5.0, "max": 35.0}},
{"id": "step_2_2", "type": "swipe", "label": "上滑下一个",
"params": {"direction": "up", "duration_min": 0.25, "duration_max": 0.50}},
]},
},
],
# 注意:**没有默认 steps**。步骤由前端步骤编辑器编排产出,新建任务时从零开始拖;
# 缺 steps 的任务执行时会明确报错(见 run_task),不会静默空跑。
}
@@ -157,6 +144,10 @@ class GenericStepsWorker(BaseWorker):
def run_task(self, d):
"""按 steps 顺序执行。loop 步骤递归执行其 children。"""
if not self.steps:
# 任务没配步骤(DEFAULT_PARAMS 不含默认步骤,步骤只能由编辑器产出):
# 明确报错而不是"跑完 0 步"当成功——设备表/任务页会显示该错误
raise ValueError("通用步骤任务没有可执行步骤:请在「任务」页编辑该任务并添加步骤")
self._start_timer()
self.set_action("开始执行步骤链")
self.set_progress(done=0, total=0, unit="操作",