mirror of
https://github.com/cline/cline.git
synced 2026-09-19 10:13:34 +08:00
* feat(cli): restyle chat input with horizontal rules and slim user bubbles Replace the tinted-background input field with a minimal frame: full-width horizontal rules above and below the textarea and a bold accent-colored prompt glyph, with no background fill. User message bubbles in the transcript match the new look: a slim neutral-gray bar with the same glyph, no vertical padding, and no mode-colored tint. Palette gains getInputRuleColor (neutral adaptive mid-gray for the rules) and getUserMessageBackground (neutral bubble tint), both built on a shared OKLAB lift helper extracted from getModeInputBackground. Home view's robot cursor-tracking offset is adjusted for the input's new left edge, and the spacer line between the chat input and status bar is removed. * feat(cli): replace cyan accent with new plan/act palette Swap the TUI accent colors: act mode goes from ANSI cyan to #79b8ff and plan mode from ANSI yellow to #ffea7f on dark themes. Light themes get counterparts derived in OKLCH with the same hue but darkened to hold >=4.5:1 contrast on white (#0f72cb act, #867100 plan), selected via the existing getModeAccent theme switch. All hardcoded "cyan" fg literals across dialogs, model selector, config view, and onboarding now reference palette.act so the accent is a single source of truth. The selection highlight follows the act color. The subliminal OKLAB chroma nudge on input backgrounds/foregrounds now leans blue (-a, -b) instead of cyan (-a, +b) to match the new accent hue. * feat(cli): soften success green and use act accent in markdown Swap the success/diff green from ANSI brightGreen and #22c55e to a muted sage #87af87 on dark themes (auto-approve banner, git diff +stats, diff view added-sign color); light themes keep the darker #116329 for contrast on white. Markdown prominent elements (headings, bold, list markers, links, table headers) now use the act accent via themePalette instead of hardcoded one-dark cyan #56b6c2. * feat(cli): harmonize dark syntax colors with brand accent palette Rebuild the dark syntax highlighting family around the brand anchors: functions use the act blue, strings and inline code use the success sage, types/italics use a dimmed plan yellow, and the remaining hues (keyword purple, variable coral, number orange, operator ice-blue) are regenerated in OKLCH at the same pastel lightness/chroma weight (~L 0.78, C 0.11) so code blocks read as part of the same palette. Light theme keeps its GitHub-light set. * fix(cli): brighten success green to match accent palette weight #87af87 sat at roughly half the OKLCH chroma of the act/plan anchors and read as gray next to them; #8bd28d (L 0.80, C 0.12) matches their weight. * fix(cli): brighten success green a step further (#99e89b) * feat(cli): polish status bar usage display and ClinePass model name - Cost always renders with two decimals ($0.00) instead of switching to four decimals under a cent; the turn summary line drops its three-decimal format for the same reason. - Token count next to the context bar is now just the number; the word 'tokens' was redundant with the bar right beside it. - Context window bar shrinks from 8 to 6 cells. - ClinePass models resolve their friendly models.dev name like every other provider and get a (ClinePass) suffix: 'GLM 5.2 (ClinePass)' instead of 'ClinePass/glm-5.2'. - ClinePass no longer shows '$0.00 (included with subscription)' -- cost is simply hidden for subscription providers. * fix(cli): place ClinePass suffix after reasoning effort in model name * fix(cli): format ClinePass model name as 'ClinePass: <model>' prefix * feat(cli): color transcript entries by the mode they were produced in (#12083) * feat(cli): color transcript entries by the mode they were produced in Previously the whole transcript retinted to the current mode's accent on every plan/act toggle. Entries now record the agent mode active when they were produced and keep that accent permanently, so a session reads as a visible history of plan (yellow) and act (blue) segments. How the mode is captured: - Live sessions: appendEntry in SessionProvider stamps entries from a uiMode ref, covering every creation site including mid-run switch_to_act_mode flips (which already call setUiMode through the runtime dialog bridge). - Resumed sessions: hydrateSessionMessages recovers the mode from the persisted <user_input mode="..."> wrappers via a new shared parseUserInputMode helper, and flips to act at switch_to_act_mode tool calls. Transcripts without wrappers stay unstamped and keep the current-mode fallback accent, matching the old behavior. - Restores: the /history resume and checkpoint-restore paths insert hydrated history via replaceEntries instead of appendEntry loops, so live-entry stamping cannot overwrite hydration's stamps (which would lock resumed transcripts to the resume-time accent). The load-bearing core fix: readPersistedMessagesFile stripped the user_input wrappers and mode notices from user text on every read ('display sanitization'). That read path also feeds session restarts (mode toggle, compaction-mode change, model change, fork, recovery), which re-persist what they read -- so every restart laundered the mode markers off disk and out of the model's seeded context, leaving nothing for hydration to recover. Reads now return persisted messages verbatim and formatting is the display surface's job: the CLI TUI, history titles, and the VS Code SDK history loader already formatted at their boundaries; the cline-hub webview history mapping and the CLI HTML export (which used normalizeUserInput and leaked mode_notice text) now do too. Connectors only surface assistant text, and the remaining readMessages consumers are programmatic (usage math, re-seeding, compaction input) where raw is correct. * fix(shared): match parseUserInputMode exactly to what the writer emits Drop the case-insensitive flag and the 'zen' value from the wrapper regex: formatUserInputBlock only ever writes lowercase act/plan/yolo, so anything else the parser accepted (uppercase look-alikes in adversarial content, a zen value with no writer) could never be real persisted data.