package app import ( "bufio" "context" "fmt" "os" "strings" "agentu/internal/agent" "agentu/internal/session" ) func repl(ctx context.Context, assistant *agent.Agent, modelManager *session.Manager) error { scanner := bufio.NewScanner(os.Stdin) scanner.Buffer(make([]byte, 0, 64*1024), 1024*1024) fmt.Println("agentu") fmt.Println("Type /exit to quit, /clear to reset context, /compact to compress context.") for { fmt.Print("> ") if !scanner.Scan() { if err := scanner.Err(); err != nil { return err } fmt.Println() printExitSession(modelManager) return nil } input := strings.TrimSpace(scanner.Text()) switch input { case "": continue case "/exit", "/quit": printExitSession(modelManager) return nil case "/clear": assistant.Clear() fmt.Println("context cleared") continue case "/compact": if err := assistant.Compact(ctx); err != nil { fmt.Fprintln(os.Stderr, "compact error:", err) } else { fmt.Println("context compacted") if modelManager != nil { _ = modelManager.Save() } } continue } if err := assistant.RunTurn(ctx, input, os.Stdout, os.Stderr); err != nil { fmt.Fprintln(os.Stderr, "\nerror:", err) } _ = modelManager.Save() fmt.Println() } }