@@ -154,7 +154,7 @@ func (app *App) RunNonInteractive(ctx context.Context, prompt string, quiet bool
156 messageEvents := app.Messages.Subscribe(ctx)
156 messageEvents := app.Messages.Subscribe(ctx)
157− readBts := 0
157+ messageReadBytes := make(map[string]int)
@@ -170,11 +170,14 @@ func (app *App) RunNonInteractive(ctx context.Context, prompt string, quiet bool
172 msgContent := result.Message.Content().String()
172 msgContent := result.Message.Content().String()
173+ readBts := messageReadBytes[result.Message.ID]
173 if len(msgContent) < readBts {
175 if len(msgContent) < readBts {
174 slog.Error("Non-interactive: message content is shorter than read bytes", "message_length", len(msgContent), "read_bytes", readBts)
176 slog.Error("Non-interactive: message content is shorter than read bytes", "message_length", len(msgContent), "read_bytes", readBts)
175 return fmt.Errorf("message content is shorter than read bytes: %d < %d", len(msgContent), readBts)
177 return fmt.Errorf("message content is shorter than read bytes: %d < %d", len(msgContent), readBts)
177 fmt.Println(msgContent[readBts:])
179 fmt.Println(msgContent[readBts:])
180+ messageReadBytes[result.Message.ID] = len(msgContent)
179 slog.Info("Non-interactive: run completed", "session_id", sess.ID)
182 slog.Info("Non-interactive: run completed", "session_id", sess.ID)
180 return nil
183 return nil
@@ -183,9 +186,18 @@ func (app *App) RunNonInteractive(ctx context.Context, prompt string, quiet bool
183 msg := event.Payload
186 msg := event.Payload
184 if msg.SessionID == sess.ID && msg.Role == message.Assistant && len(msg.Parts) > 0 {
187 if msg.SessionID == sess.ID && msg.Role == message.Assistant && len(msg.Parts) > 0 {
185 stopSpinner()
188 stopSpinner()
186− part := msg.Content().String()[readBts:]
190+ content := msg.Content().String()
191+ readBytes := messageReadBytes[msg.ID]
193+ if len(content) < readBytes {
194+ slog.Error("Non-interactive: message content is shorter than read bytes", "message_length", len(content), "read_bytes", readBytes)
195+ return fmt.Errorf("message content is shorter than read bytes: %d < %d", len(content), readBytes)
198+ part := content[readBytes:]
187 fmt.Print(part)
199 fmt.Print(part)
188− readBts += len(part)
200+ messageReadBytes[msg.ID] = len(content)
191 case <-ctx.Done():
203 case <-ctx.Done():