- return "", fmt.Errorf("compact node (%d, %d): %w", task.Level, task.Index, err)
- }
-
- return shortest(lines), nil
-}
-
-// compactionParts returns the input parts of a first try for the compaction
-// view context and the task text: the opening tag, one part for each whole
-// block of viewBlock lines, and then one part with the rest of the lines, the
-// closing tag, a newline, and the task. Joined, the parts are the view, a
-// newline, and the task.
-func compactionParts(context, task string) []string {
- lines := strings.SplitAfter(strings.TrimPrefix(context, "<chat>\n"), "\n")
- whole := len(lines) - 1 - (len(lines)-1)%viewBlock
- parts := []string{"<chat>\n"}
- for n := 0; n < whole; n += viewBlock {
- parts = append(parts, strings.Join(lines[n:n+viewBlock], ""))