Skip to content

Commit 4675469

Browse files
authored
Bugfixes #2 (#25)
1 parent 3244390 commit 4675469

File tree

3 files changed

+63
-19
lines changed

3 files changed

+63
-19
lines changed

internal/ai_client.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,9 @@ func (c *AiClient) ChatCompletion(ctx context.Context, messages []Message, model
117117
req.Header.Set("HTTP-Referer", "https://github.com/alvinunreal/tmuxai")
118118
req.Header.Set("X-Title", "TmuxAI")
119119

120+
// Log the request details for debugging before sending
121+
logger.Debug("Sending API request to: %s with model: %s", url, model)
122+
120123
// Send the request
121124
resp, err := c.client.Do(req)
122125
if err != nil {
@@ -135,6 +138,9 @@ func (c *AiClient) ChatCompletion(ctx context.Context, messages []Message, model
135138
return "", fmt.Errorf("failed to read response: %w", err)
136139
}
137140

141+
// Log the raw response for debugging
142+
logger.Debug("API response status: %d, response size: %d bytes", resp.StatusCode, len(body))
143+
138144
// Check for errors
139145
if resp.StatusCode != http.StatusOK {
140146
logger.Error("API returned error: %s", body)
@@ -144,7 +150,7 @@ func (c *AiClient) ChatCompletion(ctx context.Context, messages []Message, model
144150
// Parse the response
145151
var completionResp ChatCompletionResponse
146152
if err := json.Unmarshal(body, &completionResp); err != nil {
147-
logger.Error("Failed to unmarshal response: %v", err)
153+
logger.Error("Failed to unmarshal response: %v, body: %s", err, body)
148154
return "", fmt.Errorf("failed to unmarshal response: %w", err)
149155
}
150156

@@ -155,8 +161,9 @@ func (c *AiClient) ChatCompletion(ctx context.Context, messages []Message, model
155161
return responseContent, nil
156162
}
157163

158-
logger.Error("No completion choices returned")
159-
return "", fmt.Errorf("no completion choices returned")
164+
// Enhanced error for no completion choices
165+
logger.Error("No completion choices returned. Raw response: %s", string(body))
166+
return "", fmt.Errorf("no completion choices returned (model: %s, status: %d)", model, resp.StatusCode)
160167
}
161168

162169
func debugChatMessages(chatMessages []ChatMessage, response string) {

internal/confirm.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ func (m *Manager) confirmedToExec(command string, prompt string, edit bool) (boo
9292
// empty command
9393
return false, ""
9494
}
95+
case "n", "no", "cancel":
96+
return false, ""
9597
default:
9698
// any other input is retry confirmation
9799
return m.confirmedToExec(command, prompt, edit)

internal/process_message.go

Lines changed: 51 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,15 @@ func (m *Manager) ProcessUserMessage(ctx context.Context, message string) bool {
6363
return false
6464
}
6565

66-
fmt.Println("Failed to get response from AI: " + err.Error())
66+
// Log both to console and debug file to capture error context
67+
errMsg := "Failed to get response from AI: " + err.Error()
68+
fmt.Println(errMsg)
69+
70+
// Debug the failed request even when there's an error
71+
if m.Config.Debug {
72+
debugChatMessages(append(history, currentMessage), "ERROR: "+err.Error())
73+
}
74+
6775
return false
6876
}
6977

@@ -77,7 +85,16 @@ func (m *Manager) ProcessUserMessage(ctx context.Context, message string) bool {
7785
if err != nil {
7886
s.Stop()
7987
m.Status = ""
80-
fmt.Println("Failed to parse AI response: " + err.Error())
88+
89+
// Log both to console and debug file
90+
errMsg := "Failed to parse AI response: " + err.Error()
91+
fmt.Println(errMsg)
92+
93+
// Debug the failed parsing even when there's an error
94+
if m.Config.Debug {
95+
debugChatMessages(append(history, currentMessage), "PARSE ERROR: "+response)
96+
}
97+
8198
return false
8299
}
83100

@@ -141,24 +158,42 @@ func (m *Manager) ProcessUserMessage(ctx context.Context, message string) bool {
141158
}
142159
}
143160

144-
for _, sendKey := range r.SendKeys {
145-
code, _ := system.HighlightCode("txt", sendKey)
146-
m.Println(code)
161+
// Process SendKeys
162+
if len(r.SendKeys) > 0 {
163+
// Show preview of all keys
164+
keysPreview := "Keys to send:\n"
165+
for i, sendKey := range r.SendKeys {
166+
code, _ := system.HighlightCode("txt", sendKey)
167+
if i == len(r.SendKeys)-1 {
168+
keysPreview += code
169+
} else {
170+
keysPreview += code + "\n"
171+
}
172+
}
147173

148-
isSafe := false
149-
command := sendKey
174+
m.Println(keysPreview)
175+
176+
// Determine confirmation message based on number of keys
177+
confirmMessage := "Send this key?"
178+
if len(r.SendKeys) > 1 {
179+
confirmMessage = "Send all these keys?"
180+
}
181+
182+
// Get confirmation if required
183+
allConfirmed := true
150184
if m.GetSendKeysConfirm() {
151-
isSafe, command = m.confirmedToExec(sendKey, "Send this key(s)?", true)
152-
} else {
153-
isSafe = true
185+
allConfirmed, _ = m.confirmedToExec("keys shown above", confirmMessage, true)
186+
if !allConfirmed {
187+
m.Status = ""
188+
return false
189+
}
154190
}
155-
if isSafe {
156-
m.Println("Sending keys: " + command)
157-
system.TmuxSendCommandToPane(m.ExecPane.Id, command, false)
191+
192+
// Send each key with delay
193+
for _, sendKey := range r.SendKeys {
194+
m.Println("Sending keys: " + sendKey)
195+
system.TmuxSendCommandToPane(m.ExecPane.Id, sendKey, false)
158196
time.Sleep(1 * time.Second)
159-
} else {
160-
m.Status = ""
161-
return false
162197
}
163198
}
164199

0 commit comments

Comments
 (0)