fix: re-apply interrupted flag after invalidateAll on abort
invalidateAll() must run (to sync client UUIDs with server), but it
overwrites the local interrupted=true with stale server data. Fix:
after invalidateAll() completes, re-apply interrupted=true to the
last assistant message when stopRequested is true. This gives us
both correct UUIDs (for follow-up messages) and correct streaming
state (to prevent $loading re-enable).