feat(llm): add structured output reliability to LLMClient and refactor services
- chat_json() gains configurable retry (max_attempts), temperature backoff
(temperature_step), optional retry delay, and a fallback_parser hook for
service-specific rescue logic
- _clean_response_text: strip <think> tags and markdown code fences
- _fix_truncated_json: use unescaped-quote parity instead of last-char check
to avoid spuriously quoting numeric values; fixes broken repair for arrays
- _try_fix_json: generic near-valid JSON salvage (newline normalisation,
control-character stripping, greedy object extraction)
- simulation_config_generator: replace raw OpenAI client with LLMClient,
remove duplicated local retry loop and truncated-JSON repair, pass
service-specific config salvage as fallback_parser
- oasis_profile_generator: same refactor; keep rule-based profile fallback
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>