Phase 1 reference solution

One call, no tools, no loop: send the system prompt and the task, return the raw content (think block and all) as the final message. This replaces the raise NotImplementedError body of agent_loop; no new imports needed.

    result = LoopResult()
    resp = client.chat.completions.create(
        model=model,
        max_tokens=max_tokens,
        messages=[
            {"role": "system", "content": system},
            {"role": "user", "content": user},
        ],
        tools=tool_defs,
        temperature=0,
    )
    result.usage.add(resp.usage)
    result.rounds += 1
    result.final = resp.choices[0].message.content or ""
    return result

Verified: LOOP-1 passes, ruff check and pyright clean.