# `PtcRunner.SubAgent.Namespace.User`
[🔗](https://github.com/andreasronge/ptc_runner/blob/main/lib/ptc_runner/sub_agent/namespace/user.ex#L1)

Renders the user/ namespace section (LLM-defined functions and values).

# `render`

```elixir
@spec render(
  map(),
  keyword()
) :: String.t() | nil
```

Render user/ namespace section for USER message.

Returns `nil` for empty memory maps, otherwise a formatted string with header
and entries showing functions (with params and optional return type) and values
(with type and optional sample).

Functions are listed first, then values, both sorted alphabetically (DEF-009).
Samples are only shown when `has_println` is false (SAM-001, SAM-002).

## Options

- `:has_println` - Boolean, controls whether samples are shown (default: false)
- `:sample_limit` - Max items to show in collections (default: 3)
- `:sample_printable_limit` - Max chars for strings (default: 80)

## Examples

    iex> PtcRunner.SubAgent.Namespace.User.render(%{}, [])
    nil

    iex> closure = {:closure, [{:var, :x}], nil, %{}, [], %{}}
    iex> PtcRunner.SubAgent.Namespace.User.render(%{double: closure}, [])
    ";; === user/ (your prelude) ===\n(double [x])"

    iex> closure = {:closure, [{:var, :x}], nil, %{}, [], %{return_type: "integer"}}
    iex> PtcRunner.SubAgent.Namespace.User.render(%{double: closure}, [])
    ";; === user/ (your prelude) ===\n(double [x]) -> integer"

    iex> closure = {:closure, [{:var, :x}], nil, %{}, [], %{docstring: "Doubles x"}}
    iex> PtcRunner.SubAgent.Namespace.User.render(%{double: closure}, [])
    ";; === user/ (your prelude) ===\n(double [x])                  ; \"Doubles x\""

    iex> closure = {:closure, [{:var, :x}], nil, %{}, [], %{docstring: "Doubles x", return_type: "integer"}}
    iex> PtcRunner.SubAgent.Namespace.User.render(%{double: closure}, [])
    ";; === user/ (your prelude) ===\n(double [x])                  ; \"Doubles x\" -> integer"

    iex> result = PtcRunner.SubAgent.Namespace.User.render(%{total: 42}, [])
    iex> result =~ "total"
    true
    iex> result =~ "integer, sample: 42"
    true
    iex> result =~ "untrusted_ptc_output"
    true

    iex> result = PtcRunner.SubAgent.Namespace.User.render(%{total: 42}, has_println: true)
    iex> result =~ "total"
    true
    iex> result =~ "; = integer"
    true

    iex> result = PtcRunner.SubAgent.Namespace.User.render(%{_secret: "token123"}, [])
    iex> result =~ "_secret"
    true
    iex> result =~ "untrusted_ptc_output"
    true

---

*Consult [api-reference.md](api-reference.md) for complete listing*
