{% from "_macros.html" import icon %} {# The reply has stopped and is waiting for you. Two shapes, one mechanism: questions the model asked, and (later) a command waiting to be allowed. Everything shown here is model output and is escaped accordingly -- the questions, the options on the buttons and the command itself all came from a model that may have been reading somebody else's file a moment ago. Deliberately attributed to the model rather than styled as if LLeMbas were asking. A question that looks like it came from the application is a question people answer with things they would not tell a chatbot. Several questions go on ONE card and come back in ONE submit. Asking them one at a time would cost a round trip and an interruption each, and answering the third would mean having forgotten the first. hx-swap="none" because the SSE stream clears this card the moment the answer lands; swapping a response in here would fight it. #}

{{ icon("sparkle", "icon--sm") }} The model is asking you

{% if ask.kind == "question" %} {% for item in ask.items %}
{{ item.title }} {% if item.options %}
{% for option in item.options %} {% endfor %}
{% endif %} {% if item.allow_free_text %} {# Never type="password". A model talked into asking for a credential must not be handed a field that looks built for one, and a chat transcript is not a place to keep secrets. #} {% endif %}
{% endfor %}
{%- if ask.items | length > 1 %}All of them at once. {% endif -%} Leave any blank to skip it.
{% else %} {% for item in ask.items %}

{{ item.title }}

{% if item.purpose %} {# The model's own account of what this is for, above the thing itself. Deliberately separate from `reason` below, which is *our* reason for stopping — attributed, so nobody reads an explanation the model wrote as the application vouching for the command. #}

It says: {{ item.purpose }}

{% endif %} {% if item.detail %} {% if item.editable %} {# The command, correctable before it runs. A model proposing the right thing with one flag wrong is the common case, and Allow-or-Don't makes that a round trip to explain in prose. Both halves are always in the DOM and one is hidden, rather than the box being created when Edit is pressed: a field that does not exist until a click is a field that submits nothing if the click handler ever fails, and this one decides what runs on somebody's machine. The textarea is disabled while hidden so an untouched card cannot post a `text.` field at all — that field means "this was edited", and an empty one arriving would be indistinguishable from a command somebody cleared. #}
{{ item.detail }}

Allow runs what is in the box. It is not checked against this chat's rules again — you typed it.

{% else %}
{{ item.detail }}
{% endif %} {% endif %} {% if item.reason %}

{{ item.reason }}

{% endif %}
{% endfor %}
{% endif %}