@@ -72,7 +72,92 @@ deny: 阻断
7272
7373处理结果以结构化报告返回。例如被拦截时,调用方不会执行真实工具逻辑,而是收到 ` safety_report ` ,其中 ` blocked=true ` 、` decision=deny ` ,并包含命中的 ` rule_id ` 、证据和修复建议。
7474
75- 完整 JSON response 示例:
75+ 三类 decision 的完整 JSON response 示例:
76+
77+ ### allow response
78+
79+ ``` json
80+ {
81+ "blocked" : false ,
82+ "categories" : [
83+ " safe"
84+ ],
85+ "decision" : " allow" ,
86+ "elapsed_ms" : 0.0 ,
87+ "expected_decision" : " allow" ,
88+ "findings" : [],
89+ "language" : " bash" ,
90+ "required_rule_ids" : [],
91+ "risk_level" : " none" ,
92+ "sample" : " examples/tool_safety/samples/safe_bash.sh" ,
93+ "sanitized" : false ,
94+ "scan_id" : " manifest:030:safe_bash.sh" ,
95+ "summary" : " No safety rules matched; execution is allowed by the current static policy." ,
96+ "telemetry_attributes" : {
97+ "tool.safety.blocked" : false ,
98+ "tool.safety.decision" : " allow" ,
99+ "tool.safety.duration_ms" : 0.0 ,
100+ "tool.safety.risk_level" : " none" ,
101+ "tool.safety.rule_id" : " " ,
102+ "tool.safety.sanitized" : false ,
103+ "tool.safety.scan_id" : " manifest:030:safe_bash.sh" ,
104+ "tool.safety.tool_name" : " safe_bash.sh"
105+ },
106+ "timestamp" : " 1970-01-01T00:00:00+00:00" ,
107+ "tool_name" : " safe_bash.sh"
108+ }
109+ ```
110+
111+ ### needs_human_review response
112+
113+ ``` json
114+ {
115+ "blocked" : false ,
116+ "categories" : [
117+ " process_execution"
118+ ],
119+ "decision" : " needs_human_review" ,
120+ "elapsed_ms" : 0.0 ,
121+ "expected_decision" : " needs_human_review" ,
122+ "findings" : [
123+ {
124+ "column" : 0 ,
125+ "decision" : " needs_human_review" ,
126+ "evidence" : " subprocess.run([\" python3\" , \" --version\" ], check=True)" ,
127+ "line" : 3 ,
128+ "message" : " Python process execution via subprocess.run requires review." ,
129+ "metadata" : {},
130+ "recommendation" : " Review subprocess/os.system usage and prefer a constrained wrapper." ,
131+ "risk_level" : " medium" ,
132+ "risk_type" : " process_command" ,
133+ "rule_id" : " PY_PROCESS_EXECUTION_REVIEW"
134+ }
135+ ],
136+ "language" : " python" ,
137+ "required_rule_ids" : [
138+ " PY_PROCESS_EXECUTION_REVIEW"
139+ ],
140+ "risk_level" : " medium" ,
141+ "sample" : " examples/tool_safety/samples/subprocess_call.py" ,
142+ "sanitized" : false ,
143+ "scan_id" : " manifest:036:subprocess_call.py" ,
144+ "summary" : " Decision needs_human_review with medium risk from rules: PY_PROCESS_EXECUTION_REVIEW." ,
145+ "telemetry_attributes" : {
146+ "tool.safety.blocked" : false ,
147+ "tool.safety.decision" : " needs_human_review" ,
148+ "tool.safety.duration_ms" : 0.0 ,
149+ "tool.safety.risk_level" : " medium" ,
150+ "tool.safety.rule_id" : " PY_PROCESS_EXECUTION_REVIEW" ,
151+ "tool.safety.sanitized" : false ,
152+ "tool.safety.scan_id" : " manifest:036:subprocess_call.py" ,
153+ "tool.safety.tool_name" : " subprocess_call.py"
154+ },
155+ "timestamp" : " 1970-01-01T00:00:00+00:00" ,
156+ "tool_name" : " subprocess_call.py"
157+ }
158+ ```
159+
160+ ### deny response
76161
77162``` json
78163{
0 commit comments