Events
Turn / TurnOpts call onEvent for each agent_event frame. Same JSON the CLI prints in abox exec.
sess.Turn(ctx, prompt, func(ev abox.Event) {
switch ev.Kind {
case "text":
fmt.Print(ev.Text)
case "tool":
fmt.Printf("[%s %s]\n", ev.Tool, ev.Status)
case "result":
if ev.Usage != nil {
fmt.Printf("tokens in=%d out=%d\n", ev.Usage.InputTokens, ev.Usage.OutputTokens)
}
case "error":
fmt.Fprintln(os.Stderr, ev.Err)
case "done":
fmt.Println()
}
})
Kinds
| Kind | Fields | Notes |
|---|---|---|
text | Text | Incremental model output |
tool | Tool, Status, Text, Err | ok or error. Rich: ToolID, ToolArgs |
result | Usage, StopReason | Protocol 2, rich events |
error | Err | Provider or agent failure |
done | Turn finished (CLI also uses this) |
TurnResult is filled from the result event when present, plus Canceled if the guest returned code: canceled.
See print-events.