Skip to content

Spec proposal: OVOS-CONVERSE-1 — Active Handlers and Interactive Response #24

@JarbasAl

Description

@JarbasAl

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 collectionovos.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_namesconverse 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions