]> git.giacomolli.uk - onechat/blobdiff - tools.go
Check operation context on returned errors
[onechat] / tools.go
index 009e3312404c646f53a8fea4284371264b420a70..1cb098a564a0d968d6b447bba55f8c1b11defab7 100644 (file)
--- a/tools.go
+++ b/tools.go
@@ -71,12 +71,12 @@ type Toolbox struct {
 func (b *Toolbox) Call(ctx context.Context, name, arguments string) (string, error) {
        _, err := b.log.Append("tool", toolCallText(name, arguments))
        if err != nil {
-               return "", err
+               return "", fmt.Errorf("append tool call: %w", err)
        }
 
        err = b.log.Flush(ctx)
        if err != nil && ctx.Err() == nil {
-               return "", err
+               return "", fmt.Errorf("flush tool call: %w", err)
        }
 
        output := "not run: the turn was interrupted"
@@ -86,7 +86,7 @@ func (b *Toolbox) Call(ctx context.Context, name, arguments string) (string, err
 
        _, err = b.log.Append("echo", output)
        if err != nil {
-               return "", err
+               return "", fmt.Errorf("append tool result: %w", err)
        }
 
        return output, nil
@@ -234,7 +234,7 @@ func (b *Toolbox) zoom(id, n int) (string, error) {
        if n == 1 {
                message, err := b.chat.Message(id)
                if err != nil {
-                       return "", err
+                       return "", fmt.Errorf("read zoom message: %w", err)
                }
 
                return leafSource(message), nil
@@ -245,7 +245,7 @@ func (b *Toolbox) zoom(id, n int) (string, error) {
        for _, index := range []int{2 * id / n, 2*id/n + 1} {
                node, built, err := b.chat.Node(level, index)
                if err != nil {
-                       return "", err
+                       return "", fmt.Errorf("read zoom node: %w", err)
                }
 
                text := viewPending
@@ -267,12 +267,12 @@ func (b *Toolbox) date(id int) (string, error) {
 
        message, err := b.chat.Message(id)
        if err != nil {
-               return "", err
+               return "", fmt.Errorf("read dated message: %w", err)
        }
 
        date, err := time.Parse(time.RFC3339Nano, message.Date)
        if err != nil {
-               return "", err
+               return "", fmt.Errorf("parse message date: %w", err)
        }
 
        return date.Local().Format("Monday 2006-01-02 15:04:05 -07:00"), nil
@@ -317,7 +317,7 @@ func (b *Toolbox) shell(ctx context.Context, command string) string {
 func (b *Toolbox) read(path string) (text string, err error) {
        file, err := os.Open(b.path(path))
        if err != nil {
-               return "", err
+               return "", fmt.Errorf("open tool file: %w", err)
        }
 
        defer func() {
@@ -327,7 +327,7 @@ func (b *Toolbox) read(path string) (text string, err error) {
        output := &ToolHeadTail{}
        _, err = io.Copy(output, file)
        if err != nil {
-               return "", err
+               return "", fmt.Errorf("read tool file: %w", err)
        }
 
        return output.String(), nil
@@ -339,12 +339,12 @@ func (b *Toolbox) write(path, text string) (string, error) {
        path = b.path(path)
        err := os.MkdirAll(filepath.Dir(path), 0o755)
        if err != nil {
-               return "", err
+               return "", fmt.Errorf("create tool file directory: %w", err)
        }
 
        err = os.WriteFile(path, []byte(text), 0o644)
        if err != nil {
-               return "", err
+               return "", fmt.Errorf("write tool file: %w", err)
        }
 
        return fmt.Sprintf("wrote %d bytes to %s", len(text), path), nil
@@ -356,7 +356,7 @@ func (b *Toolbox) edit(path, old, replacement string) (string, error) {
        path = b.path(path)
        data, err := os.ReadFile(path)
        if err != nil {
-               return "", err
+               return "", fmt.Errorf("read file to edit: %w", err)
        }
 
        if old == "" {
@@ -370,12 +370,12 @@ func (b *Toolbox) edit(path, old, replacement string) (string, error) {
 
        info, err := os.Stat(path)
        if err != nil {
-               return "", err
+               return "", fmt.Errorf("read file mode: %w", err)
        }
 
        err = os.WriteFile(path, []byte(strings.Replace(string(data), old, replacement, 1)), info.Mode().Perm())
        if err != nil {
-               return "", err
+               return "", fmt.Errorf("write edited file: %w", err)
        }
 
        return "edited " + path, nil