{"_id":"@eco-dsh/eco-permission-gate","_rev":"3-e807fb7cd56cf653dfc9fc31164d61b0","name":"@eco-dsh/eco-permission-gate","dist-tags":{"latest":"0.3.0"},"versions":{"0.1.0":{"name":"@eco-dsh/eco-permission-gate","version":"0.1.0","keywords":["dsh","dsh-plugin","cordis","permission","security","risk","eco-agent"],"license":"MIT","_id":"@eco-dsh/eco-permission-gate@0.1.0","maintainers":[{"name":"13907387110ms","email":"awep000@qq.com"}],"dist":{"shasum":"7887c1f6b61d2fdfc357ce4a8be352e8903ffea0","tarball":"https://registry.npmjs.org/@eco-dsh/eco-permission-gate/-/eco-permission-gate-0.1.0.tgz","fileCount":4,"integrity":"sha512-p+q0ovVOXKpCM5BBwoSo88bBTEWAmhLmJg831VDHXEIpuAxjHAVtBC84LAKe3HoOWRh5OcAZclBhH8fhAJXwmw==","signatures":[{"sig":"MEQCIHd9pBVXTaHKt++05MmYrF0YOcTokSd/APJ8JL1nffc2AiAQk1OIU6ggcqo4doc4U2WU/xvou7ICoWFlrWpT3WQrPQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13262},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js"}},"gitHead":"4ce16543838f1abefd0c4fb203c61a84dc1736fa","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"13907387110ms","email":"awep000@qq.com"},"_npmVersion":"10.9.0","description":"dsh plugin: L1-L4 risk permission gate (port of eco-agent permissions.py)","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.0","@deepseek-ai/dsh-tools":"^0.0.1-rc.1","@deepseek-ai/schemastery":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eco-permission-gate_0.1.0_1787056865115_0.7371054039817282","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@eco-dsh/eco-permission-gate","version":"0.2.0","keywords":["dsh","dsh-plugin","cordis","permission","security","risk","eco-agent"],"license":"MIT","_id":"@eco-dsh/eco-permission-gate@0.2.0","maintainers":[{"name":"13907387110ms","email":"awep000@qq.com"}],"dist":{"shasum":"ea8f4f320c566243679912318dc972d578f264f6","tarball":"https://registry.npmjs.org/@eco-dsh/eco-permission-gate/-/eco-permission-gate-0.2.0.tgz","fileCount":4,"integrity":"sha512-UFWJWtJZAaGc5V4paR4h8ymqxp4XQ7yZliohXarwpJ+maH6IfG0Wv6bUxflHeGJd9/2k8s7OA6nYmWYtUf1qxw==","signatures":[{"sig":"MEUCIAJTKWo2gzaafu1opMvYm8G/vN9/bcfip4DN1G+JXTV3AiEAz5o8OGLpI9UzpfB+Clk1Vtk+M3z0GY2WfRYzQbbCVDw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17186},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js"}},"gitHead":"4ce16543838f1abefd0c4fb203c61a84dc1736fa","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"13907387110ms","email":"awep000@qq.com"},"_npmVersion":"10.9.0","description":"dsh plugin: L1-L4 risk permission gate (port of eco-agent permissions.py)","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.0","@deepseek-ai/dsh-tools":"^0.0.1-rc.1","@deepseek-ai/schemastery":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eco-permission-gate_0.2.0_1787058296738_0.7414815769363381","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@eco-dsh/eco-permission-gate","version":"0.3.0","description":"dsh plugin: L1-L4 risk permission gate (port of eco-agent permissions.py)","type":"module","main":"lib/index.js","types":"lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js"}},"scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"keywords":["dsh","dsh-plugin","cordis","permission","security","risk","eco-agent"],"license":"MIT","peerDependencies":{"@deepseek-ai/cordis":"^4.0.0","@deepseek-ai/dsh-tools":"^0.0.1-rc.1","@deepseek-ai/schemastery":"^3.0.0"},"devDependencies":{"typescript":"^5.5.0"},"_id":"@eco-dsh/eco-permission-gate@0.3.0","gitHead":"4ce16543838f1abefd0c4fb203c61a84dc1736fa","_nodeVersion":"22.12.0","_npmVersion":"10.9.0","dist":{"integrity":"sha512-nfB9q/nY3q4nvN1Cn7fKX1l0YSThIUIdwQC1li7xqjCw1xoc723gGMxTxRZv5zQKAyUbI7fWpdpdGa+anAfMYg==","shasum":"9ac4e5f67f0562293fd8d82077a896ad96ad977a","tarball":"https://registry.npmjs.org/@eco-dsh/eco-permission-gate/-/eco-permission-gate-0.3.0.tgz","fileCount":4,"unpackedSize":25702,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAxk2dI4P2ktt1UGCntISAjZwOQU2o5CHQb9OUzCNZrTAiB2SQWpshaQsuvbekzxCJzfMn49qb68z4MqG735VrlpXQ=="}]},"_npmUser":{"name":"13907387110ms","email":"awep000@qq.com"},"directories":{},"maintainers":[{"name":"13907387110ms","email":"awep000@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eco-permission-gate_0.3.0_1787062325745_0.32515166422614805"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-18T12:41:04.832Z","modified":"2026-08-18T14:12:06.073Z","0.1.0":"2026-08-18T12:41:05.258Z","0.2.0":"2026-08-18T13:04:56.899Z","0.3.0":"2026-08-18T14:12:05.901Z"},"license":"MIT","keywords":["dsh","dsh-plugin","cordis","permission","security","risk","eco-agent"],"description":"dsh plugin: L1-L4 risk permission gate (port of eco-agent permissions.py)","maintainers":[{"name":"13907387110ms","email":"awep000@qq.com"}],"readme":"# eco-permission-gate\n\ndsh plugin — L1-L4 风险权限闸门。\n\n> 移植自 [xiejianjun000/eco-agent](https://github.com/xiejianjun000/eco-agent) 的 `agent_core/permissions.py`（MIT License），能力对齐原版五级风险分级思路（L1-L4 + 默认 L3）。\n\n## 作用\n\n在 dsh 的工具调用前拦截（`tools/pre-execute` 钩子），按工具名/命令前缀解析风险等级，自动放行安全操作、对高危操作要求用户确认或直接拒绝：\n\n| 级别 | 含义 | 默认行为 |\n|------|------|----------|\n| L1 | READ（只读查询） | 自动放行 |\n| L2 | WRITE_LOCAL（本地安全区写入） | 自动放行 |\n| L3 | EXEC（命令/代码执行） | 白名单自动放行，其余按 mode（auto/ask/deny） |\n| L4 | EXTERNAL（外部服务写入） | 默认 ask，可配 deny |\n\n等级解析顺序：`PERMISSION.md / 配置覆盖` > `前缀映射` > `默认 L3`。`mcp__{server}__{tool}` 远程工具一律保守解析为 L3。\n\n## v0.2.0 — 策略热更新 + 三插件联动\n\n- 新增 `eco_policy_reload` 工具：运行时重新解析 `PERMISSION.md` 与配置 overrides，无需重启插件；同时提供 `ctx.ecoPolicy.reload()` 服务。\n- 新增 `recordDeniedToMemory` 配置：开启后每次拒绝事件自动写入记忆树（`[SECURITY]` 前缀 + `security/denied/tool` 标签），配合 eco-memory-tree 形成安全事件记忆。\n- 联动采用 `ctx.get()` 读取可选服务，未加载审计链 / 记忆树时静默降级，不影响权限闸门独立使用。\n\n## v0.3.0 — 声明式通配符规则引擎\n\n- 新增 `rules` 配置：有序的 `allow / ask / deny` 规则，支持工具名 glob（`tools: [\"mcp__*\", \"shell_*\"]`）、参数 glob（`params: { command: \"rm -rf*\" }`）、路径 glob（`paths: [\"/workspace/tmp/*\"]`），**first-match-wins**，先于 L1-L4 分级执行。\n- 生态对齐：遵循 dsh 生态（dsh-permission-rules / dsh-permissions / dsh-gov）惯例——拒绝规则写在前面、放行规则写在最后。\n- `eco_policy_reload` 返回体新增 `rules` 字段（当前生效规则数），热更新无需重启。\n\n## 安装\n\n```bash\nnpm install @eco-dsh/eco-permission-gate\n```\n\n```ts\nimport * as ecoPermissionGate from '@eco-dsh/eco-permission-gate'\n\napp.plugin(ecoPermissionGate, {\n  mode: 'ask',        // L3 非白名单：auto 放行 / ask 确认 / deny 拒绝\n  l4Mode: 'ask',      // L4：ask / deny\n  nonInteractive: false,\n  riskOverrides: { web_search: 'L1' },\n  l3Whitelist: ['python _scripts/lint.py'],\n  policyFile: '',     // 可选 PERMISSION.md 路径\n})\n```\n\n## 与 eco-audit-chain 联动\n\n被拒绝的调用会通过 `ctx.ecoAudit.recordDenied()` 写入审计链（需同时加载 eco-audit-chain），拒绝事件可追溯。\n\n## 配置项\n\n| 字段 | 默认 | 说明 |\n|------|------|------|\n| `mode` | `ask` | L3 非白名单处理 |\n| `l4Mode` | `ask` | L4 处理 |\n| `nonInteractive` | `false` | 非交互模式下 ask 降级为 deny |\n| `riskOverrides` | `{}` | 工具级覆盖，如 `{ \"web_search\": \"L1\" }` |\n| `l3Whitelist` | `[]` | 追加 L3 命令前缀白名单 |\n| `policyFile` | `''` | PERMISSION.md 路径（`tool_risk_overrides` 块会被解析） |\n\n## 许可\n\nMIT。原始实现版权归 [xiejianjun000/eco-agent](https://github.com/xiejianjun000/eco-agent) 所有，本包为 dsh 生态移植版。\n","readmeFilename":"README.md"}