Proposal
Formalise the imperative continuous-dialog surface of the assistant as a single specification — the imperative complement to OVOS-CONTEXT-1's declarative gating primitive.
CONTEXT-1 §1.2 explicitly defers this area: "Imperative response-collection, recency-based routing, and any other continuous-dialog mechanism … are out of scope here and may be specified separately." This issue tracks that separate specification.
What the spec defines
- Session field
active_handlers — recency stack of intent owners that recently engaged the user; head-first, deduplicated, deployer-tunable cap.
- Session field
response_mode — single-string holder of the owner currently awaiting a direct response; absence = no holder (single-holder invariant is structural, per OVOS-SESSION-1 §2.5 omission rule).
- Converse plugin role — a behavioural contract that a pipeline plugin (OVOS-PIPELINE-1 §3) MAY adopt: poll each active owner in turn via
<owner_id>:converse (a true PIPELINE-1 §7 dispatch on the reserved intent_name converse), read claim result on <owner_id>.converse.response, stop on first claim.
- Interactive response collection —
ovos.converse.response_mode.set to enter/leave response mode; <owner_id>:response PIPELINE-1 dispatch (on the reserved intent_name response) to deliver the awaited utterance, a timeout signal, or a cancellation signal.
- Two reserved intent_names —
converse and response. Skills and pipelines MUST NOT register either; the orchestrator MUST reject such registrations and MUST apply dispatch-suppression for matches on these names.
- Activation lifecycle — automatic on dispatch (with the converse-poll conditional rule), authorized direct mutation, transformer-driven mutation at any of OVOS-TRANSFORM-1's six hooks (metadata SHOULD be the default).
- Orthogonality with CONTEXT-1 — deterministic evaluation order (response-mode pre-empts; converse poll runs before intent stages; intent_context gates apply only to intent stages).
- Universal end-marker integration — extends OVOS-PIPELINE-1's
ovos.utterance.handled status set with response_delivered, response_timeout, response_cancelled.
- Interruptibility — the observable consequence of a deployer-defined interrupt signal (whose wire shape is owned by a future stop / interrupt specification).
Out of scope
- Handler-side ergonomics (decorators, async APIs, question/answer abstractions).
- Converse plugin's internal activation policy (priority ordering, consecutive-claim caps, allow/deny lists) — plugin internals.
- Wire shape of an interrupt signal — deferred to a future stop / interrupt specification.
- Voice-activity detection, microphone control, audio capture.
- Authentication / replay protection of session-bound state beyond emitter-identity checks.
- Persistence of
active_handlers across session expiry — owned by the session-layer lifecycle specification.
Status
Draft. PR: forthcoming.
Proposal
Formalise the imperative continuous-dialog surface of the assistant as a single specification — the imperative complement to OVOS-CONTEXT-1's declarative gating primitive.
CONTEXT-1 §1.2 explicitly defers this area: "Imperative response-collection, recency-based routing, and any other continuous-dialog mechanism … are out of scope here and may be specified separately." This issue tracks that separate specification.
What the spec defines
active_handlers— recency stack of intent owners that recently engaged the user; head-first, deduplicated, deployer-tunable cap.response_mode— single-string holder of the owner currently awaiting a direct response; absence = no holder (single-holder invariant is structural, per OVOS-SESSION-1 §2.5 omission rule).<owner_id>:converse(a true PIPELINE-1 §7 dispatch on the reserved intent_nameconverse), read claim result on<owner_id>.converse.response, stop on first claim.ovos.converse.response_mode.setto enter/leave response mode;<owner_id>:responsePIPELINE-1 dispatch (on the reserved intent_nameresponse) to deliver the awaited utterance, a timeout signal, or a cancellation signal.converseandresponse. Skills and pipelines MUST NOT register either; the orchestrator MUST reject such registrations and MUST apply dispatch-suppression for matches on these names.ovos.utterance.handledstatus set withresponse_delivered,response_timeout,response_cancelled.Out of scope
active_handlersacross session expiry — owned by the session-layer lifecycle specification.Status
Draft. PR: forthcoming.