Originally created by: sosidudku1
The add-provider wizard listed the ten service presets in code-insertion order (Nous, Groq, DeepSeek, ...). This sorts PROVIDER_PRESETS by label (plain code-unit order), so the list reads: Cerebras, DeepSeek, Fireworks AI, Groq, LM Studio, Mistral, Nous Research, Ollama Cloud, Together AI, xAI. Catalogs stay first, manual entry stays last.
KIND_ROW_ORDER derives the rows from the array and the render layer derives labels from it, so cursor position, labels and key bindings stay consistent by construction. The LLM panel is untouched: connected providers still show in the order they were added. The order is stable as new presets land (for example the OrcaRouter preset in [#89]): a row's position comes from its label through the sort, not a hand-written order.
New invariants lock the alphabetical preset order and the catalogs-first / presets-alphabetical / manual-last row order; the two key-binding tests that hardcoded row indexes now compute them. tsc clean; full run identical to origin/main baseline, zero new failures.
Ticket changed by: Ooooze