When an agent issues multiple commands requiring approval in rapid
succession, users previously had to approve each one individually.
This adds smart batching that collects requests and presents them as a
single message listing all pending commands:
- Initial 1.5s window collects rapid-fire commands
- Extended 10s window when session already has pending approvals
- Maximum 30s cap prevents indefinite batching
- `/approve-batch <batch-id> allow-once|deny` command works on all channels
On Telegram, the batched message includes "Approve All (N)" / "Deny All"
inline buttons. Other channels receive the same grouped text and can use
the `/approve-batch` command manually.
Also fixes a command-routing bug where `/approve-batch` was intercepted
by the `/approve` handler due to prefix matching, causing batch buttons
to silently fail.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>