Files

125 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ARTEMIS 2.0.0 探索模式设计
状态:2026-10-16 已实现并完成确定性回归与核心实机流程验证;实测范围和仍需补充的组合验证见第 9 节。本文与 [插件总体设计](2.0.0-plugins.md)、[插件证据设计](2.0.0-plugin-evidence.md) 配套。
## 1. 目标与已确认范围
用户提供粗略的复杂测试流程,由 ARTEMIS 自主探索;用户可随时聊天纠正、回答澄清问题或录制人工示范。一次探索最终产出一个可复用、可编辑的测试用例提示词,供 Flash/Pro 再次执行,并可加入既有批次。探索通过与提示词复跑通过分开标记。
- 在 Flash、Pro 外增加独立的“探索”入口。自主推进,关键预期缺失、阻碍或需要用户决策时提问;不要求用户事先写完整用例。
- 新增 `gpt-6.1-sol`、`gpt-6-astra` 模型预设,探索默认 `gpt-6.1-sol` / `high`。探索执行、示范分析、用例提炼默认使用独立保存的探索配置,不改 Flash/Pro 默认值。
- 同一会话兼容网页与 MCP。外部 Agent 能发起、查看、指导、回答、控制示范、获取用例和复跑;读取状态不能触发新任务。
- 默认每段主动执行预算 1800 秒;模型调用、设备动作及示范分析计入,排队、等待回复及人工示范不计入。耗尽后保存并暂停,不因超时标记执行或测试失败。用户继续后开启下一段预算,保留累计耗时与续跑次数。
- 人工示范暂停模型、保留相应设备/插件资源占用;确认安全停止后才显示可以操作。默认当前操作端,可选择安卓、电脑、两者。独立于普通录屏开关。
- 点击“操作完成”后停止示范片段、分析实际操作与结果,展示简短摘要;证据明确则恢复探索,关键不确定点先询问。禁止猜测画面无法确认的输入或中间动作。
- 示范默认最长 900 秒,提前 60 秒提示,可延长。超时保存录像并暂停,释放资源,不自动认定示范完成或继续。支持取消示范。
- 录像/分析失败保留原始证据,明确失败原因,可通过文字说明继续;不能将缺失录像当作已分析。沿用高效留档配置及编码回退,不录音。
- 完成后自动保存一个用例,包含目标、前置条件、已验证路径、预期结果和必要的异常处理。变量明确标注,不复制试错动作、密钥或不可靠坐标。
- 会话结束后仍可交流和修订,保留用例版本。复跑固定版本、运行模式和模型;失败证据可带回会话改进。完成运行释放设备,再操作须重新排队并观察。
## 2. 用户流程
选择探索并描述流程 → 自主执行/澄清 → 聊天指导或人工示范 → 按原始目标及确认后的指导验收 → 生成用例 → 编辑/复制/加入批次/选择模型复跑。
主页面沿用任务工作区和统一步骤时间线,增加探索对话、人工示范状态、用例版本卡片。队列标签区分执行状态与验收状态。示范的安卓和电脑证据有独立来源;双来源按同一任务时间轴对齐,不能互相充当操作证据。
## 3. 架构与数据所有权
- 调度继续由 `TaskQueueService` 负责,资源互斥继续由 `DeviceExecutionLock` 负责。探索使用 Pro 的持续计划、工具执行、历史压缩和 Checker,不另建业务调度器。
- 探索会话、消息、示范元数据、不可变用例版本和关联运行使用现有 `AutomationStore` 数据库;新增记录类型,事务更新,不能对整份会话做无保护的读改写。
- 会话 ID 与实际执行的任务 ID 分离。一份会话可以关联多段探索和多次复跑,但每次真实运行仍有独立 trace;普通暂停/续跑保持原有任务内上下文。完成后的修订不改历史执行或已发布的版本。
- 队列 admission 使用 `request_id` 幂等;开始/结束示范、回复和生成用例也有请求标识。Web 与 MCP 调用同一个领域服务,不各自实现状态转换。
- 执行进程只在安全检查点响应接管。模型与只读调用可取消,已开始的设备动作先安全结束。用户指导保存来源、提交、读取时间;读取不宣称已经落实。
- 增加探索专用提问工具,让模型明确说明问题、推荐答案和阻碍原因;等待通过现有任务控制机制释放设备并暂停计费时钟。回复后重新获取资源、重新观察,继续原计划。
- 用例提炼读取原目标、指导、计划、最终验收、步骤及示范摘要,调用 Responses 结构化输出。只能在有实际验收证据时标记探索通过;提炼失败可重试提炼,不重提业务任务。
## 4. 状态与超时
会话状态与任务执行状态分开:`draft`、`running`、`waiting_user`、`demonstrating`、`analyzing_demo`、`paused`、`completed`、`cancelled`。`completed` 是探索运行结束,是否通过另读实际 `test_result`。
- `running → waiting_user`:保存问题,在安全点停下,收尾普通录像,释放资源。
- `running → demonstrating`:停止模型,保留资源,启动选择来源的示范录像;界面在录制真正就绪后显示录制中。
- `demonstrating → analyzing_demo`:用户结束,先完成媒体收尾,分析指定片段;分析期间不允许设备动作并计入主动预算。
- 分析成功且无关键疑点,重新观察后回到 `running`;存在疑点则 `waiting_user`;失败保留片段并等待文字说明。
- 示范取消/超时保存已有媒体,进入 `paused` 并释放资源;不自动提交成功示范。
- 主动预算耗尽请求协作暂停,保存原因 `execution_budget`;不能调用普通任务超时失败收尾。恢复重置当前段预算,同时累加历史主动耗时。
- 服务/执行进程崩溃保留会话和已有证据,显示中断、可从保存的上下文继续;不能把没有存活进程的状态显示为仍在录制。恢复创建关联运行,不假装恢复已丢失的内存状态。
- 终止仍为明确的取消操作,释放资源、关闭录制进程;自动恢复仅指执行状态,不恢复用户业务配置。
## 5. 示范媒体与分析
复用 Android scrcpy 与电脑插件 FFmpeg 录制、归档参数、时间映射、切片和分析。普通任务的 `VideoAnalyzer` 仍从活动录制查询;人工示范通过 `SavedVideoSource` 分析已保存片段,并显式传入来源与时间范围,不将电脑文件伪装成 Android 活动录像。
- 示范文件放在所属 trace 的 `evidence/demonstrations/<id>/`,记录来源、实际起止、任务偏移、编码、尺寸、媒体验证及分析状态。所有读取受 trace 路径边界约束。
- 开始示范时协调已有录制,避免同一来源并行启动两个录制进程;结束后恢复原任务的录屏策略。
- 双来源分析带明确来源标识和时间偏移,只对有真实覆盖的片段提取信息。长视频沿用分片与预算,不一次无界塞入模型。
- 分析输出包含可观察步骤、结果、关键疑点、证据时间范围。摘要进入探索对话与模型上下文,原视频继续可回看、可导出。
- 生成或修订提示词不把一次人工示范当作模型独立执行成功;复跑记录保留是否有用户介入。
## 6. 接口与配置
- 领域操作:创建/获取/列出会话;发送消息/回答问题;开始、结束、延长、取消示范;暂停、继续;保存/获取用例版本;生成/修订用例;按指定版本复跑;加入批次。
- HTTP 与 MCP 通过同一服务分派。MCP 支持分页读取消息及状态;敏感凭据沿用现有配置,接口不接收或回显密钥。
- 探索默认配置集中在配置层,开发与打包 JSONC、环境示例、网页和 MCP 配置保持一致。模型预设不是新的模型传输分支。
- 单个会话固定生效配置;后续修改默认值只影响新会话。复跑使用用户选择的 Flash/Pro 配置,不暗中沿用探索高级模型。
- 报告/导出保留会话目标、实际运行、示范来源、用例版本、探索验收与复跑验收关联;批次继续使用原有 TaskCase 结构。
## 7. 验收清单(完成必须有证据)
- [x] 网页入口、独立模型配置与两项预设;默认 sol/high,保存默认值不会改已有会话(配置、服务及浏览器验证)。
- [x] 复用既有队列和资源锁,完成真实安卓探索(服务契约、资源生命周期测试及实机验证)。
- [x] 提问、等待、回复、指导、消息顺序和幂等(实机提问与网页交互,MCP 路由契约回归)。
- [x] 安全点接管与资源保留、普通录屏暂停后恢复(生命周期回归;安卓示范实测)。
- [x] 安卓、电脑单来源录像保存并分析;失败保留源文件、保留疑点,毫秒范围与长片段尾部取样有回归。
- [x] 示范默认 900 秒、提前提示、幂等延长、超时保存与释放(模拟时钟和前端测试;未等待真实 15 分钟)。
- [x] 主动预算排除等待/示范,耗尽后暂停,继续保留累计时间且重复请求不重开任务(回归及 30 秒实测)。
- [x] 自动生成一个用例,编辑保存 v2,查看 v1 不受覆盖(真实模型和网页验证,版本冲突回归)。
- [x] 固定版本复跑;实测 v2 Flash 复跑通过,Pro 参数与独立模型配置有契约覆盖。
- [x] 完成后的讨论不启动设备任务;孤立生成任务、工作进程状态与中断恢复有回归。
- [x] Web/MCP/SDK 共享服务;工具注册、CLI 白名单、Skill 和文档同步,契约测试通过。
- [x] 加入批次仅创建草稿且支持幂等;保存设备/插件绑定,不继承探索高级模型(实际按钮与回归)。
- [x] 实际下载包包含对话、版本与运行关联,人工示范视频索引指向包内文件。
- [x] 隔离 Python/Angular 回归、Ruff、质量基线、核心 Pyright、前端构建,以及浏览器关键交互检查。
以上勾选表示已按括号内方法验证,不代表所有设备、模型和组合都已实测。发布前补充项单列于第 9 节。
## 8. 实施顺序与验证隔离
1. 数据契约、配置、事务存储及共享服务;先覆盖状态转换、幂等、版本和预算。
2. 接入 Pro、提问/指导、超时暂停和用例提炼;打通 Web/MCP 同一运行。
3. 人工示范资源生命周期、指定来源媒体分析、归档与失败恢复。
4. 工作区交互、版本/复跑/批次入口,MCP/SDK/文档同步。
5. 确定性回归、浏览器联调、真实设备与电脑示范闭环验收。
所有测试在导入 Python 项目模块前设置独立 `ARTEMIS_APP_DIR`、`ARTEMIS_TRACES_DIR`、`DATA_ENGINE_DB_PATH`。不写用户历史、改用户模型默认值或调用未授权的业务任务。当前开发仅在 `codex/v2.0.0-plugins` 工作树进行;不自动推送或发布。
## 9. 2026-10-16 验证记录与边界
核心实测使用隔离数据目录和用户指定的 Android 模拟器。`gpt-6.1-sol / high` 实际完成设置首页搜索入口操作,Checker 验收通过后自动生成 v1;在网页修改为 v2,再由 Flash 使用 `gpt-6-luna / high` 独立执行,通过且准确关联 v2。两次通过结果分别显示,不由探索成功推定复跑成功。
另外一个会话验证了模型提问、等待、人工示范与录像留存。安卓约 105 秒示范完成保存;修复片段时间精度后重新分析成功。分析仍明确表示无法从画面还原的操作,未将这次示范自动算作独立验证通过。结束后的真实模型讨论没有创建设备任务。
Windows 电脑单来源录制与保存片段分析通过:约 4.47 秒、1280×720、H.264、约 150 KB。实际 4K 桌面验证发现软件编码缓冲使首帧迟迟不落盘,已通过低延迟编码设置修复。该测试使用本地已验证插件清单驱动录制模块,不代表重新验证了插件安装流程。
主动执行预算用独立会话改为 30 秒:约 30.8 秒进入 `execution_budget` 暂停,执行结果和测试结果均为空,没有标为失败。继续后仍是同一运行,预算段增加一次;相同请求重复发送没有再次续接。随后主动停止该测试,取消状态来自测试收尾。产品默认仍是 1800 秒。
浏览器验证覆盖旧版本查看、编辑保存、复跑、批次草稿与独立验收展示;实际导出验证覆盖成功探索的 v1/v2 索引及安卓示范录像。检查到的浏览器连接错误发生于测试服务器主动重启期间。
自动检查:Python 默认回归 2640 通过、2 跳过、8 排除;Angular 228 通过,生产构建通过;Ruff 检查和格式、质量基线、核心 Pyright、Git 空白检查通过。Python 中既有 Pillow `getdata` 弃用警告不影响结果。
尚未实测的发布验证项:
- [ ] 安卓与电脑同时示范的完整双来源录制、分析、恢复流程;已有来源契约和基础生命周期回归,不能替代组合实测。
- [ ] 真实持续 15 分钟的示范上限与长时间资源占用;当前覆盖来自模拟时钟和状态测试。
- [ ] 重载已安装 MCP 后,由外部 Agent 完整调用新工具;当前 Web、MCP、SDK 的共享路由和参数已通过契约测试。
- [ ] 更复杂业务用例、多设备、多显示器及长时间连续探索压测;单个设置入口用例只证明核心闭环可用。
## 已确认的工作区交互调整
- 首页并列 Flash / Pro / 探索;探索独立设置模型,默认 sol / high。
- 工作区不再另设「探索对话」侧栏;主区域按时间显示交流和所选执行轮次的步骤。
- 底部输入框服务当前任务:普通模式发指导,探索模式交流、回答问题、人工示范与暂停继续。新任务从首页创建。
- 任务范围新增探索筛选;后端分页前合并同次探索的执行记录,复跑任务保持独立。
- 用例结果默认紧凑卡片;按需展开编辑器和复跑设置。