feat(plugins): prepare isolated Rust 3 preview market
This commit is contained in:
1 parent
987b5ff2d8
commit
5d14bcffbc
22 files changed
+1612
-583
No files matched your search
@@ -1,3 +1,5 @@
|
||||
> Rust 3 测试市场版本 `0.5.0+artemis.7`;独立 Python/MCP/dotenv 与外部工具由使用者准备。验证边界见 [RUST3-VERIFICATION.md](RUST3-VERIFICATION.md)。下文保留原 2.x 版本的历史范围。
|
||||
|
||||
# 内部团队首次部署(Windows x64)
|
||||
|
||||
接收方先准备当前用例需要的工具,随后插件自动发现和检查。无需逐项填写程序路径。插件 ZIP 包含适配代码、原 Skill、通用样例和说明,不携带第三方程序、驱动、本机 profile、账号或测试数据。
|
||||
|
||||
@@ -1,125 +1,137 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"plugin_id": "artemis-device-test",
|
||||
"plugin_version": "0.5.0+artemis.6",
|
||||
"content_sha256": "83f19450c4b0bdf4bad9389770e3ab35f81855d4e9f5d2975934e395308aabaf",
|
||||
"traits": {
|
||||
"uses_subprocesses": true,
|
||||
"file_inputs_for_writes": true
|
||||
},
|
||||
"components": [
|
||||
{
|
||||
"name": "原 Skill、协议资料与用例路由",
|
||||
"paths": [
|
||||
"skill"
|
||||
],
|
||||
"license": "LicenseRef-Yitong-Artemis-Market",
|
||||
"permission": "permitted",
|
||||
"license_file": "LICENSE-ORIGINAL-SKILL.md",
|
||||
"source_file": "SOURCE.md"
|
||||
},
|
||||
{
|
||||
"name": "ARTEMIS 适配层和适配修复",
|
||||
"paths": [
|
||||
"dependency_checks.py",
|
||||
"dependency_runner.py",
|
||||
"DEPLOYMENT.md",
|
||||
"device_runtime.py",
|
||||
"LICENSE",
|
||||
"LICENSE-ORIGINAL-SKILL.md",
|
||||
"network_inventory.py",
|
||||
"plugin.json",
|
||||
"README.md",
|
||||
"RELEASE.md",
|
||||
"requirements.txt",
|
||||
"server.py",
|
||||
"SKILL.md",
|
||||
"source-manifest.json",
|
||||
"SOURCE.md",
|
||||
"VERIFICATION.md",
|
||||
"skill/scripts/process_lifecycle.py",
|
||||
"skill/tests/test_lifecycle_review.py",
|
||||
"skill/tests/test_review_regressions.py",
|
||||
"skill/ruff.toml"
|
||||
],
|
||||
"license": "Apache-2.0",
|
||||
"permission": "permitted",
|
||||
"license_file": "LICENSE",
|
||||
"source_file": "SOURCE.md"
|
||||
}
|
||||
],
|
||||
"checks": {
|
||||
"installation": {
|
||||
"status": "passed",
|
||||
"evidence_file": "VERIFICATION.md",
|
||||
"evidence_sha256": "4ca98fe306e266a491636bcd4f1de3fd792e452e765b73d658017ebb4084bf6a",
|
||||
"notes": "实际宿主 API 安装、临时目录旧版升级和禁用/配置保留已验证;新装不自动授权。"
|
||||
},
|
||||
"tool_contract": {
|
||||
"status": "passed",
|
||||
"evidence_file": "VERIFICATION.md",
|
||||
"evidence_sha256": "4ca98fe306e266a491636bcd4f1de3fd792e452e765b73d658017ebb4084bf6a",
|
||||
"notes": "真实 stdio MCP 握手和全部 20 项定义检查;8 次隔离安全调用、10 份附件;134 项单元回归。"
|
||||
},
|
||||
"failure_partial": {
|
||||
"status": "passed",
|
||||
"evidence_file": "VERIFICATION.md",
|
||||
"evidence_sha256": "4ca98fe306e266a491636bcd4f1de3fd792e452e765b73d658017ebb4084bf6a",
|
||||
"notes": "清理核验故障及泛化 I/O 异常保留执行事实;未知写副作用不重试;缺失证据保持 inconclusive。"
|
||||
},
|
||||
"timeout_cancel": {
|
||||
"status": "passed",
|
||||
"evidence_file": "VERIFICATION.md",
|
||||
"evidence_sha256": "4ca98fe306e266a491636bcd4f1de3fd792e452e765b73d658017ebb4084bf6a",
|
||||
"notes": "合成工具超时及真实 MCP 自检取消;取消后工具和后代约 0.03 秒退出,未操作真实设备。"
|
||||
},
|
||||
"process_tree": {
|
||||
"status": "passed",
|
||||
"evidence_file": "VERIFICATION.md",
|
||||
"evidence_sha256": "4ca98fe306e266a491636bcd4f1de3fd792e452e765b73d658017ebb4084bf6a",
|
||||
"notes": "Windows Job 合成进程验证正常/非零/超时/超限/拥有者退出及清理异常;不声称其他系统通过。"
|
||||
},
|
||||
"file_binding": {
|
||||
"status": "passed",
|
||||
"evidence_file": "VERIFICATION.md",
|
||||
"evidence_sha256": "4ca98fe306e266a491636bcd4f1de3fd792e452e765b73d658017ebb4084bf6a",
|
||||
"notes": "固件批准字节保护快照对抗原路径替换/截断/增长;V2 模拟协议;没有真实烧录。"
|
||||
},
|
||||
"resource_conflicts": {
|
||||
"status": "passed",
|
||||
"evidence_file": "VERIFICATION.md",
|
||||
"evidence_sha256": "4ca98fe306e266a491636bcd4f1de3fd792e452e765b73d658017ebb4084bf6a",
|
||||
"notes": "临时锁目录验证 desktop:local 和 lab:device-test 各自互斥;运行时阻止固定版本更新和卸载。"
|
||||
},
|
||||
"evidence_export": {
|
||||
"status": "passed",
|
||||
"evidence_file": "VERIFICATION.md",
|
||||
"evidence_sha256": "4ca98fe306e266a491636bcd4f1de3fd792e452e765b73d658017ebb4084bf6a",
|
||||
"notes": "正常宿主离线任务导入并校验摘要;8 份附件读回;Word/Excel/全部资料 ZIP 容器与附件字节核验。"
|
||||
},
|
||||
"history_uninstall": {
|
||||
"status": "passed",
|
||||
"evidence_file": "VERIFICATION.md",
|
||||
"evidence_sha256": "4ca98fe306e266a491636bcd4f1de3fd792e452e765b73d658017ebb4084bf6a",
|
||||
"notes": "独立临时目录卸载后原历史附件字节仍可读;未删除用户任务或历史。"
|
||||
},
|
||||
"secret_redaction": {
|
||||
"status": "passed",
|
||||
"evidence_file": "VERIFICATION.md",
|
||||
"evidence_sha256": "4ca98fe306e266a491636bcd4f1de3fd792e452e765b73d658017ebb4084bf6a",
|
||||
"notes": "合成凭据输出脱敏及源码审查通过;未将个人配置、原始报告、抓包、环境目录打包。"
|
||||
},
|
||||
"real_task": {
|
||||
"status": "passed",
|
||||
"evidence_file": "VERIFICATION.md",
|
||||
"evidence_sha256": "4ca98fe306e266a491636bcd4f1de3fd792e452e765b73d658017ebb4084bf6a",
|
||||
"notes": "正常 ARTEMIS Pro/computer 离线证据任务完成,AI 正式结论 passed、5/5;暂停恢复实测;真实设备能力未测。"
|
||||
},
|
||||
"source_review": {
|
||||
"status": "passed",
|
||||
"evidence_file": "VERIFICATION.md",
|
||||
"evidence_sha256": "4ca98fe306e266a491636bcd4f1de3fd792e452e765b73d658017ebb4084bf6a",
|
||||
"notes": "原候选 ZIP 摘要、当前文件来源清单、未改动 vendor 摘要及公司市场分发确认记录已核对;适配层 Apache-2.0。"
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
"schema_version": 1,
|
||||
"plugin_id": "artemis-device-test",
|
||||
"plugin_version": "0.5.0+artemis.7",
|
||||
"content_sha256": "5ad107572dd67bba856d2a19c1c8d49b8c7189c95d6ed021e0af2961d1343412",
|
||||
"traits": {
|
||||
"uses_subprocesses": true,
|
||||
"file_inputs_for_writes": true
|
||||
},
|
||||
"components": [
|
||||
{
|
||||
"name": "原 Skill、协议资料与用例路由",
|
||||
"paths": [
|
||||
"skill"
|
||||
],
|
||||
"license": "LicenseRef-Yitong-Artemis-Market",
|
||||
"permission": "permitted",
|
||||
"license_file": "LICENSE-ORIGINAL-SKILL.md",
|
||||
"source_file": "SOURCE.md"
|
||||
},
|
||||
{
|
||||
"name": "ARTEMIS 适配层和适配修复",
|
||||
"paths": [
|
||||
"dependency_checks.py",
|
||||
"dependency_runner.py",
|
||||
"DEPLOYMENT.md",
|
||||
"device_runtime.py",
|
||||
"LICENSE",
|
||||
"LICENSE-ORIGINAL-SKILL.md",
|
||||
"network_inventory.py",
|
||||
"plugin.json",
|
||||
"README.md",
|
||||
"RELEASE.md",
|
||||
"requirements.txt",
|
||||
"server.py",
|
||||
"SKILL.md",
|
||||
"source-manifest.json",
|
||||
"SOURCE.md",
|
||||
"VERIFICATION.md",
|
||||
"skill/scripts/process_lifecycle.py",
|
||||
"skill/tests/test_lifecycle_review.py",
|
||||
"skill/tests/test_review_regressions.py",
|
||||
"skill/ruff.toml"
|
||||
],
|
||||
"license": "Apache-2.0",
|
||||
"permission": "permitted",
|
||||
"license_file": "LICENSE",
|
||||
"source_file": "SOURCE.md"
|
||||
},
|
||||
{
|
||||
"name": "Rust 3 preview materials",
|
||||
"paths": [
|
||||
"UPSTREAM-MARKET.json",
|
||||
"RUST3-SOURCE.json",
|
||||
"RUST3-VERIFICATION.md"
|
||||
],
|
||||
"license": "Apache-2.0",
|
||||
"permission": "permitted",
|
||||
"license_file": "LICENSE",
|
||||
"source_file": "SOURCE.md"
|
||||
}
|
||||
],
|
||||
"checks": {
|
||||
"installation": {
|
||||
"status": "unverified",
|
||||
"evidence_file": "RUST3-VERIFICATION.md",
|
||||
"evidence_sha256": "f65a272cd20c198353b35033b2c782ada2f98dc7979d96e5983a52e665effe7c",
|
||||
"notes": "Rust 3 测试市场预览:静态清单、组件许可、文件摘要及组包已核对;此项真实宿主/设备验证未运行,原2.x结果不外推。"
|
||||
},
|
||||
"tool_contract": {
|
||||
"status": "unverified",
|
||||
"evidence_file": "RUST3-VERIFICATION.md",
|
||||
"evidence_sha256": "f65a272cd20c198353b35033b2c782ada2f98dc7979d96e5983a52e665effe7c",
|
||||
"notes": "Rust 3 测试市场预览:静态清单、组件许可、文件摘要及组包已核对;此项真实宿主/设备验证未运行,原2.x结果不外推。"
|
||||
},
|
||||
"failure_partial": {
|
||||
"status": "unverified",
|
||||
"evidence_file": "RUST3-VERIFICATION.md",
|
||||
"evidence_sha256": "f65a272cd20c198353b35033b2c782ada2f98dc7979d96e5983a52e665effe7c",
|
||||
"notes": "Rust 3 测试市场预览:静态清单、组件许可、文件摘要及组包已核对;此项真实宿主/设备验证未运行,原2.x结果不外推。"
|
||||
},
|
||||
"timeout_cancel": {
|
||||
"status": "unverified",
|
||||
"evidence_file": "RUST3-VERIFICATION.md",
|
||||
"evidence_sha256": "f65a272cd20c198353b35033b2c782ada2f98dc7979d96e5983a52e665effe7c",
|
||||
"notes": "Rust 3 测试市场预览:静态清单、组件许可、文件摘要及组包已核对;此项真实宿主/设备验证未运行,原2.x结果不外推。"
|
||||
},
|
||||
"process_tree": {
|
||||
"status": "unverified",
|
||||
"evidence_file": "RUST3-VERIFICATION.md",
|
||||
"evidence_sha256": "f65a272cd20c198353b35033b2c782ada2f98dc7979d96e5983a52e665effe7c",
|
||||
"notes": "Rust 3 测试市场预览:静态清单、组件许可、文件摘要及组包已核对;此项真实宿主/设备验证未运行,原2.x结果不外推。"
|
||||
},
|
||||
"file_binding": {
|
||||
"status": "unverified",
|
||||
"evidence_file": "RUST3-VERIFICATION.md",
|
||||
"evidence_sha256": "f65a272cd20c198353b35033b2c782ada2f98dc7979d96e5983a52e665effe7c",
|
||||
"notes": "Rust 3 测试市场预览:静态清单、组件许可、文件摘要及组包已核对;此项真实宿主/设备验证未运行,原2.x结果不外推。"
|
||||
},
|
||||
"resource_conflicts": {
|
||||
"status": "unverified",
|
||||
"evidence_file": "RUST3-VERIFICATION.md",
|
||||
"evidence_sha256": "f65a272cd20c198353b35033b2c782ada2f98dc7979d96e5983a52e665effe7c",
|
||||
"notes": "Rust 3 测试市场预览:静态清单、组件许可、文件摘要及组包已核对;此项真实宿主/设备验证未运行,原2.x结果不外推。"
|
||||
},
|
||||
"evidence_export": {
|
||||
"status": "unverified",
|
||||
"evidence_file": "RUST3-VERIFICATION.md",
|
||||
"evidence_sha256": "f65a272cd20c198353b35033b2c782ada2f98dc7979d96e5983a52e665effe7c",
|
||||
"notes": "Rust 3 测试市场预览:静态清单、组件许可、文件摘要及组包已核对;此项真实宿主/设备验证未运行,原2.x结果不外推。"
|
||||
},
|
||||
"history_uninstall": {
|
||||
"status": "unverified",
|
||||
"evidence_file": "RUST3-VERIFICATION.md",
|
||||
"evidence_sha256": "f65a272cd20c198353b35033b2c782ada2f98dc7979d96e5983a52e665effe7c",
|
||||
"notes": "Rust 3 测试市场预览:静态清单、组件许可、文件摘要及组包已核对;此项真实宿主/设备验证未运行,原2.x结果不外推。"
|
||||
},
|
||||
"secret_redaction": {
|
||||
"status": "unverified",
|
||||
"evidence_file": "RUST3-VERIFICATION.md",
|
||||
"evidence_sha256": "f65a272cd20c198353b35033b2c782ada2f98dc7979d96e5983a52e665effe7c",
|
||||
"notes": "Rust 3 测试市场预览:静态清单、组件许可、文件摘要及组包已核对;此项真实宿主/设备验证未运行,原2.x结果不外推。"
|
||||
},
|
||||
"real_task": {
|
||||
"status": "unverified",
|
||||
"evidence_file": "RUST3-VERIFICATION.md",
|
||||
"evidence_sha256": "f65a272cd20c198353b35033b2c782ada2f98dc7979d96e5983a52e665effe7c",
|
||||
"notes": "Rust 3 测试市场预览:静态清单、组件许可、文件摘要及组包已核对;此项真实宿主/设备验证未运行,原2.x结果不外推。"
|
||||
},
|
||||
"source_review": {
|
||||
"status": "unverified",
|
||||
"evidence_file": "RUST3-VERIFICATION.md",
|
||||
"evidence_sha256": "f65a272cd20c198353b35033b2c782ada2f98dc7979d96e5983a52e665effe7c",
|
||||
"notes": "Rust 3 测试市场预览:静态清单、组件许可、文件摘要及组包已核对;此项真实宿主/设备验证未运行,原2.x结果不外推。"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,58 +1,60 @@
|
||||
# 家庭安防多工具测试插件
|
||||
|
||||
将用户提供的 `artemis-device-test 0.5.0-internal` 接入 Artemis 2.0 插件系统,版本为 `0.5.0+artemis.6`。提供 20 个真实 MCP 工具、357 条保留用例路由和按需参考资料。工具成功、协议完成、业务通过分别记录。
|
||||
|
||||
## 安装
|
||||
|
||||
团队接收方先读 [首次部署与自检](DEPLOYMENT.md):准备完整依赖后,把目录加入 PATH 或只设置一次 `tool_root`,无需逐个填路径。保留 MediaInfo DLL 后端,自动发现匹配位数的 DLL;各能力独立报告就绪情况。插件仅依赖 `requirements.txt` 中的 MCP 与 dotenv,不附带 FFmpeg、Wireshark、Nmap、Binwalk、MediaInfo、厂商软件或驱动,安装器也不自动安装 Python requirements。
|
||||
|
||||
维护者在 Artemis-Plugins 仓库根目录,从已提交的源码打包:
|
||||
|
||||
```powershell
|
||||
python scripts/build_device_test.py --ref HEAD
|
||||
```
|
||||
|
||||
ZIP、SHA-256 和源码提交记录写入 `artifacts/device-test/`,ZIP 根层包含 `plugin.json`。宿主开发检查命令见 ARTEMIS 仓库的 `docs/plugin-development.md`。在网页“插件 → 高级接入”导入 ZIP 或本目录,打开设置填写 Python 的绝对路径,授权后启用。安装使用平台正常接口,不修改任务、历史或原 Skill,不要求重启平台。
|
||||
|
||||
新装默认未启用。插件不提供画面观察,纯电脑任务须同时选择已授权的 Cua 等视觉插件;Android 任务仍使用 Artemis 原有手机能力。插件不在任务中递归调用 `mobile_run_task`。
|
||||
|
||||
## 本机设置
|
||||
|
||||
| 字段 | 设置 |
|
||||
| --- | --- |
|
||||
| `python` | 当前 Artemis 环境的 Python 绝对路径;不要误用未安装 MCP 的系统 Python |
|
||||
| `profile` | 可选,本机工具配置 JSON 路径;结构见 `skill/assets/profile.example.json` |
|
||||
| `tool_root` | 可选,统一的已解压工具目录;profile 优先,其次该目录,再次宿主 PATH;MediaInfo 也支持自动发现 |
|
||||
| `rtsp_env_file` | 可选,本机受控 `.env` 文件路径;需要 RTSP 时保存 `DUT_RTSP_URL` 等变量,工具只传变量名 |
|
||||
| `operation_timeout_seconds` | 默认 45 秒,10..3300;宿主 `ARTEMIS_PLUGIN_TOOL_TIMEOUT_SECONDS` 至少比它大 10 秒,默认宿主 60 秒 |
|
||||
| `allow_firmware_write` | 默认 `false`;当前用例明确授权升级时才设为 `true`,调用仍需要 `execute=true` 等完整条件 |
|
||||
|
||||
profile 不保存密码或 URL。GUI 和网站没有伪造的业务 API;环境诊断列为需要真实界面/会话验证,安装包存在不能当成业务可用。原资料中的环境安装、人工登录和厂商专用能力边界仍适用。
|
||||
|
||||
本包仅声明 Windows x64,未声称其他平台通过验证。标准资源为 `desktop:local`、`lab:device-test`,与电脑插件共用桌面锁,并保守串行共享实验台。任务若只需手机且希望独立并行,可明确不选此插件。
|
||||
|
||||
## 使用示例
|
||||
|
||||
在 Artemis 正常任务中描述:
|
||||
|
||||
```text
|
||||
使用家庭安防多工具测试插件,先检查本机工具和用例路由。
|
||||
按本次指定的完整用例、摄像机 SN/实际上报型号、协议和手机序列号执行。
|
||||
先只读验证;缺失项记录为阻塞,不升级、不恢复出厂、不重提失败业务。
|
||||
PC/网站通过已授权电脑插件观察,已有登录态可复用,未登录交给人工完成。
|
||||
将实际观测、未验证项和仍需人工核验项保存到任务证据,生成独立联合资料包。
|
||||
```
|
||||
|
||||
工具与操作规则见 [插件 Skill](SKILL.md)。报告工具只接受本任务附件名;外部本机证据先用 `import_evidence` 复制校验。独立 ZIP 内保留可移植 Markdown/JSON 和证据相对路径;导出的单独 Markdown 与 JSON 用于预览,以 ZIP 为完整交付。单附件不超过 64 MiB,联合包输入总计不超过 48 MiB。
|
||||
|
||||
查询当前局域网设备可直接描述“通过配置工具查询当前局域网内的设备,核对身份和版本”。插件先用 `list_network_interfaces` 读取本机已连接的物理 IPv4 接口,再在实际接口上分别进行 V1/V2 只读发现;用户指定协议或接口时遵守该范围。无需预先知道摄像机 SN、型号或打开配置工具 GUI。`environment_doctor` 的 GUI `manual-interface` 状态不阻塞独立协议适配器。接口枚举不会发送设备发现包;实际发现和身份查询仍由正常 Artemis 任务持有资源后执行。
|
||||
|
||||
`artemis.2` 补齐本机网卡入口;`artemis.3` 增加可迁移的 DLL/运行时发现与分层自检。`environment_doctor(check_functional=true)` 会检查程序启动、DLL 加载及固定本地视频/PCAP/固件样本;接口与 COM 只枚举,不抓包或打开串口。默认自检仅发现文件。修改系统 PATH 后需从新环境重新启动 Artemis,再在插件内检查。保留原 Skill 资料与 vendor 协议实现;固件适配器、工具运行器及相关测试的修改见来源清单,固件写入条件不变。
|
||||
|
||||
## 验证与来源
|
||||
|
||||
[VERIFICATION.md](VERIFICATION.md) 记录本次实际验证层次;[source-manifest.json](source-manifest.json) 保存导入文件的原始 SHA-256。固件适配器、工具运行器及相关测试已修订,其余原始资料按来源清单记录;不包含缓存、个人配置、账号、原始测试证据、模型 Key 或原始参考源码 ZIP。
|
||||
|
||||
[SOURCE.md](SOURCE.md) 说明来源与许可。[RELEASE.md](RELEASE.md) 说明本修订的发布范围;以市场索引和对应不可变发行附件确认实际分发状态。
|
||||
|
||||
`artemis.6` 将环境自检与工具执行合并到同一 Windows Job 生命周期,限制管道输出;执行后清理异常保留已启动事实,回执返回未知或部分执行。市场记录见 `MARKET.json`,其通过范围以验证文档为准,不代表实机能力全部通过。
|
||||
> Rust 3 测试市场版本 `0.5.0+artemis.7`;独立 Python/MCP/dotenv 与外部工具由使用者准备。验证边界见 [RUST3-VERIFICATION.md](RUST3-VERIFICATION.md)。下文保留原 2.x 版本的历史范围。
|
||||
|
||||
# 家庭安防多工具测试插件
|
||||
|
||||
将用户提供的 `artemis-device-test 0.5.0-internal` 接入 Artemis 2.0 插件系统,版本为 `0.5.0+artemis.6`。提供 20 个真实 MCP 工具、357 条保留用例路由和按需参考资料。工具成功、协议完成、业务通过分别记录。
|
||||
|
||||
## 安装
|
||||
|
||||
团队接收方先读 [首次部署与自检](DEPLOYMENT.md):准备完整依赖后,把目录加入 PATH 或只设置一次 `tool_root`,无需逐个填路径。保留 MediaInfo DLL 后端,自动发现匹配位数的 DLL;各能力独立报告就绪情况。插件仅依赖 `requirements.txt` 中的 MCP 与 dotenv,不附带 FFmpeg、Wireshark、Nmap、Binwalk、MediaInfo、厂商软件或驱动,安装器也不自动安装 Python requirements。
|
||||
|
||||
维护者在 Artemis-Plugins 仓库根目录,从已提交的源码打包:
|
||||
|
||||
```powershell
|
||||
python scripts/build_device_test.py --ref HEAD
|
||||
```
|
||||
|
||||
ZIP、SHA-256 和源码提交记录写入 `artifacts/device-test/`,ZIP 根层包含 `plugin.json`。宿主开发检查命令见 ARTEMIS 仓库的 `docs/plugin-development.md`。在网页“插件 → 高级接入”导入 ZIP 或本目录,打开设置填写 Python 的绝对路径,授权后启用。安装使用平台正常接口,不修改任务、历史或原 Skill,不要求重启平台。
|
||||
|
||||
新装默认未启用。插件不提供画面观察,纯电脑任务须同时选择已授权的 Cua 等视觉插件;Android 任务仍使用 Artemis 原有手机能力。插件不在任务中递归调用 `mobile_run_task`。
|
||||
|
||||
## 本机设置
|
||||
|
||||
| 字段 | 设置 |
|
||||
| --- | --- |
|
||||
| `python` | 当前 Artemis 环境的 Python 绝对路径;不要误用未安装 MCP 的系统 Python |
|
||||
| `profile` | 可选,本机工具配置 JSON 路径;结构见 `skill/assets/profile.example.json` |
|
||||
| `tool_root` | 可选,统一的已解压工具目录;profile 优先,其次该目录,再次宿主 PATH;MediaInfo 也支持自动发现 |
|
||||
| `rtsp_env_file` | 可选,本机受控 `.env` 文件路径;需要 RTSP 时保存 `DUT_RTSP_URL` 等变量,工具只传变量名 |
|
||||
| `operation_timeout_seconds` | 默认 45 秒,10..3300;宿主 `ARTEMIS_PLUGIN_TOOL_TIMEOUT_SECONDS` 至少比它大 10 秒,默认宿主 60 秒 |
|
||||
| `allow_firmware_write` | 默认 `false`;当前用例明确授权升级时才设为 `true`,调用仍需要 `execute=true` 等完整条件 |
|
||||
|
||||
profile 不保存密码或 URL。GUI 和网站没有伪造的业务 API;环境诊断列为需要真实界面/会话验证,安装包存在不能当成业务可用。原资料中的环境安装、人工登录和厂商专用能力边界仍适用。
|
||||
|
||||
本包仅声明 Windows x64,未声称其他平台通过验证。标准资源为 `desktop:local`、`lab:device-test`,与电脑插件共用桌面锁,并保守串行共享实验台。任务若只需手机且希望独立并行,可明确不选此插件。
|
||||
|
||||
## 使用示例
|
||||
|
||||
在 Artemis 正常任务中描述:
|
||||
|
||||
```text
|
||||
使用家庭安防多工具测试插件,先检查本机工具和用例路由。
|
||||
按本次指定的完整用例、摄像机 SN/实际上报型号、协议和手机序列号执行。
|
||||
先只读验证;缺失项记录为阻塞,不升级、不恢复出厂、不重提失败业务。
|
||||
PC/网站通过已授权电脑插件观察,已有登录态可复用,未登录交给人工完成。
|
||||
将实际观测、未验证项和仍需人工核验项保存到任务证据,生成独立联合资料包。
|
||||
```
|
||||
|
||||
工具与操作规则见 [插件 Skill](SKILL.md)。报告工具只接受本任务附件名;外部本机证据先用 `import_evidence` 复制校验。独立 ZIP 内保留可移植 Markdown/JSON 和证据相对路径;导出的单独 Markdown 与 JSON 用于预览,以 ZIP 为完整交付。单附件不超过 64 MiB,联合包输入总计不超过 48 MiB。
|
||||
|
||||
查询当前局域网设备可直接描述“通过配置工具查询当前局域网内的设备,核对身份和版本”。插件先用 `list_network_interfaces` 读取本机已连接的物理 IPv4 接口,再在实际接口上分别进行 V1/V2 只读发现;用户指定协议或接口时遵守该范围。无需预先知道摄像机 SN、型号或打开配置工具 GUI。`environment_doctor` 的 GUI `manual-interface` 状态不阻塞独立协议适配器。接口枚举不会发送设备发现包;实际发现和身份查询仍由正常 Artemis 任务持有资源后执行。
|
||||
|
||||
`artemis.2` 补齐本机网卡入口;`artemis.3` 增加可迁移的 DLL/运行时发现与分层自检。`environment_doctor(check_functional=true)` 会检查程序启动、DLL 加载及固定本地视频/PCAP/固件样本;接口与 COM 只枚举,不抓包或打开串口。默认自检仅发现文件。修改系统 PATH 后需从新环境重新启动 Artemis,再在插件内检查。保留原 Skill 资料与 vendor 协议实现;固件适配器、工具运行器及相关测试的修改见来源清单,固件写入条件不变。
|
||||
|
||||
## 验证与来源
|
||||
|
||||
[VERIFICATION.md](VERIFICATION.md) 记录本次实际验证层次;[source-manifest.json](source-manifest.json) 保存导入文件的原始 SHA-256。固件适配器、工具运行器及相关测试已修订,其余原始资料按来源清单记录;不包含缓存、个人配置、账号、原始测试证据、模型 Key 或原始参考源码 ZIP。
|
||||
|
||||
[SOURCE.md](SOURCE.md) 说明来源与许可。[RELEASE.md](RELEASE.md) 说明本修订的发布范围;以市场索引和对应不可变发行附件确认实际分发状态。
|
||||
|
||||
`artemis.6` 将环境自检与工具执行合并到同一 Windows Job 生命周期,限制管道输出;执行后清理异常保留已启动事实,回执返回未知或部分执行。市场记录见 `MARKET.json`,其通过范围以验证文档为准,不代表实机能力全部通过。
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"source_commit": "987b5ff2d8c3516cf87e2f1abcac854732a8ccee",
|
||||
"source_version": "0.5.0+artemis.6",
|
||||
"version": "0.5.0+artemis.7",
|
||||
"all_python_source_bytes_preserved": true,
|
||||
"python_files_sha256": {
|
||||
"dependency_checks.py": "0ea7db6b7f0a816a75e737b25e7bd2592303c69196ac6b9827b58fe18d10ab5d",
|
||||
"dependency_runner.py": "3bbb648faab09fbc41065b43d89213f9fb29a274961bc9fd1a8ebd018f979ef2",
|
||||
"device_runtime.py": "e17b51ddf9c871a03bd1b44a35e0b0a5c98847ad9e8b586c64b89380e9d15ff6",
|
||||
"network_inventory.py": "a915a9acd05db5804421a812570dd852427bae571677600f271939e7bdf5b041",
|
||||
"server.py": "3a8c481579dd38fbbc923d14c406ef98f7d16a9bea4cd3c1a4d774438fedd0a6",
|
||||
"skill/scripts/device_adapter.py": "409f2a0d6f8e85b006aa950d0d8c53d5d0a8e4e713b61155a9a8a23e6205cf25",
|
||||
"skill/scripts/evidence.py": "e85dae725d39a1fb862d59a8e423b51f6d6cd3fe63d0ce1138ab651e24a0e098",
|
||||
"skill/scripts/process_lifecycle.py": "0106bc81a675e595a98f4c3f3201b8021e1f574ed3486873a6550b56b5d9e5cb",
|
||||
"skill/scripts/tool_runner.py": "10f4e4085a6ea06bbd89cfdabc065c048b99bcf96617ea2f64c34eeaf7e612cd",
|
||||
"skill/scripts/v1_protocol.py": "c512e2cb99a0ba9cd70ade1429a2e96b236c9026dea5a96dcaf0b5051c6972a0",
|
||||
"skill/tests/test_device_adapter.py": "c83ebf61d5065eb4113a6ba7985fc0f5c336dcb7d1e47ec09ec15c188849284b",
|
||||
"skill/tests/test_evidence.py": "d6cbbfab48af03958e1716631d1a1e6f034b56082cd113c32fbcf0b6f20cb6b0",
|
||||
"skill/tests/test_lifecycle_review.py": "02adc99eec0d612c6e4e70e85dc778b60ced8903d6ff01884f87a815ea5c132f",
|
||||
"skill/tests/test_review_regressions.py": "574e054005175ce33b4f1eabba135af61bb758372f467d043f209b3c0d326830",
|
||||
"skill/tests/test_tool_runner.py": "44b52cbd0ab7880ae06958a7707a45875deba9bfdebc0ed1fbff5f6177659ec2",
|
||||
"skill/tests/test_v1_protocol.py": "e727d725507efdc436829f75f87108fbea75b0b883394bd859cb340abdb8df6f",
|
||||
"skill/tests/test_v1_upgrade.py": "17403f6835bcb1f2295d195fb2be8b3de94da0b01751b0ce60100ceba3d8ac67",
|
||||
"skill/scripts/vendor/device_upgrade.py": "b50c12c982a6944a2112e22dfed87c0fdfdc311e6c6ff43a5ce9fa2a726b00ed",
|
||||
"skill/scripts/vendor/v2_discover.py": "6d0783c2a4f34397b61f4d1a65f97c2300f492caf8c60c38b48c246a75774158"
|
||||
},
|
||||
"scope": "Rust 3 preview metadata, independent worker instructions, truthful verification materials"
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
# Rust 3 测试市场预览
|
||||
|
||||
版本 `0.5.0+artemis.7`,宿主范围 `>=3.0.0,<4.0.0`。
|
||||
基于插件仓库提交 `987b5ff2d8c3516cf87e2f1abcac854732a8ccee` 的 `.6` 源码;所有 Python 运行源码字节保留,仅调整兼容范围、版本、独立解释器说明和验证材料。
|
||||
|
||||
静态准入验证覆盖清单、工具声明、组件分发许可、所有材料/文件 SHA256 和确定性 ZIP。
|
||||
当前预览不宣称 Rust 下真实 MCP、取消收尾、外部工具、设备写操作或 AI 业务验收通过;原 VERIFICATION.md 和 UPSTREAM-MARKET.json 的 2.x 结果不充当 Rust 3 结果。
|
||||
MARKET.json 对这些项目明确标记 unverified;测试索引以 preview 展示,不是正式审核通过声明。
|
||||
|
||||
主程序不依赖 Python;本插件是独立 worker,使用者须自行准备 Python、requirements.txt 和所需外部工具。安装与授权分开,安装不自动启用。
|
||||
默认操作预算45秒,主程序插件超时至少多10秒。RTSP 秘密只通过受控配置文件读取;固件写入默认关闭,未知结果不得重试。
|
||||
@@ -1,3 +1,5 @@
|
||||
> Rust 3 测试市场版本 `0.5.0+artemis.7`;独立 Python/MCP/dotenv 与外部工具由使用者准备。验证边界见 [RUST3-VERIFICATION.md](RUST3-VERIFICATION.md)。下文保留原 2.x 版本的历史范围。
|
||||
|
||||
---
|
||||
name: artemis-device-test
|
||||
description: 在 Artemis 任务中联合媒体、抓包、串口、V1/V2 设备协议和独立证据包执行家庭安防测试;手机使用本任务的 Android 工具,PC/网站使用已授权电脑控制插件。
|
||||
|
||||
@@ -0,0 +1,125 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"plugin_id": "artemis-device-test",
|
||||
"plugin_version": "0.5.0+artemis.6",
|
||||
"content_sha256": "83f19450c4b0bdf4bad9389770e3ab35f81855d4e9f5d2975934e395308aabaf",
|
||||
"traits": {
|
||||
"uses_subprocesses": true,
|
||||
"file_inputs_for_writes": true
|
||||
},
|
||||
"components": [
|
||||
{
|
||||
"name": "原 Skill、协议资料与用例路由",
|
||||
"paths": [
|
||||
"skill"
|
||||
],
|
||||
"license": "LicenseRef-Yitong-Artemis-Market",
|
||||
"permission": "permitted",
|
||||
"license_file": "LICENSE-ORIGINAL-SKILL.md",
|
||||
"source_file": "SOURCE.md"
|
||||
},
|
||||
{
|
||||
"name": "ARTEMIS 适配层和适配修复",
|
||||
"paths": [
|
||||
"dependency_checks.py",
|
||||
"dependency_runner.py",
|
||||
"DEPLOYMENT.md",
|
||||
"device_runtime.py",
|
||||
"LICENSE",
|
||||
"LICENSE-ORIGINAL-SKILL.md",
|
||||
"network_inventory.py",
|
||||
"plugin.json",
|
||||
"README.md",
|
||||
"RELEASE.md",
|
||||
"requirements.txt",
|
||||
"server.py",
|
||||
"SKILL.md",
|
||||
"source-manifest.json",
|
||||
"SOURCE.md",
|
||||
"VERIFICATION.md",
|
||||
"skill/scripts/process_lifecycle.py",
|
||||
"skill/tests/test_lifecycle_review.py",
|
||||
"skill/tests/test_review_regressions.py",
|
||||
"skill/ruff.toml"
|
||||
],
|
||||
"license": "Apache-2.0",
|
||||
"permission": "permitted",
|
||||
"license_file": "LICENSE",
|
||||
"source_file": "SOURCE.md"
|
||||
}
|
||||
],
|
||||
"checks": {
|
||||
"installation": {
|
||||
"status": "passed",
|
||||
"evidence_file": "VERIFICATION.md",
|
||||
"evidence_sha256": "4ca98fe306e266a491636bcd4f1de3fd792e452e765b73d658017ebb4084bf6a",
|
||||
"notes": "实际宿主 API 安装、临时目录旧版升级和禁用/配置保留已验证;新装不自动授权。"
|
||||
},
|
||||
"tool_contract": {
|
||||
"status": "passed",
|
||||
"evidence_file": "VERIFICATION.md",
|
||||
"evidence_sha256": "4ca98fe306e266a491636bcd4f1de3fd792e452e765b73d658017ebb4084bf6a",
|
||||
"notes": "真实 stdio MCP 握手和全部 20 项定义检查;8 次隔离安全调用、10 份附件;134 项单元回归。"
|
||||
},
|
||||
"failure_partial": {
|
||||
"status": "passed",
|
||||
"evidence_file": "VERIFICATION.md",
|
||||
"evidence_sha256": "4ca98fe306e266a491636bcd4f1de3fd792e452e765b73d658017ebb4084bf6a",
|
||||
"notes": "清理核验故障及泛化 I/O 异常保留执行事实;未知写副作用不重试;缺失证据保持 inconclusive。"
|
||||
},
|
||||
"timeout_cancel": {
|
||||
"status": "passed",
|
||||
"evidence_file": "VERIFICATION.md",
|
||||
"evidence_sha256": "4ca98fe306e266a491636bcd4f1de3fd792e452e765b73d658017ebb4084bf6a",
|
||||
"notes": "合成工具超时及真实 MCP 自检取消;取消后工具和后代约 0.03 秒退出,未操作真实设备。"
|
||||
},
|
||||
"process_tree": {
|
||||
"status": "passed",
|
||||
"evidence_file": "VERIFICATION.md",
|
||||
"evidence_sha256": "4ca98fe306e266a491636bcd4f1de3fd792e452e765b73d658017ebb4084bf6a",
|
||||
"notes": "Windows Job 合成进程验证正常/非零/超时/超限/拥有者退出及清理异常;不声称其他系统通过。"
|
||||
},
|
||||
"file_binding": {
|
||||
"status": "passed",
|
||||
"evidence_file": "VERIFICATION.md",
|
||||
"evidence_sha256": "4ca98fe306e266a491636bcd4f1de3fd792e452e765b73d658017ebb4084bf6a",
|
||||
"notes": "固件批准字节保护快照对抗原路径替换/截断/增长;V2 模拟协议;没有真实烧录。"
|
||||
},
|
||||
"resource_conflicts": {
|
||||
"status": "passed",
|
||||
"evidence_file": "VERIFICATION.md",
|
||||
"evidence_sha256": "4ca98fe306e266a491636bcd4f1de3fd792e452e765b73d658017ebb4084bf6a",
|
||||
"notes": "临时锁目录验证 desktop:local 和 lab:device-test 各自互斥;运行时阻止固定版本更新和卸载。"
|
||||
},
|
||||
"evidence_export": {
|
||||
"status": "passed",
|
||||
"evidence_file": "VERIFICATION.md",
|
||||
"evidence_sha256": "4ca98fe306e266a491636bcd4f1de3fd792e452e765b73d658017ebb4084bf6a",
|
||||
"notes": "正常宿主离线任务导入并校验摘要;8 份附件读回;Word/Excel/全部资料 ZIP 容器与附件字节核验。"
|
||||
},
|
||||
"history_uninstall": {
|
||||
"status": "passed",
|
||||
"evidence_file": "VERIFICATION.md",
|
||||
"evidence_sha256": "4ca98fe306e266a491636bcd4f1de3fd792e452e765b73d658017ebb4084bf6a",
|
||||
"notes": "独立临时目录卸载后原历史附件字节仍可读;未删除用户任务或历史。"
|
||||
},
|
||||
"secret_redaction": {
|
||||
"status": "passed",
|
||||
"evidence_file": "VERIFICATION.md",
|
||||
"evidence_sha256": "4ca98fe306e266a491636bcd4f1de3fd792e452e765b73d658017ebb4084bf6a",
|
||||
"notes": "合成凭据输出脱敏及源码审查通过;未将个人配置、原始报告、抓包、环境目录打包。"
|
||||
},
|
||||
"real_task": {
|
||||
"status": "passed",
|
||||
"evidence_file": "VERIFICATION.md",
|
||||
"evidence_sha256": "4ca98fe306e266a491636bcd4f1de3fd792e452e765b73d658017ebb4084bf6a",
|
||||
"notes": "正常 ARTEMIS Pro/computer 离线证据任务完成,AI 正式结论 passed、5/5;暂停恢复实测;真实设备能力未测。"
|
||||
},
|
||||
"source_review": {
|
||||
"status": "passed",
|
||||
"evidence_file": "VERIFICATION.md",
|
||||
"evidence_sha256": "4ca98fe306e266a491636bcd4f1de3fd792e452e765b73d658017ebb4084bf6a",
|
||||
"notes": "原候选 ZIP 摘要、当前文件来源清单、未改动 vendor 摘要及公司市场分发确认记录已核对;适配层 Apache-2.0。"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,336 +1,336 @@
|
||||
{
|
||||
"schema_version": 2,
|
||||
"id": "artemis-device-test",
|
||||
"name": "家庭安防多工具测试",
|
||||
"version": "0.5.0+artemis.6",
|
||||
"description": "集成 artemis-device-test Skill:PATH/统一目录自动发现工具及匹配位数的 MediaInfo DLL、按能力独立自检、本机网卡枚举、357 条用例路由、媒体/抓包/串口、V1/V2 设备及联合证据。PC/网站复用视觉插件,手机沿用 Artemis;工具成功不等于用例通过。",
|
||||
"artemis_version": ">=2.0.0,<3.0.0",
|
||||
"platforms": [
|
||||
"win32"
|
||||
],
|
||||
"architectures": [
|
||||
"amd64"
|
||||
],
|
||||
"license": "LicenseRef-Yitong-Artemis-Market; Apache-2.0-Adapter",
|
||||
"server": {
|
||||
"transport": "stdio",
|
||||
"command": "${config.python}",
|
||||
"args": [
|
||||
"-B",
|
||||
"${plugin_dir}/server.py"
|
||||
],
|
||||
"env": {
|
||||
"ARTEMIS_DEVICE_TEST_PROFILE": "${config.profile}",
|
||||
"ARTEMIS_DEVICE_TEST_TOOL_ROOT": "${config.tool_root}",
|
||||
"ARTEMIS_DEVICE_TEST_ENV_FILE": "${config.rtsp_env_file}",
|
||||
"ARTEMIS_DEVICE_TEST_TIMEOUT": "${config.operation_timeout_seconds}",
|
||||
"ARTEMIS_DEVICE_TEST_ALLOW_FIRMWARE_WRITE": "${config.allow_firmware_write}"
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"python": {
|
||||
"label": "Artemis Python 解释器",
|
||||
"description": "填写已安装 MCP 依赖的 Python 绝对路径。源码环境可使用项目 .venv/Scripts/python.exe。",
|
||||
"default": "python",
|
||||
"required": true
|
||||
},
|
||||
"profile": {
|
||||
"label": "本机工具 profile JSON",
|
||||
"description": "可选,固定 tools/runtimes/libraries 路径;不保存凭据。留空时自动发现统一目录和宿主 PATH;显式错误路径不回退。",
|
||||
"default": ""
|
||||
},
|
||||
"tool_root": {
|
||||
"label": "已解压工具目录",
|
||||
"description": "可选,本机已解压工具目录绝对路径;自动发现 EXE/匹配位数的 MediaInfo.dll,以及 binwalk-python/Scripts/python.exe。不安装程序。",
|
||||
"default": ""
|
||||
},
|
||||
"rtsp_env_file": {
|
||||
"label": "本机 RTSP 环境文件",
|
||||
"description": "可选,受控 .env 文件的绝对路径;仅按工具指定的环境变量名读取,不回显凭据。",
|
||||
"default": ""
|
||||
},
|
||||
"operation_timeout_seconds": {
|
||||
"label": "单次操作预算(秒)",
|
||||
"description": "默认 45。10..3300;增加前须将宿主 ARTEMIS_PLUGIN_TOOL_TIMEOUT_SECONDS 设得至少大 10 秒。任务总时限同样生效。",
|
||||
"default": "45"
|
||||
},
|
||||
"allow_firmware_write": {
|
||||
"label": "允许显式固件写入",
|
||||
"description": "默认 false。仅当前用例明确授权升级时设置 true;工具还要求 execute、完整身份、ROM SHA-256 和审阅摘要。",
|
||||
"default": "false"
|
||||
}
|
||||
},
|
||||
"skill": "SKILL.md",
|
||||
"targets": [
|
||||
"android",
|
||||
"mixed",
|
||||
"computer"
|
||||
],
|
||||
"resources": [
|
||||
"desktop:local",
|
||||
"lab:device-test"
|
||||
],
|
||||
"capabilities": {
|
||||
"kind": "other",
|
||||
"recording": "none",
|
||||
"required_tools": [
|
||||
"environment_doctor",
|
||||
"lookup_case",
|
||||
"probe_media",
|
||||
"media_info",
|
||||
"analyze_pcap",
|
||||
"scan_ports",
|
||||
"scan_firmware",
|
||||
"device_capabilities",
|
||||
"list_network_interfaces",
|
||||
"discover_devices",
|
||||
"identify_device",
|
||||
"device_info",
|
||||
"inspect_firmware",
|
||||
"firmware_preflight",
|
||||
"verify_firmware",
|
||||
"capture_packets",
|
||||
"capture_serial",
|
||||
"upgrade_firmware",
|
||||
"import_evidence",
|
||||
"bundle_evidence"
|
||||
],
|
||||
"tools": {
|
||||
"environment_doctor": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
]
|
||||
},
|
||||
"lookup_case": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
]
|
||||
},
|
||||
"probe_media": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "input_file"
|
||||
},
|
||||
"media_info": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "input_file"
|
||||
},
|
||||
"analyze_pcap": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "input_file"
|
||||
},
|
||||
"scan_ports": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "host"
|
||||
},
|
||||
"scan_firmware": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "input_file"
|
||||
},
|
||||
"device_capabilities": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
]
|
||||
},
|
||||
"list_network_interfaces": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
]
|
||||
},
|
||||
"discover_devices": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
]
|
||||
},
|
||||
"identify_device": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "host"
|
||||
},
|
||||
"device_info": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "host"
|
||||
},
|
||||
"inspect_firmware": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "rom_file"
|
||||
},
|
||||
"firmware_preflight": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "host"
|
||||
},
|
||||
"verify_firmware": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "host"
|
||||
},
|
||||
"capture_packets": {
|
||||
"effect": "write",
|
||||
"observation": false,
|
||||
"idempotent": false,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "host"
|
||||
},
|
||||
"capture_serial": {
|
||||
"effect": "write",
|
||||
"observation": false,
|
||||
"idempotent": false,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "port"
|
||||
},
|
||||
"upgrade_firmware": {
|
||||
"effect": "write",
|
||||
"observation": false,
|
||||
"idempotent": false,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "host"
|
||||
},
|
||||
"import_evidence": {
|
||||
"effect": "write",
|
||||
"observation": false,
|
||||
"idempotent": false,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "input_file"
|
||||
},
|
||||
"bundle_evidence": {
|
||||
"effect": "write",
|
||||
"observation": false,
|
||||
"idempotent": false,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "run_id"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
"schema_version": 2,
|
||||
"id": "artemis-device-test",
|
||||
"name": "家庭安防多工具测试",
|
||||
"version": "0.5.0+artemis.7",
|
||||
"description": "集成 artemis-device-test Skill:PATH/统一目录自动发现工具及匹配位数的 MediaInfo DLL、按能力独立自检、本机网卡枚举、357 条用例路由、媒体/抓包/串口、V1/V2 设备及联合证据。PC/网站复用视觉插件,手机沿用 Artemis;工具成功不等于用例通过。",
|
||||
"artemis_version": ">=3.0.0,<4.0.0",
|
||||
"platforms": [
|
||||
"win32"
|
||||
],
|
||||
"architectures": [
|
||||
"amd64"
|
||||
],
|
||||
"license": "LicenseRef-Yitong-Artemis-Market; Apache-2.0-Adapter",
|
||||
"server": {
|
||||
"transport": "stdio",
|
||||
"command": "${config.python}",
|
||||
"args": [
|
||||
"-B",
|
||||
"${plugin_dir}/server.py"
|
||||
],
|
||||
"env": {
|
||||
"ARTEMIS_DEVICE_TEST_PROFILE": "${config.profile}",
|
||||
"ARTEMIS_DEVICE_TEST_TOOL_ROOT": "${config.tool_root}",
|
||||
"ARTEMIS_DEVICE_TEST_ENV_FILE": "${config.rtsp_env_file}",
|
||||
"ARTEMIS_DEVICE_TEST_TIMEOUT": "${config.operation_timeout_seconds}",
|
||||
"ARTEMIS_DEVICE_TEST_ALLOW_FIRMWARE_WRITE": "${config.allow_firmware_write}"
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"python": {
|
||||
"label": "插件 Python 解释器(独立准备)",
|
||||
"description": "使用独立 Windows x64 Python,预先安装本插件 requirements.txt。Rust 主程序不提供 Python;安装插件不会运行 pip。",
|
||||
"default": "python",
|
||||
"required": true
|
||||
},
|
||||
"profile": {
|
||||
"label": "本机工具 profile JSON",
|
||||
"description": "可选,固定 tools/runtimes/libraries 路径;不保存凭据。留空时自动发现统一目录和宿主 PATH;显式错误路径不回退。",
|
||||
"default": ""
|
||||
},
|
||||
"tool_root": {
|
||||
"label": "已解压工具目录",
|
||||
"description": "可选,本机已解压工具目录绝对路径;自动发现 EXE/匹配位数的 MediaInfo.dll,以及 binwalk-python/Scripts/python.exe。不安装程序。",
|
||||
"default": ""
|
||||
},
|
||||
"rtsp_env_file": {
|
||||
"label": "本机 RTSP 环境文件",
|
||||
"description": "可选,受控 .env 文件的绝对路径;仅按工具指定的环境变量名读取,不回显凭据。",
|
||||
"default": ""
|
||||
},
|
||||
"operation_timeout_seconds": {
|
||||
"label": "单次操作预算(秒)",
|
||||
"description": "默认45,范围10..3300;宿主插件工具时限至少大10秒,并受任务剩余预算约束。",
|
||||
"default": "45"
|
||||
},
|
||||
"allow_firmware_write": {
|
||||
"label": "允许显式固件写入",
|
||||
"description": "默认 false。仅当前用例明确授权升级时设置 true;工具还要求 execute、完整身份、ROM SHA-256 和审阅摘要。",
|
||||
"default": "false"
|
||||
}
|
||||
},
|
||||
"skill": "SKILL.md",
|
||||
"targets": [
|
||||
"android",
|
||||
"mixed",
|
||||
"computer"
|
||||
],
|
||||
"resources": [
|
||||
"desktop:local",
|
||||
"lab:device-test"
|
||||
],
|
||||
"capabilities": {
|
||||
"kind": "other",
|
||||
"recording": "none",
|
||||
"required_tools": [
|
||||
"environment_doctor",
|
||||
"lookup_case",
|
||||
"probe_media",
|
||||
"media_info",
|
||||
"analyze_pcap",
|
||||
"scan_ports",
|
||||
"scan_firmware",
|
||||
"device_capabilities",
|
||||
"list_network_interfaces",
|
||||
"discover_devices",
|
||||
"identify_device",
|
||||
"device_info",
|
||||
"inspect_firmware",
|
||||
"firmware_preflight",
|
||||
"verify_firmware",
|
||||
"capture_packets",
|
||||
"capture_serial",
|
||||
"upgrade_firmware",
|
||||
"import_evidence",
|
||||
"bundle_evidence"
|
||||
],
|
||||
"tools": {
|
||||
"environment_doctor": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
]
|
||||
},
|
||||
"lookup_case": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
]
|
||||
},
|
||||
"probe_media": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "input_file"
|
||||
},
|
||||
"media_info": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "input_file"
|
||||
},
|
||||
"analyze_pcap": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "input_file"
|
||||
},
|
||||
"scan_ports": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "host"
|
||||
},
|
||||
"scan_firmware": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "input_file"
|
||||
},
|
||||
"device_capabilities": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
]
|
||||
},
|
||||
"list_network_interfaces": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
]
|
||||
},
|
||||
"discover_devices": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
]
|
||||
},
|
||||
"identify_device": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "host"
|
||||
},
|
||||
"device_info": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "host"
|
||||
},
|
||||
"inspect_firmware": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "rom_file"
|
||||
},
|
||||
"firmware_preflight": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "host"
|
||||
},
|
||||
"verify_firmware": {
|
||||
"effect": "read",
|
||||
"observation": false,
|
||||
"idempotent": true,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "host"
|
||||
},
|
||||
"capture_packets": {
|
||||
"effect": "write",
|
||||
"observation": false,
|
||||
"idempotent": false,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "host"
|
||||
},
|
||||
"capture_serial": {
|
||||
"effect": "write",
|
||||
"observation": false,
|
||||
"idempotent": false,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "port"
|
||||
},
|
||||
"upgrade_firmware": {
|
||||
"effect": "write",
|
||||
"observation": false,
|
||||
"idempotent": false,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "host"
|
||||
},
|
||||
"import_evidence": {
|
||||
"effect": "write",
|
||||
"observation": false,
|
||||
"idempotent": false,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "input_file"
|
||||
},
|
||||
"bundle_evidence": {
|
||||
"effect": "write",
|
||||
"observation": false,
|
||||
"idempotent": false,
|
||||
"cancellation": "unknown",
|
||||
"evidence": [
|
||||
"text",
|
||||
"state",
|
||||
"file"
|
||||
],
|
||||
"target_argument": "run_id"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user