Turn options

Session.TurnOpts on the one SDK, pkg/abox.

TurnOpts{MaxTurns, Timeout} on a v2 guest. Prints usage when the provider sends it (OpenAI/Anthropic; xAI often nil).

package main

import (
	"context"
	"fmt"
	"os"
	"time"

	"github.com/AdminTurnedDevOps/ABox/pkg/abox"
)

func main() {
	ctx := context.Background()
	sess, err := abox.Open(ctx, abox.Options{})
	if err != nil {
		fmt.Fprintln(os.Stderr, err)
		os.Exit(1)
	}
	defer sess.Close()
	res, err := sess.TurnOpts(ctx, "Inspect the repo, then stop.", abox.TurnOpts{
		MaxTurns: 4,
		Timeout:  2 * time.Minute,
	}, func(ev abox.Event) {
		if ev.Kind == "text" {
			fmt.Print(ev.Text)
		}
		if ev.Kind == "tool" {
			fmt.Printf("\n[tool %s %s]\n", ev.Tool, ev.Status)
		}
	})
	fmt.Println()
	if err != nil {
		fmt.Fprintln(os.Stderr, err)
		os.Exit(1)
	}
	if res != nil && res.Usage != nil {
		fmt.Printf("usage in=%d out=%d stop=%s\n", res.Usage.InputTokens, res.Usage.OutputTokens, res.StopReason)
	}
}