feat(plugins): prepare isolated Rust 3 preview market

This commit is contained in:
chenmingxuan committed 2026-11-01 17:58:26 +08:00
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、账号或测试数据。
+137 -125
View File
@@ -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结果不外推。"
}
}
}
+60 -58
View File
@@ -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 秘密只通过受控配置文件读取;固件写入默认关闭,未知结果不得重试。
+2
View File
@@ -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。"
}
}
}
+336 -336
View File
@@ -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"
}
}
}
}