feat: add guided exploration and share user-started MCP backend

This commit is contained in:
chenmingxuan committed 2026-10-16 18:32:46 +08:00
1 parent f86db1ced6
commit ee256ad7ce
144 files changed
+8625 -2075

No files matched your search

+124
View File
@@ -0,0 +1,124 @@
# 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。
- 工作区不再另设「探索对话」侧栏;主区域按时间显示交流和所选执行轮次的步骤。
- 底部输入框服务当前任务:普通模式发指导,探索模式交流、回答问题、人工示范与暂停继续。新任务从首页创建。
- 任务范围新增探索筛选;后端分页前合并同次探索的执行记录,复跑任务保持独立。
- 用例结果默认紧凑卡片;按需展开编辑器和复跑设置。