Skip to content

fix(tui): clarify Ctrl+C status when run is still active#1767

Open
BingqingLyu wants to merge 811 commits intomainfrom
fork-pr-38502-fix-tui-ctrlc-cancel-hint
Open

fix(tui): clarify Ctrl+C status when run is still active#1767
BingqingLyu wants to merge 811 commits intomainfrom
fork-pr-38502-fix-tui-ctrlc-cancel-hint

Conversation

@BingqingLyu
Copy link
Copy Markdown
Owner

@BingqingLyu BingqingLyu commented Apr 28, 2026

Summary

  • clarify TUI Ctrl+C status messaging when a run is active
  • keep existing behavior unchanged (Ctrl+C still clears input / exits; Esc or /abort stops runs)

Problem

Users can press Enter then Ctrl+C quickly and see local status text that reads like cancellation, while the run still completes and emits a reply.

This is a UX mismatch, not a backend run-cancel bug.

Root cause

Ctrl+C is wired to resolveCtrlCAction (clear/warn/exit) in src/tui/tui.ts; it does not call chat.abort.

Fix

When activeChatRunId exists, append this hint to Ctrl+C status:

  • ; run still active (Esc or /abort to stop)

So users immediately know the run is still in progress and how to stop it.

Scope

  • Only src/tui/tui.ts
  • No changes to gateway RPC, abort semantics, or keybindings

Security impact

  • No new permissions/capabilities
  • No auth/token/network/data-path changes
  • Text-only UX clarification

Linked

steipete and others added 30 commits April 27, 2026 21:19
…ups (openclaw#67687)

Feishu config defaults groupPolicy to 'allowlist'. Inbound group handling read groupAllowFrom and called isFeishuGroupAllowed before resolveFeishuReplyPolicy was reached, so a config that only set channels.feishu.groups.<chat_id>.requireMention=false (with no groupAllowFrom) was rejected with 'group not in groupAllowFrom' before per-group requireMention could take effect. Treat the explicit presence of a group entry under channels.feishu.groups as the operator's allowlist signal: if groupConfig is defined, skip the empty-allowlist rejection. resolveFeishuReplyPolicy still owns mention gating, and existing groupConfig.enabled=false / groupAllowFrom-driven rejections are preserved. Adds a regression test that exercises the reporter's exact config shape and confirms inbound text reaches finalize/dispatch.
…claw#72400)

* fix(gateway): preserve repeated characters in chat stream merge

* fix(gateway): cap live chat stream buffers
Add a manual macOS CodeQL security shard scoped to app sources. Verified with profile=macos-security on Blacksmith in 16m55s.
Remediate current-profile CodeQL findings for file SecretRef id validation and release workflow job permissions. Includes changelog credit. Thanks @vincentkoc.
…Message voice-memo bubbles via BlueBubbles (openclaw#72586)

End-to-end testing on macOS + BlueBubbles + ElevenLabs walked through three CAF flavors before landing on the format Apple's Messages.app actually emits when a user records a native iMessage voice memo:

- PCM int16 @ 44.1 kHz CAF: BlueBubbles' internal `afconvert -f m4af -d aac` conversion fails; the original CAF reaches iMessage but renders with 0 s duration.
- AAC @ 22.05 kHz mono CAF: BlueBubbles' conversion succeeds and the server silently downgrades the delivery, sending the converted MP3 as a generic audio attachment.
- **Opus @ 24 kHz mono CAF**: byte-identical to the descriptor block Apple's Messages.app produces; BlueBubbles passes it through unchanged and iMessage renders a native voice-memo bubble with proper duration and waveform UI.

Adds an opt-in `tts.voice.preferAudioFileFormat` channel capability and a macOS `afconvert`-backed pre-transcode in the speech-core pipeline. BlueBubbles declares `preferAudioFileFormat: "caf"`. Other channels are unaffected. Falls back to the original buffer when the host platform, the source/target pair, or the transcoder process can't produce the preferred container — so non-Darwin hosts and unsupported provider combinations are unchanged.

Also adds a `caff` magic-byte sniff in `src/media/mime.ts` so the auto-reply host-local-media validator (which uses `file-type` and didn't recognize CAF natively) accepts the buffer instead of dropping it as "⚠️ Media failed."

Fixes openclaw#72506.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
steipete and others added 29 commits April 28, 2026 03:01
@mwfj
Copy link
Copy Markdown

mwfj commented Apr 28, 2026

What is going on for this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: TUI Ctrl+C can imply cancellation while active run continues