feat(plugins): add source-aware evidence and recording timelines

This commit is contained in:
chenmingxuan committed 2026-10-16 10:20:11 +08:00
1 parent 72ff342605
commit ef7af9988e
61 files changed
+3847 -108

No files matched your search

+6
View File
@@ -69,3 +69,9 @@ Flash 和 Pro 默认复用只读 Checker,以任务提示词和用户指导中
`mobile_run_task(runtime_overrides={"timeout_seconds":1800,"observation_timeout_seconds":60,"observation_max_attempts":3,"device_command_timeout_seconds":10,"action_failure_attempts":3})` 可为单任务覆盖执行保护;其中 `model` 是 API 模型名,外层 `model` 仍是 Flash/Pro 模式。相同字段也支持批次的 `task_config`。全局默认通过网页功能配置或明确授权的 `mobile_config(section="capabilities", changes={"task_timeout_seconds":1800}, persist_defaults=true)` 保存,对后续任务生效,不接受密钥。
任务已经产生最终结果,但 SDK 线程或资源清理仍卡住时,默认最多再等待 30 秒后回收工作进程,避免继续占用队列。全局可用 `ARTEMIS_WORKER_CLEANUP_TIMEOUT_SECONDS` 或功能配置的 `worker_cleanup_timeout_seconds` 调整,任务 JSON 同名字段可覆盖。原有结果与截图保留,未完成保存的录屏尽力恢复。
## 插件证据与留档参数
2.0.0 插件协议与可运行示例见 [开发规则](plugin-development.md)。单任务和批次全部资料包含各来源截图/录像、插件附件及包内证据索引。
通过 `mobile_config(section="capabilities")` 可读取 `recording` 参数;用户授权后可保存全局默认。单任务用 `runtime_overrides={"recording":{"codec":"h264","computer_scope":"window","max_long_edge":1280,"fps":15}}`,批次在 `task_config.recording` 提供同样对象。JSON 配置的 `agent.recording` 覆盖环境默认;不要把录像参数当作模型截图参数。录屏开关继续独立且默认关闭。
+21 -11
View File
@@ -1,6 +1,6 @@
# ARTEMIS 2.0.0:插件步骤、录像与开发规范
状态:2026-10-15 用户已确认设计,待实现。本文补充 [2.0.0 总体方案](2.0.0-plugins.md),不代表运行代码已具备这些能力。本轮只更新设计文档。
状态:2026-10-15 已按确认方案实现于 2.0.0 开发分支,确定性回归和短时集成验证通过;长程实机验收待完成,未发布。本文补充 [2.0.0 总体方案](2.0.0-plugins.md)。接口、配置和插件接入方式见 [开发规范](../plugin-development.md)。
本次确认覆盖统一步骤、跨端录像、证据导出和插件开发规则。用户对审阅稿补充了三条约束:录像以高效留档为主;第三方插件和 Skill 必须按 ARTEMIS 规则适配;不自动恢复业务环境,恢复需求由任务提示词表达。
@@ -31,7 +31,7 @@
- 优先评估 H.265/HEVC,优先利用可用的硬件编码能力;限制分辨率、帧率和目标码率,不默认保存原生高分辨率、高帧率视频。
- 编码能力、实际录制和网页播放兼容性必须验证;保留 H.264 回退,记录最终采用的编码及回退原因,不因强制 H.265 阻断任务。
- 实现时以长边不超过 1280、最高 15 fps、H.265 约 1 Mbps / H.264 约 1.5 Mbps 作为初始试验档位。这些是待测候选值,不是已验证或已生效的默认值;根据中文界面可读性、快速动作、CPU/GPU 占用和文件大小确定最终留档默认值。
- 开发版默认长边不超过 1280、最高 15 fps、H.265 目标 1 Mbps / H.264 1.5 Mbps。Windows 短时窗口录制已验证两种编码及暂停恢复;这些是留档初始默认值,长程负载、快速动作及多屏仍需发布前验证,不据短样本宣称长期性能。
- 优先录制时直接采用留档参数,避免任务结束或打包下载时再全量转码。已有合适片段尽量不重复编码。
- 默认只保留一套留档视频,不同时持久保存高清原片和压缩副本。临时转码文件按生命周期清理;用户证据不因清理被删除。
- 模型观察截图、步骤证据截图与录像参数独立,不能为了降低录像体积而降低模型定位所需画面质量。
@@ -95,14 +95,24 @@
- 延续 HTTPS、文件校验、平台兼容、安全解压与同版本不可覆盖规则。升级由用户发起,排队、暂停和运行任务固定版本;同一资源整条任务串行。
- 沿用用户启用时授权的范围,不新增逐动作确认;密钥不能进入普通查询、日志和报告。参数范围检查不宣称是操作系统沙箱。
## 10. 待实施顺序与检查点
## 10. 实施状态与检查点
- [ ] 定义公共结果/附件/时间契约及各能力声明,补齐错误与副作用语义和兼容迁移。
- [ ] 完成 Flash/Pro 的来源隔离与步骤分组,验证默认安卓任务调用插件、同插件跨窗口及多图证据。
- [ ] 实现电脑录像、统一录制生命周期和高效留档参数,实测后确定默认值及兼容回退。
- [ ] 实现多来源回看、缺口展示、关键节点与播放状态同步。
- [ ] 完成单任务/批次导出索引、原生附件和各报告一致性。
- [ ] 按 ARTEMIS 规则适配首发插件与 Skill,交付模板、能力附录及合规检查。
- [ ] 完成确定性检查、真实环境和长期运行验收,记录实测范围再发布。
- [x] 定义公共结果/附件/时间契约及各能力声明,补齐错误与副作用语义和兼容迁移。
- [x] 完成 Flash/Pro 的来源隔离与步骤分组,回归覆盖默认安卓任务调用插件、同插件跨窗口及多图证据。
- [x] 实现电脑录像、统一录制生命周期和高效留档参数;短时实测 H.265/H.264,编码回退与磁盘不足有确定性回归。
- [x] 实现多来源回看、缺口展示、关键节点与播放状态同步,已在隔离网页实际验证。
- [x] 完成单任务/批次导出索引、原生附件和各报告一致性。
- [x] 按 ARTEMIS 规则适配首发插件与 Skill,交付模板、能力附录及合规检查。
- [x] 完成确定性检查和短时集成验证,记录实测范围。
- [ ] 完成长程、多屏、多 DPI 及完整跨端模型任务验收,再发布。
已有静态检查发现两项需要复现验证的风险:Pro 对默认安卓任务调用插件时的图片隔离可能不完整;插件前图缓存按插件标识而非具体目标区分,跨窗口可能引用旧图。它们是待验证项,不应在复现前写成已确认故障或已修复。
已补回归并修正:Pro 默认安卓任务的插件图像隔离、同插件跨窗口的前图缓存与导出,以及任务录像参数的覆盖优先级。发布前仍需覆盖多 DPI、多屏、长程资源开销和完整跨端模型任务;自动测试及短时烟测不替代这些验收。
### 2026-10-15 验证记录
- 最终隔离测试:Python 2561 通过、2 跳过、8 未选择;Angular 224 通过,生产构建通过。Ruff、格式、质量基线、核心 Pyright 与差异空白检查通过。
- Windows 实际录制验证了 H.265/H.264、暂停恢复、截图附件保存和录制进程随任务进程退出回收。四个短片段均通过最终媒体探测,未据此推断长程性能。
- 隔离网页验证了来源切换、录像缺口、播放中跳转继续播放、暂停中跳转保持暂停;最终构建的步骤标记没有重复或将工具哈希误当坐标。演示页面使用合成任务数据,不能作为完整跨端模型任务的通过证据。
- 开发模板通过实际 MCP 调用、中文文件及哈希校验、调用记录、单任务资料导出、目录和 ZIP 导入及 `--live` 合规检查。
- Android 烟测时模拟器出现启动器无响应,录制曾返回空文件或异常时长。现已要求真实启动标记、有效媒体片段及时间戳校验;异常样本只恢复实际存在的 0.5 秒画面,不补造持续时间。正常设备上的长时间安卓录制仍待验证。
- 早期测试曾写入开发环境历史;最终全量测试使用独立应用目录、trace 目录和数据库。既有历史未删除。本轮未重启用户运行中的服务,未安装新版市场插件,未推送或发版。
+89
View File
@@ -0,0 +1,89 @@
# 插件开发与证据协议(2.0.0)
新插件必须适配本文规则,再通过实测进入市场。旧 `schema_version: 1` 仍可读取;新包使用版本 2,并声明 `capabilities`。模型执行、任务队列、资源锁、超时和报告由 ARTEMIS 管理,插件不另建任务调度器,也不替用户决定用例通过。
## 从可运行模板开始
模板见 [evidence-demo](../examples/plugins/evidence-demo/plugin.json)。在安装了项目依赖的环境执行:
```sh
uv run python scripts/check_plugin.py examples/plugins/evidence-demo
uv run python scripts/check_plugin.py examples/plugins/evidence-demo --live
```
`--live` 启动 MCP、检查真实工具定义后关闭,不执行写操作。模板默认使用 PATH 中的 Python;需要指定解释器时传 `--values '{"python":"解释器绝对路径"}'`。
网页「插件 → 高级接入」支持插件目录或 ZIP 文件的完整路径。开发时可直接填模板目录;分发时在仓库根目录执行以下命令,生成根层包含 `plugin.json` 的 `evidence-demo.zip`:
```sh
uv run python -c "import shutil; shutil.make_archive('evidence-demo', 'zip', 'examples/plugins/evidence-demo')"
```
导入后在插件设置中确认 `python` 指向已安装 MCP 依赖的解释器,再启用并提交“调用文件证据示例保存一段文本”。在任务步骤查看工具结果,下载「全部资料」查看 `任务文件/插件/evidence-demo/` 和 `证据索引.json`。
静态检查通过不等于市场准入,也不表示业务测试通过。需按下面清单提交实际验证记录。
## 清单与工具能力
`plugin.json` 的安装、版本约束、资源、权限设置沿用 [插件说明](plugins.md)。版本 2 增加:
| 字段 | 规则 |
| --- | --- |
| `capabilities.kind` | `visual`、`terminal`、`api`、`file`、`other` |
| `capabilities.recording` | `none` 或 `windows`;只有视觉插件可声明 Windows 屏幕录制 |
| `capabilities.tools` | 按真实 MCP 工具名定义;未声明和缺失工具均拒绝加载 |
| `effect` | `read` / `write`,必须如实声明 |
| `observation` | 自动观察必须只读;MCP 的 `readOnlyHint` 也必须为 true |
| `idempotent` | 重复调用是否产生额外效果,不授权自动重试未知结果的写操作 |
| `target_argument` | 指明资源目标的顶层参数名,必须存在于工具 JSON Schema |
| `cancellation` | `confirmed` / `unknown`,描述工具承诺;不能代替实际停止核对 |
| `evidence` | `text` / `image` / `file` / `state` 列表 |
| `required_tools` | Skill 依赖的工具名,加载时校验 |
MCP 参数必须有类型及合理范围;普通插件不能用不受约束的 shell 代替业务能力。终端插件若声明命令能力,应明确主机、工作目录、权限和命令边界。资源作用域用已有 `resources` 和配置约束声明;这些不是操作系统沙箱。
启动、调用、关闭分别受既有 30/60/15 秒默认预算约束,并服从任务总超时。每个写操作最多派发一次;超时、取消或部分执行后先观察真实结果。远端动作未确认停止时保持资源保护。
## 结果回执
MCP 保留标准 `content` 和 `isError`,在 `structuredContent.artemis` 返回版本 1 回执:
```json
{
"version": 1,
"execution": "completed",
"side_effect": "confirmed",
"retryable": false,
"source": {
"kind": "computer", "target_id": "真实窗口标识", "label": "控制台",
"captured_at": 1792000000.25, "width": 1280, "height": 720,
"window": {"left": 0, "top": 0, "width": 1280, "height": 720},
"screen": {"left": 0, "top": 0, "width": 1920, "height": 1080}
},
"attachments": []
}
```
- `execution`:`not_started`、`completed`、`partial`、`unknown`;`side_effect`:`none`、`possible`、`confirmed`。错误提供稳定的 `error_code` 和实际原因。只有明确未执行的请求才可声明 `retryable`,宿主仍受预算约束。
- 截图必须属于本次目标。尺寸和范围使用物理像素,时间为 Unix 秒;`target_id` 不能只是插件名。移动、缩放、换屏、换窗口后重新观察。平台结合目标和几何信息生成来源身份,避免拿旧图做动作前证据。
- 视觉工具通过标准 MCP image 返回图像;无法截图明确返回原因,不混入其他屏幕或猜坐标。终端返回退出码、输出和工作目录,API 返回状态/业务结果,文件返回校验信息,无须伪造图片。
- 平台生成 `call_id`、步骤关联、开始结束时间,并写入 trace。插件不能根据一次工具成功自行生成整条用例通过结论。
## 文件、录像与生命周期
stdio 宿主注入 `ARTEMIS_ARTIFACTS_DIR`,插件默认把生成文件写入该目录。附件回执包含普通 `name`、`media_type`、`sha256`,不接受任意宿主绝对路径;远端插件可附带 base64 `data`。单附件不超过 64 MiB,并同时受工具结果总大小限制。禁止路径穿越、符号链接和覆盖同名不同内容。
要求另存桌面时先产生并验证任务副本,再复制用户指定位置,分别报告实际结果。任一写入失败不声称全部成功。平台校验回读字节和 SHA-256,保存到任务索引;单任务和批次下载包含原生附件及插件证据。
录屏默认关闭。打开后,首次取得目标观察便启动已声明来源的录制,后续动作和等待持续录制;暂停收尾,恢复追加片段,任务结束关闭进程。电脑默认记录目标所在屏幕,可改为仅目标窗口。屏幕录像可能包含同屏其他可见内容;窗口截图仍只属于目标窗口,两者范围不同。
留档参数独立于模型截图:默认长边 1280、15 fps、H.265 目标 1000 kbps / H.264 1500 kbps。自动模式只有网页播放能力确认支持 HEVC 才尝试硬件 H.265,否则 H.264;编码不可用则有界回退并保留原因。网页使用真实任务时间轴,缺口不会被拼接抹去。H.265 的实际网页支持取决于浏览器/系统,手动优先 H.265 后无法播放应下载或为后续任务选择 H.264,不在下载时整段转码。
录制故障不能把成功动作改为失败,也不能把缺失证据推断为测试通过。录像文件只保留一套留档版本;磁盘不足停止采集并告警。不自动恢复路由器参数、电脑状态或用户文件;只有任务提示词提出恢复要求时才执行普通恢复步骤。连接关闭、进程回收和锁释放始终必要。
## 提交市场前的验证
- 公共:安装/升级兼容、真实工具与清单一致、参数限制、失败/部分执行、超时取消、版本固定、资源互斥、导出索引、卸载后历史可读、无凭据泄漏。
- 视觉:截图来源、遮挡、DPI、窗口切换、坐标一致、无图时拒绝盲点;录屏启动/结束/暂停恢复、编码回退、磁盘不足、时间缺口、关键节点、播放状态、中文可读性及长程体积。
- 文件:中文文件名、覆盖保护、校验失败;终端/API:退出码、业务结果和不确定副作用。
- Skill 必须只描述真实存在且已适配的能力,不绕过权限、调度和证据协议。保留来源和必要许可证,版本与实测范围明确;未测平台/场景不能写成已通过。
+6
View File
@@ -1,5 +1,11 @@
# 插件与跨端任务(2.0.0 开发版)
插件开发请阅读 [能力、证据协议与验收规则](plugin-development.md),可运行模板位于 `examples/plugins/evidence-demo`。新插件使用清单版本 2;版本 1 仍兼容。
步骤卡标明安卓、电脑等来源,可点击查看对应录像;同一步内保留实际工具调用。开启「保存录屏」后,已使用的安卓和电脑来源各自留档,通过播放器切换;真实时间轴保留暂停和录制中断的缺口。录像默认 1280 长边、15 fps,编码参数在功能设置的「录像留档设置」调整;不会降低模型观察截图的分辨率。
单任务「全部资料」和批次资料包含插件截图、录像、调用回执和生成文件,`证据索引.json` 使用包内路径关联附件。电脑截图默认保存任务 trace,明确要求桌面时额外复制并校验。工具执行完成与测试通过仍分别呈现,不自动恢复业务环境。
ARTEMIS 可通过插件连接 stdio 或 Streamable HTTP MCP 服务,并按需加载插件内的 Skill。Flash、Pro、网页任务和批次复用同一套插件执行层。版本仍在开发验证中,市场只收录完成实际验证的安装包。
## 安装和配置