v1.11.0: DaggerAgent 1.11.0
DaggerAgent 1.11.0
Structured questions, and a Banter connection that tells the truth.
ask_user (#10's sibling for Dagger's own surfaces): a built-in tool
that asks whoever is driving the job a question with clickable
options - the same shape as Claude Code's AskUserQuestion and Banter's
ask_operator. In the web transcript it renders as a card: options
stacked as full-width buttons with radio/checkbox marks, descriptions,
a free-text field that always rides along, and single-select answering
on the click. In the interactive TUI the question renders with
numbered options and the input line answers it - a number picks,
comma-separated numbers for multi-select, anything else is free text,
an empty line skips. With nobody attached (CLI one-shot, trigger jobs,
Banter rooms, sub-agents) the tool answers immediately that there is
no one to ask. Wait bounded by Tools:AskUserTimeoutSeconds.
Banter mode, on SDK 0.2.0:
- Room tools ride along with Dagger's registry instead of being
replaced by it (#10): ask_operator, the delegator's open_side_room /
invite_agent, and server-granted tools, sourced from
BanterAgent.ToolsFor(room) each turn and dispatched back through the
SDK. New Banter:RoomTools switch for unattended fleets, and
Banter:AskTimeoutSeconds. - Honest connection state: "reconnecting (attempt n)" through an
outage (the SDK redials with jittered backoff, re-authenticates with
a fresh signed nonce, rejoins and re-announces); "evicted" with the
server's reason when the identity was revoked or reissued - terminal
on purpose, since automating re-enrolment would turn revocation into
a self-healing bypass. Auto-connect retries a server that is still
booting with capped, jittered backoff. - The Bant tab shows the attributes the server actually GRANTED next
to the requested ones, flagged when an admin override is in effect. - Standalone
dagger banterreports an eviction and its reason
instead of exiting as if someone pressed Ctrl+C.
Fix: an empty ConversationState.Model now means "the endpoint's
default decides" instead of overriding it with an empty model id,
which the OpenAI serializer rejects.