ChatFormActions gated the mic and stop buttons on a `canSubmit` prop that ChatForm never passed, so it was always false and typing text did not swap them for the submit button. Use `canSend` instead and also hide the skip-reasoning button while there is content to send. Assisted-by: Claude (Opus 5.5 Medium)