import asyncio from copilot import CopilotClient from copilot.generated.rpc import PermissionDecisionApproveOnce hook_log: list[str] = [] async def auto_approve_permission(request, invocation): return PermissionDecisionApproveOnce() async def on_session_start(input_data, invocation): hook_log.append("onSessionStart") async def on_session_end(input_data, invocation): hook_log.append("onSessionEnd") async def on_pre_tool_use(input_data, invocation): tool_name = input_data.get("toolName", "unknown") hook_log.append(f"onPreToolUse:{tool_name}") return {"permissionDecision": "allow"} async def on_post_tool_use(input_data, invocation): tool_name = input_data.get("toolName", "unknown") hook_log.append(f"onPostToolUse:{tool_name}") async def on_user_prompt_submitted(input_data, invocation): hook_log.append("onUserPromptSubmitted") return input_data async def on_error_occurred(input_data, invocation): error = input_data.get("error", "unknown") hook_log.append(f"onErrorOccurred:{error}") async def main(): client = CopilotClient() try: session = await client.create_session( model="claude-haiku-4.5", on_permission_request=auto_approve_permission, hooks={ "on_session_start": on_session_start, "on_session_end": on_session_end, "on_pre_tool_use": on_pre_tool_use, "on_post_tool_use": on_post_tool_use, "on_user_prompt_submitted": on_user_prompt_submitted, "on_error_occurred": on_error_occurred, }, ) response = await session.send_and_wait( "List the files in the current directory using the glob tool with pattern '*.md'." ) if response: print(response.data.content) await session.disconnect() print("\n--- Hook execution log ---") for entry in hook_log: print(f" {entry}") print(f"\nTotal hooks fired: {len(hook_log)}") finally: await client.stop() asyncio.run(main())