Shared chat-platform runtime
What the Discord, Telegram and WhatsApp adapters take from elowen-plugin-shared, and what stays local to each
plugin. The per-plugin notes are in the discord runtime.md, the
telegram implementation and the
whatsapp implementation.
Shared question parsing
Discord, Telegram and WhatsApp import question parsing and ordered answer projection from
elowen-plugin-shared/ask. For example, WhatsApp passes the current question to
parseQuestionReply(text, question), then projects pending selections with
collectQuestionAnswers(questions, selected, other).
Blank or disallowed text returns no answer. Parsing visits the submitted choices; projection visits each question. Transport controls, sender authorization and pending state remain in the adapter.
Shared display and model helpers
Discord and Telegram use DISPLAY_AXES from elowen-plugin-shared/display for config validation and their
display command choices. Platform labels and reset controls stay local.
The model pickers use resolveActiveModel, modelReasoningLevels and supportsReasoningChoice from
elowen-plugin-shared/modelIdentity. Without a chat override they use the catalog's default marker, then its
first entry.
A disappeared explicit override does not select another model. Confirmation rechecks the current descriptor, including a reset to default; a model without reasoning choices cannot accept it. These helpers use the supplied catalog and make no network requests.
Shared command handling
The three adapters share command handling through Elowen's platform helpers. A room's /compact, /fast and
/restart are recorded in that chat's conversation, so the agent sees that they ran, and the reply to a failed
command names the actual error rather than a generic message.