{"_id":"@alicloud/alibabacloud-hitl-claw-plugin","_rev":"4-b6e89ab8239df2c3b695ddb46198b5fb","name":"@alicloud/alibabacloud-hitl-claw-plugin","dist-tags":{"latest":"0.0.4"},"versions":{"0.0.1":{"name":"@alicloud/alibabacloud-hitl-claw-plugin","version":"0.0.1","keywords":["openclaw","plugin","alibabacloud-hitl-claw-plugin","security","confirmation"],"author":{"name":"Alibaba Cloud"},"license":"MIT","_id":"@alicloud/alibabacloud-hitl-claw-plugin@0.0.1","maintainers":[{"name":"jacksontian","email":"shyvo1987@gmail.com"},{"name":"fengmk2","email":"fengmk2@gmail.com"},{"name":"pagecao","email":"cpj1106@gmail.com"},{"name":"aliyunsdkteam","email":"sdk-team@alibabacloud.com"},{"name":"console-fe","email":"console-fe@alibabacloud.com"}],"dist":{"shasum":"b28e6c0dc8475375b869d2f74089c69e2349811a","tarball":"https://registry.npmjs.org/@alicloud/alibabacloud-hitl-claw-plugin/-/alibabacloud-hitl-claw-plugin-0.0.1.tgz","fileCount":6,"integrity":"sha512-YddLy/DmIEAmK6D+w9/ZW5sd46CACyx7Zn/+ZJ2dXImay3lZf66iBXE+mjcMyv3Jris2zF/W9kxcpobl/SKNiA==","signatures":[{"sig":"MEUCIQCuZfJH9v5/dur9yU2oodXTrpwoTw3SaQvndFZoKfrv6wIgIUPa+aO2N/zn/SVcF4r2LswsLO/VwdK+5IIUUMLIna0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12222},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"69e2402fff2fd927aff6c0c12068406d0b1dfc50","scripts":{"dev":"tsc --watch","test":"vitest run","build":"rm -f tsconfig.tsbuildinfo && tsc","prebuild":"node -e \"const pkg=require('./package.json');const plugin=require('./openclaw.plugin.json');plugin.version=pkg.version;require('fs').writeFileSync('./openclaw.plugin.json',JSON.stringify(plugin,null,2))\"","test:watch":"vitest"},"_npmUser":{"name":"aliyunsdkteam","email":"sdk-team@alibabacloud.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24","pluginSdkVersion":"2026.3.24"},"hooks":["before_tool_call"],"compat":{"pluginApi":">=2026.3.24","minGatewayVersion":"2026.3.24"},"extensions":["./dist/index.js"]},"_npmVersion":"10.9.3","description":"OpenClaw plugin for intercepting tool calls with user confirmation","directories":{},"_nodeVersion":"22.20.0","dependencies":{"nanoid":"^5.1.7","shell-quote":"^1.8.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.2","typescript":"^5.0.0","@types/node":"^20.0.0","@types/shell-quote":"^1.7.5"},"peerDependencies":{"openclaw":">=2026.3.24"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/alibabacloud-hitl-claw-plugin_0.0.1_1775009973105_0.3290361444532375","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@alicloud/alibabacloud-hitl-claw-plugin","version":"0.0.2","keywords":["openclaw","plugin","alibabacloud-hitl-claw-plugin","security","confirmation"],"author":{"name":"Alibaba Cloud"},"license":"MIT","_id":"@alicloud/alibabacloud-hitl-claw-plugin@0.0.2","maintainers":[{"name":"jacksontian","email":"shyvo1987@gmail.com"},{"name":"fengmk2","email":"fengmk2@gmail.com"},{"name":"pagecao","email":"cpj1106@gmail.com"},{"name":"aliyunsdkteam","email":"sdk-team@alibabacloud.com"},{"name":"console-fe","email":"console-fe@alibabacloud.com"}],"dist":{"shasum":"a4244170c5e139a26a900d9d43256c97f30a6c13","tarball":"https://registry.npmjs.org/@alicloud/alibabacloud-hitl-claw-plugin/-/alibabacloud-hitl-claw-plugin-0.0.2.tgz","fileCount":6,"integrity":"sha512-wYUnXMxmWZWfV4YN+K4Tx0bcWVsjcu+Ly06BamQO5WCB9OD5NCf1cGnT/64Q0+QLbWOLx0U8VHmlecTHnXXMHQ==","signatures":[{"sig":"MEUCIQCYypi1TFbYXvIcEpmSTd9VRXZJydkC6RSTx9mxgJs/+AIgNDfdbe8mNMiGi0AN9Ahl0h127e+TR0g38NWSA4BzfYM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12120},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"19749bcd347310a1fad5e23045c0e9954f7f8202","scripts":{"dev":"tsc --watch","test":"vitest run","build":"rm -f tsconfig.tsbuildinfo && tsc","prebuild":"node -e \"const pkg=require('./package.json');const plugin=require('./openclaw.plugin.json');plugin.version=pkg.version;require('fs').writeFileSync('./openclaw.plugin.json',JSON.stringify(plugin,null,2))\"","test:watch":"vitest"},"_npmUser":{"name":"aliyunsdkteam","email":"sdk-team@alibabacloud.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24","pluginSdkVersion":"2026.3.24"},"hooks":["before_tool_call"],"compat":{"pluginApi":">=2026.3.24","minGatewayVersion":"2026.3.24"},"extensions":["./dist/index.js"]},"_npmVersion":"10.9.2","description":"OpenClaw plugin for intercepting tool calls with user confirmation","directories":{},"_nodeVersion":"23.10.0","dependencies":{"nanoid":"^5.1.7","shell-quote":"^1.8.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.2","typescript":"^5.0.0","@types/node":"^20.0.0","@types/shell-quote":"^1.7.5"},"peerDependencies":{"openclaw":">=2026.3.24"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/alibabacloud-hitl-claw-plugin_0.0.2_1775031005703_0.7526639536921162","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@alicloud/alibabacloud-hitl-claw-plugin","version":"0.0.3","keywords":["openclaw","plugin","alibabacloud-hitl-claw-plugin","security","confirmation"],"author":{"name":"Alibaba Cloud"},"license":"MIT","_id":"@alicloud/alibabacloud-hitl-claw-plugin@0.0.3","maintainers":[{"name":"jacksontian","email":"shyvo1987@gmail.com"},{"name":"fengmk2","email":"fengmk2@gmail.com"},{"name":"pagecao","email":"cpj1106@gmail.com"},{"name":"aliyunsdkteam","email":"sdk-team@alibabacloud.com"},{"name":"console-fe","email":"console-fe@alibabacloud.com"}],"dist":{"shasum":"f2c6f0a47d5e4be7468daaf0939e679dcab71748","tarball":"https://registry.npmjs.org/@alicloud/alibabacloud-hitl-claw-plugin/-/alibabacloud-hitl-claw-plugin-0.0.3.tgz","fileCount":42,"integrity":"sha512-9c5UtC5ZlQeWeNhT348vufjHq7pDpo4uMuxLP5pig2q1CE3jiCjZwi+YyJn8rdoSi81E3vLzyg3/ECYeDQTAPw==","signatures":[{"sig":"MEUCIF14jDc/Ky9ZoZcro7miS06wRFPP6YEBv1PaSzZhhAhbAiEAqmRcHWCLABs5Sh7orFk/J8rHo4pUiqKdeWu+izopWog=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":98172},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"03e16327a20ab6c97bdfee8410410c404567665d","scripts":{"dev":"tsc --watch","test":"vitest run","build":"rm -f tsconfig.tsbuildinfo && tsc","prebuild":"node -e \"const pkg=require('./package.json');const plugin=require('./openclaw.plugin.json');plugin.version=pkg.version;require('fs').writeFileSync('./openclaw.plugin.json',JSON.stringify(plugin,null,2))\"","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"aliyunsdkteam","email":"sdk-team@alibabacloud.com"},"openclaw":{"build":{"openclawVersion":"2026.3.24","pluginSdkVersion":"2026.3.24"},"hooks":["before_tool_call"],"compat":{"pluginApi":">=2026.3.24","minGatewayVersion":"2026.3.24"},"extensions":["./dist/index.js"]},"_npmVersion":"10.9.2","description":"OpenClaw plugin for intercepting tool calls with user confirmation","directories":{},"_nodeVersion":"23.10.0","dependencies":{"nanoid":"^5.1.7","shell-quote":"^1.8.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.2","typescript":"^5.0.0","@types/node":"^20.0.0","@types/shell-quote":"^1.7.5"},"peerDependencies":{"openclaw":">=2026.3.24"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/alibabacloud-hitl-claw-plugin_0.0.3_1775118804565_0.4377518964891516","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@alicloud/alibabacloud-hitl-claw-plugin","version":"0.0.4","type":"module","description":"OpenClaw plugin for intercepting tool calls with user confirmation","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"prebuild":"node -e \"const pkg=require('./package.json');const plugin=require('./openclaw.plugin.json');plugin.version=pkg.version;require('fs').writeFileSync('./openclaw.plugin.json',JSON.stringify(plugin,null,2))\"","build":"rm -f tsconfig.tsbuildinfo && tsc","prepublishOnly":"npm run build","dev":"tsc --watch","test":"vitest run","test:watch":"vitest"},"keywords":["openclaw","plugin","alibabacloud-hitl-claw-plugin","security","confirmation"],"author":{"name":"Alibaba Cloud"},"license":"MIT","openclaw":{"extensions":["./dist/index.js"],"hooks":["before_tool_call"],"compat":{"pluginApi":">=2026.3.24","minGatewayVersion":"2026.3.24"},"build":{"openclawVersion":"2026.3.24","pluginSdkVersion":"2026.3.24"}},"dependencies":{"nanoid":"^5.1.7","shell-quote":"^1.8.3"},"devDependencies":{"@types/node":"^20.0.0","@types/shell-quote":"^1.7.5","typescript":"^5.0.0","vitest":"^4.1.2"},"peerDependencies":{"openclaw":">=2026.3.24"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"engines":{"node":">=18.0.0"},"publishConfig":{"access":"public"},"_id":"@alicloud/alibabacloud-hitl-claw-plugin@0.0.4","gitHead":"7f8cb8115fa1533f6f16c0e470dc38e5d71a3a31","_nodeVersion":"23.10.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-KhrMTtR9hVpaWXfIoXC7+l0jXi98hJZOO5iCPNXVRI1ZoVPJnObdtKdeX0lrIum/lhFB2uRfQxaEawSJ4LbnxQ==","shasum":"6cec93e219a6c5eca6b38b8487425a475bcc5ce7","tarball":"https://registry.npmjs.org/@alicloud/alibabacloud-hitl-claw-plugin/-/alibabacloud-hitl-claw-plugin-0.0.4.tgz","fileCount":42,"unpackedSize":104158,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGY7XbvvUMQVsgmXJnd7eACN25VJ/ZklXzTzpkZEiN0vAiB5kuLwXPPdD80mjKLhXvIm7Ed024ZpvLKfyZhVagayhg=="}]},"_npmUser":{"name":"aliyunsdkteam","email":"sdk-team@alibabacloud.com"},"directories":{},"maintainers":[{"name":"jacksontian","email":"shyvo1987@gmail.com"},{"name":"fengmk2","email":"fengmk2@gmail.com"},{"name":"pagecao","email":"cpj1106@gmail.com"},{"name":"aliyunsdkteam","email":"sdk-team@alibabacloud.com"},{"name":"console-fe","email":"console-fe@alibabacloud.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/alibabacloud-hitl-claw-plugin_0.0.4_1775618756760_0.4129112998264839"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-01T02:19:33.022Z","modified":"2026-04-08T03:25:57.136Z","0.0.1":"2026-04-01T02:19:33.237Z","0.0.2":"2026-04-01T08:10:05.829Z","0.0.3":"2026-04-02T08:33:24.758Z","0.0.4":"2026-04-08T03:25:56.912Z"},"author":{"name":"Alibaba Cloud"},"license":"MIT","keywords":["openclaw","plugin","alibabacloud-hitl-claw-plugin","security","confirmation"],"description":"OpenClaw plugin for intercepting tool calls with user confirmation","maintainers":[{"name":"jacksontian","email":"shyvo1987@gmail.com"},{"name":"fengmk2","email":"fengmk2@gmail.com"},{"name":"pagecao","email":"cpj1106@gmail.com"},{"name":"aliyunsdkteam","email":"sdk-team@alibabacloud.com"},{"name":"console-fe","email":"console-fe@alibabacloud.com"}],"readme":"# 阿里云 Agent HITL (预览版)\n\n[English](./README.md)\n\n一款 [OpenClaw](https://github.com/nicepkg/openclaw) 插件，在执行阿里云 CLI 命令时进行风险检测，必要时触发人机协同机制(HITL - Human in the Loop)，降低操作风险。\n\n> **特别说明：**\n>\n> 大模型有很强的自主性，在 Agent 执行中仍有一些不确定性，请务必严格控制 Agent 的权限；\n>\n> 本插件处于预览版，可能无法覆盖所有风险操作，请务必充分试用以确认满足使用需要。\n\n## 目录\n\n- [前置要求](#前置要求)\n- [快速开始](#快速开始)\n- [功能特性](#功能特性)\n- [配置说明](#配置说明)\n- [安全说明](#安全说明)\n- [许可证](#许可证)\n\n## 前置要求\n\n- OpenClaw >= 2026.3.24\n- Node.js >= 22.0.0\n- 已安装并配置阿里云 CLI (`aliyun`)\n- 使用外部渠道时，需要设置：`openclaw config set session.dmScope per-channel-peer`\n- **不支持自定义 API**\n\n## 快速开始\n\n```bash\nopenclaw plugins install @alicloud/alibabacloud-hitl-claw-plugin\n```\n\n## 功能特性\n\n- **CLI 命令识别**：识别 Agent 执行的 `aliyun` CLI 命令\n- **风险评估**：集成阿里云 IMS `CheckHitlRule` API 进行风险检测\n- **人工审批**：高、中风险命令需要通过安全链接进行人工审批\n- **多渠道支持**：支持钉钉、飞书及 OpenClaw 控制台界面\n\n### 命令识别范围\n\n#### 触发条件\n\n| 条件 | 说明 |\n|------|------|\n| 工具类型 | 仅检测 `exec` 命令下阿里云 CLI: `aliyun` 调用 |\n| 命令模式 | 匹配 `aliyun <产品代码> <API名称> [参数...]` |\n| 支持风格 | RPC 风格和 ROA 风格均支持 |\n\n#### 解析方式\n\n使用 [shell-quote](https://www.npmjs.com/package/shell-quote) 库进行专业的 shell 命令解析，支持：\n\n- 管道操作符 `|`\n- 逻辑运算符 `&&`、`||`\n- 命令分隔符 `;`\n- 后台执行 `&`\n- 引号和转义字符\n\n#### 示例\n\n| 原始命令 | 服务端检测 | 发送至服务端的命令 | 说明 |\n|----------|------------|-------------------|------|\n| `aliyun ecs DescribeInstances` | ✅ 是 | `aliyun ecs DescribeInstances` | 标准 RPC 风格 |\n| `aliyun ram CreateUser --UserName test` | ✅ 是 | `aliyun ram CreateUser --UserName test` | 带参数的写操作 |\n| `aliyun cs GET /clusters` | ✅ 是 | `aliyun cs GET /clusters` | ROA 风格 |\n| `ls && aliyun ecs DeleteInstance --InstanceId i-xxx` | ✅ 是 | `aliyun ecs DeleteInstance --InstanceId i-xxx` | 从复合命令中提取阿里云部分 |\n| `aliyun configure` | ❌ 否 | - | 缺少 API 名称，不触发检测 |\n| `aws ec2 describe-instances` | ❌ 否 | - | 非阿里云命令 |\n\n### 风控决策\n\n风控 API (`aliyun ims CheckHitlRule`) 返回三种决策：\n\n| 决策 | 含义 | 插件行为 |\n|------|------|----------|\n| `ALLOW` | 低风险，允许执行 | 直接放行 |\n| `ESCALATE` | 高风险，需人工审批 | 挂起等待审批 |\n\n### 工作原理\n\n![HITL 工作流程](./assets/hitl-workflow-zh.png)\n\n## 配置说明\n\n插件从 `config.json` 读取配置：\n\n```json\n{\n  \"enabled\": true,\n  \"confirmationTimeoutSeconds\": 600\n}\n```\n\n| 配置项 | 类型 | 默认值 | 说明 |\n|--------|------|--------|------|\n| `enabled` | boolean | `true` | 是否启用插件 |\n| `confirmationTimeoutSeconds` | number | `600` | 审批超时时间（秒） |\n\n## 安全说明\n\n### 1. Shell 命令执行\n\n本插件会调用 **阿里云 CLI** 用于：\n\n| 场景 | 说明 |\n|------|------|\n| 敏感操作检测 | 调用 `aliyun ims CheckHitlRule` 检测当前命令是否为敏感操作 |\n| 恢复执行用户的 CLI 请求 | 用户审批通过后，恢复执行原始命令 |\n\n本插件运行在 Node.js 环境中，调用 aliyun CLI 程序需通过 `child_process` 模块实现。\n\n**发送至服务端的数据**：aliyun CLI 命令内容、CLI 版本、插件版本、Agent 类型、Session ID\n\n### 2. 网络请求\n\n本插件使用 `fetch` 轮询审批状态，并通过 OpenClaw 的 `dispatchReplyFromConfig` API 向外部渠道（钉钉、飞书）发送审批结果通知。\n\n- 不会将任何敏感凭证发送至服务端\n- 网络请求仅用于审批状态轮询和消息通知\n\n\n**以上行为均为插件核心功能所必需，涉及的敏感信息均在本地处理，不会发送至服务端。**\n\n## 许可证\n\nMIT\n","readmeFilename":"README.zh-CN.md"}