# Split Text into Chunks (sentence-boundary aware)

Fuente conceptual: MiroFish `backend/app/utils/file_parser.py` (AGPL-3.0)
Reimplementar desde cero. No copiar codigo.

## Funcion a implementar

### split_text_into_chunks

- **Dominio:** core
- **Lang:** Python
- **Purity:** pure
- **Signature:** `split_text_into_chunks(text: str, chunk_size: int = 500, overlap: int = 50) -> list[str]`
- **Descripcion:** Divide texto en chunks de tamaño fijo con overlap, intentando cortar en limites de oracion para no romper frases a mitad.
- **Algoritmo:**
  1. Si `len(text) <= chunk_size`: retornar `[text]` (o `[]` si vacio)
  2. Sliding window con `start = 0`:
     - `end = start + chunk_size`
     - Si `end < len(text)`: buscar el ultimo separador de oracion en `text[start:end]`
     - Separadores en orden de prioridad: `。`, `！`, `？`, `.\n`, `!\n`, `?\n`, `\n\n`, `. `, `! `, `? `
     - Solo aceptar si el separador esta despues del 30% del chunk (evitar chunks muy cortos)
     - Si se encuentra: ajustar `end` al separador + len(sep)
     - Extraer chunk, strip, anadir si no vacio
     - `start = end - overlap` (siguiente chunk empieza con overlap del anterior)
  3. Retornar lista de chunks
- **Diferencia con smart_split_content (OpenViking):** Este divide por caracteres con overlap fijo y busca separadores de oracion. El de OpenViking divide por parrafos (doble newline) sin overlap. Son complementarios.
- **Deps:** ninguna
- **Tests:**
  - Texto corto (cabe en 1 chunk)
  - Texto largo con oraciones (corta en `.`)
  - Texto CJK con `。` como separador
  - Texto sin separadores (corta en chunk_size exacto)
  - Overlap funciona (inicio del chunk N+1 = final del chunk N - overlap)
  - Texto vacio → []
