Adds pending_since and watchdog_generation fields to WslBridge. When
send_message is called, pending_since is set to the current instant.
When a Result message arrives, it is cleared. A watchdog thread spawned
per session polls every 30 seconds and kills the process if pending_since
has been set for 5 minutes with no Result, triggering the existing
disconnect flow so the user gets an error message and can reconnect.
A generation counter ensures old watchdogs exit cleanly when start() is
called again for a new session.
The isProcessing field existed on conversations but was never set to true
in production code, making all submission guards effectively no-ops.
- Add setProcessingForConversation to conversations store and claude.ts
- Set isProcessing=true after send_prompt succeeds in handleSubmit and handleQuickAction
- Set isProcessing=false when claude:state emits idle, success, or error
- Add tests for the new setProcessingForConversation logic
Closes#198 — default permissions were lost after the first permission
modal reconnect because PermissionModal only passed session-granted tools
to start_claude. Now merges auto_granted_tools from config, matching the
behaviour of every other start_claude call site.
Prevents the race condition where sending a message before the previous
turn's result message arrives caused both to be processed together,
making it appear the first message was ignored.