Commit 6dd07b9
Fix duplicate user_input dispatch (github-app#4249)
The CLI sends two messages for every user-input prompt:
1. A `user_input.requested` session-event notification, intended
for observers (UI streaming, telemetry, logging).
2. A `userInput.request` JSON-RPC method call, which is the
actual ask-and-wait prompt that drives the handler.
The Rust SDK's session event loop was wiring up `HandlerEvent::UserInput`
dispatch on BOTH paths. Result: the consumer's `on_event` ran twice for
every prompt, which surfaced as duplicate `ask_user` / `exit_plan`
widgets in github-app's session UI (#4249).
Other SDKs (Node, Python, Go, .NET) only register the JSON-RPC
handler; the notification is purely observational. Aligning with
that convention.
Changes:
1. `session.rs`: drop the `SessionEventType::UserInputRequested`
auto-dispatch arm. The CLI's follow-up `userInput.request`
JSON-RPC call still drives the handler. Replaced with a
short comment block explaining why the notification is
intentionally a no-op (and citing #4249 so the next person
tempted to add it back understands the trade).
2. `tests/session_test.rs`: replaced the
`user_input_requested_event_dispatches_to_handler_and_responds`
test (which asserted the broken behavior) with a regression
test (`user_input_requested_notification_does_not_double_dispatch`)
that:
- sends a `user_input.requested` notification and asserts no
wire response, no handler invocation;
- then sends a `userInput.request` JSON-RPC call and asserts
the handler fires exactly once.
This locks the fix in place and makes a future re-introduction
surface immediately as a test failure.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>1 parent 393d158 commit 6dd07b9
3 files changed
Lines changed: 70 additions & 68 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
416 | 416 | | |
417 | 417 | | |
418 | 418 | | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
419 | 427 | | |
420 | 428 | | |
421 | 429 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
20 | | - | |
| 20 | + | |
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
| |||
1306 | 1306 | | |
1307 | 1307 | | |
1308 | 1308 | | |
1309 | | - | |
1310 | | - | |
1311 | | - | |
1312 | | - | |
1313 | | - | |
1314 | | - | |
1315 | | - | |
1316 | | - | |
1317 | | - | |
1318 | | - | |
1319 | | - | |
1320 | | - | |
1321 | | - | |
1322 | | - | |
1323 | | - | |
1324 | | - | |
1325 | | - | |
1326 | | - | |
1327 | | - | |
1328 | | - | |
1329 | | - | |
1330 | | - | |
1331 | | - | |
1332 | | - | |
1333 | | - | |
1334 | | - | |
1335 | | - | |
1336 | | - | |
1337 | | - | |
1338 | | - | |
1339 | | - | |
1340 | | - | |
1341 | | - | |
1342 | | - | |
1343 | | - | |
1344 | | - | |
1345 | | - | |
1346 | | - | |
1347 | | - | |
1348 | | - | |
1349 | | - | |
| 1309 | + | |
| 1310 | + | |
| 1311 | + | |
| 1312 | + | |
| 1313 | + | |
| 1314 | + | |
1350 | 1315 | | |
1351 | 1316 | | |
1352 | 1317 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1386 | 1386 | | |
1387 | 1387 | | |
1388 | 1388 | | |
1389 | | - | |
1390 | | - | |
| 1389 | + | |
| 1390 | + | |
| 1391 | + | |
| 1392 | + | |
| 1393 | + | |
| 1394 | + | |
| 1395 | + | |
| 1396 | + | |
| 1397 | + | |
| 1398 | + | |
| 1399 | + | |
| 1400 | + | |
1391 | 1401 | | |
1392 | | - | |
| 1402 | + | |
1393 | 1403 | | |
1394 | | - | |
1395 | | - | |
1396 | | - | |
1397 | | - | |
1398 | | - | |
1399 | | - | |
1400 | | - | |
1401 | | - | |
1402 | | - | |
1403 | | - | |
1404 | | - | |
1405 | | - | |
1406 | | - | |
1407 | | - | |
1408 | | - | |
1409 | | - | |
| 1404 | + | |
| 1405 | + | |
| 1406 | + | |
| 1407 | + | |
| 1408 | + | |
| 1409 | + | |
1410 | 1410 | | |
| 1411 | + | |
1411 | 1412 | | |
1412 | 1413 | | |
1413 | 1414 | | |
1414 | | - | |
| 1415 | + | |
| 1416 | + | |
| 1417 | + | |
| 1418 | + | |
| 1419 | + | |
| 1420 | + | |
1415 | 1421 | | |
1416 | 1422 | | |
1417 | 1423 | | |
| |||
1424 | 1430 | | |
1425 | 1431 | | |
1426 | 1432 | | |
1427 | | - | |
1428 | | - | |
1429 | | - | |
1430 | | - | |
1431 | | - | |
1432 | | - | |
| 1433 | + | |
| 1434 | + | |
| 1435 | + | |
| 1436 | + | |
| 1437 | + | |
| 1438 | + | |
| 1439 | + | |
| 1440 | + | |
| 1441 | + | |
| 1442 | + | |
| 1443 | + | |
| 1444 | + | |
| 1445 | + | |
| 1446 | + | |
| 1447 | + | |
| 1448 | + | |
| 1449 | + | |
| 1450 | + | |
| 1451 | + | |
| 1452 | + | |
| 1453 | + | |
| 1454 | + | |
| 1455 | + | |
| 1456 | + | |
| 1457 | + | |
| 1458 | + | |
| 1459 | + | |
| 1460 | + | |
| 1461 | + | |
1433 | 1462 | | |
1434 | 1463 | | |
1435 | 1464 | | |
| |||
0 commit comments