summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrail Finder <wohilas@gmail.com>2026-02-17 13:15:09 +0300
committerGrail Finder <wohilas@gmail.com>2026-02-17 13:15:09 +0300
commit372e49199b58281bf1c7f75dfa2835189bc61383 (patch)
tree3304cc1b343a8d5ebad5c8b14dafce03f1ba5b21
parentd6d4f09f8d742b5b1340a0ebcbd125c6f6ecd9d3 (diff)
Feat: collapse/expand thinking blocks with alt+t
-rw-r--r--bot.go10
-rw-r--r--main.go1
-rw-r--r--tui.go15
3 files changed, 25 insertions, 1 deletions
diff --git a/bot.go b/bot.go
index 0ac94f7..61d33fa 100644
--- a/bot.go
+++ b/bot.go
@@ -1087,7 +1087,15 @@ func chatToTextSlice(messages []models.RoleMsg, showSys bool) []string {
func chatToText(messages []models.RoleMsg, showSys bool) string {
s := chatToTextSlice(messages, showSys)
- return strings.Join(s, "\n")
+ text := strings.Join(s, "\n")
+
+ // Collapse thinking blocks if enabled
+ if thinkingCollapsed {
+ placeholder := "[yellow::i][thinking... (press Alt+T to expand)][-:-:-]"
+ text = thinkRE.ReplaceAllString(text, placeholder)
+ }
+
+ return text
}
func removeThinking(chatBody *models.ChatBody) {
diff --git a/main.go b/main.go
index 45f0d4b..8dc4752 100644
--- a/main.go
+++ b/main.go
@@ -12,6 +12,7 @@ var (
injectRole = true
selectedIndex = int(-1)
shellMode = false
+ thinkingCollapsed = false
indexLineCompletion = "F12 to show keys help | llm turn: [%s:-:b]%v[-:-:-] (F6) | chat: [orange:-:b]%s[-:-:-] (F1) | toolUseAdviced: [%s:-:b]%v[-:-:-] (ctrl+k) | model: [orange:-:b]%s[-:-:-] (ctrl+l) | skip LLM resp: [%s:-:b]%v[-:-:-] (F10)\nAPI: [orange:-:b]%s[-:-:-] (ctrl+v) | recording: [%s:-:b]%v[-:-:-] (ctrl+r) | writing as: [orange:-:b]%s[-:-:-] (ctrl+q) | bot will write as [orange:-:b]%s[-:-:-] (ctrl+x) | role injection (alt+7) [%s:-:b]%v[-:-:-]"
focusSwitcher = map[tview.Primitive]tview.Primitive{}
)
diff --git a/tui.go b/tui.go
index 31f4091..2883511 100644
--- a/tui.go
+++ b/tui.go
@@ -96,6 +96,7 @@ var (
[yellow]Alt+7[white]: toggle role injection (inject role in messages)
[yellow]Alt+8[white]: show char img or last picked img
[yellow]Alt+9[white]: warm up (load) selected llama.cpp model
+[yellow]Alt+t[white]: toggle thinking blocks visibility (collapse/expand <think> blocks)
=== scrolling chat window (some keys similar to vim) ===
[yellow]arrows up/down and j/k[white]: scroll up and down
@@ -831,6 +832,20 @@ func init() {
injectRole = !injectRole
updateStatusLine()
}
+ // Handle Alt+T to toggle thinking block visibility
+ if event.Key() == tcell.KeyRune && event.Rune() == 't' && event.Modifiers()&tcell.ModAlt != 0 {
+ thinkingCollapsed = !thinkingCollapsed
+ textView.SetText(chatToText(chatBody.Messages, cfg.ShowSys))
+ colorText()
+ status := "expanded"
+ if thinkingCollapsed {
+ status = "collapsed"
+ }
+ if err := notifyUser("thinking", fmt.Sprintf("Thinking blocks %s", status)); err != nil {
+ logger.Error("failed to send notification", "error", err)
+ }
+ return nil
+ }
if event.Key() == tcell.KeyF1 {
// chatList, err := loadHistoryChats()
chatList, err := store.GetChatByChar(cfg.AssistantRole)