parse Plan
Parses the model's reply into a Plan. Robust by design: it accepts a single object or a JSON array, salvages objects with a regex if the surrounding text is noisy, drops anything that doesn't map to a real capability, and coalesces redundant steps (e.g. "open whatsapp and message mom" → just the message).