* fix(server): summarise Claude AskUserQuestion permission notifications Claude's handlePermissionRequest never set title or description on the AgentPermissionRequest it emits, so buildPermissionDetails fell through to serialising request.input. For AskUserQuestion that input is the whole question object, and the push and in-app notifications both showed truncated JSON. Summarise the first question the way the OMP and Pi providers already do for their ask_user permissions: title is the question text, description is the option labels. request.input is untouched, so the permission UI keeps rendering the full payload. Closes #2612 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FWY2Xdowxr562GXFdxPhjZ * test(server): assert question permissions through the emitted request Greptile flagged that the suite imported a production helper that was only exported for the test, which leaves an unnecessary public export behind and couples the tests to implementation structure. The helper is module-private again, and every case now asserts on the permission request the session emits and the notification body built from it. Added a case pinning request.input so the permission UI payload stays covered, and one for a non-question tool. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FWY2Xdowxr562GXFdxPhjZ --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>