1package agent
2
3import (
4 "bytes"
5 "context"
6 "fmt"
7 "os"
8 "strings"
9
10 "github.com/bnema/zut/packages/agent/modes"
11 "github.com/bnema/zut/packages/core"
12 "github.com/bnema/zut/packages/provider"
13)
14
15// runOrchestratedPrintMode is deliberately separate from ordinary print mode:
16// ordinary print continues to stream its existing one-turn implementation,
17// while this path keeps every parent turn in memory until terminal synthesis.
18func runOrchestratedPrintMode(ctx context.Context, args Args, version string) error {
19 return runOrchestratedMode(ctx, args, version, orchestratedModeHooks{
20 promptLabel: "print",
21 startupSink: func() (func(core.AgentEvent), func()) {
22 return nil, func() {}
23 },
24 runPrimary: func(turnCtx context.Context, ag *core.Agent, prompt string, persist func([]provider.Message) error) (string, modes.ContextRecoveryResult, error) {
25 var captured bytes.Buffer
26 _, recovery, err := modes.RunPrintWithContextRecovery(turnCtx, ag, prompt, nil, &captured, persist)
27 return strings.TrimSuffix(captured.String(), "\n"), recovery, err
28 },
29 finish: func(finalText string) error {
30 _, err := fmt.Fprintln(os.Stdout, finalText)
31 return err
32 },
33 })
34}