(messages: list)
| 236 | # ═══════════════════════════════════════════════════════════ |
| 237 | |
| 238 | def agent_loop(messages: list): |
| 239 | while True: |
| 240 | response = client.messages.create( |
| 241 | model=MODEL, system=SYSTEM, messages=messages, |
| 242 | tools=TOOLS, max_tokens=8000, |
| 243 | ) |
| 244 | messages.append({"role": "assistant", "content": response.content}) |
| 245 | |
| 246 | if response.stop_reason != "tool_use": |
| 247 | force = trigger_hooks("Stop", messages) |
| 248 | if force: |
| 249 | messages.append({"role": "user", "content": force}) |
| 250 | continue |
| 251 | return |
| 252 | |
| 253 | results = [] |
| 254 | for block in response.content: |
| 255 | if block.type != "tool_use": |
| 256 | continue |
| 257 | |
| 258 | # s04 change: hook replaces hard-coded check_permission() |
| 259 | blocked = trigger_hooks("PreToolUse", block) |
| 260 | if blocked: |
| 261 | results.append({"type": "tool_result", "tool_use_id": block.id, |
| 262 | "content": str(blocked)}) |
| 263 | continue |
| 264 | |
| 265 | handler = TOOL_HANDLERS.get(block.name) |
| 266 | output = handler(**block.input) if handler else f"Unknown: {block.name}" |
| 267 | |
| 268 | trigger_hooks("PostToolUse", block, output) # s04: post hook |
| 269 | |
| 270 | results.append({"type": "tool_result", "tool_use_id": block.id, "content": output}) |
| 271 | |
| 272 | messages.append({"role": "user", "content": results}) |
| 273 | |
| 274 | |
| 275 | if __name__ == "__main__": |
no test coverage detected