Delegate work to a background worker agent.

This is the only way to delegate. Use it for non-trivial work: multi-step tasks, investigations, code/file/browser workflows, or anything likely to need several tool calls. Keep trivial requests local.

Provide:
- prompt: clear, concrete worker instruction.
- agent_name: optional exact specialist agent name from the roster in your system prompt. Must match a
  registered agent's `name` exactly (check the roster or fetch_agent_info first) — an unknown name is
  rejected before the task is queued. Omit it to run a general worker agent.
- context_json: optional JSON object string the worker should receive as structured context.
- timeout_seconds: optional per-task budget, no greater than the configured worker timeout. Without it a
  named specialist uses its own configured timeout. The timeout is the only budget you set: steps and
  tool calls are bounded by configuration alone.
- model_provider, model, reasoning_effort: optional, for this task only. Use them when the request names a
  provider, model or thinking budget. Check fetch_agent_info for the providers that have credentials
  configured — an unconfigured provider is rejected before the task is queued.
- continue_turn: optional boolean; when unset, the configured default applies (off unless the operator changed it). Set it to false when the worker's answer is the deliverable: it is sent straight to the user, and a short notice with the task id is recorded in the conversation history, so call get_task on the user's next message if you need the result. Set it to true only when you need the result to keep working (a second step that depends on it, a comparison, a follow-up delegation). The result then comes back to you as a new message with `metadata.source == "task_result"` instead of going to the user, and you answer from it. One turn can start at most three continuing tasks, and a chain of turns started from such results can go at most three deep; past either limit an explicit true is rejected with `task:continuation_limit`, so answer the user instead, while an unset value falls back to sending the answer straight to the user.

This returns a task_id immediately, not the answer: the worker runs asynchronously and its result, including any files it produced, reaches the same conversation as a later message (or as a new turn for you when continue_turn is true). Tell the user the work was handed off; never invent the outcome. Use get_task to retrieve it, list_tasks to see what is running, and cancel_task to stop one.
