- Add 'Composable Tool Wrappers' section explaining GraphTools implement standard interfaces
- List example wrappers: InvokableApprovableTool, InvokableReviewEditTool, FollowUpTool
- Clarify nested interrupts work with any interrupt-based wrapper, not just InvokableApprovableTool
Change-Id: Ic3156bf0d28bb30b11dcd61092972bc2d12faccb
2. Wraps the interrupt with `CompositeInterrupt` for proper propagation
3. Restores state and resumes execution when `runner.ResumeWithParams` is called
### Composable Tool Wrappers
GraphTools implement standard `tool.InvokableTool` or `tool.StreamableTool` interfaces, making them compatible with any tool wrapper in the ecosystem. Examples of wrappers you can use:
- **`InvokableApprovableTool`**: Adds human approval before tool execution
- **`InvokableReviewEditTool`**: Allows users to review and edit tool arguments
- **`FollowUpTool`**: Asks users follow-up questions during execution
- Custom wrappers you create
### Nested Interrupts
GraphTools can be wrapped with `InvokableApprovableTool` for two-level approval:
When a GraphTool with internal interrupts is wrapped by another interrupt-based wrapper (e.g., `InvokableApprovableTool`), both interrupt layers work independently:
1. **Outer interrupt**: Wrapper-level interrupt (e.g., approval via `InvokableApprovableTool`)