@@ -4,62 +4,77 @@ import (
4
4
"strings"
5
5
)
6
6
7
- func removeClaudeMessageBox (msg string ) string {
8
- lines := strings .Split (msg , "\n " )
9
- lastLine := func () string {
10
- if len (lines ) > 0 {
11
- return lines [len (lines )- 1 ]
12
- }
13
- return ""
14
- }
15
- trimmedLastLine := func () string {
16
- return strings .TrimSpace (lastLine ())
17
- }
18
- popLine := func () {
19
- if len (lines ) > 0 {
20
- lines = lines [:len (lines )- 1 ]
7
+ // Usually something like
8
+ // ───────────────
9
+ // >
10
+ // ───────────────
11
+ // Used by Claude Code, Goose, and Aider.
12
+ func findGreaterThanMessageBox (lines []string ) int {
13
+ for i := len (lines ) - 1 ; i >= max (len (lines )- 6 , 0 ); i -- {
14
+ if strings .Contains (lines [i ], ">" ) {
15
+ if i > 0 && strings .Contains (lines [i - 1 ], "───────────────" ) {
16
+ return i - 1
17
+ }
18
+ return i
21
19
}
22
20
}
21
+ return - 1
22
+ }
23
23
24
- // The ">" symbol is often used to indicate the user input line.
25
- // We remove all lines including and after the last ">" symbol
26
- // in the message.
27
- greaterThanLineIdx := - 1
28
- for i := len (lines ) - 1 ; i >= max (len (lines )- 6 , 0 ); i -- {
29
- if strings .Contains (lines [i ], ">" ) {
30
- greaterThanLineIdx = i
31
- break
24
+ // Usually something like
25
+ // ───────────────
26
+ // |
27
+ // ───────────────
28
+ // Used by OpenAI Codex.
29
+ func findGenericSlimMessageBox (lines []string ) int {
30
+ for i := len (lines ) - 3 ; i >= max (len (lines )- 9 , 0 ); i -- {
31
+ if strings .Contains (lines [i ], "───────────────" ) &&
32
+ (strings .Contains (lines [i + 1 ], "|" ) || strings .Contains (lines [i + 1 ], "│" )) &&
33
+ strings .Contains (lines [i + 2 ], "───────────────" ) {
34
+ return i
32
35
}
33
36
}
34
- if greaterThanLineIdx >= 0 {
35
- lines = lines [:greaterThanLineIdx ]
37
+ return - 1
38
+ }
39
+
40
+ func removeMessageBox (msg string ) string {
41
+ lines := strings .Split (msg , "\n " )
42
+
43
+ messageBoxStartIdx := findGreaterThanMessageBox (lines )
44
+ if messageBoxStartIdx == - 1 {
45
+ messageBoxStartIdx = findGenericSlimMessageBox (lines )
36
46
}
37
47
38
- msgBoxEdge := "───────────────"
39
- if strings .Contains (trimmedLastLine (), msgBoxEdge ) {
40
- popLine ()
48
+ if messageBoxStartIdx != - 1 {
49
+ lines = lines [:messageBoxStartIdx ]
41
50
}
42
51
43
52
return strings .Join (lines , "\n " )
44
53
}
45
54
46
- func formatClaudeMessage (message string , userInput string ) string {
55
+ func formatGenericMessage (message string , userInput string ) string {
47
56
message = RemoveUserInput (message , userInput )
48
- message = removeClaudeMessageBox (message )
57
+ message = removeMessageBox (message )
49
58
message = trimEmptyLines (message )
50
59
return message
51
60
}
52
61
62
+ func formatClaudeMessage (message string , userInput string ) string {
63
+ return formatGenericMessage (message , userInput )
64
+ }
65
+
53
66
func formatGooseMessage (message string , userInput string ) string {
54
- // The current formatClaudeMessage implementation is so generic
55
- // that it works with both Goose and Aider too.
56
- return formatClaudeMessage (message , userInput )
67
+ return formatGenericMessage (message , userInput )
57
68
}
58
69
59
70
func formatAiderMessage (message string , userInput string ) string {
60
- return formatClaudeMessage (message , userInput )
71
+ return formatGenericMessage (message , userInput )
72
+ }
73
+
74
+ func formatCodexMessage (message string , userInput string ) string {
75
+ return formatGenericMessage (message , userInput )
61
76
}
62
77
63
78
func formatCustomMessage (message string , userInput string ) string {
64
- return formatClaudeMessage (message , userInput )
79
+ return formatGenericMessage (message , userInput )
65
80
}
0 commit comments