text: Title: accessing user_prompt passed to run
  Body: Is there a specific reason why  when invoking `run`, the user's message ( `user_prompt`)  is not available in the `RunContext` for prompts despite being added to the messages array during execution?
  
  ## Current Behavior
  The `user_prompt` is added to messages in the code:
  ```python
  run_context = RunContext(deps, 0, [], None, model_used, usage or result.Usage())
  messages = await self._prepare_messages(user_prompt, message_history, run_context)
  run_context.messages = messages
  ```
  
  However, when trying to access messages in a prompt, it's empty as it's set after the the system prompts are executed (i.e., after `_prepare_messages`):
  ```python
  @test_agent.system_prompt  
  def print_ctx(ctx: RunContext[str]) -> str:
      print(f"Messages is: {ctx.messages}")
      return f""
  
  result = await test_agent.run("Hey, World!")
  # Output:
  # Messages is: []
  ```
  
  ## Current Workaround
  The only current solution I can think of to access the `user_prompt` requires creating a custom context class and passing the message redundantly:
  
  ```python
  from dataclasses import dataclass
  
  @dataclass
  class PromptContext:
      user_prompt: str
      other_stuff: Optional[str] = None
  
  test_agent = Agent(
      'openai:gpt-4',
      deps_type=PromptContext
  )
  
  @test_agent.system_prompt
  def dynamic_system_prompt(ctx: RunContext[PromptContext]) -> str:
      print(f"User asked: {ctx.deps.user_prompt}")
      return f"The user asked: {ctx.deps.user_prompt}"
  
  # When running:
  await test_agent.run(
      "Hi there",
      deps=PromptContext(user_prompt="hi there")
  )
  ```
  
  I think it woud be useful to have access to the message within the `RunContext` passed to prompts, eliminating the need for redundant passing of the message through custom context objects. Any suggestions for a more elegant solution would be appreciated.
  