@@ -149,6 +149,7 @@ type chatModel struct {
149149 contextViz * ContextVisualization
150150 wal * session.WAL
151151 startedAt time.Time
152+ welcomeCache string
152153}
153154
154155func blinkTickCmd () tea.Cmd {
@@ -1249,8 +1250,8 @@ func newChatModel(ref *progRef, systemPrompt string, settings hawkconfig.Setting
12491250 initHeight = h
12501251 }
12511252 }
1252- // Reserve lines for the bottom bar: status line (1) + input border top (1) + input (1) + input border bottom (1) + help line (1) = 5
1253- vpHeight := initHeight - 5
1253+ // Reserve lines for the bottom bar
1254+ vpHeight := initHeight - 6
12541255 if vpHeight < 4 {
12551256 vpHeight = 4
12561257 }
@@ -1287,7 +1288,8 @@ func newChatModel(ref *progRef, systemPrompt string, settings hawkconfig.Setting
12871288 m .pluginRuntime = pr
12881289
12891290 // Welcome message inside TUI
1290- m .messages = append (m .messages , displayMsg {role : "welcome" , content : buildWelcomeMessage (sess , sid , registry , saved , settings , false , initWidth )})
1291+ m .welcomeCache = buildWelcomeMessage (sess , sid , registry , saved , settings , false , initWidth )
1292+ m .messages = append (m .messages , displayMsg {role : "welcome" , content : m .welcomeCache })
12911293
12921294 // Wire permission system
12931295 sess .PermissionFn = func (req engine.PermissionRequest ) {
@@ -1563,13 +1565,14 @@ func (m chatModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
15631565 if m .input .Width < 20 {
15641566 m .input .Width = 20
15651567 }
1566- // Resize viewport: total height minus bottom bar (status + input + help)
1567- vpHeight := msg .Height - 5
1568+ // Resize viewport: total height minus bottom bar
1569+ vpHeight := msg .Height - 6
15681570 if vpHeight < 4 {
15691571 vpHeight = 4
15701572 }
15711573 m .viewport .Width = msg .Width
15721574 m .viewport .Height = vpHeight
1575+ m .welcomeCache = buildWelcomeMessage (m .session , m .sessionID , m .registry , nil , m .settings , false , msg .Width )
15731576
15741577 case spinner.TickMsg :
15751578 var cmd tea.Cmd
@@ -1977,7 +1980,7 @@ func (m *chatModel) handleCommand(text string) (tea.Model, tea.Cmd) {
19771980 }
19781981 return m , nil
19791982 case "/welcome" :
1980- m .messages = append (m .messages , displayMsg {role : "welcome" , content : buildWelcomeMessage ( m . session , m . sessionID , m . registry , nil , m . settings , m . blinkClosed , m . width ) })
1983+ m .messages = append (m .messages , displayMsg {role : "welcome" , content : m . welcomeCache })
19811984 return m , nil
19821985 case "/tasks" :
19831986 tasks := tool .GetTaskStore ().List ()
@@ -2573,10 +2576,8 @@ func (m *chatModel) updateViewportContent() {
25732576 rst := "\033 [0m"
25742577 bgDark := "\033 [48;2;30;30;40m"
25752578
2576- welcome := buildWelcomeMessage (m .session , m .sessionID , m .registry , nil , m .settings , m .blinkClosed , viewWidth )
2577-
25782579 var chatContent strings.Builder
2579- chatContent .WriteString (welcome + "\n " )
2580+ chatContent .WriteString (m . welcomeCache + "\n " )
25802581
25812582 for i , msg := range m .messages {
25822583 switch msg .role {
@@ -2644,14 +2645,6 @@ func (m *chatModel) updateViewportContent() {
26442645 atBottom := m .viewport .AtBottom ()
26452646 contentStr := chatContent .String ()
26462647
2647- if ! m .hasRealMessages () {
2648- contentLines := strings .Count (contentStr , "\n " )
2649- if contentLines < vpHeight {
2650- topPad := (vpHeight - contentLines ) / 3
2651- contentStr = strings .Repeat ("\n " , topPad ) + contentStr
2652- }
2653- }
2654-
26552648 m .viewport .SetContent (contentStr )
26562649 if atBottom || m .autoScroll {
26572650 m .viewport .GotoBottom ()
0 commit comments