Skip to content

feat(safety): 工具调用分级安全系统 - #29

Open
uuuiiiiooo wants to merge 1 commit into
Lianues:devfrom
uuuiiiiooo:feat/safety-tiered-classification
Open

feat(safety): 工具调用分级安全系统#29
uuuiiiiooo wants to merge 1 commit into
Lianues:devfrom
uuuiiiiooo:feat/safety-tiered-classification

Conversation

@uuuiiiiooo

Copy link
Copy Markdown
Contributor

功能概要

为 Iris 添加完整的工具调用安全分级体系,通过风险等级评估 + AI 多 reviewer 审阅 + 用户确认三层机制保护高风险操作。系统默认关闭,未配置时零干扰。

核心组件

  • SafetyEngine — 4级风险评估(low/medium/high/critical),3种内置安全模式(standard/relaxed/unrestricted),动态 review 乘数
  • ReviewService — 多 reviewer 并发 AI 审阅,超时容错,动态聚合策略(any_deny/unanimous/majority/raw)
  • Scheduler 安全门 — fail-closed 原则,review 门 + confirm 门双独立门控,abstain 和缺失基础设施均拒绝
  • Bootstrap 注入 — iris-core 实例化引擎,Backend.setSafetyCtx() 注入 ToolLoop,子代理通过 deps 继承
  • SDK 接口 — SafetyEngineReadonly/SafetyEngineLike 接口分离,内置模式不可覆盖,防御性拷贝防止引用泄露

变更范围

模块 文件 说明
安全引擎 src/safety/engine.ts 风险评估+模式管理
审阅服务 src/review/service.ts LLM reviewer 编排
调度器 src/tools/scheduler.ts 安全门集成
Bootstrap src/core/iris-core.ts, backend.ts 实例化+注入
SDK packages/extension-sdk/src/safety.ts 类型定义+平台工具
子代理 src/tools/internal/sub-agent/index.ts safetyCtx 传递
测试 tests/safety-*.test.ts ×3 58个测试

测试要点

  • 58 个测试全部通过(22 SafetyEngine + 22 ReviewService + 14 集成)
  • npx tsc --noEmit 零错误(主项目 + extension-sdk)
  • 不配置 safety 时系统行为与改动前完全一致
  • 启用 safety 后 low 风险工具无干扰、high/critical 触发审阅+确认
  • fail-closed: ReviewService 缺失或全部 reviewer 失败时拒绝执行

实现完整的工具调用安全分级体系:

- SafetyEngine: 4级风险评估(low/medium/high/critical),3种内置模式(standard/relaxed/unrestricted)
- ReviewService: 多reviewer并发AI审阅,动态聚合策略(any_deny/unanimous/majority/raw)
- scheduler安全门: fail-closed原则,review门+confirm门双独立门控
- Bootstrap注入: iris-core实例化引擎,Backend.setSafetyCtx()注入ToolLoop
- 子代理继承: safetyCtx通过deps向下传递
- autoApproveHandle安全感知: 非交互平台主动拒绝safetyConfirmRequired
- extension-sdk: SafetyEngineReadonly/SafetyEngineLike接口分离,内置模式不可覆盖
- 58个测试(22单元+22单元+14集成)全部通过

系统默认关闭(enabled:false),未配置时零干扰。
@Lianues
Lianues force-pushed the dev branch 2 times, most recently from b8c9b1c to da04e9a Compare April 14, 2026 00:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant