Commit c422e9a
Changed files (1)
internal
del
internal/del/assistant.go
@@ -5,7 +5,6 @@ import (
"context"
"encoding/json"
"fmt"
- "io/ioutil"
"os"
"os/exec"
"regexp"
@@ -36,15 +35,30 @@ func NewDel(provider AIProvider) *Del {
Name: "run_command",
Description: "Execute a shell command and return the output",
Handler: func(args map[string]interface{}) (interface{}, error) {
- cmd, ok := args["command"].(string)
+ cmdStr, ok := args["command"].(string)
if !ok {
return nil, fmt.Errorf("missing 'command' string argument")
}
- out, err := exec.Command("bash", "-c", cmd).CombinedOutput()
+ cmd := exec.Command("bash", "-c", cmdStr)
+ stdout, err := cmd.StdoutPipe()
if err != nil {
- return nil, fmt.Errorf("command failed: %v\n%s", err, string(out))
+ return nil, err
+ }
+ if err := cmd.Start(); err != nil {
+ return nil, err
+ }
+ var output strings.Builder
+ scanner := bufio.NewScanner(stdout)
+ for scanner.Scan() {
+ output.WriteString(scanner.Text() + "\n")
+ }
+ if err := scanner.Err(); err != nil {
+ return nil, err
+ }
+ if err := cmd.Wait(); err != nil {
+ return nil, err
}
- return string(out), nil
+ return output.String(), nil
},
},
"read_file": {
@@ -55,7 +69,7 @@ func NewDel(provider AIProvider) *Del {
if !ok {
return nil, fmt.Errorf("missing 'path' string argument")
}
- data, err := ioutil.ReadFile(path)
+ data, err := os.ReadFile(path)
if err != nil {
return nil, err
}
@@ -71,7 +85,7 @@ func NewDel(provider AIProvider) *Del {
if !ok1 || !ok2 {
return nil, fmt.Errorf("missing 'path' or 'content' argument")
}
- if err := ioutil.WriteFile(path, []byte(content), 0644); err != nil {
+ if err := os.WriteFile(path, []byte(content), 0644); err != nil {
return nil, err
}
return fmt.Sprintf("wrote %d bytes to %s", len(content), path), nil
@@ -165,7 +179,7 @@ func (d *Del) StartREPL(ctx context.Context) {
d.chatHistory = append(d.chatHistory, api.Message{Role: "assistant", Content: response})
output := d.handleToolCalls(ctx, response)
- fmt.Println(output)
+ fmt.Print(output)
}
}