Add try-except for json.JSONDecodeError in parse_agent_tasks() to gracefully handle malformed JSON from LLM responses (e.g. Gemini 2.5 Flash via OpenRouter). Returns empty list on parse failure, which triggers the existing retry mechanism in make_plan(). Add test suite for parse_agent_tasks() covering valid JSON, malformed JSON, truncated JSON, and invalid agent name cases.