@@ -257,11 +257,24 @@ negotiate RPC protocol v2 to preserve structured text/image tool results.
257257 The native adapter has no ACP ` resolve_session_config ` callback.
258258- ** Tools and replies.** Canonical Band tools and ` additional_tools ` are
259259 registered through native ` set_host_tools ` ; results retain text/image content.
260- Room replies still require ` band_send_message ` , and deliberate declines use
261- ` band_no_reply ` . Native assistant text is optional thought telemetry, not a
260+ Room replies require ` band_send_message ` or a native ` ask ` (below) , and deliberate
261+ declines use ` band_no_reply ` . Native assistant text is optional thought telemetry, not a
262262 room reply. ` SimpleAdapter.run_judged_turn ` remains the sole turn-judging owner:
263263 native-only output and failed tools followed by narration still reach the
264264 missing-reply verdict.
265+ - ** Questions go to the room.** Each session enables OMP's structured ask dialog
266+ with ` set_ask_dialog ` . An ` ask ` posts the model's questions, options and recommended
267+ choice together, mentioning the requester; the post counts as the turn's reply.
268+ The native tool receives an immediate acknowledgement, not a fabricated answer:
269+ the participant's answer arrives as a later message in the same native session.
270+ A room processes messages serially, so waiting inside the turn would prevent
271+ that answer from being consumed. Cancelling a native ask would abort the whole
272+ prompt. A failed post instead returns an error explanation to the model, and
273+ the turn still owes a reply. A platform stop for this room ends the turn without
274+ answering the ask; an unrelated room's stop remains a failed post.
275+ Other UI requests retain ` resolve_permission ` behavior. Shutdown rejects new
276+ UI and host-tool callbacks before they can post. This covers the active room's
277+ native ask dialog, not separately forwarded subagent UI.
265278- ** Instructions and attribution.** A private always-apply native rule places Band's
266279 shared communication and completion guidance in OMP's genuine system prompt,
267280 preserving native instructions, user prompt additions and append-file discovery.
@@ -373,3 +386,37 @@ negotiate RPC protocol v2 to preserve structured text/image tool results.
373386 changed or merged with permission records. If encoding a tool-call envelope
374387 fails, the record keeps its event name and ID, scalar ` path ` /` file_path ` /` target `
375388 fields and an opaque arguments placeholder.
389+
390+ ### Native ask wire smoke
391+
392+ From a source checkout with the ` omp ` extra installed, exercise an installed
393+ OMP executable's structured dialog and native answer validation:
394+
395+ ``` bash
396+ PYTHONPATH=src:packages/band-mcp/src:. python -m tests.integrations.ompasksmoke --executable omp
397+ ```
398+
399+ The executable must support native RPC v2 and ` set_ask_dialog ` (18.8.9 or later)
400+ and allow the explicit test extension to load. This uses a temporary native
401+ session and an extension command, not a model prompt or a Band room; no Band
402+ credentials are used and no inference is spent. Native startup still loads
403+ the installation's provider/model configuration.
404+
405+ ## Server prompt outcomes
406+
407+ ` ACPServer.prompt ` settles on the first terminal outcome for its room:
408+
409+ - Completed text returns ` end_turn ` ; ` session/cancel ` returns ` cancelled ` . A Band ` error `
410+ rejects the prompt with JSON-RPC ` internal_error ` , the Core failure projection in
411+ ` error.data ` ; room cleanup and agent shutdown also fail it. A second prompt while one is
412+ pending in that room is rejected with ` invalid_params ` .
413+ - Room events bind to a prompt only once its Band post returns, so a previous turn's
414+ late event stays unsolicited and cannot settle the prompt or drop the send. A terminal
415+ outcome settles the prompt even while its Band REST send is still pending; the
416+ request then returns once the cancelled send and completion timer have unwound. One
417+ timeout bounds the send and the reply together.
418+ - Error updates carry the same projection on the agent-message chunk's ` _meta ` , unsolicited
419+ errors in mapped rooms included. Their text and projected keys and values are
420+ credential-redacted; values under credential-named fields are redacted in full.
421+ - The ACP Python client drains queued update handlers before surfacing a prompt error, so
422+ a slow client handler can still delay its own ` prompt() ` .
0 commit comments