An empty array, a non-array body, or a non-json content-type all resolve
rather than throw, so performAction returns false and the session was left
parked. A hook that answered with no verbs is no better a reason to hold the
caller than one that failed.
Deliberately overrides the ws "ack now, send verbs later" pattern for dial:
an app that means to push verbs afterwards must return them from the hook.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- a websocket application was parked in _awaitCommandsOrHangup after a dial
it was never asked about: no actionHook at all, or one whose request
failed. An http application already ends the call here simply by running
out of verbs; a websocket one sat in dead air until timeLimit
- TaskDial._endSessionUnlessHandedOff -> CallSession.expectNoFurtherVerbs
suppresses the await for that one task iteration, so the loop falls out
and the call tears down normally
- verbs still queued are unaffected: the flag is read behind the
tasks.length === 0 test, so the next verb always runs
- skipped for a nested dial, and when the application already took the call
elsewhere (KillReason.Replaced / ReferComplete)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>