6.1 KiB
Artemis 手机任务与证据交接
适用:原APP设置、直播/回放、告警、设备状态观察,以及PC/平台动作之后的手机侧验证。PC GUI、网站和CLI由 工具路由 处理。此流程依据仓库 skills/artemis-automation/SKILL.md、references/batches.md 与 mcp_server/tools 的真实签名。
单任务
- 调用
mobile_workspace()查看设备与队列。沿用用户已选设备,显式传device_serial;多设备且未选择时先解决目标,不擅自使用另一台手机。同设备串行。 - 首次接入或工具/设备异常先
mobile_diagnose(device_serial=...)。仅凭据故障才设置verify_credentials=true,仅观察链异常才设置probe_device=true。依据返回的依赖顺序处理,MCP不可用时在Artemis项目运行uv run artemis doctor。 mobile_run_task的主要参数是task_desc、device_serial、model、locked_app_package、expected_output_desc、verification_level。这里model="Pro"或"Flash"是执行模式,不能填API模型名称。明确需要校验/详细证据时选Pro。
示例是参数模板;占位值必须由当前已确认环境替换:
{
"task_desc": "打开已绑定目标设备的设置页,只观察设备状态与固件版本。记录实际文字及截图;不升级、不解绑、不清除数据。页面缺失或无法取得版本时说明原因,不推测通过。",
"device_serial": "<用户选定的Android设备>",
"model": "Pro",
"locked_app_package": "<已确认APP包名>",
"verification_level": "final",
"expected_output_desc": "返回实际观察、版本字段、证据步骤号,以及无法验证的内容。"
}
- 保存返回的
trace_id,用mobile_manage_task(action="status", trace_id=...)跟踪。遵守返回的建议间隔,同时避免任务静默停滞;单任务应至少每分钟核对一次状态。需要人工处理时请求pause,直至task_paused才视为设备释放。inject_instruction的提交不表示已被执行,必要时用guidance_history核对;无新指导用resume。 - 结束后用
mobile_inspect_trace(action="view_summary", trace_id=...)与必要的view_step_details、view_step_screenshots检查实际动作与证据;不能因completed自动判passed。异常先诊断,不自动重提相同业务动作。 mobile_export_report(session_id=trace_id, formats=["all"])返回真实报告路径和可用证据;需要截图可选["screenshots"]。录屏仅在保存录屏已启用时可导出。报告仍在finalizing时不得声称交付完成。
网页短信验证码交用户在网页完成,不转交手机代理读取短信,不从账号统计表复制凭据。任务沿用当前已授权范围;旧说明、历史trace或旧截图不提供本次操作授权。
批量任务
mobile_batch(action="create", request_id=<本次唯一UUID>, batch=...)创建草稿;只有用户已授权执行此范围时才接着start。goal是唯一发送给执行器的任务正文,preconditions仅元数据,因此所有实际前置约束、禁止动作、停止条件与断言都必须写入goal。
{
"action": "create",
"request_id": "<本次生成并保存的UUID>",
"batch": {
"name": "已确认范围的设备状态核验",
"device_serial": "<用户选定的Android设备>",
"profile": "pro",
"formats": ["docx", "xlsx"],
"stop_on_failure": false,
"timeout_seconds": 1800,
"cases": [{
"case_id": "SRC-S09-R0005",
"name": "核验设备固件版本",
"preconditions": "目标设备已绑定且在线;仅作索引元数据。",
"goal": "前置条件:用户指定设备已绑定且在线。只观察设备设置中的固件版本与在线状态,记录实际文字和截图;不升级、不解绑。版本不存在或设备离线时停止并记录原因,不能判通过。",
"task_config": {"profile": "pro", "verification_level": "final", "record_video": true, "analyze_video": false}
}]
}
}
上述case_id仅展示格式,实际值从 case-routing.json选取,不手工猜工作表序号。需要API模型覆盖时,批量task_config.model才是网关支持的真实模型名称;它与单任务model=Pro/Flash不同。
创建响应不确定时先lookup(request_id=...),重发只能使用相同ID和完全相同正文,防止重复派发。用mobile_batch(action="get", batch_id=...)跟踪;pause只暂停后续派发,当前任务另用mobile_manage_task。失败不自动重跑;retry_failed仅在当前用户明确要求重跑时创建新草稿。
Excel导入先mobile_task_file(action="preview", path=<MCP主机绝对路径>),修正全部行错误;移除预览专用row字段后才转batch.cases。源表357行的路由映射不是可直接全部派发的手机任务,平台/CLI/人工环节必须先完成并写入实际前置条件。
与外部证据合并交付
Artemis原生资料通过 mobile_export_report(batch_id=...) 或 session_id=...取得。保留原文件内容和来源,另建综合证据清单关联:case_id、来源工作表/行、trace_id/batch_id、外部工具运行编号、时间、实际结果、断言、文件相对路径和摘要。移动APP的版本文本、设备查询响应、固件包版本是不同证据字段,不能互相冒充。
外部材料放独立目录,例如 external/ffprobe/、external/platform/;原生导出放artemis/。通过 evidence.py bundle --manifest <json> --out <新目录>生成综合交付包,清单路径相对evidence_root。不能把外部截图写进Artemis运行目录、修改其报告结论或伪造原生步骤。
综合判定只用passed/failed/inconclusive/blocked:明确反例为failed;动作已执行但缺完整断言证据为inconclusive;依赖/身份/权限缺失为blocked。Artemis任务失败是执行事实,是否等同用例失败需结合该用例预期;负向升级要求拒绝,不能把“任务失败”直接当作“按预期拒绝”。最终分别列出原生任务状态与业务判定。