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