MCPcopy Create free account
hub / github.com/Louisym/MiniCC / main

Function main

tutorials/08_hook_system.py:315–432  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

313# ============================================================
314
315def main():
316 print("=" * 60)
317 print("Tutorial 08: Hook System 演示")
318 print("=" * 60)
319
320 # --- 1. 允许型 Hook(退出码 0)---
321 print("\n--- 场景 1: 允许型 Hook ---")
322 print(" Hook 命令: printf 'hook says hello'")
323 print(" 退出码: 0 → 允许执行")
324
325 runner1 = HookRunner(HookConfig(
326 pre_tool_use=["printf 'pre-hook: checked tool'"],
327 post_tool_use=["printf 'post-hook: tool finished'"],
328 ))
329
330 pre_result = runner1.run_pre_tool_use("bash", '{"command": "ls"}')
331 print(f" PreToolUse 结果: denied={pre_result.denied}, messages={pre_result.messages}")
332
333 post_result = runner1.run_post_tool_use("bash", '{"command": "ls"}', "file1.py", False)
334 print(f" PostToolUse 结果: denied={post_result.denied}, messages={post_result.messages}")
335
336 # --- 2. 拒绝型 Hook(退出码 2)---
337 print("\n--- 场景 2: 拒绝型 Hook ---")
338 print(" Hook 命令: printf 'dangerous command blocked'; exit 2")
339 print(" 退出码: 2 → 拒绝执行")
340
341 runner2 = HookRunner(HookConfig(
342 pre_tool_use=["printf 'dangerous command blocked'; exit 2"],
343 ))
344
345 pre_result = runner2.run_pre_tool_use("bash", '{"command": "rm -rf /"}')
346 print(f" PreToolUse 结果: denied={pre_result.denied}, messages={pre_result.messages}")
347
348 # --- 3. 多个 Hook 串联 ---
349 print("\n--- 场景 3: 多个 Hook 串联(第二个拒绝)---")
350 print(" Hook 1: printf 'first check ok' → exit 0")
351 print(" Hook 2: printf 'second check failed' → exit 2")
352 print(" Hook 3: printf 'never reached' → exit 0")
353
354 runner3 = HookRunner(HookConfig(
355 pre_tool_use=[
356 "printf 'first check ok'",
357 "printf 'second check failed'; exit 2",
358 "printf 'never reached'", # 这个不会执行!
359 ],
360 ))
361
362 pre_result = runner3.run_pre_tool_use("bash", '{"command": "echo hello"}')
363 print(f" 结果: denied={pre_result.denied}")
364 print(f" 消息: {pre_result.messages}")
365 print(" 注意:第三个 hook 没有执行(因为第二个已经拒绝了)")
366
367 # --- 4. Hook 读取环境变量 ---
368 print("\n--- 场景 4: Hook 读取环境变量 ---")
369 runner4 = HookRunner(HookConfig(
370 pre_tool_use=["printf \"tool=%s input=%s\" \"$HOOK_TOOL_NAME\" \"$HOOK_TOOL_INPUT\""],
371 ))
372

Callers 1

08_hook_system.pyFile · 0.70

Calls 5

run_pre_tool_useMethod · 0.95
run_post_tool_useMethod · 0.95
HookConfigClass · 0.85
HookRunnerClass · 0.70
merge_hook_feedbackFunction · 0.70

Tested by

no test coverage detected