mirror of
https://github.com/cline/cline.git
synced 2026-09-21 05:10:09 +08:00
* fix(shared): stop deleting mode_notice from outbound prompts The mode-switch notice from #12057 never reached the model: prepareTurnInput sanitizes every outbound prompt with normalizeUserInput before wrapping it, and #12057 put the mode_notice strip inside normalizeUserInput -- so the host deleted the notice on every send. The transcript confirms it: messages sent after a toggle carry the user_input wrapper but no notice, and models asked about it confabulate having seen one because the system prompt describes the tag. Move the strip into a dedicated stripModeNotices() applied only at display boundaries: formatDisplayUserInput (TUI hydration, title inference), deriveTitleFromPrompt (session titles), and the TUI queued prompt echo. normalizeUserInput now preserves notices, with a regression test pinning the outbound behavior. Side benefit: notices survive the message-builder history normalization and the pending prompt queue, so queued sends deliver them too. * docs(shared): correct formatModeSwitchNotice JSDoc after strip relocation * refactor(shared): generalize notice stripping to stripTagElements stripModeNotices becomes a thin policy wrapper (DISPLAY_HIDDEN_TAGS owns the what-to-hide list in one place) over a generic stripTagElements that removes whole elements for any tag list -- the remove-element counterpart to xmlTagsRemoval. Call sites at display boundaries now carry comments explaining why stripping happens there and not in normalizeUserInput, which also sanitizes model-bound prompts. * revert(shared): drop stripTagElements generalization, keep simple stripModeNotices The generic tag stripper added API surface without a second use case; stripModeNotices goes back to the direct implementation. The display-vs- model call-site comments from the same commit stay.